/* ===== Reset & Variables ===== */
:root {
    --font: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
    --bg: #f0f4f8;
    --bg-white: #ffffff;
    /* ── The glass ────────────────────────────────────────────────────────
       Same material as the dashboard: a fill that is barely a tint, a blur
       whose saturate() makes colour behind the pane bloom rather than go
       milky, one diagonal sheen so the surface looks lit from the top-left,
       and a specular rim — bright along the top edge, fainter round the
       sides, dark underneath. The rim is the part that reads as glass rather
       than as a translucent box.

       Denser than the dashboard's: what these panes have behind them is the
       mesh on <body> rather than a photograph, and against a near-white page
       a 0.28 fill left the cards and the sections they sit in within a few
       percent of each other — glass you cannot find is just a flat page. */
    /* ── One dial ──────────────────────────────────────────────────────
       --glass-level (0–1) drives all four parts. The admin panel's Glass
       Intensity slider writes settings/site.themeGlass (0–100); script.js
       reads it back through /api/public/plans and sets this to a hundredth
       of it. 0.62 is what the material was tuned at, and --glass-k is that
       level normalised so it lands on exactly 1 there — every alpha below is
       the hand-tuned number multiplied by 1, so the default reproduces the
       tuned look and the slider scales from it. Move the default and the
       divisor has to move with it (THEME_GLASS_DEFAULT in site-config.js).

       The fill runs the opposite way to the rest: more glass means less of
       it, so it interpolates down as blur, sheen and rim come up. */
    --glass-level: 0.62;
    --glass-k: calc(var(--glass-level) / 0.62);
    --glass: rgba(255, 255, 255, calc(0.18 + 0.74 * (1 - var(--glass-level))));
    --glass-blur:
        blur(calc(8px + var(--glass-level) * 35px))
        saturate(calc(100% + var(--glass-level) * 129%));
    --glass-sheen: linear-gradient(155deg,
            rgba(255, 255, 255, calc(0.55 * var(--glass-k))) 0%,
            rgba(255, 255, 255, calc(0.14 * var(--glass-k))) 32%,
            rgba(255, 255, 255, 0) 60%);
    --glass-rim:
        inset 0 1px 0 0 rgba(255, 255, 255, calc(0.90 * var(--glass-k))),
        inset 0 0 0 1px rgba(255, 255, 255, calc(0.42 * var(--glass-k))),
        inset 0 -1px 1px 0 rgba(15, 23, 42, calc(0.05 * var(--glass-k)));
    --glass-cast: 0 10px 30px -12px rgba(15, 23, 42, 0.22);
    --text-dark: #1a1a1a;
    --text-body: #555;
    --text-muted: #888;
    --text-light: #aaa;
    --green: #22c55e;
    --green-bg: rgba(34, 197, 94, 0.1);
    --orange: #e97a1f;
    --orange-bg: rgba(233, 122, 31, 0.12);
    --profit: #16a34a;
    --border: rgba(0,0,0,0.08);
    --radius: 12px;
    --radius-sm: 8px;
    --radius-pill: 100px;
    --shadow-sm: 0 1px 3px rgba(0,0,0,0.04);
    --shadow-md: 0 4px 20px rgba(0,0,0,0.06);
    --shadow-lg: 0 10px 34px rgba(0,0,0,0.10);
    --transition: 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    --container: 1200px;

    /* Semantic colours */
    --success: #16a34a;
    --success-bg: rgba(22, 163, 74, 0.1);
    --danger: #ef4444;
    --danger-bg: rgba(239, 68, 68, 0.1);
    --warning: #f59e0b;
    --warning-bg: rgba(245, 158, 11, 0.12);

    /* 4px spacing scale */
    --space-1: 4px;
    --space-2: 8px;
    --space-3: 12px;
    --space-4: 16px;
    --space-5: 24px;
    --space-6: 32px;
    --space-7: 48px;

    --ease: cubic-bezier(0.4, 0, 0.2, 1);
    --dur-fast: 0.15s;
    --dur-mid: 0.25s;
    --dur-slow: 0.4s;

    /* Movement amounts live as tokens so prefers-reduced-motion can zero them
       in ONE place — see the guard at the bottom of the interaction layer.
       Any rule that moves must use these rather than a literal. */
    --lift-1: -4px;
    --lift-2: -8px;
    --nudge-1: 5px;
    --press: 0.955;
    --pop: 1.1;
    --pop-xl: 1.5;
}

*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

/* ===== Numerals =====
   Inter defaults to proportional figures, so digits change width as they
   change value. Tabular figures keep prices and stats from jittering. */
.stat-value, .plan-row, .plan-table-header, .pkg-price, .profit,
.quick-plan-value, .hero-stat-value, code, [class*="price"] {
    font-variant-numeric: tabular-nums;
    font-feature-settings: "tnum" 1;
}

/* ===== Focus =====
   :focus-visible only fires for keyboard/AT users. */
:where(a, button, input, select, textarea, [tabindex]):focus { outline: none; }

:where(a, button, input, select, textarea, [tabindex]):focus-visible {
    outline: 2px solid var(--text-dark);
    outline-offset: 2px;
    border-radius: var(--radius-sm);
}

input:focus-visible, select:focus-visible, textarea:focus-visible {
    outline: none;
    border-color: var(--text-dark);
    box-shadow: 0 0 0 3px rgba(0,0,0,0.08);
}

/* ===== Interaction layer =====
   Every interactive surface answers the pointer. */

/* Buttons lift on hover and press in on click. */
.btn-dark, .btn-outline, .btn-white, .btn-primary, .btn-sm, button {
    transition: transform var(--dur-fast) var(--ease),
                box-shadow var(--dur-mid) var(--ease),
                background var(--dur-mid) var(--ease),
                border-color var(--dur-mid) var(--ease),
                color var(--dur-mid) var(--ease);
}

.btn-dark:hover, .btn-white:hover, .btn-primary:hover {
    transform: translateY(var(--lift-1));
    box-shadow: var(--shadow-lg);
}

.btn-outline:hover {
    transform: translateY(var(--lift-1));
    border-color: var(--text-dark);
}

.btn-dark:active, .btn-outline:active, .btn-white:active,
.btn-primary:active, .btn-sm:active, button:active {
    transform: translateY(0) scale(var(--press));
    transition-duration: 0.06s;
}

/* Nav links get a sliding underline. */
.nav-link {
    position: relative;
    transition: color var(--dur-mid) var(--ease);
}

.nav-link::after {
    content: '';
    position: absolute;
    left: 0;
    bottom: -4px;
    width: 100%;
    height: 1.5px;
    background: var(--text-dark);
    transform: scaleX(0);
    transform-origin: right;
    transition: transform var(--dur-mid) var(--ease);
}

.nav-link:hover::after {
    transform: scaleX(1);
    transform-origin: left;
}

/* Cards lift further and pick up an accent edge. */
.plan-card, .quick-plan-card, .pkg-card, .service-card, .stat-card-light {
    transition: transform var(--dur-mid) var(--ease),
                box-shadow var(--dur-mid) var(--ease),
                border-color var(--dur-mid) var(--ease);
}

.plan-card:hover, .quick-plan-card:hover, .pkg-card:hover, .service-card:hover {
    box-shadow: var(--shadow-lg);
    transform: translateY(var(--lift-2));
    border-color: rgba(0, 0, 0, 0.16);
}

.stat-card-light:hover {
    transform: translateY(var(--lift-1));
    box-shadow: var(--shadow-md);
}

/* Plan rows highlight as the eye scans them. */
.plan-row {
    transition: background var(--dur-fast) var(--ease);
    border-radius: var(--radius-sm);
}

.plan-row:hover { background: rgba(0, 0, 0, 0.03); }

/* Feature ticks nudge. */
.service-features li, .pkg-features li {
    transition: transform var(--dur-fast) var(--ease), color var(--dur-fast) var(--ease);
}

.service-features li:hover, .pkg-features li:hover {
    transform: translateX(var(--nudge-1));
    color: var(--text-dark);
}

/* Badges and pills. */
.roi-badge, .service-tag, .section-pill, .pkg-winrate,
.quick-plan-duration, .best-value-tag, .stat-card-badge {
    transition: transform var(--dur-fast) var(--ease);
}

.roi-badge:hover, .service-tag:hover, .pkg-winrate:hover,
.quick-plan-duration:hover, .stat-card-badge:hover {
    transform: scale(var(--pop));
}

/* Timeline steps. */
.step-item .step-dot,
.step-content {
    transition: transform var(--dur-mid) var(--ease), box-shadow var(--dur-mid) var(--ease);
}

.step-item:hover .step-dot { transform: scale(var(--pop-xl)); }
.step-item:hover .step-content { transform: translateY(var(--lift-1)); }

/* Logo + footer. */
.nav-logo, .footer-logo {
    transition: transform var(--dur-mid) var(--ease), opacity var(--dur-mid) var(--ease);
}

.nav-logo:hover, .footer-logo:hover { transform: scale(var(--pop)); }

/* Fields respond before focus. */
input, select, textarea {
    transition: border-color var(--dur-mid) var(--ease),
                box-shadow var(--dur-mid) var(--ease);
}

input:hover:not(:focus):not([readonly]),
select:hover:not(:focus),
textarea:hover:not(:focus) {
    border-color: #bbb;
}

/* Ticker pauses so it can be read. */
.ticker-track { transition: animation-play-state var(--dur-mid) var(--ease); }
.ticker-bar:hover .ticker-track { animation-play-state: paused; }

a { transition: color var(--dur-mid) var(--ease), opacity var(--dur-mid) var(--ease); }

/* ===== Reduced motion =====
   Honour the OS setting: drop animation, keep every end state. */
@media (prefers-reduced-motion: reduce) {
    *, *::before, *::after {
        animation-duration: 0.01ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: 0.01ms !important;
        scroll-behavior: auto !important;
    }
    .pulse { animation: none !important; }

    /* Killing transition duration alone still lets a hover transform snap into
       place. Zeroing the movement tokens neutralises every rule that uses them
       at once — including ones added later — so there is no selector list to
       keep in sync. Colour and shadow changes are unaffected. */
    :root {
        --lift-1: 0px;
        --lift-2: 0px;
        --nudge-1: 0px;
        --press: 1;
        --pop: 1;
        --pop-xl: 1;
    }

    /* The underline is a reveal, not motion — show it without the wipe. */
    .nav-link:hover::after { transform: scaleX(1); }

    /* Infinite loops are the worst offenders — stop them outright rather than
       running them at 0.01ms. The hero backdrop must keep its scale, or the
       image would pop back and letterbox. */
    .hero-bg-img {
        animation: none !important;
        transform: scale(1.06);
    }

    .hero::after { animation: none !important; opacity: 0.45; }
    .ticker-track { animation: none !important; }
}
html { font-size: 15px; scroll-behavior: smooth; }
body {
    font-family: var(--font);
    background: var(--bg);
    /* Colour for the panes to pick up. Fixed, so it stays put behind the
       cards as the page scrolls rather than sliding with them. */
    background-image:
        radial-gradient(900px 900px at 8% -8%, rgba(56, 189, 248, 0.26), transparent 60%),
        radial-gradient(760px 760px at 96% 4%, rgba(139, 92, 246, 0.24), transparent 58%),
        radial-gradient(820px 820px at 30% 52%, rgba(236, 72, 153, 0.12), transparent 62%),
        radial-gradient(680px 680px at 50% 108%, rgba(16, 185, 129, 0.18), transparent 60%);
    background-attachment: fixed;
    background-repeat: no-repeat;
    color: var(--text-dark);
    -webkit-font-smoothing: antialiased;
    overflow-x: hidden;
}
a { color: inherit; text-decoration: none; }
button { cursor: pointer; font-family: var(--font); border: none; background: none; }
img { max-width: 100%; display: block; }

.container { max-width: var(--container); margin: 0 auto; padding: 0 24px; }

/* ===== Navbar ===== */
.navbar {
    position: fixed;
    top: 0; left: 0; right: 0;
    z-index: 1000;
    background: rgba(255,255,255,0.92);
    backdrop-filter: blur(16px);
    border-bottom: 1px solid var(--border);
    height: 56px;
}
.nav-inner {
    max-width: var(--container);
    margin: 0 auto;
    padding: 0 24px;
    height: 100%;
    display: flex;
    align-items: center;
    justify-content: space-between;
}
.nav-logo {
    display: flex; align-items: center; gap: 8px;
    font-weight: 700; font-size: 1.1rem;
}
.nav-links { display: flex; gap: 28px; }
.nav-link {
    font-size: 0.9rem; color: var(--text-body);
    transition: color var(--transition); font-weight: 450;
}
.nav-link:hover { color: var(--text-dark); }
.nav-actions { display: flex; align-items: center; gap: 12px; }

/* Buttons */
.btn-primary {
    display: inline-flex; align-items: center; gap: 6px;
    background: var(--text-dark); color: #fff;
    padding: 10px 22px; border-radius: var(--radius-sm);
    font-weight: 600; font-size: 0.9rem;
    transition: all var(--transition);
}
.btn-primary:hover { background: #333; transform: translateY(var(--lift-1)); }

.btn-outline {
    display: inline-flex; align-items: center; gap: 6px;
    background: var(--bg-white); color: var(--text-dark);
    padding: 10px 22px; border-radius: var(--radius-sm);
    font-weight: 500; font-size: 0.9rem;
    border: 1px solid var(--border);
    transition: all var(--transition);
}
.btn-outline:hover { border-color: #ccc; background: #fafafa; }

.btn-dark {
    display: inline-flex; align-items: center; justify-content: center; gap: 8px;
    background: var(--text-dark); color: #fff;
    padding: 14px 32px; border-radius: var(--radius-sm);
    font-weight: 600; font-size: 0.95rem;
    transition: all var(--transition);
}
.btn-dark:hover { background: #333; transform: translateY(var(--lift-1)); }

.btn-white {
    display: inline-flex; align-items: center; gap: 8px;
    background: var(--bg-white); color: var(--text-dark);
    padding: 14px 32px; border-radius: var(--radius-sm);
    font-weight: 600; font-size: 0.95rem;
    border: 1px solid var(--border);
    transition: all var(--transition);
}
.btn-white:hover { background: #f5f5f5; transform: translateY(var(--lift-1)); }

.btn-sm { padding: 8px 16px; font-size: 0.82rem; }
.btn-full { width: 100%; justify-content: center; }

.mobile-toggle { display: none; padding: 4px; color: var(--text-dark); }

/* ===== Hero ===== */
.hero {
    position: relative;
    min-height: 100vh;
    display: flex;
    align-items: center;
    overflow: hidden;
}
.hero-bg {
    position: absolute; inset: 0; z-index: 0;
}
/* The background images are wrapped in <picture> to offer WebP. A picture box
   is an inline element with no size of its own, so the width:100%/height:100%
   below would resolve against it instead of the positioned .hero-bg/.cta-bg
   and collapse. display:contents removes the box and leaves the <img> laid out
   exactly as it was before the wrapper existed. */
picture {
    display: contents;
}

.hero-bg-img {
    width: 100%; height: 100%;
    object-fit: cover;
}
.hero-overlay {
    position: absolute; inset: 0;
    background: linear-gradient(135deg, rgba(0,0,0,0.15) 0%, transparent 60%);
}
.hero-content {
    position: relative; z-index: 1;
    max-width: var(--container);
    margin: 0 auto;
    padding: 120px 24px 80px;
}
.hero-title {
    font-size: clamp(2.8rem, 5.5vw, 4.2rem);
    font-weight: 800;
    line-height: 1.1;
    color: #fff;
    margin-bottom: 20px;
    text-shadow: 0 2px 20px rgba(0,0,0,0.15);
}
.hero-subtitle {
    font-size: 1.05rem;
    color: rgba(255,255,255,0.85);
    line-height: 1.6;
    margin-bottom: 32px;
    max-width: 520px;
}
.hero-buttons { display: flex; gap: 12px; margin-bottom: 48px; flex-wrap: wrap; }

.hero-stats { display: flex; gap: 48px; flex-wrap: wrap; }
.hero-stat { display: flex; flex-direction: column; }
.hero-stat-value {
    font-size: 2rem; font-weight: 800; color: #fff;
    text-shadow: 0 2px 10px rgba(0,0,0,0.15);
}
.hero-stat-label { font-size: 0.8rem; color: rgba(255,255,255,0.65); margin-top: 2px; }

/* ===== Hero interaction =====
   The hero was static: a fixed image, text, and two buttons. */

/* Slow drift on the backdrop so the first screen is never quite still. */
@keyframes heroDrift {
    0%   { transform: scale(1.06) translate3d(0, 0, 0); }
    50%  { transform: scale(1.12) translate3d(-1.5%, -1%, 0); }
    100% { transform: scale(1.06) translate3d(0, 0, 0); }
}

.hero-bg-img {
    animation: heroDrift 26s var(--ease) infinite;
    will-change: transform;
}

/* Content rises in on load, one element after the next. */
@keyframes heroRise {
    from { opacity: 0; transform: translateY(26px); }
    to   { opacity: 1; transform: translateY(0); }
}

.hero-title,
.hero-subtitle,
.hero-buttons,
.hero-stats {
    animation: heroRise 0.75s var(--ease) backwards;
}

.hero-title    { animation-delay: 0.05s; }
.hero-subtitle { animation-delay: 0.18s; }
.hero-buttons  { animation-delay: 0.31s; }
.hero-stats    { animation-delay: 0.44s; }

/* The arrow leads the eye on hover. */
#hero-view-plans .arrow {
    display: inline-block;
    transition: transform var(--dur-mid) var(--ease);
}

#hero-view-plans:hover .arrow {
    transform: translateX(5px);
}

/* Stats lift and light up individually. */
.hero-stat {
    padding: 8px 14px 8px 12px;
    margin-left: -12px;
    border-radius: var(--radius);
    border-left: 2px solid transparent;
    cursor: default;
    transition: transform var(--dur-mid) var(--ease),
                background var(--dur-mid) var(--ease),
                border-color var(--dur-mid) var(--ease);
}

.hero-stat:hover {
    transform: translateY(var(--lift-1));
    background: rgba(255, 255, 255, 0.08);
    border-left-color: rgba(255, 255, 255, 0.75);
}

.hero-stat-value {
    transition: text-shadow var(--dur-mid) var(--ease);
}

.hero-stat:hover .hero-stat-value {
    text-shadow: 0 2px 22px rgba(255, 255, 255, 0.5);
}

/* Telegram icon nudges toward its destination. */
#hero-telegram svg {
    transition: transform var(--dur-mid) var(--ease);
}

#hero-telegram:hover svg {
    transform: translateX(3px) rotate(-8deg);
}

/* Scroll cue at the foot of the hero. */
@keyframes scrollHint {
    0%, 100% { opacity: 0.45; transform: translate(-50%, 0); }
    50%      { opacity: 1;    transform: translate(-50%, 7px); }
}

.hero::after {
    content: '';
    position: absolute;
    left: 50%;
    bottom: 26px;
    width: 22px;
    height: 34px;
    border: 2px solid rgba(255, 255, 255, 0.5);
    border-radius: 12px;
    animation: scrollHint 2.1s var(--ease) infinite;
    pointer-events: none;
    z-index: 1;
}

/* ===== Ticker Bar ===== */
.ticker-bar {
    background: var(--bg);
    border-bottom: 1px solid var(--border);
    padding: 10px 0;
    overflow: hidden;
    position: relative;
}
.ticker-track {
    display: flex;
    width: max-content;
    animation: tickerScroll 30s linear infinite;
}
.ticker-content { display: flex; gap: 40px; padding: 0 20px; }
.ticker-item { display: flex; align-items: center; gap: 8px; white-space: nowrap; font-size: 0.85rem; }
.ticker-symbol { font-weight: 600; color: var(--text-dark); }
.ticker-price { color: var(--text-body); }
.ticker-change { font-weight: 600; font-size: 0.8rem; }
.ticker-change.positive { color: var(--green); }
.ticker-change.negative { color: #ef4444; }

@keyframes tickerScroll {
    0% { transform: translateX(0); }
    100% { transform: translateX(-50%); }
}

/* ===== Performance Section ===== */
.performance-section {
    padding: 80px 0 60px;
    /* Transparent, not var(--bg). The body paints the mesh these panes are
       meant to blur, and an opaque section of the body's own colour laid over
       it hid the lot — same grey either way, so the cards were blurring a
       flat fill and the glass had nothing to be made of. */
    background: transparent;
}
.section-label {
    display: flex; align-items: center; gap: 8px;
    font-size: 0.75rem; font-weight: 600;
    letter-spacing: 2px; color: var(--text-muted);
    text-transform: uppercase;
    margin-bottom: 12px;
}
.dot {
    width: 8px; height: 8px; border-radius: 50%;
    display: inline-block; flex-shrink: 0;
}
.dot.green { background: var(--green); }
.section-title-dark {
    font-size: 2.4rem; font-weight: 800;
    margin-bottom: 12px; color: var(--text-dark);
}
.section-desc {
    font-size: 0.95rem; color: var(--text-body);
    line-height: 1.6; margin-bottom: 40px;
}

.stats-grid {
    display: grid;
    grid-template-columns: repeat(5, 1fr);
    gap: 1px;
    background: var(--border);
    border-radius: var(--radius);
    overflow: hidden;
    box-shadow: var(--shadow-md);
}
/* No nth-child column pinning here on purpose: with any pool card able to
   hide itself (see initPoolConfig() in script.js), pinning a fixed DOM
   position to column 1 would leave a gap when an earlier card is hidden.
   Plain grid auto-flow already packs whatever cards are visible correctly,
   for every combination. */

.stat-card-light {
    background: var(--glass);
    backdrop-filter: var(--glass-blur);
    -webkit-backdrop-filter: var(--glass-blur);
    padding: 24px;
    position: relative;
}
.stat-card-header {
    display: flex; justify-content: space-between; align-items: center;
    margin-bottom: 10px;
}
.stat-card-label {
    font-size: 0.7rem; font-weight: 600;
    letter-spacing: 1px; color: var(--text-muted);
    text-transform: uppercase;
}
.stat-status { font-size: 0.65rem; color: var(--text-light); letter-spacing: 0.5px; }
.stat-card-value {
    font-size: 2.2rem; font-weight: 800; color: var(--text-dark);
    margin-bottom: 8px;
}
.stat-card-value sub { font-size: 0.5em; font-weight: 600; }
.stat-card-badge {
    display: inline-block;
    padding: 2px 8px; border-radius: 4px;
    font-size: 0.75rem; font-weight: 600;
    margin-bottom: 12px;
}
.stat-card-badge.positive { background: var(--green-bg); color: var(--green); }
.stat-card-badge.negative { background: rgba(239, 68, 68, 0.1); color: #ef4444; }
/* The pool badge is hidden when there's no measured change to show. Needed
   because the display above would otherwise beat the [hidden] attribute. */
.stat-card-badge[hidden] { display: none; }
.stat-sparkline { display: block; margin-bottom: 12px; }
.stat-card-footer {
    display: flex; justify-content: space-between;
    font-size: 0.7rem; color: var(--text-light);
}

/* ===== Plans Section ===== */
.plans-section {
    padding: 80px 0;
    /* Transparent, not var(--bg). The body paints the mesh these panes are
       meant to blur, and an opaque section of the body's own colour laid over
       it hid the lot — same grey either way, so the cards were blurring a
       flat fill and the glass had nothing to be made of. */
    background: transparent;
}
.section-pill {
    display: inline-flex; align-items: center; gap: 8px;
    padding: 8px 20px; border-radius: var(--radius-pill);
    background: var(--bg-white); border: 1px solid var(--border);
    font-size: 0.82rem; font-weight: 500; color: var(--text-body);
    margin: 0 auto 20px; 
    width: fit-content;
}
.section-title-center {
    font-size: 2.4rem; font-weight: 800;
    text-align: center; margin-bottom: 12px;
}
.section-desc-center {
    font-size: 0.95rem; color: var(--text-body);
    text-align: center; line-height: 1.6;
    margin-bottom: 48px;
}

.plans-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 28px;
    max-width: 1380px;
    margin: 0 auto;
}

.plan-card {
    background: var(--glass);
    backdrop-filter: var(--glass-blur);
    -webkit-backdrop-filter: var(--glass-blur);
    border: 1px solid var(--border);
    border-radius: var(--radius);
    padding: 28px;
    position: relative;
    transition: all var(--transition);
    box-shadow: var(--shadow-sm);
}
.plan-card:hover { box-shadow: var(--shadow-md); transform: translateY(var(--lift-1)); }

.best-value-tag {
    position: absolute;
    top: -14px; left: 50%; transform: translateX(-50%);
    background: var(--text-dark); color: #fff;
    padding: 5px 16px; border-radius: var(--radius-pill);
    font-size: 0.7rem; font-weight: 700;
    letter-spacing: 1px;
}

.plan-header {
    display: flex; align-items: center; gap: 12px;
    margin-bottom: 24px; padding-bottom: 20px;
    border-bottom: 1px solid var(--border);
}
.plan-icon { color: var(--text-body); flex-shrink: 0; }
.plan-title-group { flex: 1; }
.plan-title-group h3 { font-size: 1.15rem; font-weight: 700; margin-bottom: 2px; }
.plan-title-group p { font-size: 0.82rem; color: var(--text-muted); }

.roi-badge {
    padding: 8px 16px; border-radius: var(--radius-sm);
    font-weight: 700; font-size: 0.9rem;
    border: 1.5px solid var(--text-dark); color: var(--text-dark);
    white-space: nowrap;
}
.roi-badge.roi-dark {
    background: var(--text-dark); color: #fff; border-color: var(--text-dark);
}

.plan-table { margin-bottom: 20px; }
.plan-table-header {
    display: grid; grid-template-columns: 1fr 1fr 1fr;
    padding: 8px 0; font-size: 0.7rem; font-weight: 600;
    color: var(--text-muted); letter-spacing: 1px;
    text-transform: uppercase;
    border-bottom: 1px solid var(--border);
}
.plan-row {
    display: grid; grid-template-columns: 1fr 1fr 1fr;
    padding: 10px 0;
    font-size: 0.9rem;
    border-bottom: 1px solid rgba(0,0,0,0.04);
}
.plan-row:last-child { border-bottom: none; }
.profit { color: var(--profit); font-weight: 600; }

.quick-plans-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 20px;
    max-width: 1000px;
    margin: 0 auto 60px;
}

.quick-plan-card {
    background: var(--glass);
    backdrop-filter: var(--glass-blur);
    -webkit-backdrop-filter: var(--glass-blur);
    border: 1px solid var(--border);
    border-radius: var(--radius);
    padding: 24px;
    text-align: center;
    box-shadow: var(--shadow-sm);
    transition: all var(--transition);
}
.quick-plan-card:hover { box-shadow: var(--shadow-md); transform: translateY(var(--lift-1)); }

.quick-plan-duration {
    display: inline-block;
    font-size: 0.7rem; font-weight: 700; letter-spacing: 0.5px;
    text-transform: uppercase;
    color: var(--orange);
    background: var(--orange-bg);
    padding: 4px 12px;
    border-radius: var(--radius-pill);
    margin-bottom: 12px;
}

.quick-plan-name { font-size: 1rem; font-weight: 700; margin-bottom: 18px; }

.quick-plan-stat { margin-bottom: 14px; }
.quick-plan-label {
    font-size: 0.7rem; font-weight: 600; letter-spacing: 0.5px;
    text-transform: uppercase; color: var(--text-muted);
    margin-bottom: 4px;
}
.quick-plan-value { font-size: 1.1rem; font-weight: 700; }
.quick-plan-value.target { color: var(--profit); }

/* ===== Packages (Passkeys) Section ===== */
.packages-section {
    padding: 80px 0;
    /* Transparent, not var(--bg). The body paints the mesh these panes are
       meant to blur, and an opaque section of the body's own colour laid over
       it hid the lot — same grey either way, so the cards were blurring a
       flat fill and the glass had nothing to be made of. */
    background: transparent;
}

.packages-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 20px;
    max-width: 1100px;
    margin: 0 auto;
}

.pkg-card {
    background: var(--glass);
    backdrop-filter: var(--glass-blur);
    -webkit-backdrop-filter: var(--glass-blur);
    border: 1px solid var(--border);
    border-radius: var(--radius);
    padding: 26px 22px;
    display: flex;
    flex-direction: column;
    box-shadow: var(--shadow-sm);
    transition: all var(--transition);
}
.pkg-card:hover { box-shadow: var(--shadow-md); transform: translateY(var(--lift-1)); }

.pkg-name { font-size: 1.1rem; font-weight: 700; margin-bottom: 6px; }
.pkg-desc {
    font-size: 0.82rem; color: var(--text-muted);
    line-height: 1.5; margin-bottom: 18px; min-height: 48px;
}

.pkg-price {
    font-size: 1.9rem; font-weight: 700;
    letter-spacing: -0.02em;
}
.pkg-price span {
    display: block;
    font-size: 0.72rem; font-weight: 500;
    color: var(--text-muted);
    letter-spacing: 0.04em; text-transform: uppercase;
    margin-top: 2px;
}

.pkg-winrate {
    display: inline-block;
    margin: 16px 0;
    padding: 5px 12px;
    border-radius: var(--radius-pill);
    background: var(--green-bg);
    color: var(--profit);
    font-size: 0.75rem; font-weight: 700;
}

.pkg-features {
    list-style: none;
    margin-bottom: 22px;
    flex: 1;
}
.pkg-features li {
    font-size: 0.85rem;
    padding: 7px 0;
    border-bottom: 1px solid rgba(0,0,0,0.04);
    color: var(--text-body);
}
.pkg-features li:last-child { border-bottom: none; }

/* ===== Services Section ===== */
.services-section {
    padding: 80px 0;
    /* Transparent, not var(--bg). The body paints the mesh these panes are
       meant to blur, and an opaque section of the body's own colour laid over
       it hid the lot — same grey either way, so the cards were blurring a
       flat fill and the glass had nothing to be made of. */
    background: transparent;
}
.services-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 24px;
}
.service-card {
    background: var(--glass);
    backdrop-filter: var(--glass-blur);
    -webkit-backdrop-filter: var(--glass-blur);
    border: 1px solid var(--border);
    border-radius: var(--radius);
    padding: 32px 28px;
    position: relative;
    transition: all var(--transition);
    box-shadow: var(--shadow-sm);
    display: flex;
    flex-direction: column;
}
.service-card:hover { box-shadow: var(--shadow-md); transform: translateY(var(--lift-1)); }

.service-tag {
    display: inline-block; width: fit-content;
    padding: 4px 14px; border-radius: var(--radius-pill);
    font-size: 0.72rem; font-weight: 600;
    margin-bottom: 16px;
}
.service-tag.orange { background: var(--orange-bg); color: var(--orange); }
.service-tag.dark { background: var(--text-dark); color: #fff; }
.service-tag.green { background: var(--green-bg); color: var(--green); }

.service-title {
    font-size: 1rem; font-weight: 800;
    letter-spacing: 0.3px; margin-bottom: 14px;
    line-height: 1.4;
}
.service-desc {
    font-size: 0.88rem; color: var(--text-body);
    line-height: 1.6; margin-bottom: 20px;
}
.service-features {
    list-style: none; margin-bottom: 24px; flex: 1;
}
.service-features li {
    display: flex; align-items: flex-start; gap: 8px;
    font-size: 0.85rem; color: var(--text-body);
    padding: 5px 0;
}
.check { color: var(--green); font-weight: 700; font-size: 0.8rem; flex-shrink: 0; }

.service-price {
    font-size: 1.8rem; font-weight: 800;
    margin-bottom: 20px;
}
.service-price span {
    font-size: 0.8rem; font-weight: 400;
    color: var(--text-muted);
}
.service-preview-link {
    display: block; text-align: center;
    margin-top: 10px; font-size: 0.82rem;
    color: var(--text-muted); text-decoration: underline;
    transition: color var(--transition);
}
.service-preview-link:hover { color: var(--text-dark); }

/* ===== How It Works ===== */
.how-section {
    padding: 80px 0;
    /* Transparent, not var(--bg). The body paints the mesh these panes are
       meant to blur, and an opaque section of the body's own colour laid over
       it hid the lot — same grey either way, so the cards were blurring a
       flat fill and the glass had nothing to be made of. */
    background: transparent;
}

.steps-timeline {
    position: relative;
    max-width: 600px;
    margin: 48px auto;
}
.timeline-line {
    position: absolute;
    left: 50%; top: 0; bottom: 0;
    width: 2px;
    background: var(--border);
    transform: translateX(-50%);
}
.step-item {
    position: relative;
    display: flex;
    justify-content: center;
    padding: 32px 0;
}
.step-dot {
    width: 16px; height: 16px;
    background: var(--bg-white);
    border: 2px solid #ccc;
    border-radius: 50%;
    position: relative; z-index: 2;
    flex-shrink: 0;
}
.step-content {
    position: absolute;
    top: 50%; transform: translateY(-50%);
    width: 200px;
}
.step-content.left { right: calc(50% + 40px); text-align: right; }
.step-content.right { left: calc(50% + 40px); text-align: left; }
.step-content h4 { font-size: 0.95rem; font-weight: 700; margin-bottom: 4px; }
.step-content p { font-size: 0.82rem; color: var(--text-muted); }

.how-cta {
    display: flex; align-items: center; justify-content: center;
    gap: 16px; margin-top: 16px;
}
.how-cta-note { font-size: 0.85rem; color: var(--text-muted); }

/* ===== CTA Section ===== */
.cta-section {
    position: relative;
    min-height: 80vh;
    display: flex;
    align-items: center;
    justify-content: center;
    text-align: center;
    overflow: hidden;
}
.cta-bg {
    position: absolute; inset: 0; z-index: 0;
}
.cta-bg-img {
    width: 100%; height: 100%;
    object-fit: cover;
}
.cta-overlay {
    position: absolute; inset: 0;
    background: rgba(0,0,0,0.25);
}
.cta-content {
    position: relative; z-index: 1;
    padding: 60px 24px;
}
.cta-content h2 {
    font-size: clamp(2.2rem, 4vw, 3.5rem);
    font-weight: 800; color: #fff;
    margin-bottom: 14px;
    text-shadow: 0 2px 20px rgba(0,0,0,0.2);
}
.cta-content p {
    font-size: 1.05rem; color: rgba(255,255,255,0.8);
    margin-bottom: 32px;
}

/* ===== Footer ===== */
.site-footer {
    background: var(--bg-white);
    border-top: 1px solid var(--border);
    padding: 20px 24px;
}
.footer-inner {
    max-width: var(--container);
    margin: 0 auto;
    display: flex;
    justify-content: space-between;
    align-items: center;
}
.footer-logo { font-weight: 700; font-size: 1rem; }
.footer-copy { font-size: 0.8rem; color: var(--text-muted); }
.footer-disclaimer {
    text-align: center;
    font-size: 0.75rem; color: var(--text-light);
    padding: 12px 0 4px;
}

/* ===== Floating CTA ===== */
.floating-cta {
    position: fixed;
    bottom: 24px; right: 24px;
    background: var(--text-dark);
    color: #fff;
    padding: 12px 20px;
    border-radius: var(--radius-pill);
    display: flex; align-items: center; gap: 10px;
    font-size: 0.82rem; font-weight: 500;
    z-index: 999;
    box-shadow: 0 4px 20px rgba(0,0,0,0.2);
    transition: all var(--transition);
}
.floating-cta:hover { transform: translateY(var(--lift-1)); box-shadow: 0 6px 28px rgba(0,0,0,0.3); }
.pulse {
    animation: pulse-glow 2s ease-in-out infinite;
}
@keyframes pulse-glow {
    0%, 100% { box-shadow: 0 0 0 0 rgba(34,197,94,0.4); }
    50% { box-shadow: 0 0 0 6px rgba(34,197,94,0); }
}

/* ===== Section text centering helper ===== */
.plans-section .section-pill,
.plans-section .section-title-center,
.plans-section .section-desc-center,
.packages-section .section-pill,
.packages-section .section-title-center,
.packages-section .section-desc-center,
.how-section .section-title-center,
.how-section .section-desc-center,
.services-section .section-title-center,
.services-section .section-desc-center {
    text-align: center;
}
.plans-section .section-pill,
.packages-section .section-pill { display: flex; margin: 0 auto 20px; }

/* ===== Animations ===== */
.fade-up {
    opacity: 0;
    transform: translateY(24px);
    transition: opacity 0.6s ease, transform 0.6s ease;
}
.fade-up.visible {
    opacity: 1;
    transform: translateY(0);
}

/* ===== Responsive ===== */
@media (max-width: 1024px) {
    .stats-grid { grid-template-columns: repeat(3, 1fr); }
    .services-grid { grid-template-columns: 1fr; max-width: 500px; margin: 0 auto; }
    .plans-grid { grid-template-columns: repeat(2, 1fr); max-width: 720px; }
    .quick-plans-grid { grid-template-columns: repeat(2, 1fr); }
    .packages-grid { grid-template-columns: repeat(2, 1fr); max-width: 640px; margin: 0 auto; }
}
@media (max-width: 768px) {
    .nav-links { display: none; }
    .nav-actions .nav-link:not(#login-link),
    .nav-actions .btn-outline { display: none; }
    .mobile-toggle { display: flex; }
    .stats-grid { grid-template-columns: repeat(2, 1fr); }
    .plans-grid { grid-template-columns: 1fr; max-width: 480px; margin: 0 auto; }
    .quick-plans-grid { grid-template-columns: 1fr; max-width: 480px; margin: 0 auto 40px; }
    .packages-grid { grid-template-columns: 1fr; max-width: 420px; margin: 0 auto; }
    .pkg-desc { min-height: 0; }
    .hero-title { font-size: 2.4rem; }
    .hero-stats { gap: 28px; }
    .section-title-dark,
    .section-title-center { font-size: 1.8rem; }
    .step-content { width: 140px; }
}
@media (max-width: 480px) {
    .stats-grid { grid-template-columns: 1fr; }
    .hero-buttons { flex-direction: column; }
    .floating-cta { right: 12px; bottom: 12px; font-size: 0.75rem; padding: 10px 16px; }
}

/* ── Touch ─────────────────────────────────────────────────
   At the foot of the file so it lands after the rules it adjusts. */

html {
    /* iOS paints its own grey-blue box over anything tappable, which lands on
       top of the control's own :active styling and reads as a rendering fault.
       A faint neutral of our own keeps the "you hit it" feedback. */
    -webkit-tap-highlight-color: rgba(15, 23, 42, 0.08);
}

/* 900px rather than the 768px this page's layout uses, because this is about
   the input device, not the width: an iPad in portrait is 820-834px, outside
   every phone breakpoint and still a screen being poked with a finger. */
@media (max-width: 900px) {
    /* The hamburger was a 32px square — the control that opens the only
       navigation this page has on a phone. 44px is the smallest a thumb hits
       reliably. Padding rather than width/height so the icon inside keeps its
       size and only the target grows. */
    .mobile-toggle {
        padding: 10px;
    }

    /* An underlined 0.82rem line of text is a 15px-tall target. It is already
       display:block and full width, so it only needs the height. */
    .service-preview-link {
        padding: 15px 0;
    }

    /* The page's calls to action came in at 31-38px. inline-flex so the height
       applies to the anchors as well as the buttons, and so the label stays
       centred once the box is taller than the text needs. */
    .btn-primary,
    .btn-outline,
    .btn-dark,
    .floating-cta {
        min-height: 44px;
        display: inline-flex;
        align-items: center;
        justify-content: center;
    }

    /* 28px tall, and the way back to the top of the site. .navbar is a fixed
       56px, so this grows inside the bar without moving it. The negative
       margin cancels the horizontal padding, keeping the wordmark flush with
       the container edge — the padding is there for the thumb, not the look. */
    .nav-logo {
        padding: 8px 4px;
        margin-left: -4px;
    }

    /* Bare 16px-tall text links. They are hidden below 768px, so this is for
       the band in between — a tablet, where the full nav is on show and being
       tapped. The fixed navbar absorbs the height, same as the wordmark. */
    .nav-link {
        display: inline-flex;
        align-items: center;
        min-height: 44px;
    }
}

/* ── Scrollbars ───────────────────────────────────────────────────────
   The platform default is a wide grey trough that takes no notice of the page
   it sits in and changes character between Windows, macOS and Linux. A faint
   slate pill, inset from the edge so it rests in the gutter rather than
   cutting a channel into the layout. Same values as the dashboard and the
   admin panel, so the whole site scrolls alike. */
:root {
    --scrollbar-thumb: rgba(100, 116, 139, 0.38);
    --scrollbar-thumb-hover: rgba(100, 116, 139, 0.62);
}

/* Firefox has only ever had these, and Chrome takes them from 121; where a
   platform uses overlay scrollbars it keeps that behaviour, which is the
   polite outcome on a trackpad. */
* {
    scrollbar-width: thin;
    scrollbar-color: var(--scrollbar-thumb) transparent;
}

/* The page's own scrollbar gets a real colour rather than a transparent one.
   Its gutter sits outside the area the body's background paints, so
   "transparent" there is not the page showing through — it is whatever the
   browser puts behind the document, which is white. Panels inside the page
   keep the transparent track from the rule above, where it does sit on the
   surface behind it. Colour is the landing page's --bg. */
html {
    scrollbar-color: var(--scrollbar-thumb) var(--bg);
}

html::-webkit-scrollbar-track {
    background: var(--bg);
}

/* The same thing spelled for older Chrome and Safari. */
::-webkit-scrollbar {
    width: 12px;
    height: 12px;
}

::-webkit-scrollbar-track {
    background: transparent;
}

::-webkit-scrollbar-thumb {
    background-color: var(--scrollbar-thumb);
    border-radius: 999px;
    /* A transparent border clipped to the content box is what insets the pill.
       Without it the thumb fills all 12px and reads as a bar again. */
    border: 3px solid transparent;
    background-clip: content-box;
    transition: background-color 0.25s ease;
}

::-webkit-scrollbar-thumb:hover {
    background-color: var(--scrollbar-thumb-hover);
}

::-webkit-scrollbar-corner {
    background: transparent;
}

/* Chrome on Windows puts a stepper arrow at each end the moment the scrollbar
   is styled at all — they do not appear on the unstyled default, so leaving
   this out trades a plain scrollbar for a slim one wearing two grey triangles. */
::-webkit-scrollbar-button {
    display: none;
}

/* ══ The glass, applied ══════════════════════════════════════════════════
   Last in the sheet on purpose: each of these selectors sets
   `background: var(--glass)` further up, and that shorthand resets
   background-image — the sheen only survives if it is set after it, in its
   own longhand.

   The rim goes in front of whatever shadow the card already had, so hover
   states that swap --shadow-sm for --shadow-md keep their specular edge. */
.plan-card,
.quick-plan-card,
.pkg-card,
.service-card {
    background-image: var(--glass-sheen);
    box-shadow: var(--glass-rim), var(--glass-cast);
}

/* The performance stats are one pane divided into cells, not five panes:
   .stats-grid is a rounded, overflow-hidden box whose 1px gaps show through
   as hairlines. So the rim goes on the container. Putting it on the cells
   drew a bright edge around each one and turned a single slab into five
   boxes crammed together. */
.stats-grid {
    box-shadow: var(--glass-rim), var(--glass-cast);
}

.stat-card-light {
    background-image: var(--glass-sheen);
}

.plan-card:hover,
.quick-plan-card:hover,
.pkg-card:hover,
.service-card:hover {
    box-shadow: var(--glass-rim), var(--shadow-lg);
}

/* No hover rim for the stat cells: their shadow is clipped by the grid's
   overflow:hidden anyway, so the lift is the whole effect. */

/* The navbar is the one pane that spans the window, and it was already three
   quarters opaque white — which on a page that scrolls a photograph under it
   is a white bar, not a surface. Thinned to the same material, with the blur
   doing the work of keeping the links legible and the rim giving it a bottom
   edge. */
.navbar {
    background: rgba(255, 255, 255, calc(0.06 + 0.63 * (1 - var(--glass-level))));
    background-image: var(--glass-sheen);
    backdrop-filter: var(--glass-blur);
    -webkit-backdrop-filter: var(--glass-blur);
    /* Only the top highlight and the cast — the bar keeps its own
       border-bottom, and adding the rim's bottom line as well would draw the
       same edge twice. */
    box-shadow:
        inset 0 1px 0 0 rgba(255, 255, 255, 0.90),
        0 1px 20px rgba(15, 23, 42, 0.06);
}

/* ── Solid surfaces, if the admin has asked for them ─────────────────────
   settings/site.themeSurface = 'solid', applied by applySiteSurface() in
   script.js. The panes go opaque, the blurs stop, the sheen and the specular
   rim go with them, and the mesh behind the page goes too — the cards are no
   longer see-through, so there is nothing left for it to show through.

   Set on body rather than :root because that is the element the class lands
   on; every pane is a descendant, so the tokens still reach them. Deliberately
   the same declarations as the reduced-transparency block below, which is the
   same request arriving from the operating system instead of from an admin. */
body.surface-solid {
    --glass: #ffffff;
    --glass-blur: none;
    --glass-sheen: none;
    --glass-rim: inset 0 0 0 0 transparent;
    --glass-cast: var(--shadow-sm);
    background-image: none;
}

body.surface-solid .navbar {
    background: #ffffff;
    box-shadow: var(--shadow-sm);
}

body.surface-solid *,
body.surface-solid *::before,
body.surface-solid *::after {
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
}

/* ── Less transparency, if that is what was asked for ────────────────────
   The same request the dashboard honours: the panes go solid, the blurs
   stop, and the sheen and the specular rim go with them. Everything keeps
   its shape and its colour — it simply stops being see-through. */
@media (prefers-reduced-transparency: reduce) {
    :root {
        --glass: #ffffff;
        --glass-blur: none;
        --glass-sheen: none;
        --glass-rim: inset 0 0 0 0 transparent;
        --glass-cast: var(--shadow-sm);
    }

    .navbar {
        background: #ffffff;
        box-shadow: var(--shadow-sm);
    }

    *,
    *::before,
    *::after {
        backdrop-filter: none !important;
        -webkit-backdrop-filter: none !important;
    }
}

/* ═══ Glass Enhancements ═════════════════════════════════════════════════ */

/* ── Shimmer refraction on hover ────────────────────────────────────── */
@property --shimmer-x {
    syntax: '<percentage>';
    inherits: false;
    initial-value: -120%;
}

@keyframes glassShimmer {
    0% { --shimmer-x: -120%; }
    100% { --shimmer-x: 220%; }
}

@media (hover: hover) and (pointer: fine) {
    .plan-card,
    .quick-plan-card,
    .pkg-card,
    .service-card,
    .stat-card-light {
        background-image:
            linear-gradient(
                115deg,
                transparent 0%,
                transparent calc(var(--shimmer-x) - 5%),
                rgba(255, 255, 255, 0.28) var(--shimmer-x),
                transparent calc(var(--shimmer-x) + 5%),
                transparent 100%
            ),
            var(--glass-sheen);
    }
    .plan-card:hover,
    .quick-plan-card:hover,
    .pkg-card:hover,
    .service-card:hover,
    .stat-card-light:hover {
        animation: glassShimmer 0.8s ease-out forwards;
    }
}

/* ── Glass sheen applied to all glass surfaces ──────────────────────── */
.plan-card,
.quick-plan-card,
.pkg-card,
.service-card,
.stat-card-light {
    background-image: var(--glass-sheen);
    box-shadow: var(--glass-rim), var(--glass-cast);
}

/* ── Frosted glass dividers ─────────────────────────────────────────── */
.frost-divider {
    height: 1px;
    margin: var(--space-5) 0;
    border: none;
    background: linear-gradient(90deg,
        transparent 0%,
        rgba(255, 255, 255, calc(0.55 * var(--glass-k))) 20%,
        rgba(255, 255, 255, calc(0.70 * var(--glass-k))) 50%,
        rgba(255, 255, 255, calc(0.55 * var(--glass-k))) 80%,
        transparent 100%);
    backdrop-filter: blur(4px);
    -webkit-backdrop-filter: blur(4px);
    box-shadow:
        0 1px 2px rgba(0, 0, 0, 0.04),
        0 -1px 0 rgba(255, 255, 255, calc(0.3 * var(--glass-k)));
    position: relative;
}

body.surface-solid .frost-divider {
    background: var(--border);
    backdrop-filter: none;
    -webkit-backdrop-filter: none;
    box-shadow: none;
}

/* ── Nested glass utility ───────────────────────────────────────────── */
.glass-inset {
    background: color-mix(in srgb, var(--text-dark) 5%, transparent);
    backdrop-filter: blur(6px) saturate(120%);
    -webkit-backdrop-filter: blur(6px) saturate(120%);
    border-radius: var(--radius-sm);
    box-shadow:
        inset 0 1px 3px rgba(0, 0, 0, 0.08),
        inset 0 0 0 1px rgba(255, 255, 255, calc(0.18 * var(--glass-k)));
    padding: var(--space-3) var(--space-4);
}



/* ── Navbar glass enhancement ───────────────────────────────────────── */
.navbar {
    background: rgba(255, 255, 255, calc(0.06 + 0.63 * (1 - var(--glass-level))));
    background-image: var(--glass-sheen);
    backdrop-filter: var(--glass-blur);
    -webkit-backdrop-filter: var(--glass-blur);
    box-shadow:
        inset 0 1px 0 0 rgba(255, 255, 255, calc(0.90 * var(--glass-k))),
        0 1px 20px rgba(15, 23, 42, 0.06);
}
