
        :root {
            --ezsx-accent: #3680ED;
            --ezsx-accent-2: #2060C0;
            --ezsx-accent-3: #3680ED;
            --ezsx-accent-soft: #CFE0FA;
            --ezsx-accent-tint: #EAF2FD;
            --ezsx-ink: #0f172a;
            --ezsx-ink-2: #1e293b;
            --ezsx-mute: #64748b;
            --ezsx-mute-2: #94a3b8;
            --ezsx-line: #e5e7eb;
            --ezsx-line-2: #f1f5f9;
            --ezsx-bg: #ffffff;
            --ezsx-bg-2: #f8fafc;
            --ezsx-shadow: 0 40px 100px -20px rgba(15, 23, 42, .45), 0 12px 32px -12px rgba(27, 52, 127, .25), 0 0 0 1px rgba(15, 23, 42, .06);
            --ezsx-radius: 28px;
            /* §EZSX-PRM (2026-09-14) — the premium pass: one brand gradient, one glow, one
               plate tint and one ease, read by every section below. The dark block
               swaps the values that need swapping; the gradient is a brand surface
               and stays. */
            --ezsx-grad: linear-gradient(135deg, #3680ED 0%, #2060C0 100%);
            --ezsx-glow: rgba(54, 128, 237, .38);
            --ezsx-plate: #F1F4F9;
            --ezsx-plate-ink: #5F6B7C;
            --ezsx-card: #fff;
            --ezsx-card-2: #FBFCFE;
            --ezsx-card-line: #E5EAF2;
            --ezsx-ease: cubic-bezier(.2, .8, .2, 1);
        }

        /* ---------- root + backdrop ---------- */
        /*  CRITICAL: the overlay is mounted on EVERY page so its fixed children
            must NOT capture pointer events when closed — otherwise the invisible
            backdrop covers the whole viewport and nothing on the site is clickable.
            Default state = invisible AND untouchable; .is-open re-enables both. */
        .ezsx { position: relative; z-index: 2147483000; }
        body.ezsx-open { overflow: hidden !important; }

        .ezsx-backdrop {
            position: fixed; inset: 0;
            background: rgba(7, 11, 22, .52);
            -webkit-backdrop-filter: blur(16px) saturate(1.15);
            backdrop-filter: blur(16px) saturate(1.15);
            opacity: 0;
            pointer-events: none;    /* off by default → page underneath is clickable */
            transition: opacity .22s ease;
            z-index: 2147483001;
        }
        .ezsx.is-open .ezsx-backdrop {
            opacity: 1;
            pointer-events: auto;    /* click-to-close active only while open */
        }

        /* ---------- shell (modal card) ---------- */
        .ezsx-shell {
            position: fixed;
            top: 50%; left: 50%;
            transform: translate(-50%, -46%) scale(.98);
            width: min(1200px, 96vw);
            max-height: 90vh;
            background: var(--ezsx-bg);
            border-radius: var(--ezsx-radius);
            box-shadow: var(--ezsx-shadow);
            display: flex; flex-direction: column;
            overflow: hidden;
            opacity: 0;
            pointer-events: none;
            transition: opacity .22s ease, transform .28s cubic-bezier(.2, .8, .2, 1);
            z-index: 2147483002;
            font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Inter, Roboto, "Helvetica Neue", Arial, sans-serif;
            color: var(--ezsx-ink);
        }
        .ezsx.is-open .ezsx-shell {
            opacity: 1;
            pointer-events: auto;
            transform: translate(-50%, -50%) scale(1);
        }
        /* A soft aurora behind the header — brand blue to the left, a breath of
           gold to the right — on a pseudo so it never touches the layout. The
           head and the strip sit over it on translucent surfaces. */
        .ezsx-shell::before {
            content: ""; position: absolute; inset: 0 0 auto 0; height: 240px; z-index: 0; pointer-events: none;
            background:
                radial-gradient(60% 120% at 6% 0%, rgba(54, 128, 237, .16) 0%, rgba(54, 128, 237, 0) 60%),
                radial-gradient(40% 100% at 96% 0%, rgba(245, 179, 1, .10) 0%, rgba(245, 179, 1, 0) 58%);
        }
        .ezsx-shell::after {
            content: ""; position: absolute; inset: 0; z-index: 0; pointer-events: none; border-radius: inherit;
            box-shadow: inset 0 1px 0 rgba(255, 255, 255, .85);
        }
        .ezsx-head, .ezsx-tabs, .ezsx-body, .ezsx-foot { position: relative; z-index: 1; }

        /* ---------- header ---------- */
        .ezsx-head {
            display: flex; align-items: center; gap: 16px; flex-shrink: 0;
            padding: 20px 24px 16px;
            border-bottom: 1px solid var(--ezsx-line-2);
            background: linear-gradient(180deg, rgba(255, 255, 255, .55) 0%, rgba(255, 255, 255, .85) 100%);
        }
        /* Sized to the 54px input beside it so the mark reads as a brand tile,
           not a favicon. The image is the bundled 192px PNG (BrandAssets swaps
           it in for /favicon.ico), so it stays crisp here on 2x and 3x screens. */
        .ezsx-brand {
            position: relative; overflow: hidden;
            width: 54px; height: 54px;
            border-radius: 16px;
            background: linear-gradient(135deg, var(--ezsx-accent-3) 0%, var(--ezsx-accent-2) 100%);
            display: inline-flex; align-items: center; justify-content: center;
            box-shadow: 0 10px 24px -6px var(--ezsx-glow), inset 0 1px 0 rgba(255, 255, 255, .28);
            flex-shrink: 0;
            transition: transform .3s var(--ezsx-ease), box-shadow .3s ease;
        }
        /* a slow sheen crosses the tile while the popup is open */
        .ezsx-brand::after {
            content: ""; position: absolute; top: -40%; bottom: -40%; left: -70%; width: 45%; pointer-events: none;
            transform: skewX(-20deg);
            background: linear-gradient(100deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, .35) 50%, rgba(255, 255, 255, 0) 100%);
        }
        .ezsx-brand:hover { transform: translateY(-1px) rotate(-3deg) scale(1.04); box-shadow: 0 14px 30px -8px var(--ezsx-glow), inset 0 1px 0 rgba(255, 255, 255, .28); }
        .ezsx-brand svg { width: 28px; height: 28px; color: #fff; }
        /* When an admin-editable brand icon is present we switch to a soft white
           tile so the colorful logo reads faithfully instead of dying on red. */
        .ezsx-brand:has(.ezsx-brand-img) {
            background: #fff;
            box-shadow: 0 6px 18px rgba(15, 23, 42, .12);
            border: 1px solid var(--ezsx-line);
        }
        .ezsx-brand-img { width: 46px; height: 46px; border-radius: 12px; object-fit: contain; display: block; }
        .ezsx-brand-fallback { display: inline-flex; color: #fff; }

        /* ---------- the field ----------
           One composed row. The WRAP carries the border, background and focus
           ring; the <input> inside is bare, so a scope chip, the keycaps, a
           clear button and a spinner can all sit in the same row without
           absolute positioning fighting the input's padding. */
        .ezsx-input-wrap {
            position: relative; flex: 1; min-width: 0;
            display: flex; align-items: center; gap: 10px;
            height: 56px;
            padding: 0 10px 0 18px;
            border: 1.5px solid var(--ezsx-line);
            border-radius: 18px;
            background: #fff;
            box-shadow: inset 0 1px 0 #fff, 0 1px 2px rgba(15, 23, 42, .04), 0 10px 30px -22px rgba(27, 52, 127, .4);
            transition: border-color .18s ease, background .18s ease, box-shadow .22s ease, transform .22s var(--ezsx-ease);
        }
        .ezsx-input-wrap:hover { border-color: #cbd5e3; box-shadow: inset 0 1px 0 #fff, 0 1px 2px rgba(15, 23, 42, .04), 0 14px 34px -22px rgba(27, 52, 127, .5); }
        /* Focus: the border becomes a brand → sky → deep-brand gradient (two
           background layers, padding-box over border-box) under a soft ring. Both
           layers are written out — a `background` shorthand would reset them by
           night. No gold in it (owner's call, 2026-09-14): the popup is blue. */
        .ezsx-input-wrap:focus-within {
            border-color: transparent;
            background-image: linear-gradient(#fff, #fff), linear-gradient(120deg, var(--ezsx-accent) 0%, #8CBEFA 55%, var(--ezsx-accent-2) 100%);
            background-origin: border-box;
            background-clip: padding-box, border-box;
            background-repeat: no-repeat;
            box-shadow: 0 0 0 4px rgba(54, 128, 237, .12), 0 14px 34px -16px var(--ezsx-glow);
        }
        .ezsx-input-ico {
            width: 20px; height: 20px; flex-shrink: 0;
            color: var(--ezsx-mute-2);
            transition: color .18s ease;
        }
        .ezsx-input-wrap:focus-within .ezsx-input-ico { color: var(--ezsx-accent); }
        /* Livewire toggles .is-loading on the wrap while a search or a tab
           change is in flight (wire:loading.class); the magnifier becomes a
           ring for that moment so the field says "searching" by itself. */
        .ezsx-input-spin {
            display: none; width: 20px; height: 20px; flex-shrink: 0;
            border-radius: 50%;
            border: 2.5px solid var(--ezsx-accent-soft);
            border-top-color: var(--ezsx-accent);
            animation: ezsx-spin .7s linear infinite;
        }
        .ezsx-input-wrap.is-loading .ezsx-input-ico  { display: none; }
        .ezsx-input-wrap.is-loading .ezsx-input-spin { display: block; }
        @keyframes ezsx-spin { to { transform: rotate(360deg); } }

        .ezsx-input {
            flex: 1; min-width: 0;
            height: 100%;
            margin: 0; padding: 0;
            border: 0; border-radius: 0;
            background: transparent;
            font-family: inherit; font-size: 17px; font-weight: 500;
            color: var(--ezsx-ink);
            outline: none; box-shadow: none;
        }
        .ezsx-input:focus { border: 0; background: transparent; box-shadow: none; outline: none; }
        .ezsx-input::placeholder { color: var(--ezsx-mute-2); font-weight: 400; opacity: 1; }
        .ezsx-input::-webkit-search-decoration,
        .ezsx-input::-webkit-search-cancel-button { display: none; }

        /* Scope chip — the active module tab, shown inside the field so the
           visitor sees what they are searching without looking up at the
           strip. Clicking it goes back to "All". */
        .ezsx-scope {
            display: inline-flex; align-items: center; gap: 6px;
            height: 30px; padding: 0 8px 0 10px;
            border: 1px solid var(--ezsx-accent-soft);
            border-radius: 999px;
            background: var(--ezsx-accent-tint);
            color: var(--ezsx-accent-2);
            font-family: inherit; font-size: 12.5px; font-weight: 700; line-height: 1;
            white-space: nowrap; cursor: pointer; flex-shrink: 0;
            transition: background .16s ease, border-color .16s ease;
        }
        .ezsx-scope:hover { background: var(--ezsx-accent-soft); border-color: var(--ezsx-accent); }
        .ezsx-scope svg { width: 14px; height: 14px; stroke: currentColor; }
        .ezsx-scope-x { opacity: .55; }
        .ezsx-scope:hover .ezsx-scope-x { opacity: 1; }

        /* Clear button — takes the keycaps' place once there is text. */
        .ezsx-clear {
            display: none; align-items: center; justify-content: center;
            width: 30px; height: 30px; flex-shrink: 0;
            border: 0; border-radius: 50%; padding: 0;
            background: var(--ezsx-line-2);
            color: var(--ezsx-mute);
            cursor: pointer;
            transition: background .16s ease, color .16s ease;
        }
        .ezsx-clear:hover { background: var(--ezsx-accent-tint); color: var(--ezsx-accent-2); }
        .ezsx-clear svg { width: 14px; height: 14px; stroke: currentColor; }
        .ezsx-input:not(:placeholder-shown) ~ .ezsx-kbd   { display: none; }
        .ezsx-input:not(:placeholder-shown) ~ .ezsx-clear { display: inline-flex; }

        /* ---------- shortcut hint ----------
           Two keycaps rather than one boxed label: a 1.5px lip under each key
           and a hairline highlight on top make them read as keys you press.
           The driver swaps the modifier to ⌘ on Apple hardware. The selectors
           carry four classes because custom.*.css styles every <kbd> on the
           site at (0,3,1) and used to win half of this. */
        .ezsx-kbd {
            display: inline-flex; align-items: center; gap: 4px;
            flex-shrink: 0;
            pointer-events: none;
        }
        .ezsx-shell .ezsx-input-wrap .ezsx-kbd .ezsx-key {
            display: inline-flex; align-items: center; justify-content: center;
            min-width: 26px; height: 24px; padding: 0 7px;
            border-radius: 7px;
            font-family: inherit; font-size: 11px; font-weight: 700; line-height: 1;
            letter-spacing: .04em;
            color: var(--ezsx-ink-2);
            background: linear-gradient(180deg, #fff 0%, #f4f6fa 100%);
            border: 1px solid #dfe4ec;
            box-shadow: 0 1.5px 0 #cfd6e0, inset 0 1px 0 #fff;
        }
        .ezsx-shell .ezsx-input-wrap .ezsx-kbd .ezsx-key.is-mac { font-size: 14px; padding: 0 6px; }

        .ezsx-close {
            width: 44px; height: 44px;
            border: 0; padding: 0; cursor: pointer;
            border-radius: 50%;
            background: linear-gradient(135deg, var(--ezsx-accent-3) 0%, var(--ezsx-accent-2) 100%);
            color: #fff;
            display: inline-flex; align-items: center; justify-content: center;
            box-shadow: 0 6px 16px rgba(54, 128, 237, .30);
            transition: transform .16s ease, box-shadow .16s ease;
            flex-shrink: 0;
        }
        .ezsx-close:hover { transform: rotate(90deg); box-shadow: 0 8px 22px rgba(54, 128, 237, .40); }
        .ezsx-close:active { transform: rotate(90deg) scale(.92); }
        .ezsx-close:focus-visible { outline: 2px solid var(--ezsx-accent); outline-offset: 3px; }
        .ezsx-close svg { width: 18px; height: 18px; }

        /* ---------- category strip ---------- */
        /* Nineteen module tabs (All + 18). They WRAP — every label stays whole
           and on screen — and are cut slightly tighter than the old ten
           category chips so the full set lands on two rows at 1200px. Under
           640px the strip becomes a one-row sideways scroller instead: seven
           rows of chips would push the results off a phone screen. */
        .ezsx-tabs {
            display: flex; flex-wrap: wrap; gap: 8px;
            padding: 14px 24px;
            border-bottom: 1px solid var(--ezsx-line-2);
            background: linear-gradient(180deg, rgba(248, 250, 253, .6) 0%, rgba(255, 255, 255, .9) 100%);
            overflow-x: auto;
            scrollbar-width: none;
            /* The shell is a column flexbox capped at 90vh and this strip is
               an overflow container, so its automatic minimum height is 0:
               a tall result list would squeeze it and the second row of tabs
               simply vanished behind the overflow. The body is the one part
               that scrolls, so it takes the whole deficit. */
            flex-shrink: 0;
        }
        .ezsx-tabs::-webkit-scrollbar { display: none; }
        .ezsx-tab {
            border: 1px solid var(--ezsx-card-line);
            background: #fff;
            color: #3D4757;
            padding: 8px 13px;
            border-radius: 999px;
            font-size: 12.5px; font-weight: 650; line-height: 1.2;
            cursor: pointer; white-space: nowrap;
            display: inline-flex; align-items: center; gap: 6px;
            flex-shrink: 0;
            box-shadow: 0 1px 2px rgba(16, 24, 40, .04);
            transition: transform .22s var(--ezsx-ease), background-color .18s ease, border-color .18s ease, color .18s ease, box-shadow .22s ease;
        }
        .ezsx-tab:hover {
            border-color: rgba(54, 128, 237, .45); background: #F3F7FE; color: var(--ezsx-accent-2);
            transform: translateY(-1px); box-shadow: 0 8px 18px -12px var(--ezsx-glow);
        }
        .ezsx-tab:active { transform: translateY(0) scale(.97); }
        .ezsx-tab:focus-visible { outline: 2px solid var(--ezsx-accent); outline-offset: 2px; }
        .ezsx-tab.is-active {
            background: var(--ezsx-grad);
            color: #fff;
            border-color: transparent;
            box-shadow: 0 8px 20px -8px var(--ezsx-glow), inset 0 1px 0 rgba(255, 255, 255, .22);
        }
        .ezsx-tab.is-active:hover { color: #fff; transform: none; }
        .ezsx-tab-ico {
            width: 16px; height: 16px;
            display: inline-flex; align-items: center; justify-content: center;
            flex-shrink: 0;
            line-height: 1;
            color: currentColor;
        }
        .ezsx-tab-ico svg {
            width: 16px; height: 16px;
            display: block;
            stroke: currentColor;
            stroke-width: 2;
            fill: none;
        }
        .ezsx-tab.is-active .ezsx-tab-ico svg { stroke: #fff; }

        /* ---------- body ---------- */
        .ezsx-body {
            flex: 1;
            overflow-y: auto;
            padding: 22px 24px 22px;
        }
        .ezsx-body::-webkit-scrollbar { width: 8px; }
        .ezsx-body::-webkit-scrollbar-thumb { background: var(--ezsx-line); border-radius: 8px; border: 2px solid var(--ezsx-bg); }
        .ezsx-body::-webkit-scrollbar-thumb:hover { background: #cbd5e3; }

        .ezsx-cols {
            display: grid;
            grid-template-columns: 1fr 1.35fr 1fr;
            gap: 22px;
        }
        @media (max-width: 960px) {
            .ezsx-cols { grid-template-columns: 1fr; }
        }

        /* Section titles — one voice for the idle columns, the result groups and
           the results row: a small tinted plate around the mark, then the label.
           The plate is the <svg> itself (padding on it), so no markup changes. */
        .ezsx-col-title {
            display: flex; align-items: center; gap: 9px;
            font-size: 12.5px; font-weight: 800;
            color: var(--ezsx-ink);
            text-transform: uppercase; letter-spacing: .08em;
            margin: 0 0 14px 0;
        }
        .ezsx-col-title svg, .ezsx-group-title svg {
            width: 26px; height: 26px; padding: 5px; box-sizing: border-box;
            border-radius: 8px;
            background: var(--ezsx-accent-tint);
            color: var(--ezsx-accent);
            box-shadow: inset 0 0 0 1px rgba(54, 128, 237, .16);
            flex-shrink: 0;
        }

        /* ---------- popular list ---------- */
        .ezsx-list { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 6px; }
        .ezsx-list-btn {
            width: 100%;
            display: flex; align-items: center; gap: 10px;
            padding: 8px 10px;
            border: 1px solid transparent;
            background: transparent;
            border-radius: 12px;
            cursor: pointer;
            font-size: 14px; color: var(--ezsx-ink-2); font-weight: 550;
            text-align: left;
            transition: background-color .16s ease, border-color .16s ease, color .16s ease, transform .22s var(--ezsx-ease);
            text-decoration: none;
        }
        .ezsx-list-btn:hover {
            background: var(--ezsx-accent-tint);
            border-color: var(--ezsx-accent-soft);
            color: var(--ezsx-accent-2);
            transform: translateX(2px);
        }
        .ezsx-list-btn:focus-visible { outline: 2px solid var(--ezsx-accent); outline-offset: 1px; }
        .ezsx-list-btn .ezsx-rank {
            display: inline-flex; align-items: center; justify-content: center;
            width: 24px; height: 24px;
            border-radius: 8px;
            background: var(--ezsx-plate);
            color: var(--ezsx-plate-ink);
            font-size: 11px; font-weight: 800;
            font-variant-numeric: tabular-nums;
            flex-shrink: 0;
            transition: background-color .16s ease, color .16s ease, transform .22s var(--ezsx-ease);
        }
        .ezsx-list-btn, .ezsx-list-btn * { text-decoration: none !important; }
        .ezsx-list-btn:hover .ezsx-rank { background: var(--ezsx-grad); color: #fff; transform: scale(1.06); box-shadow: 0 6px 14px -6px var(--ezsx-glow); }
        .ezsx-list-btn:hover .ezsx-label { color: var(--ezsx-accent-2); font-weight: 700; }
        /* the term wraps — a search phrase that ends in "…" is not the phrase */
        .ezsx-list-btn .ezsx-label { flex: 1; min-width: 0; overflow-wrap: anywhere; line-height: 1.3; }
        .ezsx-list-btn .ezsx-count {
            flex-shrink: 0; padding: 2px 8px; border-radius: 999px;
            background: var(--ezsx-plate); color: var(--ezsx-plate-ink);
            font-size: 11px; font-weight: 700; font-variant-numeric: tabular-nums; line-height: 1.4;
            transition: background-color .16s ease, color .16s ease;
        }
        .ezsx-list-btn:hover .ezsx-count { background: rgba(54, 128, 237, .14); color: var(--ezsx-accent-2); }

        /* ---------- discover cards ---------- */
        .ezsx-cards { display: flex; flex-direction: column; gap: 10px; }
        .ezsx-card {
            display: flex; align-items: center; gap: 12px;
            padding: 12px;
            border: 1px solid var(--ezsx-card-line);
            border-radius: 16px;
            text-decoration: none;
            color: inherit;
            background: linear-gradient(180deg, var(--ezsx-card) 0%, var(--ezsx-card-2) 100%);
            box-shadow: 0 1px 2px rgba(16, 24, 40, .04);
            transition: transform .25s var(--ezsx-ease), border-color .18s ease, box-shadow .25s ease, background-color .18s ease;
            position: relative;
        }
        .ezsx-card, .ezsx-card * { text-decoration: none !important; }
        .ezsx-card:hover {
            border-color: rgba(54, 128, 237, .45);
            background: linear-gradient(180deg, #fff 0%, var(--ezsx-accent-tint) 160%);
            transform: translateY(-2px);
            box-shadow: 0 16px 34px -18px rgba(27, 52, 127, .4), 0 2px 6px rgba(16, 24, 40, .04);
        }
        .ezsx-card:focus-visible { outline: 2px solid var(--ezsx-accent); outline-offset: 2px; }
        .ezsx-card:hover .ezsx-card-title { color: var(--ezsx-accent-2); }
        .ezsx-card:hover .ezsx-card-ico {
            transform: scale(1.06) rotate(-3deg);
            border-color: var(--ezsx-accent);
            background: linear-gradient(135deg, #fff 0%, var(--ezsx-accent-tint) 100%);
            box-shadow: 0 8px 16px -10px var(--ezsx-glow);
        }
        .ezsx-card-ico { transition: transform .3s var(--ezsx-ease), background .16s ease, border-color .16s ease, box-shadow .2s ease; }
        .ezsx-card-ico {
            width: 40px; height: 40px;
            border-radius: 10px;
            background: linear-gradient(135deg, var(--ezsx-accent-tint) 0%, #fff 100%);
            border: 1px solid var(--ezsx-accent-soft);
            color: var(--ezsx-accent);
            display: inline-flex; align-items: center; justify-content: center;
            flex-shrink: 0;
        }
        .ezsx-card-ico svg { width: 20px; height: 20px; }
        /* A module hit with its own logo IS the tile: the image runs edge to
           edge with no plate, border or padding, clipped to the tile's own
           radius. `cover` because these logos are square app icons; a rare
           wide mark is cropped rather than letterboxed. The module mark
           underneath is what an image that 404s falls back to. */
        .ezsx-card-ico.has-img { background: transparent; border: 0; padding: 0; overflow: hidden; box-shadow: inset 0 0 0 1px rgba(15, 23, 42, .08); }
        .ezsx-card-ico.has-img svg { display: none; }
        .ezsx-card-ico img { width: 100%; height: 100%; object-fit: cover; border-radius: 10px; display: block; }
        .ezsx-card:hover .ezsx-card-ico.has-img { background: transparent; box-shadow: inset 0 0 0 1px rgba(15, 23, 42, .08), 0 8px 16px -10px var(--ezsx-glow); }
        .ezsx-card-body { flex: 1; min-width: 0; }
        /* Titles wrap rather than cut: "AI Angel Investor Outreach Email" is
           the name, and a name that ends in "…" is not a name. */
        .ezsx-card-title {
            display: block;
            font-size: 14px; font-weight: 750; line-height: 1.3; letter-spacing: -.005em;
            color: var(--ezsx-ink);
            margin-bottom: 2px;
            overflow-wrap: anywhere;
            transition: color .16s ease;
        }
        /* Only the idle "Try Something New" list carries a blurb; result cards
           are name only. The blurb WRAPS in full — it used to be clamped to one
           line and cut at 72 characters, and a sentence that ends in "…" says
           less than no sentence. */
        .ezsx-card-desc {
            display: block;
            font-size: 12.5px; line-height: 1.5;
            color: var(--ezsx-mute);
            overflow-wrap: anywhere;
        }
        .ezsx-card--hit { min-height: 66px; }
        .ezsx-card--hit .ezsx-card-title { margin-bottom: 0; }
        .ezsx-badge {
            font-size: 10px; font-weight: 800;
            padding: 4px 9px;
            border-radius: 999px;
            letter-spacing: .06em; text-transform: uppercase; line-height: 1.2;
            flex-shrink: 0; align-self: flex-start;
            box-shadow: inset 0 0 0 1px rgba(15, 23, 42, .04);
        }
        .ezsx-badge--new      { background: #EAF2FD; color: #2060C0; }
        .ezsx-badge--popular  { background: var(--ezsx-accent-soft); color: var(--ezsx-accent-2); }
        .ezsx-badge--hot      { background: #FFF5E1; color: #B45309; }
        .ezsx-badge--trending { background: #E6FCF3; color: #087F5B; }

        /* ---------- trending numbered ---------- */
        .ezsx-trend { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 4px; }
        .ezsx-trend-item {
            display: flex; align-items: center; gap: 11px;
            padding: 8px 10px;
            border: 1px solid transparent;
            border-radius: 12px;
            text-decoration: none;
            color: var(--ezsx-ink-2);
            font-size: 14px;
            font-weight: 550;
            transition: background-color .16s ease, border-color .16s ease, color .16s ease, transform .22s var(--ezsx-ease);
        }
        .ezsx-trend-item, .ezsx-trend-item * { text-decoration: none !important; }
        .ezsx-trend-item:hover {
            background: var(--ezsx-accent-tint);
            border-color: var(--ezsx-accent-soft);
            color: var(--ezsx-accent-2);
            transform: translateX(3px);
        }
        .ezsx-trend-item:focus-visible { outline: 2px solid var(--ezsx-accent); outline-offset: 1px; }
        .ezsx-trend-num {
            font-size: 11px; font-weight: 800;
            color: var(--ezsx-mute-2);
            width: 20px; flex-shrink: 0;
            font-variant-numeric: tabular-nums;
            transition: color .16s ease;
        }
        .ezsx-trend-item:hover .ezsx-trend-num { color: var(--ezsx-accent); }
        /* no medal tints on the first three (owner's call, 2026-09-14): every rank
           is the same muted ink and takes the brand on hover */
        .ezsx-trend-ico {
            width: 30px; height: 30px;
            display: inline-flex; align-items: center; justify-content: center;
            color: var(--ezsx-accent);
            flex-shrink: 0;
            border-radius: 9px;
            background: #fff;
            box-shadow: inset 0 0 0 1px var(--ezsx-card-line);
            transition: transform .3s var(--ezsx-ease), box-shadow .2s ease;
        }
        .ezsx-trend-ico svg { width: 16px; height: 16px; }
        .ezsx-trend-item:hover .ezsx-trend-ico { transform: scale(1.08) rotate(-3deg); box-shadow: inset 0 0 0 1px rgba(54, 128, 237, .35), 0 8px 16px -10px var(--ezsx-glow); }
        /* Directory tools carry their logo in the 30px slot, edge to edge. */
        .ezsx-trend-ico.has-img { overflow: hidden; }
        .ezsx-trend-ico.has-img svg { display: none; }
        .ezsx-trend-ico img { width: 100%; height: 100%; object-fit: cover; border-radius: 9px; display: block; }
        .ezsx-trend-name { flex: 1; min-width: 0; overflow-wrap: anywhere; line-height: 1.3; }

        /* ---------- recent searches ---------- */
        .ezsx-recent {
            margin-top: 20px;
            padding: 14px 16px;
            background: linear-gradient(180deg, #F8FAFD 0%, #F3F6FB 100%);
            border-radius: 16px;
            border: 1px solid var(--ezsx-card-line);
            box-shadow: inset 0 1px 0 rgba(255, 255, 255, .8);
        }
        .ezsx-recent-head {
            display: flex; align-items: center; justify-content: space-between;
            margin-bottom: 10px;
        }
        .ezsx-recent-head h4 {
            font-size: 12px; font-weight: 700;
            text-transform: uppercase; letter-spacing: .6px;
            color: var(--ezsx-ink);
            margin: 0;
            display: flex; align-items: center; gap: 6px;
        }
        .ezsx-recent-head h4 svg { width: 14px; height: 14px; color: var(--ezsx-mute); }
        .ezsx-clear {
            border: 0; background: transparent;
            color: var(--ezsx-accent);
            font-size: 12px; font-weight: 600;
            cursor: pointer; padding: 4px 6px;
            border-radius: 6px;
        }
        .ezsx-clear:hover { background: var(--ezsx-accent-tint); }
        .ezsx-recent-pills { display: flex; flex-wrap: wrap; gap: 6px; }
        .ezsx-rpill {
            display: inline-flex; align-items: center; gap: 6px;
            padding: 6px 8px 6px 12px;
            background: #fff;
            border: 1px solid var(--ezsx-card-line);
            border-radius: 999px;
            font-size: 12px; font-weight: 600;
            color: var(--ezsx-ink-2);
            box-shadow: 0 1px 2px rgba(16, 24, 40, .04);
            transition: border-color .16s ease, background-color .16s ease, transform .22s var(--ezsx-ease);
        }
        .ezsx-rpill:hover { transform: translateY(-1px); }
        .ezsx-rpill-txt {
            border: 0; background: transparent; padding: 0; cursor: pointer;
            font: inherit; color: inherit;
        }
        .ezsx-rpill:hover { border-color: var(--ezsx-accent-soft); background: var(--ezsx-accent-tint); }
        .ezsx-rpill-x {
            border: 0; background: transparent; cursor: pointer;
            width: 16px; height: 16px; border-radius: 50%;
            display: inline-flex; align-items: center; justify-content: center;
            color: var(--ezsx-mute); padding: 0;
        }
        .ezsx-rpill-x:hover { background: var(--ezsx-accent); color: #fff; }
        .ezsx-rpill-x svg { width: 10px; height: 10px; }

        /* ---------- results / empty ---------- */
        .ezsx-results-head {
            display: inline-flex; align-items: center; gap: 6px;
            padding: 5px 11px 5px 9px;
            border-radius: 999px;
            background: var(--ezsx-plate);
            font-size: 11.5px; font-weight: 800;
            color: #3D4757;
            text-transform: uppercase; letter-spacing: .07em; line-height: 1.3;
            margin: 0 0 14px 0;
        }
        .ezsx-results-head strong { color: var(--ezsx-accent-2); font-weight: 900; }
        .ezsx-grid {
            display: grid;
            grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
            gap: 10px;
        }
        .ezsx-grid .ezsx-card.is-active {
            border-color: var(--ezsx-accent);
            box-shadow: 0 0 0 3px rgba(54, 128, 237, .14), 0 12px 26px -16px rgba(27, 52, 127, .4);
        }
        .ezsx-grid .ezsx-card.is-active .ezsx-card-title { color: var(--ezsx-accent-2); }
        .ezsx-empty {
            text-align: center;
            padding: 40px 20px;
        }
        .ezsx-empty-ico {
            position: relative;
            width: 64px; height: 64px;
            border-radius: 20px;
            background: var(--ezsx-grad);
            color: #fff;
            display: inline-flex; align-items: center; justify-content: center;
            margin-bottom: 14px;
            box-shadow: 0 14px 30px -10px var(--ezsx-glow), inset 0 1px 0 rgba(255, 255, 255, .25);
        }
        .ezsx-empty-ico::before { content: ""; position: absolute; inset: -6px; border-radius: 26px; border: 2px solid rgba(54, 128, 237, .35); pointer-events: none; }
        .ezsx-empty-ico svg { width: 28px; height: 28px; }
        .ezsx-empty h3 { font-size: 18px; font-weight: 700; margin: 0 0 6px; color: var(--ezsx-ink); }
        .ezsx-empty p { font-size: 14px; color: var(--ezsx-mute); margin: 0 0 16px; }
        .ezsx-empty p button {
            border: 0; background: transparent; padding: 0;
            color: var(--ezsx-accent); font-weight: 700; cursor: pointer;
            text-decoration: underline;
        }
        .ezsx-empty-suggest {
            display: inline-flex; flex-wrap: wrap; gap: 8px;
            justify-content: center;
        }
        .ezsx-empty-suggest a {
            padding: 8px 14px;
            border: 1px solid var(--ezsx-card-line);
            border-radius: 999px;
            background: #fff;
            text-decoration: none;
            color: var(--ezsx-ink-2);
            font-size: 13px; font-weight: 650;
            box-shadow: 0 1px 2px rgba(16, 24, 40, .04);
            transition: border-color .16s ease, background-color .16s ease, color .16s ease, transform .22s var(--ezsx-ease);
        }
        .ezsx-empty-suggest a:hover { transform: translateY(-1px); }
        .ezsx-empty-suggest a:hover {
            border-color: var(--ezsx-accent);
            background: var(--ezsx-accent-tint);
            color: var(--ezsx-accent-2);
        }

        /* ---------- "see all results" → /search ----------
           The overlay only ever searched the `pages` catalogue and had no way
           out to the full results page, so a visitor whose match lived in the
           directory, prompts or templates hit a dead end here. This is
           the hand-off to public.search, which searches everything. */
        .ezsx-results-row {
            display: flex; align-items: baseline; justify-content: space-between;
            gap: 12px; flex-wrap: wrap;
            /* Inherits the spacing .ezsx-results-head used to carry on its own,
               so the grid below keeps its gap. */
            margin: 0 0 14px 2px;
        }
        .ezsx-results-row .ezsx-results-head { margin: 0; }
        .ezsx-seeall {
            display: inline-flex; align-items: center; gap: 6px;
            padding: 6px 10px; margin: -6px -10px -6px 0;
            border-radius: 999px;
            font-size: 13px; font-weight: 700;
            color: var(--ezsx-accent);
            text-decoration: none;
            white-space: nowrap;
            transition: gap .16s ease, color .14s ease, background-color .16s ease;
        }
        .ezsx-seeall:hover { gap: 9px; color: var(--ezsx-accent-2); background: var(--ezsx-accent-tint); }
        .ezsx-seeall:focus-visible { outline: 2px solid var(--ezsx-accent); outline-offset: 1px; }
        .ezsx-seeall svg { width: 12px; height: 12px; }
        .ezsx-seeall-block { margin-top: 18px; }

        /* ---------- module groups ----------
           Under "All" every module with a hit is one group: a head in the
           same voice as the idle columns' titles, then the shared card grid.
           A module tab and the idle "Popular in …" browse reuse the section. */
        .ezsx-group + .ezsx-group { margin-top: 24px; }
        .ezsx-group-head {
            display: flex; align-items: baseline; justify-content: space-between;
            gap: 12px; flex-wrap: wrap;
            margin: 0 0 12px 2px;
        }
        .ezsx-group-title {
            display: flex; align-items: center; gap: 9px;
            margin: 0;
            font-size: 12.5px; font-weight: 800;
            color: var(--ezsx-ink);
            text-transform: uppercase; letter-spacing: .08em;
        }
        .ezsx-group-empty {
            padding: 18px 14px;
            border: 1px dashed var(--ezsx-card-line);
            border-radius: 14px;
            background: var(--ezsx-bg-2);
            color: var(--ezsx-mute);
            font-size: 13px; text-align: center;
        }

        /* ---------- footer helper strip ---------- */
        .ezsx-foot {
            display: flex; align-items: center; justify-content: space-between; flex-shrink: 0;
            gap: 12px;
            padding: 11px 24px;
            border-top: 1px solid var(--ezsx-line-2);
            background: linear-gradient(180deg, #FAFBFD 0%, #F4F6FA 100%);
            font-size: 12px;
            color: var(--ezsx-mute);
        }
        .ezsx-foot-left, .ezsx-foot-right { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; }
        .ezsx-chip {
            display: inline-flex; align-items: center; gap: 6px;
            font-size: 12px;
            color: var(--ezsx-ink-2);
            font-weight: 500;
        }
        /* the same keycap as the header hint: a 1.5px lip and a hairline on top */
        .ezsx-shell .ezsx-foot .ezsx-chip kbd {
            display: inline-flex; align-items: center; justify-content: center;
            min-width: 22px; height: 22px;
            padding: 0 6px;
            background: linear-gradient(180deg, #fff 0%, #f4f6fa 100%);
            border: 1px solid #dfe4ec;
            border-radius: 6px;
            font-family: inherit; font-size: 11px; font-weight: 700; line-height: 1;
            color: var(--ezsx-ink-2);
            box-shadow: 0 1.5px 0 #cfd6e0, inset 0 1px 0 #fff;
        }
        .ezsx-foot-brand {
            display: inline-flex; align-items: center; gap: 6px;
            color: var(--ezsx-mute);
        }
        .ezsx-foot-brand strong { font-weight: 800; color: var(--ezsx-accent-2); }
        @supports (-webkit-background-clip: text) or (background-clip: text) {
            .ezsx-foot-brand strong { background: var(--ezsx-grad); -webkit-background-clip: text; background-clip: text; color: transparent; }
        }
        /* ---------- motion ----------
           The idle columns and every result group rise in as they arrive —
           groups re-render on each keystroke, so the rise is short and
           settles before the next debounce. Off under reduced motion. */
        @media (prefers-reduced-motion: no-preference) {
            .ezsx.is-open .ezsx-col, .ezsx.is-open .ezsx-group, .ezsx.is-open .ezsx-empty { animation: ezsx-rise .42s var(--ezsx-ease) backwards; }
            .ezsx.is-open .ezsx-col:nth-child(2) { animation-delay: 60ms; }
            .ezsx.is-open .ezsx-col:nth-child(3) { animation-delay: 120ms; }
            .ezsx.is-open .ezsx-brand::after { animation: ezsx-sheen 5s ease-in-out 1.2s infinite; }
        }
        @keyframes ezsx-rise { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }
        @keyframes ezsx-sheen { 0%, 78% { left: -70%; opacity: 0; } 82% { opacity: 1; } 100% { left: 140%; opacity: 0; } }

        /* ---------- responsive: phones and narrow windows ----------
           Below 768px the popup is a full-screen sheet, not a floating card:
           edge to edge (inset:0 — NOT calc(100vw - scrollbar): the page is
           scroll-locked while it is open, so there is no scrollbar to subtract
           and the old calc left a 14px strip on the right), no radius, no
           backdrop blur (it would blur a page nobody can see). The input is
           16px so iOS does not zoom the page on focus, the footer is gone
           (hints for keys a phone has not got), and the tab strip is
           one sideways-scrolling row with faded edges that say "more here". */
        @media (max-width: 767px) {
            .ezsx-backdrop { -webkit-backdrop-filter: none; backdrop-filter: none; }
            .ezsx-shell,
            .ezsx.is-open .ezsx-shell {
                top: 0; right: 0; bottom: 0; left: 0;
                width: auto; height: auto; max-height: none;
                border-radius: 0;
                transform: none;
            }

            .ezsx-shell::before { height: 160px; }
            .ezsx-head { padding: 10px 12px; gap: 10px; }
            .ezsx-brand { width: 44px; height: 44px; border-radius: 12px; }
            .ezsx-brand svg { width: 22px; height: 22px; }
            .ezsx-brand-img { width: 38px; height: 38px; border-radius: 9px; }
            .ezsx-input-wrap { height: 46px; gap: 8px; padding: 0 6px 0 14px; border-radius: 14px; }
            .ezsx-input { font-size: 16px; }
            .ezsx-input-ico, .ezsx-input-spin { width: 18px; height: 18px; }
            .ezsx-scope { display: none; }
            .ezsx-kbd { display: none; }
            .ezsx-close { width: 40px; height: 40px; }
            .ezsx-close svg { width: 16px; height: 16px; }

            .ezsx-tabs {
                flex-wrap: nowrap; gap: 8px;
                padding: 10px 14px;
                scroll-snap-type: x proximity; scroll-padding-inline: 14px;
                -webkit-overflow-scrolling: touch;
            }
            .ezsx-tab { padding: 9px 13px; font-size: 13px; scroll-snap-align: start; }
            /* data-scroll is kept by the driver: start | mid | end | none. */
            .ezsx-tabs[data-scroll="start"] { -webkit-mask-image: linear-gradient(90deg, #000 calc(100% - 44px), transparent); mask-image: linear-gradient(90deg, #000 calc(100% - 44px), transparent); }
            .ezsx-tabs[data-scroll="mid"]   { -webkit-mask-image: linear-gradient(90deg, transparent, #000 44px, #000 calc(100% - 44px), transparent); mask-image: linear-gradient(90deg, transparent, #000 44px, #000 calc(100% - 44px), transparent); }
            .ezsx-tabs[data-scroll="end"]   { -webkit-mask-image: linear-gradient(90deg, transparent, #000 44px); mask-image: linear-gradient(90deg, transparent, #000 44px); }

            /* No footer on phones, so the body carries the home-indicator inset. */
            .ezsx-body { padding: 14px 12px calc(16px + env(safe-area-inset-bottom, 0px)); overscroll-behavior: contain; }
            .ezsx-cols { gap: 18px; }
            .ezsx-results-row { margin-bottom: 10px; }
            .ezsx-group + .ezsx-group { margin-top: 18px; }
            .ezsx-group-head { margin-bottom: 8px; }
            .ezsx-grid { gap: 8px; }
            .ezsx-card { padding: 10px 12px; border-radius: 14px; }
            .ezsx-card--hit { min-height: 60px; }
            .ezsx-col-title, .ezsx-group-title { font-size: 12px; }
            .ezsx-list-btn, .ezsx-trend-item { padding: 8px 8px; }

            /* The whole footer goes: keyboard hints mean nothing on a touchscreen
               and the "Powered by" line is not worth a row of a phone screen. */
            .ezsx-foot { display: none; }
        }

        /* ============================================================
           Dark mode — design.md §2.2 canonical tokens
           Activator: body.theme-dark
        ============================================================ */
        body.theme-dark .ezsx-backdrop { background: rgba(0,0,0,.72); }
        /* §EZSX-PRM tokens by night */
        body.theme-dark .ezsx-shell {
            --ezsx-glow: rgba(96,164,245,.35);
            --ezsx-plate: rgba(255,255,255,.07);
            --ezsx-plate-ink: var(--dk-text-3,#9AA0AB);
            --ezsx-card: var(--dk-surface-2,#17171B);
            --ezsx-card-2: var(--dk-surface-2,#17171B);
            --ezsx-card-line: var(--dk-line,rgba(255,255,255,.10));
        }
        body.theme-dark .ezsx-shell::before {
            background:
                radial-gradient(60% 120% at 6% 0%, rgba(54,128,237,.22) 0%, rgba(54,128,237,0) 60%),
                radial-gradient(40% 100% at 96% 0%, rgba(245,179,1,.10) 0%, rgba(245,179,1,0) 58%);
        }
        body.theme-dark .ezsx-shell::after { box-shadow: inset 0 1px 0 rgba(255,255,255,.08); }

        /* Base surfaces */
        body.theme-dark .ezsx-shell,
        body.theme-dark .ezsx-panel,
        body.theme-dark .ezsx-body { background: var(--dk-surface-2,#17171B); color: var(--dk-text,#F4F5F7); border-color: var(--dk-line,rgba(255,255,255,.10)); }
        body.theme-dark .ezsx-shell { box-shadow: 0 32px 80px rgba(0,0,0,.6), 0 8px 24px rgba(0,0,0,.5); }

        /* Header + footer + tab strip */
        body.theme-dark .ezsx-head { background: linear-gradient(180deg,rgba(23,23,27,.55) 0%,rgba(23,23,27,.85) 100%); border-bottom-color: var(--dk-line-soft,rgba(255,255,255,.06)); color: var(--dk-text,#F4F5F7); }
        body.theme-dark .ezsx-tabs { background: linear-gradient(180deg,rgba(29,29,34,.6) 0%,rgba(23,23,27,.9) 100%); border-bottom-color: var(--dk-line-soft,rgba(255,255,255,.06)); }
        body.theme-dark .ezsx-foot { background: linear-gradient(180deg,var(--dk-surface-3,#1D1D22) 0%,var(--dk-surface,#131317) 100%); color: var(--dk-text-3,#9AA0AB); border-top-color: var(--dk-line-soft,rgba(255,255,255,.06)); }
        body.theme-dark .ezsx-foot-brand { color: var(--dk-text-3,#9AA0AB); }
        body.theme-dark .ezsx-foot-brand strong { color: #60A4F5; }

        /* Brand tile fallback when custom icon is used */
        body.theme-dark .ezsx-brand:has(.ezsx-brand-img) { background: var(--dk-surface-3,#1D1D22); border-color: var(--dk-line-strong,rgba(255,255,255,.16)); box-shadow: 0 6px 18px rgba(0,0,0,.5); }

        /* Search input */
        body.theme-dark .ezsx-input-wrap { background: var(--dk-surface-3,#1D1D22); border-color: var(--dk-line-strong,rgba(255,255,255,.16)); box-shadow: inset 0 1px 0 rgba(255,255,255,.04); }
        body.theme-dark .ezsx-input-wrap:hover { border-color: rgba(255,255,255,.24); }
        body.theme-dark .ezsx-input-wrap:focus-within {
            border-color: transparent;
            background-image: linear-gradient(var(--dk-surface-3,#1D1D22), var(--dk-surface-3,#1D1D22)), linear-gradient(120deg, #60A4F5 0%, #8CBEFA 55%, #3680ED 100%);
            box-shadow: 0 0 0 4px rgba(96,164,245,.18), 0 14px 34px -16px rgba(96,164,245,.5);
        }
        body.theme-dark .ezsx-input { color: var(--dk-text,#F4F5F7); }
        body.theme-dark .ezsx-input::placeholder { color: var(--dk-text-4,#71767F); }
        body.theme-dark .ezsx-input-ico { color: var(--dk-text-4,#71767F); }
        body.theme-dark .ezsx-input-wrap:focus-within .ezsx-input-ico { color: #60A4F5; }
        body.theme-dark .ezsx-input-spin { border-color: rgba(96,164,245,.25); border-top-color: #60A4F5; }
        body.theme-dark .ezsx-scope { background: rgba(54,128,237,.16); border-color: rgba(96,164,245,.3); color: #60A4F5; }
        body.theme-dark .ezsx-scope:hover { background: rgba(54,128,237,.26); border-color: #60A4F5; }
        body.theme-dark .ezsx-clear { background: rgba(255,255,255,.08); color: var(--dk-text-3,#9AA0AB); }
        body.theme-dark .ezsx-clear:hover { background: rgba(54,128,237,.2); color: #60A4F5; }

        /* Header keyboard shortcut chip */
        body.theme-dark .ezsx-shell .ezsx-input-wrap .ezsx-kbd .ezsx-key {
            color: var(--dk-text-2,#C7CAD1);
            background: linear-gradient(180deg, var(--dk-surface-4,#24242A) 0%, var(--dk-surface-3,#1D1D22) 100%);
            border-color: var(--dk-line-strong,rgba(255,255,255,.16));
            box-shadow: 0 1.5px 0 rgba(0,0,0,.55), inset 0 1px 0 rgba(255,255,255,.07);
        }

        /* Category tab pills */
        body.theme-dark .ezsx-tab { background: var(--dk-surface-3,#1D1D22); color: var(--dk-text-2,#C7CAD1); border-color: var(--dk-line-strong,rgba(255,255,255,.16)); box-shadow: 0 1px 2px rgba(0,0,0,.3); }
        body.theme-dark .ezsx-tab:hover { background: rgba(54,128,237,.16); border-color: rgba(96,164,245,.4); color: #8CBEFA; box-shadow: 0 8px 18px -12px rgba(96,164,245,.5); }
        body.theme-dark .ezsx-tab.is-active { background: var(--ezsx-grad); color: #fff; border-color: transparent; box-shadow: 0 8px 20px -8px rgba(54,128,237,.55), inset 0 1px 0 rgba(255,255,255,.18); }
        body.theme-dark .ezsx-tab.is-active:hover { color: #fff; }
        body.theme-dark .ezsx-tab.is-active .ezsx-tab-ico svg { stroke: var(--dk-text,#F4F5F7); }

        /* Column titles + accent icons */
        body.theme-dark .ezsx-col-title { color: var(--dk-text,#F4F5F7); }
        body.theme-dark .ezsx-group-title { color: var(--dk-text,#F4F5F7); }
        body.theme-dark .ezsx-col-title svg, body.theme-dark .ezsx-group-title svg { color: #60A4F5; background: rgba(54,128,237,.16); box-shadow: inset 0 0 0 1px rgba(96,164,245,.25); }
        body.theme-dark .ezsx-group-empty { border-color: var(--dk-line,rgba(255,255,255,.10)); color: var(--dk-text-3,#9AA0AB); }
        /* Logo tiles are edge-to-edge by night too — the image is the tile. */
        body.theme-dark .ezsx-card-ico.has-img,
        body.theme-dark .ezsx-card:hover .ezsx-card-ico.has-img { background: transparent; border: 0; }

        /* Popular list */
        body.theme-dark .ezsx-list-btn { color: var(--dk-text-2,#C7CAD1); }
        body.theme-dark .ezsx-list-btn:hover { background: rgba(54,128,237,.16); border-color: rgba(96,164,245,.28); color: #60A4F5; }
        body.theme-dark .ezsx-list-btn .ezsx-rank { background: rgba(255,255,255,.07); color: var(--dk-text-3,#9AA0AB); }
        body.theme-dark .ezsx-list-btn:hover .ezsx-rank { background: var(--ezsx-grad); color: #fff; }
        body.theme-dark .ezsx-list-btn:hover .ezsx-label { color: #8CBEFA; }
        body.theme-dark .ezsx-list-btn .ezsx-count { background: rgba(255,255,255,.07); color: var(--dk-text-3,#9AA0AB); }
        body.theme-dark .ezsx-list-btn:hover .ezsx-count { background: rgba(96,164,245,.18); color: #8CBEFA; }

        /* Discover cards */
        body.theme-dark .ezsx-card { background: linear-gradient(180deg,var(--dk-surface-2,#17171B) 0%,var(--dk-surface-3,#1D1D22) 100%); border-color: var(--dk-line,rgba(255,255,255,.10)); color: var(--dk-text,#F4F5F7); box-shadow: 0 1px 2px rgba(0,0,0,.3); }
        body.theme-dark .ezsx-card:hover { background: linear-gradient(180deg,var(--dk-surface-3,#1D1D22) 0%,rgba(54,128,237,.18) 160%); border-color: rgba(96,164,245,.45); box-shadow: 0 16px 34px -14px rgba(0,0,0,.7), 0 0 0 1px rgba(96,164,245,.12); }
        body.theme-dark .ezsx-card:hover .ezsx-card-title { color: #8CBEFA; }
        body.theme-dark .ezsx-card-ico.has-img { box-shadow: inset 0 0 0 1px rgba(255,255,255,.10); }
        body.theme-dark .ezsx-grid .ezsx-card.is-active .ezsx-card-title { color: #8CBEFA; }
        body.theme-dark .ezsx-badge { box-shadow: inset 0 0 0 1px rgba(255,255,255,.06); }
        body.theme-dark .ezsx-card-title { color: var(--dk-text,#F4F5F7); }
        body.theme-dark .ezsx-card-desc { color: var(--dk-text-3,#9AA0AB); }
        body.theme-dark .ezsx-card-ico { background: linear-gradient(135deg,rgba(54,128,237,.16) 0%,var(--dk-surface-2,#17171B) 100%); border-color: rgba(96,164,245,.28); color: #60A4F5; }
        body.theme-dark .ezsx-card:hover .ezsx-card-ico { background: linear-gradient(135deg,rgba(54,128,237,.22) 0%,var(--dk-surface-2,#17171B) 100%); border-color: #60A4F5; }
        body.theme-dark .ezsx-grid .ezsx-card.is-active { border-color: #60A4F5; box-shadow: 0 0 0 3px rgba(96,164,245,.28); }

        /* Discover badges (correct selectors) */
        body.theme-dark .ezsx-badge--new { background: rgba(54,128,237,.16); color: #60A4F5; }
        body.theme-dark .ezsx-badge--popular { background: rgba(54,128,237,.16); color: #60A4F5; }
        body.theme-dark .ezsx-badge--hot { background: rgba(217,119,6,.18); color: #F5C97A; }
        body.theme-dark .ezsx-badge--trending { background: rgba(12,166,120,.18); color: #63E0B4; }

        /* Kind pill on result cards */

        /* Trending numbered list */
        body.theme-dark .ezsx-trend-item { color: var(--dk-text-2,#C7CAD1); }
        body.theme-dark .ezsx-trend-item:hover { background: rgba(54,128,237,.16); border-color: rgba(96,164,245,.28); color: #8CBEFA; }
        body.theme-dark .ezsx-trend-num { color: var(--dk-text-4,#71767F); }
        body.theme-dark .ezsx-trend-item:hover .ezsx-trend-num { color: #8CBEFA; }
        body.theme-dark .ezsx-trend-ico { color: #60A4F5; background: var(--dk-surface-3,#1D1D22); box-shadow: inset 0 0 0 1px rgba(255,255,255,.10); }
        body.theme-dark .ezsx-trend-item:hover .ezsx-trend-ico { box-shadow: inset 0 0 0 1px rgba(96,164,245,.4), 0 8px 16px -10px rgba(0,0,0,.8); }

        /* Recent searches panel + pills */
        body.theme-dark .ezsx-recent { background: linear-gradient(180deg,var(--dk-surface-3,#1D1D22) 0%,var(--dk-surface,#131317) 100%); border-color: var(--dk-line,rgba(255,255,255,.10)); box-shadow: inset 0 1px 0 rgba(255,255,255,.04); }
        body.theme-dark .ezsx-recent-head h4 { color: var(--dk-text,#F4F5F7); }
        body.theme-dark .ezsx-recent-head h4 svg { color: var(--dk-text-3,#9AA0AB); }
        body.theme-dark .ezsx-clear { color: #60A4F5; }
        body.theme-dark .ezsx-clear:hover { background: rgba(54,128,237,.16); }
        body.theme-dark .ezsx-rpill { background: var(--dk-surface-3,#1D1D22); border-color: var(--dk-line-strong,rgba(255,255,255,.16)); color: var(--dk-text-2,#C7CAD1); }
        body.theme-dark .ezsx-rpill:hover { background: rgba(54,128,237,.16); border-color: rgba(96,164,245,.28); }
        body.theme-dark .ezsx-rpill-x { color: var(--dk-text-3,#9AA0AB); }
        body.theme-dark .ezsx-rpill-x:hover { background: #3680ED; color: var(--dk-text,#F4F5F7); }

        /* Results header + empty state */
        body.theme-dark .ezsx-results-head { background: rgba(255,255,255,.07); color: var(--dk-text-2,#C7CAD1); }
        body.theme-dark .ezsx-results-head strong { color: #8CBEFA; }
        body.theme-dark .ezsx-group-empty { background: var(--dk-surface-3,#1D1D22); }
        body.theme-dark .ezsx-seeall:hover { background: rgba(54,128,237,.16); }
        body.theme-dark .ezsx-empty { color: var(--dk-text-3,#9AA0AB); }
        body.theme-dark .ezsx-empty-ico { background: var(--ezsx-grad); color: #fff; box-shadow: 0 14px 30px -10px rgba(54,128,237,.5), inset 0 1px 0 rgba(255,255,255,.2); }
        body.theme-dark .ezsx-empty-ico::before { border-color: rgba(96,164,245,.35); }
        body.theme-dark .ezsx-empty h3 { color: var(--dk-text,#F4F5F7); }
        body.theme-dark .ezsx-empty p { color: var(--dk-text-3,#9AA0AB); }
        body.theme-dark .ezsx-empty p button { color: #60A4F5; }
        body.theme-dark .ezsx-empty-suggest a { background: var(--dk-surface-3,#1D1D22); border-color: var(--dk-line-strong,rgba(255,255,255,.16)); color: var(--dk-text-2,#C7CAD1); }
        body.theme-dark .ezsx-empty-suggest a:hover { background: rgba(54,128,237,.16); border-color: #60A4F5; color: #60A4F5; }

        /* "See all results" → /search. --ezsx-accent-2 (#2060C0) is too dim on
           the dark shell, so the pair lightens rather than darkens on hover. */
        body.theme-dark .ezsx-seeall { color: #60A4F5; }
        body.theme-dark .ezsx-seeall:hover { color: #8FC0F8; }

        /* Footer helper strip */
        body.theme-dark .ezsx-chip { color: var(--dk-text-2,#C7CAD1); }
        body.theme-dark .ezsx-shell .ezsx-foot .ezsx-chip kbd { background: linear-gradient(180deg,var(--dk-surface-4,#24242A) 0%,var(--dk-surface-3,#1D1D22) 100%); border-color: var(--dk-line-strong,rgba(255,255,255,.16)); color: var(--dk-text-2,#C7CAD1); box-shadow: 0 1.5px 0 rgba(0,0,0,.55), inset 0 1px 0 rgba(255,255,255,.07); }
        body.theme-dark .ezsx-foot-brand strong { color: #8CBEFA; }
        @supports (-webkit-background-clip: text) or (background-clip: text) {
            body.theme-dark .ezsx-foot-brand strong { background: linear-gradient(135deg,#8CBEFA 0%,#60A4F5 100%); -webkit-background-clip: text; background-clip: text; color: transparent; }
        }

        /* Scrollbar */
        body.theme-dark .ezsx-body::-webkit-scrollbar-thumb { background: rgba(255,255,255,.14); }

        /* Brand tile + close-button glows — override retired red rgba(224,49,49,X) with blue tint */
        body.theme-dark .ezsx-brand { box-shadow: 0 8px 20px rgba(54,128,237,.35); }
        body.theme-dark .ezsx-close { box-shadow: 0 6px 16px rgba(54,128,237,.35); }
        body.theme-dark .ezsx-close:hover { box-shadow: 0 8px 22px rgba(54,128,237,.45); }
    