/* File: /assets/css/rec-slot.css
   Module: The Recommended slot on articles (inc/rec-slot.php)

   One sidebar card that rotates CartHacker Premium house ads: an animated
   preview, the owner's question, one line, free plan against Premium and the
   Premium button. Light mode is a light card with a blue wash, a blue edge
   and a blue tinted shadow (LIGHT MODE HAS NO DARK PANELS); dark mode
   restates every token at the end of this file. Premium is blue: every
   Premium mark here paints from the /premium/ fill.

   Layout rules that are load bearing:
   - Every slide sits in one grid cell (.ch-rec-stage), so the card is as tall
     as its tallest creative from the first paint and a rotation never shifts
     the table of contents under it.
   - Every creative plays its story once, on .is-active, and then holds still.
     The only thing that moves for the rest of the 90 seconds is the step bar.
   - Animations use backwards fill wherever a hover state also sets transform,
     so the Premium button keeps its own hover lift.
   - Class names say "rec", never "ad" or "promo": generic ad-blocker filters
     hide elements by those words. */

/* ==========================================================================
   1. TOKENS (light)
   ========================================================================== */
.ch-sidebar-widget.ch-rec {
    --rec-card:        #FFFFFF;
    --rec-card-2:      #F6F9FF;
    --rec-border:      #D5E1FA;
    --rec-edge:        #2563EB;
    --rec-shadow:      0 22px 40px -30px rgba(37, 99, 235, 0.55);
    --rec-shadow-hi:   0 26px 44px -26px rgba(37, 99, 235, 0.5);
    --rec-label:       #1D4ED8;
    --rec-title:       #0F172A;
    --rec-body:        #475569;
    --rec-tag:         #1E40AF;
    --rec-visual:      linear-gradient(140deg, #EFF6FF 0%, #EEF2FF 55%, #F5F3FF 100%);
    --rec-visual-line: #DBE6FB;
    --rec-tex:         rgba(37, 99, 235, 0.06);
    --rec-mock:        #FFFFFF;
    --rec-mock-line:   #CBD5E1;
    --rec-mock-ink:    #0F172A;
    --rec-mock-mute:   #475569;
    --rec-mock-shadow: 0 8px 18px -12px rgba(30, 64, 175, 0.4);
    --rec-skel:        #E2E8F0;
    --rec-free-bg:     #F8FAFC;
    --rec-free-line:   #E2E8F0;
    --rec-free-label:  #475569;
    --rec-free-ink:    #334155;
    --rec-pro-bg:      #EFF6FF;
    --rec-pro-line:    #BFDBFE;
    --rec-pro-label:   #1D4ED8;
    --rec-pro-ink:     #1E3A8A;
    --rec-step:        #C9D6F0;
    --rec-step-done:   #8FA9DD;
    --rec-step-fill:   #2563EB;
    --rec-ctl:         #1D4ED8;
    --rec-ctl-line:    #C7D7F7;
    --rec-ctl-hi:      #EFF6FF;
    --rec-good:        #047857;
    --rec-good-bg:     #ECFDF5;
    --rec-poor:        #B91C1C;
    --rec-badge:       #047857;
    --rec-badge-bg:    #ECFDF5;
    --rec-atc-bg:      #0F172A;
    --rec-atc-ink:     #FFFFFF;
    --rec-chip:        #E0E7FF;
    --rec-chip-ink:    #3730A3;
    --rec-jpg:         #C2410C;
    --rec-jpg-bg:      #FFF7ED;
    --rec-pdf:         #B91C1C;
    --rec-pdf-bg:      #FEF2F2;
    --rec-unit:        #B45309;
    --rec-unit-line:   #F59E0B;
    --rec-unit-bg:     rgba(245, 158, 11, 0.14);
    --rec-pro-fill:    linear-gradient(135deg, #2563EB 0%, #1D4ED8 55%, #1E40AF 100%);

    container: ch-rec / inline-size;
    padding: 1.05rem 1.1rem 1.15rem;
    border-color: var(--rec-border);
    background-color: var(--rec-card);
    background-image: linear-gradient(180deg, var(--rec-card) 0%, var(--rec-card-2) 100%);
    box-shadow: var(--rec-shadow);
}

.ch-sidebar-widget.ch-rec::before {
    height: 3px;
    background: linear-gradient(90deg, var(--rec-edge) 0%, rgba(79, 70, 229, 0.5) 42%, rgba(79, 70, 229, 0) 78%);
}

.ch-sidebar-widget.ch-rec:hover {
    box-shadow: var(--rec-shadow-hi);
}

/* ==========================================================================
   2. HEAD, PAUSE AND STEPS
   ========================================================================== */
.ch-rec .ch-rec-head {
    padding-bottom: 0.15rem;
    margin-bottom: 0;
    border-bottom-color: transparent;
}

/* The step bar stands in for the hairline under the head. The pause button
   and the steps keep their space before rec-slot.js runs and while an AdSense
   unit holds the card, and only show once the rotation is live, so neither
   the script starting nor a unit handing back moves the column. */
.ch-rec:not(.is-live) .ch-rec-pause,
.ch-rec:not(.is-live) .ch-rec-steps,
.ch-rec.is-single .ch-rec-pause,
.ch-rec.is-single .ch-rec-steps,
.ch-rec.is-ad .ch-rec-pause,
.ch-rec.is-ad .ch-rec-steps {
    visibility: hidden;
}

.ch-rec .ch-rec-label {
    color: var(--rec-label);
}

.ch-rec .ch-rec-label .ch-sparkle {
    flex-shrink: 0;
    color: currentColor;
}

/* Color and background on every state: GeneratePress paints button:hover and
   :focus #3f4047 with white text at 0,1,1. */
.ch-rec .ch-rec-pause,
.ch-rec .ch-rec-pause:hover,
.ch-rec .ch-rec-pause:focus,
.ch-rec .ch-rec-pause:active {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    width: 26px;
    height: 26px;
    margin: 0;
    padding: 0;
    border: 1px solid var(--rec-ctl-line);
    border-radius: 8px;
    background-color: transparent;
    background-image: none;
    color: var(--rec-ctl);
    line-height: 1;
    cursor: pointer;
    transition: background-color 0.2s ease, border-color 0.2s ease;
}

.ch-rec .ch-rec-pause:hover,
.ch-rec .ch-rec-pause:focus-visible {
    border-color: var(--rec-ctl);
    background-color: var(--rec-ctl-hi);
    color: var(--rec-ctl);
}

.ch-rec .ch-rec-pause:focus-visible {
    outline: 2px solid var(--rec-step-fill);
    outline-offset: 2px;
}

.ch-rec .ch-rec-pause svg {
    fill: currentColor;
}

.ch-rec .ch-rec-pause-ico {
    display: inline-flex;
}

.ch-rec .ch-rec-pause-ico.is-play,
.ch-rec.is-paused .ch-rec-pause-ico.is-pause {
    display: none;
}

.ch-rec.is-paused .ch-rec-pause-ico.is-play {
    display: inline-flex;
}

/* The step bar: one segment per creative, stories style. Done segments stay
   full, the current one fills over the interval, the rest wait. Each segment
   is an 18px tall button around a 3px line. */
.ch-rec .ch-rec-steps {
    display: flex;
    gap: 4px;
    margin: 0 0 0.75rem;
}

.ch-rec .ch-rec-step,
.ch-rec .ch-rec-step:hover,
.ch-rec .ch-rec-step:focus,
.ch-rec .ch-rec-step:active {
    position: relative;
    flex: 1 1 0;
    min-width: 0;
    height: 18px;
    margin: 0;
    padding: 0;
    border: 0;
    border-radius: 4px;
    background-color: transparent;
    background-image: none;
    color: var(--rec-title);
    cursor: pointer;
}

.ch-rec .ch-rec-step::before,
.ch-rec .ch-rec-step-fill {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    top: 50%;
    height: 3px;
    margin-top: -1.5px;
    border-radius: 3px;
}

.ch-rec .ch-rec-step::before {
    background-color: var(--rec-step);
    transition: background-color 0.2s ease, height 0.2s ease, margin-top 0.2s ease;
}

.ch-rec .ch-rec-step:hover::before {
    height: 5px;
    margin-top: -2.5px;
    background-color: var(--rec-step-done);
}

.ch-rec .ch-rec-step-fill {
    display: block;
    background-color: var(--rec-step-fill);
    transform: scaleX(0);
    transform-origin: left center;
}

.ch-rec .ch-rec-step.is-done .ch-rec-step-fill {
    transform: scaleX(1);
    background-color: var(--rec-step-done);
}

.ch-rec .ch-rec-step.is-current .ch-rec-step-fill {
    animation: chRecFill var(--rec-interval, 90s) linear forwards;
}

.ch-rec.is-held .ch-rec-step.is-current .ch-rec-step-fill {
    animation-play-state: paused;
}

.ch-rec .ch-rec-step:focus-visible {
    outline: 2px solid var(--rec-step-fill);
    outline-offset: 1px;
}

@keyframes chRecFill {
    from { transform: scaleX(0); }
    to   { transform: scaleX(1); }
}

/* ==========================================================================
   3. THE STAGE AND A SLIDE
   ========================================================================== */
.ch-rec .ch-rec-stage {
    position: relative;
    display: grid;
}

.ch-rec .ch-rec-slide {
    grid-area: 1 / 1;
    display: flex;
    flex-direction: column;
    min-width: 0;
    visibility: hidden;
    opacity: 0;
}

.ch-rec .ch-rec-slide.is-active {
    visibility: visible;
    opacity: 1;
}

.ch-rec .ch-rec-slide.is-active > * {
    animation: chRecRise 0.6s cubic-bezier(0.22, 1, 0.36, 1) backwards;
}

.ch-rec .ch-rec-slide.is-active > :nth-child(2) { animation-delay: 0.07s; }
.ch-rec .ch-rec-slide.is-active > :nth-child(3) { animation-delay: 0.14s; }
.ch-rec .ch-rec-slide.is-active > :nth-child(4) { animation-delay: 0.21s; }
.ch-rec .ch-rec-slide.is-active > :nth-child(5) { animation-delay: 0.28s; }
.ch-rec .ch-rec-slide.is-active > :nth-child(6) { animation-delay: 0.35s; }

.ch-rec .ch-rec-slide.is-leaving {
    visibility: visible;
    pointer-events: none;
    animation: chRecLeave 0.42s ease forwards;
}

@keyframes chRecRise {
    from { opacity: 0; transform: translateY(10px); }
    to   { opacity: 1; transform: none; }
}

@keyframes chRecLeave {
    from { opacity: 1; }
    to   { opacity: 0; transform: translateY(-6px); }
}

.ch-rec .ch-rec-tag {
    display: flex;
    align-items: center;
    gap: 0.4rem;
    min-width: 0;
    margin: 0 0 0.3rem;
    color: var(--rec-tag);
    font-size: 0.74rem;
    font-weight: 700;
    line-height: 1.3;
}

.ch-rec .ch-rec-tag svg {
    flex-shrink: 0;
}

.ch-rec .ch-rec-tag > span:last-child {
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* The Premium mark: the /premium/ fill, white text 5.2:1 on its lightest stop. */
.ch-rec .ch-rec-pro {
    flex-shrink: 0;
    padding: 0.16rem 0.38rem 0.14rem;
    border-radius: 5px;
    background-color: #1D4ED8;
    background-image: var(--rec-pro-fill);
    color: #FFFFFF;
    font-family: 'JetBrains Mono', 'Roboto Mono', monospace;
    font-size: 0.56rem;
    font-weight: 800;
    letter-spacing: 0.08em;
    line-height: 1.2;
    text-transform: uppercase;
}

.ch-rec .ch-rec-q {
    margin: 0 0 0.35rem;
    color: var(--rec-title);
    font-size: 1.08rem;
    font-weight: 800;
    line-height: 1.25;
    letter-spacing: -0.015em;
    text-wrap: balance;
}

.ch-rec .ch-rec-line {
    margin: 0 0 0.75rem;
    color: var(--rec-body);
    font-size: 0.82rem;
    line-height: 1.5;
}

.ch-rec .ch-rec-line strong {
    color: var(--rec-title);
    font-weight: 700;
}

/* Free plan against Premium, side by side. */
.ch-rec .ch-rec-plans {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
    gap: 6px;
    margin: 0 0 0.8rem;
}

.ch-rec .ch-rec-plan {
    min-width: 0;
    margin: 0;
    padding: 0.42rem 0.55rem 0.46rem;
    border: 1px solid var(--rec-free-line);
    border-radius: 9px;
    background-color: var(--rec-free-bg);
}

.ch-rec .ch-rec-plan dt {
    margin: 0 0 0.14rem;
    color: var(--rec-free-label);
    font-family: 'JetBrains Mono', 'Roboto Mono', monospace;
    font-size: 0.56rem;
    font-weight: 700;
    letter-spacing: 0.08em;
    line-height: 1.2;
    text-transform: uppercase;
}

.ch-rec .ch-rec-plan dd {
    margin: 0;
    color: var(--rec-free-ink);
    font-size: 0.74rem;
    font-weight: 700;
    line-height: 1.28;
}

.ch-rec .ch-rec-plan.is-pro {
    border-color: var(--rec-pro-line);
    background-color: var(--rec-pro-bg);
}

.ch-rec .ch-rec-plan.is-pro dt {
    color: var(--rec-pro-label);
}

.ch-rec .ch-rec-plan.is-pro dd {
    color: var(--rec-pro-ink);
}

/* The Premium button (a.ch-btn-premium in style.css 7.0b), full width and
   pinned to the bottom so every creative ends on the same line. */
.ch-rec a.ch-rec-cta,
.ch-rec a.ch-rec-cta:visited {
    width: 100%;
    min-height: 42px;
    margin-top: auto;
    padding: 0.55rem 0.9rem;
    gap: 0.5rem;
    border-radius: 11px;
    font-size: 0.86rem;
    line-height: 1.2;
    white-space: normal;
    text-align: center;
}

.ch-rec a.ch-rec-cta > svg:last-child {
    flex-shrink: 0;
    transition: transform 0.3s cubic-bezier(0.22, 1, 0.36, 1);
}

.ch-rec a.ch-rec-cta:hover > svg:last-child,
.ch-rec a.ch-rec-cta:focus-visible > svg:last-child {
    transform: translateX(3px);
}

/* One sweep of light across the button when the story has played. */
.ch-rec .ch-rec-slide.is-active a.ch-rec-cta::after {
    animation: chRecSweep 1.1s cubic-bezier(0.22, 1, 0.36, 1) 4.4s 1 backwards;
}

@keyframes chRecSweep {
    from { left: -80%; }
    to   { left: 130%; }
}

/* ==========================================================================
   4. THE PREVIEWS: shared frame, mock parts and the language layers
   ========================================================================== */
.ch-rec .ch-rec-visual {
    position: relative;
    isolation: isolate;
    height: 122px;
    margin-bottom: 0.8rem;
    padding: 9px;
    overflow: hidden;
    border: 1px solid var(--rec-visual-line);
    border-radius: 12px;
    background: var(--rec-visual);
    color: var(--rec-mock-ink);
    font-family: Inter, -apple-system, 'Segoe UI', Roboto, sans-serif;
    line-height: 1.2;
}

.ch-rec .ch-rec-visual::before {
    content: "";
    position: absolute;
    inset: 0;
    z-index: -1;
    background-image:
        linear-gradient(to right, var(--rec-tex) 1px, transparent 1px),
        linear-gradient(to bottom, var(--rec-tex) 1px, transparent 1px);
    background-size: 14px 14px;
}

.ch-rec .ch-rec-skel {
    display: block;
    height: 5px;
    border-radius: 3px;
    background-color: var(--rec-skel);
}

.ch-rec .ch-rec-skel.is-title { height: 7px; background-color: var(--rec-mock-line); }
.ch-rec .ch-rec-skel.is-w60  { width: 60%; }
.ch-rec .ch-rec-skel.is-w70  { width: 70%; }
.ch-rec .ch-rec-skel.is-w80  { width: 80%; }
.ch-rec .ch-rec-skel.is-w85  { width: 85%; }
.ch-rec .ch-rec-skel.is-w90  { width: 90%; }
.ch-rec .ch-rec-skel.is-w95  { width: 95%; }
.ch-rec .ch-rec-skel.is-w100 { width: 100%; }

.ch-rec .ch-rec-chip {
    display: inline-flex;
    align-items: center;
    flex-shrink: 0;
    padding: 2px 6px;
    border-radius: 999px;
    background-color: var(--rec-chip);
    color: var(--rec-chip-ink);
    font-size: 0.56rem;
    font-weight: 800;
    letter-spacing: 0.04em;
    line-height: 1.3;
    text-transform: uppercase;
}

.ch-rec .ch-rec-chip.is-pro {
    background-color: #1D4ED8;
    background-image: var(--rec-pro-fill);
    color: #FFFFFF;
}

/* Layers: words that change in place (a language, a link, a counter). Layer 0
   shows first; the others take over every --rec-ls from --rec-l0; the last
   one stays. */
.ch-rec .ch-rec-layers {
    display: grid;
}

.ch-rec .ch-rec-layers > .ch-rec-layer {
    grid-area: 1 / 1;
    display: block;
    min-width: 0;
    opacity: 0;
}

.ch-rec .ch-rec-layers > .ch-rec-layer:first-child {
    opacity: 1;
}

.ch-rec .ch-rec-slide.is-active .ch-rec-layers > .ch-rec-layer {
    animation: chRecLayerPass calc(var(--rec-ls, 1.7s) + 0.35s) ease calc(var(--rec-l0, 1.4s) + (var(--k) - 1) * var(--rec-ls, 1.7s)) both;
}

.ch-rec .ch-rec-slide.is-active .ch-rec-layers > .ch-rec-layer:first-child {
    animation: chRecLayerOut 0.35s ease var(--rec-l0, 1.4s) forwards;
}

.ch-rec .ch-rec-slide.is-active .ch-rec-layers > .ch-rec-layer:last-child {
    animation: chRecLayerIn 0.35s ease calc(var(--rec-l0, 1.4s) + (var(--k) - 1) * var(--rec-ls, 1.7s)) both;
}

@keyframes chRecLayerOut {
    to { opacity: 0; transform: translateY(-3px); }
}

@keyframes chRecLayerIn {
    from { opacity: 0; transform: translateY(3px); }
    to   { opacity: 1; transform: none; }
}

@keyframes chRecLayerPass {
    0%   { opacity: 0; transform: translateY(3px); }
    18%  { opacity: 1; transform: none; }
    82%  { opacity: 1; transform: none; }
    100% { opacity: 0; transform: translateY(-3px); }
}

@keyframes chRecPop {
    from { opacity: 0; transform: scale(0.6); }
    to   { opacity: 1; transform: none; }
}

@keyframes chRecSlideIn {
    from { opacity: 0; transform: translateX(14px); }
    to   { opacity: 1; transform: none; }
}

@keyframes chRecShow {
    from { opacity: 0; transform: translateY(4px); }
    to   { opacity: 1; transform: none; }
}

/* --- 4.1 Trust Seals & Badges: a product card, badges under Add to cart,
   cycling through five of the thirty languages. */
.ch-rec .ch-rec-v-badges {
    --rec-l0: 1.4s;
    --rec-ls: 1.7s;
    display: flex;
    flex-direction: column;
    gap: 6px;
}

.ch-rec .ch-rec-pdp {
    display: flex;
    align-items: center;
    gap: 7px;
    height: 20px;
}

.ch-rec .ch-rec-pdp-img {
    flex: 0 0 20px;
    height: 20px;
    border-radius: 6px;
    background-image: linear-gradient(135deg, #C7D2FE 0%, #A5B4FC 50%, #818CF8 100%);
    box-shadow: var(--rec-mock-shadow);
}

.ch-rec .ch-rec-pdp-info {
    display: flex;
    align-items: center;
    gap: 6px;
    flex: 1 1 auto;
    min-width: 0;
}

.ch-rec .ch-rec-pdp-info .ch-rec-skel {
    flex: 1 1 auto;
    max-width: 70px;
}

.ch-rec .ch-rec-pdp-price {
    flex-shrink: 0;
    color: var(--rec-mock-ink);
    font-size: 0.7rem;
    font-weight: 800;
    font-variant-numeric: tabular-nums;
}

.ch-rec .ch-rec-lang {
    flex: 0 0 auto;
    padding: 3px 7px;
    border: 1px solid var(--rec-visual-line);
    border-radius: 999px;
    background-color: var(--rec-mock);
    color: var(--rec-mock-mute);
    font-size: 0.6rem;
    font-weight: 600;
    white-space: nowrap;
    box-shadow: var(--rec-mock-shadow);
}

.ch-rec .ch-rec-lang b {
    margin-right: 2px;
    color: var(--rec-label);
    font-family: 'JetBrains Mono', 'Roboto Mono', monospace;
    font-weight: 800;
}

.ch-rec .ch-rec-lang .ch-rec-layer {
    text-align: right;
}

.ch-rec .ch-rec-pdp-atc {
    display: block;
    padding: 5px 0;
    border-radius: 7px;
    background-color: var(--rec-atc-bg);
    color: var(--rec-atc-ink);
    font-size: 0.64rem;
    font-weight: 700;
    letter-spacing: 0.01em;
    text-align: center;
}

.ch-rec .ch-rec-bdg-row {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 5px;
}

.ch-rec .ch-rec-bdg {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 3px;
    min-width: 0;
    padding: 4px 3px;
    border-radius: 8px;
    background-color: var(--rec-mock);
    box-shadow: var(--rec-mock-shadow);
}

.ch-rec .ch-rec-slide.is-active .ch-rec-bdg {
    animation: chRecPop 0.45s cubic-bezier(0.34, 1.56, 0.64, 1) backwards;
}

.ch-rec .ch-rec-slide.is-active .ch-rec-bdg:nth-child(1) { animation-delay: 0.45s; }
.ch-rec .ch-rec-slide.is-active .ch-rec-bdg:nth-child(2) { animation-delay: 0.6s; }
.ch-rec .ch-rec-slide.is-active .ch-rec-bdg:nth-child(3) { animation-delay: 0.75s; }

.ch-rec .ch-rec-bdg-ico {
    display: grid;
    place-items: center;
    width: 18px;
    height: 18px;
    border-radius: 50%;
    background-color: var(--rec-badge-bg);
    color: var(--rec-badge);
}

.ch-rec .ch-rec-bdg-txt {
    width: 100%;
    color: var(--rec-mock-ink);
    font-size: 0.56rem;
    font-weight: 700;
    line-height: 1.15;
    text-align: center;
    overflow-wrap: anywhere;
}

/* --- 4.2 Core Web Vitals Monitoring: 180 days drawn from today backwards, the
   free plan's 7 days a sliver at the right edge. */
.ch-rec .ch-rec-v-mon {
    display: flex;
    flex-direction: column;
    gap: 4px;
}

.ch-rec .ch-rec-mon-head {
    display: flex;
    align-items: center;
    gap: 6px;
    font-size: 0.64rem;
}

.ch-rec .ch-rec-mon-metric {
    color: var(--rec-mock-mute);
    font-weight: 700;
}

.ch-rec .ch-rec-mon-val {
    color: var(--rec-poor);
    font-weight: 800;
    font-variant-numeric: tabular-nums;
}

.ch-rec .ch-rec-mon-head .ch-rec-chip {
    margin-left: auto;
}

.ch-rec .ch-rec-mon-chart {
    position: relative;
    flex: 1 1 auto;
    min-height: 0;
    overflow: hidden;
    border-radius: 8px;
    background-color: var(--rec-mock);
    box-shadow: var(--rec-mock-shadow);
}

.ch-rec .ch-rec-mon-band {
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    width: max(var(--band, 4%), 7px);
    border-left: 1px dashed var(--rec-good);
    background-color: var(--rec-good-bg);
}

.ch-rec .ch-rec-mon-svg {
    position: absolute;
    top: 6px;
    left: 0;
    width: 100%;
    height: calc(100% - 10px);
    overflow: visible;
}

.ch-rec .ch-rec-mon-limit {
    stroke: var(--rec-mock-line);
    stroke-width: 1;
    stroke-dasharray: 3 3;
}

.ch-rec .ch-rec-mon-line {
    fill: none;
    stroke: var(--rec-step-fill);
    stroke-width: 2;
    stroke-linejoin: round;
    stroke-linecap: round;
}

.ch-rec .ch-rec-mon-limit-label {
    position: absolute;
    left: 5px;
    top: calc(6px + (100% - 10px) * 0.5 - 13px);
    color: var(--rec-mock-mute);
    font-size: 0.54rem;
    font-weight: 700;
}

.ch-rec .ch-rec-mon-dot {
    position: absolute;
    left: var(--mark, 61%);
    top: calc(6px + (100% - 10px) * 0.3);
    width: 9px;
    height: 9px;
    margin: -4.5px 0 0 -4.5px;
    border: 2px solid var(--rec-mock);
    border-radius: 50%;
    background-color: var(--rec-poor);
    box-shadow: 0 0 0 3px rgba(185, 28, 28, 0.18);
}

.ch-rec .ch-rec-mon-bubble {
    position: absolute;
    left: var(--mark, 61%);
    top: 3px;
    transform: translateX(-112%);
    padding: 2px 5px;
    border-radius: 5px;
    background-color: var(--rec-poor);
    color: #FFFFFF;
    font-size: 0.56rem;
    font-weight: 800;
    font-variant-numeric: tabular-nums;
}

.ch-rec .ch-rec-mon-free {
    position: absolute;
    right: calc(max(var(--band, 4%), 7px) + 4px);
    bottom: 3px;
    color: var(--rec-good);
    font-size: 0.54rem;
    font-weight: 800;
    white-space: nowrap;
}

.ch-rec .ch-rec-mon-axis {
    display: flex;
    justify-content: space-between;
    color: var(--rec-mock-mute);
    font-size: 0.54rem;
    font-weight: 600;
}

.ch-rec .ch-rec-slide.is-active .ch-rec-mon-band,
.ch-rec .ch-rec-slide.is-active .ch-rec-mon-free {
    animation: chRecShow 0.4s ease 0.35s backwards;
}

.ch-rec .ch-rec-slide.is-active .ch-rec-mon-svg {
    animation: chRecReveal 2s cubic-bezier(0.45, 0, 0.2, 1) 0.8s backwards;
}

.ch-rec .ch-rec-slide.is-active .ch-rec-mon-dot,
.ch-rec .ch-rec-slide.is-active .ch-rec-mon-bubble {
    animation: chRecPop 0.4s cubic-bezier(0.34, 1.56, 0.64, 1) 2.5s backwards;
}

.ch-rec .ch-rec-slide.is-active .ch-rec-mon-bubble {
    animation-name: chRecShow;
}

/* Revealed from the right edge (today) towards 180 days ago. */
@keyframes chRecReveal {
    from { clip-path: inset(-10px 0 -10px 100%); }
    to   { clip-path: inset(-10px 0 -10px 0); }
}

/* --- 4.3 PDF Tools: a JPG becomes a PDF, then the free job counter runs
   down and Premium's no limit takes over. */
.ch-rec .ch-rec-v-pdf {
    --rec-l0: 1.9s;
    --rec-ls: 0.9s;
    display: flex;
    flex-direction: column;
    justify-content: space-between;
}

.ch-rec .ch-rec-pdf-row {
    display: flex;
    align-items: center;
    gap: 6px;
}

.ch-rec .ch-rec-file {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 3px;
    width: 54px;
    padding: 7px 3px 5px;
    border-radius: 7px;
    background-color: var(--rec-mock);
    box-shadow: var(--rec-mock-shadow);
}

.ch-rec .ch-rec-file-tag {
    padding: 1px 5px;
    border-radius: 4px;
    font-family: 'JetBrains Mono', 'Roboto Mono', monospace;
    font-size: 0.56rem;
    font-weight: 800;
}

.ch-rec .ch-rec-file.is-jpg .ch-rec-file-tag {
    background-color: var(--rec-jpg-bg);
    color: var(--rec-jpg);
}

.ch-rec .ch-rec-file.is-pdf .ch-rec-file-tag {
    background-color: var(--rec-pdf-bg);
    color: var(--rec-pdf);
}

.ch-rec .ch-rec-file-name {
    max-width: 100%;
    overflow: hidden;
    color: var(--rec-mock-mute);
    font-size: 0.54rem;
    font-weight: 600;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.ch-rec .ch-rec-pdf-arrow {
    display: inline-flex;
    color: var(--rec-label);
}

.ch-rec .ch-rec-pdf-count {
    margin-left: auto;
    color: var(--rec-mock-mute);
    font-size: 0.6rem;
    font-weight: 700;
    line-height: 1.1;
    text-align: right;
}

.ch-rec .ch-rec-pdf-count b {
    display: block;
    color: var(--rec-label);
    font-size: 1.45rem;
    font-weight: 800;
    letter-spacing: -0.03em;
    line-height: 1;
}

.ch-rec .ch-rec-slide.is-active .ch-rec-file.is-jpg {
    animation: chRecSlideIn 0.5s cubic-bezier(0.22, 1, 0.36, 1) 0.35s backwards;
}

.ch-rec .ch-rec-slide.is-active .ch-rec-pdf-arrow {
    animation: chRecShow 0.35s ease 0.8s backwards;
}

.ch-rec .ch-rec-slide.is-active .ch-rec-file.is-pdf {
    animation: chRecPop 0.45s cubic-bezier(0.34, 1.56, 0.64, 1) 1.05s backwards;
}

.ch-rec .ch-rec-pdf-meter {
    display: flex;
    align-items: center;
    gap: 7px;
    padding: 6px 8px;
    border-radius: 8px;
    background-color: var(--rec-mock);
    color: var(--rec-mock-ink);
    font-size: 0.64rem;
    font-weight: 700;
    white-space: nowrap;
    box-shadow: var(--rec-mock-shadow);
}

.ch-rec .ch-rec-layers > .ch-rec-pdf-meter {
    display: flex;
}

.ch-rec .ch-rec-pdf-meter.is-out {
    color: var(--rec-poor);
}

.ch-rec .ch-rec-pdf-meter.is-pro {
    background-color: #1D4ED8;
    background-image: var(--rec-pro-fill);
    color: #FFFFFF;
}

.ch-rec .ch-rec-pdf-meter.is-pro .ch-sparkle {
    color: #BFDBFE;
}

.ch-rec .ch-rec-pdf-pips {
    display: inline-flex;
    gap: 3px;
}

.ch-rec .ch-rec-pdf-pips i {
    width: 14px;
    height: 6px;
    border-radius: 3px;
    background-color: var(--rec-skel);
}

.ch-rec .ch-rec-pdf-pips i.is-on {
    background-color: var(--rec-good);
}

/* --- 4.4 QR Code Generator: the code draws itself, its destination changes
   after printing and the scans count up. White in both themes: it is a
   printed code. */
@property --rec-n {
    syntax: '<integer>';
    inherits: true;
    initial-value: 128;
}

.ch-rec .ch-rec-v-qr {
    --rec-l0: 1.7s;
    --rec-ls: 1s;
    display: flex;
    align-items: center;
    gap: 10px;
}

.ch-rec .ch-rec-qr-code {
    position: relative;
    flex: 0 0 98px;
    height: 98px;
    padding: 5px;
    overflow: hidden;
    border-radius: 10px;
    background-color: #FFFFFF;
    box-shadow: var(--rec-mock-shadow);
}

.ch-rec .ch-rec-qr-code svg {
    display: block;
    width: 100%;
    height: 100%;
    fill: #0F172A;
}

.ch-rec .ch-rec-qr-quiet {
    fill: #FFFFFF;
}

.ch-rec .ch-rec-qr-scan {
    position: absolute;
    left: 4px;
    right: 4px;
    top: 5px;
    height: 2px;
    border-radius: 2px;
    background-color: #2563EB;
    box-shadow: 0 0 8px 1px rgba(59, 130, 246, 0.8);
    opacity: 0;
}

.ch-rec .ch-rec-slide.is-active .ch-rec-qr-code svg {
    animation: chRecWipe 1.1s steps(23) 0.3s backwards;
}

.ch-rec .ch-rec-slide.is-active .ch-rec-qr-scan {
    animation: chRecScanLine 1.1s linear 0.3s;
}

@keyframes chRecWipe {
    from { clip-path: inset(0 0 100% 0); }
    to   { clip-path: inset(0 0 0 0); }
}

@keyframes chRecScanLine {
    0%   { top: 5px; opacity: 1; }
    90%  { opacity: 1; }
    100% { top: calc(100% - 7px); opacity: 0; }
}

.ch-rec .ch-rec-qr-side {
    display: flex;
    flex-direction: column;
    gap: 5px;
    flex: 1 1 auto;
    min-width: 0;
}

.ch-rec .ch-rec-qr-label {
    color: var(--rec-mock-mute);
    font-size: 0.54rem;
    font-weight: 800;
    letter-spacing: 0.06em;
    text-transform: uppercase;
}

.ch-rec .ch-rec-qr-url {
    padding: 5px 7px;
    border: 1px solid var(--rec-visual-line);
    border-radius: 7px;
    background-color: var(--rec-mock);
    color: var(--rec-mock-mute);
    font-size: 0.6rem;
    font-weight: 600;
}

.ch-rec .ch-rec-qr-url .ch-rec-layer {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.ch-rec .ch-rec-qr-url b {
    color: var(--rec-mock-ink);
    font-weight: 800;
}

.ch-rec .ch-rec-qr-edit {
    display: inline-flex;
    align-items: center;
    gap: 3px;
    color: var(--rec-good);
    font-size: 0.58rem;
    font-weight: 800;
}

.ch-rec .ch-rec-qr-scans {
    color: var(--rec-mock-mute);
    font-size: 0.6rem;
    font-weight: 700;
}

.ch-rec .ch-rec-qr-num {
    --rec-n: 128;
}

.ch-rec .ch-rec-qr-num::before {
    display: inline-block;
    min-width: 3ch;
    counter-reset: rec-n var(--rec-n);
    content: counter(rec-n);
    color: var(--rec-mock-ink);
    font-size: 1.05rem;
    font-weight: 800;
    font-variant-numeric: tabular-nums;
    letter-spacing: -0.02em;
}

.ch-rec .ch-rec-slide.is-active .ch-rec-qr-edit {
    animation: chRecShow 0.4s ease 2s backwards;
}

.ch-rec .ch-rec-slide.is-active .ch-rec-qr-num {
    animation: chRecCount 1.8s cubic-bezier(0.2, 0.7, 0.2, 1) 2.3s backwards;
}

@keyframes chRecCount {
    from { --rec-n: 0; }
    to   { --rec-n: 128; }
}

/* --- 4.5 No ads: a guide whose ad units fold away, the sidebar one too. */
.ch-rec .ch-rec-v-ads {
    display: flex;
    flex-direction: column;
}

.ch-rec .ch-rec-ads-page {
    display: grid;
    grid-template-columns: minmax(0, 1fr) 34%;
    gap: 8px;
    flex: 1 1 auto;
    min-height: 0;
    padding: 8px;
    border-radius: 8px;
    background-color: var(--rec-mock);
    box-shadow: var(--rec-mock-shadow);
}

.ch-rec .ch-rec-ads-col,
.ch-rec .ch-rec-ads-side {
    position: relative;
    display: flex;
    flex-direction: column;
    gap: 5px;
    min-width: 0;
}

.ch-rec .ch-rec-ads-unit {
    position: absolute;
    left: 0;
    right: 0;
    display: grid;
    place-items: center;
    height: 17px;
    overflow: hidden;
    border: 1px dashed var(--rec-unit-line);
    border-radius: 4px;
    background-color: var(--rec-mock);
    background-image: repeating-linear-gradient(135deg, var(--rec-unit-bg) 0 4px, transparent 4px 8px);
    color: var(--rec-unit);
    font-size: 0.5rem;
    font-weight: 800;
    letter-spacing: 0.08em;
    line-height: 1;
    text-transform: uppercase;
}

.ch-rec .ch-rec-ads-unit.is-side {
    height: 40px;
}

/* Opacity and transform only: the units lie over the text, so the text they
   uncover never moves. */
.ch-rec .ch-rec-slide.is-active .ch-rec-ads-unit {
    animation: chRecFold 0.6s cubic-bezier(0.65, 0, 0.35, 1) calc(1.1s + var(--u, 0) * 0.35s) forwards;
}

@keyframes chRecFold {
    0%   { opacity: 1; transform: none; }
    45%  { opacity: 0.45; transform: scale(0.96); }
    100% { opacity: 0; transform: scale(0.9, 0.2); }
}

.ch-rec .ch-rec-ads-done {
    position: absolute;
    right: 14px;
    bottom: 13px;
    display: inline-flex;
    align-items: center;
    gap: 4px;
    padding: 3px 8px;
    border: 1px solid rgba(4, 120, 87, 0.25);
    border-radius: 999px;
    background-color: var(--rec-good-bg);
    color: var(--rec-good);
    font-size: 0.58rem;
    font-weight: 800;
    box-shadow: var(--rec-mock-shadow);
}

.ch-rec .ch-rec-slide.is-active .ch-rec-ads-done {
    animation: chRecPop 0.45s cubic-bezier(0.34, 1.56, 0.64, 1) 2.4s backwards;
}

/* --- 4.6 Early access: members open the guide today, the public later. */
.ch-rec .ch-rec-v-early {
    display: flex;
    flex-direction: column;
    justify-content: space-between;
}

.ch-rec .ch-rec-early-card {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 7px 8px;
    border-radius: 8px;
    background-color: var(--rec-mock);
    box-shadow: var(--rec-mock-shadow);
}

.ch-rec .ch-rec-early-ico {
    display: grid;
    place-items: center;
    flex: 0 0 26px;
    height: 26px;
    border-radius: 7px;
    background-color: var(--rec-pro-bg);
    color: var(--rec-label);
}

.ch-rec .ch-rec-early-lines {
    display: flex;
    flex-direction: column;
    gap: 4px;
    flex: 1 1 auto;
    min-width: 0;
}

.ch-rec .ch-rec-early-track {
    position: relative;
    height: 22px;
    margin: 0 7px;
}

.ch-rec .ch-rec-early-track::before,
.ch-rec .ch-rec-early-fill {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    top: 50%;
    height: 4px;
    margin-top: -2px;
    border-radius: 4px;
}

.ch-rec .ch-rec-early-track::before {
    background-color: var(--rec-skel);
}

.ch-rec .ch-rec-early-fill {
    display: block;
    background-image: linear-gradient(90deg, #2563EB 0%, #4F46E5 100%);
    transform-origin: left center;
}

.ch-rec .ch-rec-early-dot {
    position: absolute;
    top: 50%;
    width: 12px;
    height: 12px;
    margin: -6px 0 0 -6px;
    border: 2px solid var(--rec-mock);
    border-radius: 50%;
}

.ch-rec .ch-rec-early-dot.is-now {
    left: 0;
    background-color: #2563EB;
    box-shadow: 0 0 0 4px rgba(37, 99, 235, 0.2);
}

.ch-rec .ch-rec-early-dot.is-later {
    left: 100%;
    background-color: var(--rec-mock-mute);
}

.ch-rec .ch-rec-early-gap {
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);
    padding: 1px 7px;
    border: 1px solid var(--rec-visual-line);
    border-radius: 999px;
    background-color: var(--rec-mock);
    color: var(--rec-label);
    font-size: 0.58rem;
    font-weight: 800;
    white-space: nowrap;
}

.ch-rec .ch-rec-early-legend {
    display: flex;
    justify-content: space-between;
    gap: 6px;
    font-size: 0.58rem;
    font-weight: 700;
}

.ch-rec .ch-rec-early-legend .is-now {
    color: var(--rec-label);
}

.ch-rec .ch-rec-early-legend .is-later {
    color: var(--rec-mock-mute);
}

.ch-rec .ch-rec-slide.is-active .ch-rec-early-card {
    animation: chRecSlideIn 0.5s cubic-bezier(0.22, 1, 0.36, 1) 0.35s backwards;
}

.ch-rec .ch-rec-slide.is-active .ch-rec-early-fill {
    animation: chRecGrow 1.8s cubic-bezier(0.45, 0, 0.2, 1) 0.9s backwards;
}

.ch-rec .ch-rec-slide.is-active .ch-rec-early-gap {
    animation: chRecShow 0.4s ease 1.6s backwards;
}

.ch-rec .ch-rec-slide.is-active .ch-rec-early-dot.is-later {
    animation: chRecPop 0.35s ease 2.6s backwards;
}

@keyframes chRecGrow {
    from { transform: scaleX(0); }
    to   { transform: scaleX(1); }
}

/* --- 4.7 Store apps: the apps in build, each with its date and the
   included mark. */
.ch-rec .ch-rec-v-apps {
    display: flex;
    flex-direction: column;
    justify-content: center;
    gap: 5px;
}

.ch-rec .ch-rec-app {
    display: flex;
    align-items: center;
    gap: 7px;
    min-width: 0;
    padding: 4px 7px;
    border-radius: 8px;
    background-color: var(--rec-mock);
    box-shadow: var(--rec-mock-shadow);
}

.ch-rec .ch-rec-slide.is-active .ch-rec-app {
    animation: chRecSlideIn 0.5s cubic-bezier(0.22, 1, 0.36, 1) calc(0.35s + var(--k, 0) * 0.25s) backwards;
}

.ch-rec .ch-rec-app-ico {
    display: grid;
    place-items: center;
    flex: 0 0 22px;
    height: 22px;
    border-radius: 6px;
    background-color: var(--rec-pro-bg);
    color: var(--rec-label);
}

.ch-rec .ch-rec-app-name {
    flex: 1 1 auto;
    min-width: 0;
    overflow: hidden;
    color: var(--rec-mock-ink);
    font-size: 0.64rem;
    font-weight: 700;
    line-height: 1.15;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.ch-rec .ch-rec-app-name small {
    display: block;
    overflow: hidden;
    color: var(--rec-mock-mute);
    font-size: 0.54rem;
    font-weight: 600;
    text-overflow: ellipsis;
}

.ch-rec .ch-rec-app-in {
    display: inline-flex;
    align-items: center;
    flex-shrink: 0;
    gap: 2px;
    padding: 2px 6px;
    border-radius: 999px;
    background-color: var(--rec-pro-bg);
    color: var(--rec-pro-ink);
    font-size: 0.54rem;
    font-weight: 800;
}

.ch-rec .ch-rec-slide.is-active .ch-rec-app-in {
    animation: chRecPop 0.4s cubic-bezier(0.34, 1.56, 0.64, 1) calc(1.3s + var(--k, 0) * 0.25s) backwards;
}

/* ==========================================================================
   5. HELD, WAITING AND GOOGLE ADSENSE
   ========================================================================== */

/* Below the fold at load (a phone, where the sidebar follows the article):
   the story waits until the card is first on screen. */
.ch-rec.is-waiting .ch-rec-slide,
.ch-rec.is-waiting .ch-rec-slide *,
.ch-rec.is-waiting .ch-rec-slide *::after {
    animation-play-state: paused;
}

/* An AdSense unit, layered over the house creatives in the same cell, sized
   by rec-slot.js to the card's own height so a fill never moves the table
   of contents. While it shows, the house creatives and the controls hide. */
.ch-rec .ch-rec-unit {
    grid-area: 1 / 1;
    align-self: center;
    min-width: 0;
}

.ch-rec.is-ad .ch-rec-slide,
.ch-rec.is-ad .ch-rec-slide.is-active {
    visibility: hidden;
}

.ch-rec.is-ad .ch-rec-label {
    color: var(--rec-free-label);
}

.ch-rec ins.adsbygoogle[data-ad-status="unfilled"] {
    display: none !important;
}

/* ==========================================================================
   6. WIDTHS: a narrow column (769 to 1000px windows) and the full width card
   under the article on a phone
   ========================================================================== */
/* Container widths are the card's content box: about 285px beside a
   1200px article, 232px in a 1024px window, 195px in a 900px one. */
@container ch-rec (max-width: 270px) {
    .ch-rec .ch-rec-app-in,
    .ch-rec .ch-rec-pdp-info .ch-rec-skel,
    .ch-rec .ch-rec-mon-limit-label {
        display: none;
    }

    .ch-rec .ch-rec-qr-code {
        flex-basis: 76px;
        height: 76px;
    }

    .ch-rec .ch-rec-qr-label {
        display: none;
    }

    .ch-rec .ch-rec-qr-url .ch-rec-layer {
        white-space: normal;
        overflow-wrap: break-word;
    }

    .ch-rec .ch-rec-pdf-count b {
        font-size: 1.2rem;
    }
}

@container ch-rec (max-width: 210px) {
    .ch-rec .ch-rec-bdg-row {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    .ch-rec .ch-rec-bdg:nth-child(3),
    .ch-rec .ch-rec-pdf-count,
    .ch-rec .ch-rec-mon-free {
        display: none;
    }

    .ch-rec .ch-rec-qr-code {
        flex-basis: 64px;
        height: 64px;
    }

    .ch-rec .ch-rec-tag > span:last-child {
        white-space: normal;
    }

    .ch-rec .ch-rec-plans {
        grid-template-columns: minmax(0, 1fr);
    }

    .ch-rec .ch-rec-q {
        font-size: 1rem;
    }

    .ch-rec a.ch-rec-cta,
    .ch-rec a.ch-rec-cta:visited {
        padding: 0.5rem 0.6rem;
        gap: 0.35rem;
        font-size: 0.82rem;
    }

    .ch-rec a.ch-rec-cta > svg:last-child {
        display: none;
    }
}

@container ch-rec (min-width: 520px) {
    .ch-rec .ch-rec-slide {
        display: grid;
        grid-template-columns: minmax(0, 46%) minmax(0, 1fr);
        grid-auto-rows: min-content;
        column-gap: 1.2rem;
        align-content: start;
    }

    .ch-rec .ch-rec-slide > .ch-rec-visual {
        grid-column: 1;
        grid-row: 1 / span 6;
        align-self: center;
        height: 150px;
        margin: 0;
    }

    .ch-rec .ch-rec-v-badges,
    .ch-rec .ch-rec-v-apps {
        justify-content: center;
    }

    .ch-rec .ch-rec-slide > :not(.ch-rec-visual) {
        grid-column: 2;
    }

    .ch-rec a.ch-rec-cta {
        margin-top: 0.1rem;
    }
}

/* A short window (a 1366x768 or 1440x900 laptop): the sticky column is
   shorter than the card plus the table of contents, so a creative that
   carries the free plan against Premium drops its explanatory line and the
   preview gets shorter. The numbers, the question and the button stay. */
@media (min-width: 769px) and (max-height: 900px) {
    .ch-rec .ch-rec-slide.has-plans .ch-rec-line {
        display: none;
    }

    .ch-rec .ch-rec-visual {
        height: 106px;
    }

    .ch-rec .ch-rec-v-badges .ch-rec-pdp-atc {
        padding: 3px 0;
    }
}

/* ==========================================================================
   7. REDUCED MOTION: every story jumps to its last frame, nothing slides.
   The step bar keeps its timing; the rotation itself is not motion, and the
   pause button stops it.
   ========================================================================== */
@media (prefers-reduced-motion: reduce) {
    .ch-rec .ch-rec-slide,
    .ch-rec .ch-rec-slide *,
    .ch-rec .ch-rec-slide *::after {
        animation-duration: 1ms !important;
        animation-delay: 0s !important;
        animation-iteration-count: 1 !important;
        transition: none !important;
    }

    .ch-rec .ch-rec-step::before {
        transition: none;
    }
}

/* ==========================================================================
   8. TOKENS (dark)
   ========================================================================== */
html[data-theme="dark"] .ch-sidebar-widget.ch-rec {
    --rec-card:        #1E293B;
    --rec-card-2:      #18233A;
    --rec-border:      rgba(96, 165, 250, 0.26);
    --rec-edge:        #60A5FA;
    --rec-shadow:      0 22px 40px -28px rgba(0, 0, 0, 0.85);
    --rec-shadow-hi:   0 24px 44px -24px rgba(0, 0, 0, 0.8);
    --rec-label:       #93C5FD;
    --rec-title:       #F1F5F9;
    --rec-body:        #CBD5E1;
    --rec-tag:         #93C5FD;
    --rec-visual:      linear-gradient(140deg, rgba(37, 99, 235, 0.18) 0%, rgba(79, 70, 229, 0.14) 60%, rgba(124, 58, 237, 0.12) 100%);
    --rec-visual-line: rgba(96, 165, 250, 0.22);
    --rec-tex:         rgba(147, 197, 253, 0.05);
    --rec-mock:        #0F172A;
    --rec-mock-line:   #475569;
    --rec-mock-ink:    #F1F5F9;
    --rec-mock-mute:   #A8B3C4;
    --rec-mock-shadow: 0 8px 18px -12px rgba(0, 0, 0, 0.8);
    --rec-skel:        #334155;
    --rec-free-bg:     rgba(148, 163, 184, 0.08);
    --rec-free-line:   #334155;
    --rec-free-label:  #A8B3C4;
    --rec-free-ink:    #E2E8F0;
    --rec-pro-bg:      rgba(37, 99, 235, 0.2);
    --rec-pro-line:    rgba(96, 165, 250, 0.38);
    --rec-pro-label:   #93C5FD;
    --rec-pro-ink:     #DBEAFE;
    --rec-step:        #334155;
    --rec-step-done:   #4B6CA8;
    --rec-step-fill:   #60A5FA;
    --rec-ctl:         #93C5FD;
    --rec-ctl-line:    #3B4C6B;
    --rec-ctl-hi:      rgba(37, 99, 235, 0.22);
    --rec-good:        #34D399;
    --rec-good-bg:     rgba(16, 185, 129, 0.14);
    --rec-poor:        #F87171;
    --rec-badge:       #34D399;
    --rec-badge-bg:    rgba(16, 185, 129, 0.14);
    --rec-atc-bg:      #F1F5F9;
    --rec-atc-ink:     #0F172A;
    --rec-chip:        rgba(129, 140, 248, 0.2);
    --rec-chip-ink:    #C7D2FE;
    --rec-jpg:         #FDBA74;
    --rec-jpg-bg:      rgba(251, 146, 60, 0.14);
    --rec-pdf:         #FCA5A5;
    --rec-pdf-bg:      rgba(248, 113, 113, 0.14);
    --rec-unit:        #FCD34D;
    --rec-unit-line:   #D97706;
    --rec-unit-bg:     rgba(245, 158, 11, 0.12);

    background-color: var(--rec-card);
    background-image: linear-gradient(180deg, var(--rec-card) 0%, var(--rec-card-2) 100%);
    box-shadow: var(--rec-shadow);
}

html[data-theme="dark"] .ch-sidebar-widget.ch-rec:hover {
    box-shadow: var(--rec-shadow-hi);
}

/* The slowdown bubble and dot sit on the dark mock: a lighter red needs dark text. */
html[data-theme="dark"] .ch-rec .ch-rec-mon-bubble {
    color: #0F172A;
}

html[data-theme="dark"] .ch-rec .ch-rec-mon-dot {
    box-shadow: 0 0 0 3px rgba(248, 113, 113, 0.22);
}

html[data-theme="dark"] .ch-rec .ch-rec-ads-done {
    border-color: rgba(52, 211, 153, 0.3);
}
