/* dashboard.css v2.4.2 · ?v=384 — Session 45 (Quick-start preview + pulse, Apr 24 2026)
   S45 (v2.4.2): Appended a short block at end of file (after S45 mobile hardening
   pass) — defines the @keyframes genBtnPreviewPulse animation + .gen-btn-preview-pulse
   class that is toggled on by the updated usePreset() in dashboard HTML v3.34.0.
   When a user taps a quick-start preset tile, fields are populated but generation
   no longer fires automatically — the Generate button pulses to guide the user
   to tap it manually. Respects prefers-reduced-motion with a static outline
   fallback. Cache-bust ?v=383 → ?v=384.
   S45 (v2.4.1): Hotfix on v2.4.0 — hamburger button moved from topbar-right
   to topbar-left via `flex-direction: row-reverse` on .kova-topbar at ≤768px
   (includes #panel-builder .kova-topbar which has its own scoped rules). The
   sidebar drawer slides in from the left, so trigger-on-the-same-side matches
   universal iOS/Android/every-major-mobile-app convention; previous right-side
   placement created a mental-model mismatch (tap right to open something from
   left). Zero markup changes, pure flex reorder. Cache-bust bumped ?v=382 → ?v=383.
   S45 (v2.4.0): Mobile UX P0+P1 fixes appended at end of file (see "S45 MOBILE
   HARDENING PASS" section). Three categories: (a) Generator layout — the
   2-column grid now stacks at ≤768px, unblocking mobile use of the Generator
   panel which was previously unusable (16 elements overflowing viewport by
   62px at 500px width, measured live). (b) iOS input-zoom kill — dashboard
   form inputs (.gen-input, .gen-select, .gen-adv-*, .polish-v1-*) forced to
   16px on touch devices to prevent Safari auto-zoom on focus. (c) Tap targets
   — sidebar items, hamburger, primary action buttons, and the 16×16
   .polish-v1-refine-clear bumped to 44px/32px minimums on touch devices.
   All additions are @media-scoped so desktop unchanged. Dashboard HTML cache-
   bust needs matching ?v=381 → ?v=382 bump — done in paired dashboard/index.html
   update (not in this repo slice; flag to Erez for manual cache-bust on dashboard
   HTML when shipping this file).
   S33 (Fork W.1): Paired CSS for dashboard/index.html v3.31.0 + polish-prompt
   Edge Function v1.8.0. Polish has been split into its own monthly quota
   bucket (separate from the shared ai-generator/ai-regen/gap-analysis
   bucket). Every plan now capped on polish: free:3, starter:25, pro:60,
   max:100. Dashboard adds an always-visible quota counter near the POLISH
   button and a rate-limit soft-block card shown only on 429 rate_limit_
   polish_monthly responses. FIVE new classes appended after the existing
   polish-v1-error rule (line ~705):
     .polish-v1-counter                small strip below submit row, reads
                                       "17/25 polishes · Resets Jun 1"
     .polish-v1-counter-blocked        same strip at-cap state, accent-red
                                       tint to signal limit reached
     .polish-v1-ratelimit-block        full soft-block card shown on 429,
                                       displaces the plain error line
     .polish-v1-ratelimit-title        card header (red, semi-bold)
     .polish-v1-ratelimit-meta         card subtitle (X/Y · Resets ...)
     .polish-v1-ratelimit-upgrade-btn  accent CTA button inside card
     .polish-v1-ratelimit-maxnote      Max-only copy when no upgrade path
   All use existing CSS vars (--accent, --accent-bg, --accent-b, --bg, --bg3,
   --surface, --border, --border2, --text, --text2, --text3) + the same
   rgba(239,68,68,...) red-on-dark pattern used by .polish-v1-error and
   .polish-v1-delta-neg so the color vocabulary stays consistent. Mono font
   family matches the rest of the polish panel's interactive elements.
   Paired cache-bust: dashboard.css?v=380 → ?v=381.
   ---
   S28 (Fork K, legacy note retained): Score-delta pill (#polishScoreDelta) now has three negative
   states instead of one. Pre-S28: any negative delta → red pill — which flagged
   small shrinkages (e.g., "-4") as warnings even though polish frequently
   consolidates redundant phrasing (= net-good outcome). Post-S28: red only
   reserved for significant shrinkage (< -10); small negatives (-1..-10) get a
   new neutral variant that acknowledges "something changed" without the
   red-is-bad semantic. Positive deltas unchanged (green accent). ±0 unchanged
   (base dim, no variant class). New class `.polish-v1-delta-neu` added between
   existing `.polish-v1-delta-pos` and `.polish-v1-delta-neg` at line ~702.
   Uses `var(--text2)` (vs base's `var(--text3)`) so it reads more legibly than
   the ±0 state — the neutral pill IS a change, the ±0 state is the no-change
   baseline. Border uses `var(--border)` to match the pattern where non-zero
   variants add a border frame (pos/neg both have borders; base doesn't).
   Paired with dashboard/index.html v3.20.3 JS threshold update.
     .polish-v1-delta-neu            NEW: small-negative neutral variant (-1..-10)
   S25: Polish Panel v1.3.1 Audience — single-line text input between FORMALITY
   and REFINE wrap. Free-tier accessible (no tier gate). Styled as a compact
   variant of .polish-v1-textarea — same border / background / focus treatment
   but single-line padding so it reads as a short-answer field rather than a
   long-form textarea. All rules namespaced under .polish-v1-audience-*.
     .polish-v1-audience-input       single-line text input, matches .polish-v1-textarea aesthetic
   S24: Polish Panel v1.4 CSS block — Deep Analysis panel (Max only) plus
   Sharpen clarification card + v1→v2 comparison view. All rules namespaced
   under .polish-v1-da-*. Panel is hidden by default (HTML display:none);
   renderPolishDeepAnalysis reveals it only when response carries a
   deepAnalysis field AND .ok === true (Max plan, judge ran cleanly).
   Local CSS var --da-green (#4ade80 same as --refine-green) used for PASS
   verdicts and the Sharpen accent; --da-warm (#fbbf24 = --warm) for WARN;
   --da-red (var(--red)) for FAIL. All three scoped inside .polish-v1-da
   so no global token leakage.
     .polish-v1-da                   main container, 18px top margin, 14px padding, bg2 + border
     .polish-v1-da-head              flex row: label + verdict + MAX badge
     .polish-v1-da-label             IBM Plex Mono 10px tracking label
     .polish-v1-da-verdict           pill, pass/warn/fail variants color-coded
     .polish-v1-da-badge             teal MAX badge
     .polish-v1-da-axes              5-axis grid container
     .polish-v1-da-axis              row: name + score + verdict + explanation
     .polish-v1-da-axis-pass/warn/fail   left-border color-coded per verdict
     .polish-v1-da-axis-name         axis label, mono 11px
     .polish-v1-da-axis-score        score 0.00–1.00, mono bold
     .polish-v1-da-axis-verdict      pill per axis, pass/warn/fail tinted
     .polish-v1-da-axis-exp          1-2 sentence explanation
     .polish-v1-da-axis-detail       optional strengths + weaknesses list
     .polish-v1-da-criteria-wrap     success criteria container
     .polish-v1-da-sub               sub-label mono tracking
     .polish-v1-da-criteria          bulleted UL of criteria
     .polish-v1-da-sharpen           clarification card (green accent)
     .polish-v1-da-sharpen-head      label row with targetAxis chip
     .polish-v1-da-sharpen-target    green pill showing weakest axis
     .polish-v1-da-sharpen-question  judge's suggested question
     .polish-v1-da-sharpen-input     textarea (3 rows, 500 cap)
     .polish-v1-da-sharpen-foot      char-counter + SHARPEN button
     .polish-v1-da-sharpen-count     "N / 500" counter
     .polish-v1-da-sharpen-btn       green SHARPEN button (primary)
     .polish-v1-da-sharpen-error     inline red error message
     .polish-v1-da-compare           v1→v2 grid wrapper (hidden until sharpen)
     .polish-v1-da-compare-head      section label
     .polish-v1-da-compare-grid      2-col grid (1-col <700px)
     .polish-v1-da-compare-col       column card (v1 muted / v2 accent)
     .polish-v1-da-compare-col-after green-left-border to mark v2
     .polish-v1-da-compare-label     "v1 polish" / "v2 sharpened" mono
     .polish-v1-da-compare-body      polished text
     .polish-v1-da-compare-foot      REVERT button + note
     .polish-v1-da-compare-revert    neutral revert button
     .polish-v1-da-compare-note      italic note explaining v2 is active
     .polish-v1-da-error             judge-failed fallback row
   Responsive breakpoint (≤700px): .polish-v1-da-axis collapses to 2-row
   layout (name+verdict row, explanation below); comparison grid collapses
   to 1 column. No global rule changes.
   S23 base (v2.2.0): Polish Panel v1.3 CSS — third REFINE row below v1.2 (Scope +
   Persona, MAX only). Minimal addition because Persona popover reuses
   v1.2's .polish-v1-refine-popover-goal + .polish-v1-refine-goal-*
   classes verbatim (dialog shape is identical to Goal — role/domain/voice
   sub-fields). Only new rule:
     .polish-v1-refine-head-v3              22px top margin — separates row 3 from row 2's upsell
   Responsive breakpoint (≤640px) picks up .polish-v1-refine-head-v3 with
   the same 18px tighter spacing as v2 for narrow-viewport grouping.
   No other rule changes.
   S22 base (v2.1.0): Polish Panel v1.2 CSS block — second REFINE row below v1.1 (Goal +
   Format, Pro+). New rules all namespaced under .polish-v1-refine-*. No
   changes to existing CSS.
     .polish-v1-refine-head-v2              22px top margin — separates row 2 from row 1's upsell
     .polish-v1-refine-popover-goal         overrides default 4px padding for the goal dialog (internal body has its own layout)
     .polish-v1-refine-goal-body            flex column, 10px gap, 12px padding — hosts 3 fields + actions row
     .polish-v1-refine-goal-field           label + textarea pair, 4px gap
     .polish-v1-refine-goal-field label     IBM Plex Mono 9px, letter-spacing 1.5, text3 color, bold
     .polish-v1-refine-goal-field textarea  bg3 background, border2 border, 12px sans, 36px min-height, 120px max-height, resize:vertical
     .polish-v1-refine-goal-field textarea:focus  refine-green border + 2px green glow (matches existing picker focus)
     .polish-v1-refine-goal-actions         flex-end row, 8px gap, 2px top margin
     .polish-v1-refine-goal-btn             IBM Plex Mono 10px pill, 6px 12px padding, neutral by default
     .polish-v1-refine-goal-btn.is-primary  refine-green-bg + refine-green border + refine-green text (APPLY emphasis)
   Responsive breakpoint (≤640px) picks up .polish-v1-refine-head-v2 with a
   tighter 18px top margin to keep the two rows visually grouped on narrow
   viewports.
   S20b base (v2.0.3): Generator panel overflow fix — .gen-main-panel now gets min-width:0
   so the CSS grid 1fr column (.gen-layout parent) can shrink below its
   min-content width instead of letting content overflow and get clipped by
   .gen-layout's overflow:hidden. Also .gen-adv-row gets flex-wrap:wrap so
   the 3 advanced-option columns (PROMPT TYPE / NICHE / PLATFORM) wrap
   gracefully at medium widths instead of clipping labels + select contents.
   No other rule changes.
   Settings > Display text-size control (Bug 3) deliberately NOT fixed in
   this patch — deferred to S22 as a proper --fs-* token refactor (dashboard
   has 156 hardcoded font-size:Npx declarations; none use var(--fs-base), so
   the S/M/L control silently only affects body's own font-size which is
   invisible). See S20 handoff brief for rationale.
   S19 base (v2.0.2): .settings-select rules removed (Output Language control moved from
   Settings > Language <select> to a segmented slider in the Polish panel —
   dashboard.css no longer carries an orphan "reserved for future Settings
   selects" rule that has no live consumer). .polish-v1-slider widened from
   repeat(4,1fr) to grid-auto-flow:column + grid-auto-columns:1fr so the
   same class serves both the 4-column formality slider and the new 3-column
   language slider without a ghost empty cell. New .polish-v1-lang-hint rule
   for the post-polish detected-script hint near the POLISH button.
   S18 base (v2.0.1): .lang-placeholder → .settings-select rename now that Language control
   is live-wired (S18 polish-prompt v1.2.0 outputLang). Stripped disabled
   styling (cursor, opacity, :disabled selector). Class is now reusable for
   any future Settings panel select control.
   S17 base (v2.0.0): role-based tokens (--accent/--warm/--cool/--red/--green +
   alphas) + surface/text/border/motion/typography tokens cascade from
   /site.css. MUST be loaded AFTER site.css (see dashboard/index.html head).
   Only dashboard-specific tokens remain inline here:
     --muted      dashboard-only accent variant (used by .gen-prompt-num)
   --fs-base base value cascades from site.css; body[data-font-size="S|L"]
   overrides below still scope it for Settings > Display size control.
   S17 also fixes latent --teal2 reference in .btn-builder gradient (→ --accent-2). */
:root{--muted:#5EC4B6}

    *,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
    html{overflow-x:hidden}
    body{background:var(--bg);color:var(--text);font-family:var(--sans);padding-top:0;overflow-x:hidden;font-size:var(--fs-base);transition:background var(--tr),color var(--tr)}
    /* Font-size system — Settings > Display (v3.16.0). Scopes to body to avoid overriding chrome. */
    body[data-font-size="S"]{--fs-base:14px}
    body[data-font-size="L"]{--fs-base:18px}
    body::before{content:'';position:fixed;inset:0;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)' opacity='0.03'/%3E%3C/svg%3E");pointer-events:none;z-index:0;opacity:0.4}

    nav{position:fixed;top:0;left:0;right:0;z-index:1000;display:flex;justify-content:space-between;align-items:center;height:54px;padding:0 24px;background:rgba(20,20,24,0.96);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border-bottom:1px solid var(--border);transition:background var(--tr)}
    .nav-logo{font-family:'IBM Plex Mono',monospace;font-size:20px;font-weight:900;color:var(--text);text-decoration:none;letter-spacing:-0.5px}
    .nav-logo .a{color:var(--accent)}
    .nav-right{display:flex;align-items:center;gap:16px}
    .nav-link{font-family:'IBM Plex Mono',monospace;font-size:10px;letter-spacing:1px;color:var(--text3);text-decoration:none;transition:color .2s;cursor:pointer}
    .nav-link:hover{color:var(--accent)}
    .nav-user{font-family:'IBM Plex Mono',monospace;font-size:10px;color:var(--text2);max-width:160px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

    .dash{max-width:960px;margin:0 auto;padding:40px 40px 80px;position:relative;z-index:1}
    .dash-header{margin-bottom:32px}
    .dash-greeting{font-family:'IBM Plex Mono',monospace;font-size:10px;letter-spacing:3px;color:var(--accent);display:block;margin-bottom:8px}
    .dash-title{font-family:'IBM Plex Mono',monospace;font-size:clamp(24px,4vw,36px);font-weight:900;color:var(--text);letter-spacing:-0.5px;line-height:1;display:none}
    .dash-main-greeting{font-family:'IBM Plex Mono',monospace;font-size:clamp(28px,4vw,42px);font-weight:900;color:var(--accent);letter-spacing:-0.5px;line-height:1.1;margin-bottom:4px}
    .dash-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:24px}

    .card{background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:24px;transition:all var(--tr)}
    .card-label{font-family:'IBM Plex Mono',monospace;font-size:9px;letter-spacing:2px;color:var(--text3);margin-bottom:12px;display:block}
    .card-value{font-family:'IBM Plex Mono',monospace;font-size:28px;font-weight:900;line-height:1;margin-bottom:4px}
    .card-sub{font-size:12px;color:var(--text3);line-height:1.5}

    .plan-card{grid-column:1/-1;background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:24px;display:flex;justify-content:space-between;align-items:center;gap:20px;flex-wrap:wrap;transition:all var(--tr)}
    .plan-info{display:flex;align-items:center;gap:16px}
    .plan-badge{font-family:'IBM Plex Mono',monospace;font-size:11px;letter-spacing:1.5px;font-weight:700;padding:6px 14px;border-radius:2px}
    .badge-starter{background:var(--accent-bg);color:var(--accent);border:1px solid var(--accent-b)}
    .badge-pro{background:var(--warm-bg);color:var(--warm);border:1px solid var(--warm-b)}
    .badge-max{background:var(--cool-bg);color:var(--cool);border:1px solid var(--cool-b)}
    .badge-free{background:rgba(0,255,209,0.08);color:var(--accent);border:1px solid var(--accent-b)}
    .badge-none{background:var(--red-bg);color:var(--red);border:1px solid rgba(255,77,77,0.25)}
    .plan-name{font-family:'IBM Plex Mono',monospace;font-size:18px;font-weight:900;color:var(--text)}
    .plan-meta{font-family:'IBM Plex Mono',monospace;font-size:10px;color:var(--text3)}
    .plan-actions{display:flex;gap:8px;flex-wrap:wrap}
    .btn-sm{font-family:'IBM Plex Mono',monospace;font-size:11px;font-weight:600;letter-spacing:0.05em;padding:8px 18px;border-radius:6px;cursor:pointer;text-decoration:none;transition:all .2s;border:1px solid var(--border2);background:transparent;color:var(--text2);display:inline-block}
    .btn-sm:hover{border-color:var(--accent);color:var(--accent);background:var(--accent-bg);transform:translateY(-1px)}
    .btn-sm:active{transform:scale(0.96)}
    .btn-sm-accent{background:var(--accent);color:#0d1f1e;border-color:var(--accent);box-shadow:0 0 14px rgba(45,212,191,0.35)}
    .btn-sm-accent:hover{background:var(--accent);opacity:0.9;color:#0d1f1e;transform:translateY(-1px);box-shadow:0 0 22px rgba(45,212,191,0.55)}
    .btn-sm-danger{border-color:var(--red);color:var(--red)}
    .btn-sm-danger:hover{background:var(--red-bg);border-color:var(--red);color:var(--red)}

    .usage-wrap{margin-top:12px}
    .usage-label{display:flex;justify-content:space-between;font-family:'IBM Plex Mono',monospace;font-size:10px;color:var(--text3);margin-bottom:6px}
    .usage-bar{height:6px;background:var(--bg3);border-radius:3px;overflow:hidden}
    .usage-fill{height:100%;border-radius:3px;transition:width .5s ease}

    .builder-card{background:var(--accent-bg);border:1px solid var(--accent-b);border-radius:8px;padding:28px;display:flex;justify-content:space-between;align-items:center;gap:20px;flex-wrap:wrap;margin-bottom:24px;transition:all var(--tr)}
    .builder-info h3{font-family:'IBM Plex Mono',monospace;font-size:14px;font-weight:700;color:var(--accent);margin-bottom:4px}
    .builder-info p{font-size:13px;color:var(--text2);line-height:1.5}
    .btn-builder{font-family:'IBM Plex Mono',monospace;font-size:11px;font-weight:600;letter-spacing:0.05em;padding:10px 22px;background:linear-gradient(90deg,var(--accent) 0%,#5eeedd 45%,var(--accent) 55%,var(--accent-2) 100%);background-size:200% auto;animation:shimmer 3s linear infinite;color:#0d1f1e;border:none;border-radius:6px;cursor:pointer;text-decoration:none;transition:transform .2s,box-shadow .2s;white-space:nowrap;box-shadow:0 0 14px rgba(45,212,191,0.35);display:inline-block}
    .btn-builder:hover{background:var(--accent);opacity:0.9;transform:translateY(-1px);box-shadow:0 0 22px rgba(45,212,191,0.55)}.btn-builder:active{transform:scale(0.96)}

    .section-title{font-family:'IBM Plex Mono',monospace;font-size:10px;letter-spacing:2px;color:var(--text3);margin-bottom:14px;display:block}
    .quick-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:24px}
    .quick-card{background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:18px;cursor:pointer;transition:transform .18s,box-shadow .18s,border-color .18s;text-decoration:none;display:block}
    .quick-card:hover{border-color:var(--accent-b);transform:translateY(-4px);box-shadow:0 8px 24px rgba(0,0,0,0.25),0 0 16px rgba(45,212,191,0.08)}
    .quick-icon{font-size:20px;margin-bottom:8px;display:block}
    .quick-label{font-family:'IBM Plex Mono',monospace;font-size:11px;font-weight:600;color:var(--text);display:block;margin-bottom:2px}
    .quick-desc{font-size:11px;color:var(--text3);line-height:1.4}

    .analytics-section{margin-top:20px}
    .analytics-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:16px}
    .analytics-card{background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:16px}
    .analytics-label{font-family:'IBM Plex Mono',monospace;font-size:9px;letter-spacing:2px;color:var(--text3);margin-bottom:10px}
    .analytics-bar-row{display:flex;align-items:center;gap:8px;margin-bottom:8px}
    .analytics-bar-label{font-size:11px;color:var(--text2);width:100px;flex-shrink:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
    .analytics-bar-track{flex:1;height:6px;background:var(--bg3);border-radius:3px;overflow:hidden}
    .analytics-bar-fill{height:100%;background:var(--accent);border-radius:3px;transition:width .6s}
    .analytics-bar-num{font-family:'IBM Plex Mono',monospace;font-size:10px;color:var(--text3);width:24px;text-align:right;flex-shrink:0}
    .analytics-stat{text-align:center;padding:8px}
    .analytics-stat-num{font-family:'IBM Plex Mono',monospace;font-size:22px;font-weight:900;color:var(--accent)}
    .analytics-stat-label{font-size:11px;color:var(--text3);margin-top:2px}
    .quick-wins{background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:16px 20px;margin-bottom:16px;transition:all .25s ease}
    .quick-wins.qw-collapsed{padding:12px 20px;cursor:pointer}
    .quick-wins.qw-collapsed:hover{border-color:var(--accent-b)}
    .quick-wins.qw-collapsed .quick-wins-header{margin-bottom:0}
    .quick-wins.qw-collapsed .quick-win-item{display:none}
    .quick-wins-expand-hint{display:none;font-family:'IBM Plex Mono',monospace;font-size:9px;letter-spacing:1.5px;color:var(--text3);margin-left:auto;flex-shrink:0}
    .quick-wins.qw-collapsed .quick-wins-expand-hint{display:block}
    .quick-wins-header{display:flex;align-items:center;gap:16px;margin-bottom:14px}
    .quick-wins-ring{flex-shrink:0}
    .quick-wins-ring-track{fill:none;stroke:#3a3a4c;stroke-width:3}
    .quick-wins-ring-fill{fill:none;stroke:#2dd4bf;stroke-width:3;stroke-linecap:round;transform:rotate(-90deg);transform-origin:center;transition:stroke-dashoffset .6s ease,stroke .4s ease}
    .quick-wins-ring-text{font-family:'IBM Plex Mono',monospace;font-size:8px;font-weight:700;fill:#2dd4bf;text-anchor:middle;dominant-baseline:middle;transition:fill .4s ease}
    .quick-wins-title-wrap{}
    .quick-wins-title{font-family:'IBM Plex Mono',monospace;font-size:9px;letter-spacing:2px;color:var(--accent);margin-bottom:3px}
    .quick-wins-subtitle{font-size:12px;color:var(--text2);line-height:1.4}
    /* Next best action strip */
    .nba-strip{background:var(--accent-bg);border:1px solid var(--accent-b);border-radius:8px;padding:16px 20px;margin-bottom:20px;display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap}
    .nba-text{font-family:'IBM Plex Mono',monospace;font-size:12px;font-weight:700;color:var(--text)}
    .nba-sub{font-size:11px;color:var(--text3);margin-top:3px}
    .nba-btn{font-family:'IBM Plex Mono',monospace;font-size:11px;font-weight:700;letter-spacing:.5px;padding:9px 20px;background:var(--accent);color:var(--bg);border:none;border-radius:6px;cursor:pointer;white-space:nowrap;transition:all .15s;text-decoration:none}
    .nba-btn:hover{opacity:.88;transform:translateY(-1px)}
    /* Estimator collapsed */
    .estimator-collapsed{cursor:pointer;user-select:none}
    .estimator-collapsed:hover .estimator-title{color:var(--text2)}
    .quick-win-item{display:flex;align-items:flex-start;gap:10px;padding:8px 0;border-bottom:1px solid var(--border)}
    .quick-win-item:last-child{border-bottom:none}
    .quick-win-check{width:18px;height:18px;border-radius:50%;border:1.5px solid var(--border);display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:1px;font-size:10px;cursor:pointer;transition:all .2s}
    .quick-win-check.done{background:var(--accent);border-color:var(--accent);color:var(--bg)}
    .quick-win-text{font-size:12px;color:var(--text2);line-height:1.5}
    .quick-win-text.done{text-decoration:line-through;color:var(--text3)}
    .quick-win-link{color:var(--accent);text-decoration:none;font-weight:700}
    .estimator-card{background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:16px 20px;margin-bottom:16px}
    .estimator-title{font-family:'IBM Plex Mono',monospace;font-size:9px;letter-spacing:2px;color:var(--text3);margin-bottom:12px}
    .estimator-row{display:flex;align-items:center;gap:12px;margin-bottom:10px;flex-wrap:wrap}
    .estimator-label{font-size:12px;color:var(--text2);min-width:140px}
    .estimator-input{background:var(--bg2);border:1px solid var(--border);border-radius:2px;padding:6px 10px;font-family:'IBM Plex Mono',monospace;font-size:12px;color:var(--text);width:80px;outline:none}
    .estimator-input:focus{border-color:var(--accent-b)}
    .estimator-result{background:var(--accent-bg);border:1px solid var(--accent-b);border-radius:2px;padding:12px 16px;display:flex;justify-content:space-between;align-items:center;margin-top:8px}
    .estimator-result-num{font-family:'IBM Plex Mono',monospace;font-size:22px;font-weight:900;color:var(--accent)}
    .estimator-result-label{font-size:11px;color:var(--text3)}
    .activity-card{background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:16px 20px;margin-bottom:16px}
    .activity-title{font-family:'IBM Plex Mono',monospace;font-size:9px;letter-spacing:2px;color:var(--text3);margin-bottom:12px}
    .activity-item{display:flex;align-items:center;gap:12px;padding:8px 0;border-bottom:1px solid var(--border)}
    .activity-item:last-child{border-bottom:none}
    .activity-dot{width:8px;height:8px;border-radius:50%;background:var(--accent);flex-shrink:0}
    .activity-text{font-size:12px;color:var(--text);flex:1}
    .activity-date{font-family:'IBM Plex Mono',monospace;font-size:10px;color:var(--text3)}
    .exports-card{background:var(--surface);border:1px solid var(--border);border-radius:2px;overflow:hidden;transition:all var(--tr)}
    .upgrade-gate{position:relative;border-radius:8px;overflow:hidden}
    .upgrade-gate-blur{filter:blur(3px);pointer-events:none;user-select:none;opacity:0.4}
    .upgrade-gate-overlay{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;background:rgba(20,20,24,0.75);backdrop-filter:blur(2px);z-index:10;text-align:center;padding:24px;gap:12px}
    .upgrade-gate-icon{font-size:24px}
    .upgrade-gate-title{font-family:'IBM Plex Mono',monospace;font-size:12px;font-weight:700;color:var(--text)}
    .upgrade-gate-sub{font-size:11px;color:var(--text3);max-width:260px;line-height:1.5}
    .upgrade-gate-btn{font-family:'IBM Plex Mono',monospace;font-size:10px;font-weight:700;letter-spacing:.5px;padding:8px 20px;background:var(--accent);color:var(--bg);border:none;border-radius:6px;cursor:pointer;text-decoration:none;transition:all .15s}
    .upgrade-gate-btn:hover{opacity:.88;transform:translateY(-1px)}
    .export-header{display:grid;grid-template-columns:2fr 1fr 1fr 120px 130px;padding:12px 20px;background:var(--bg3);border-bottom:1px solid var(--border);font-family:'IBM Plex Mono',monospace;font-size:9px;letter-spacing:1.5px;color:var(--text3)}
    .export-row{display:grid;grid-template-columns:2fr 1fr 1fr 120px 130px;padding:14px 20px;border-bottom:1px solid var(--border);align-items:center;transition:background .15s}
    .export-row:last-child{border-bottom:none}
    .export-row:hover{background:var(--bg2)}
    .export-name{font-size:13px;font-weight:600;color:var(--text)}
    .export-niche{font-family:'IBM Plex Mono',monospace;font-size:10px;color:var(--text3);margin-top:2px}
    .export-date{font-family:'IBM Plex Mono',monospace;font-size:11px;color:var(--text2)}
    .export-status{font-family:'IBM Plex Mono',monospace;font-size:10px;letter-spacing:.5px}
    .status-exported{color:var(--accent)}
    .status-draft{color:var(--warm)}

    .empty{text-align:center;padding:40px 20px}
    .empty-icon{font-size:32px;margin-bottom:12px;display:block;opacity:0.5}
    .empty-text{font-size:13px;color:var(--text3);margin-bottom:16px}
    .empty-btn{font-family:'IBM Plex Mono',monospace;font-size:11px;letter-spacing:1px;padding:10px 20px;background:var(--accent);color:var(--bg);border:none;border-radius:2px;cursor:pointer;font-weight:700;text-decoration:none;transition:all .2s;display:inline-block}
    .empty-btn:hover{opacity:0.85}

    .page-loading{display:flex;align-items:center;justify-content:center;min-height:60vh;flex-direction:column;gap:12px}
    .page-loading-text{font-family:'IBM Plex Mono',monospace;font-size:11px;color:var(--text3);letter-spacing:1px}
    .dots{display:flex;gap:4px}.dots span{width:6px;height:6px;background:var(--accent);border-radius:50%;animation:pulse 1.2s infinite;opacity:0.3}
    .dots span:nth-child(2){animation-delay:0.2s}.dots span:nth-child(3){animation-delay:0.4s}
    @keyframes pulse{0%,100%{opacity:.3}50%{opacity:1}}

    .dash-footer{margin-top:32px;text-align:center}

    /* Prompt Generator */
    .gen-card{background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:28px;margin-bottom:24px;transition:all var(--tr)}
    .gen-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px;flex-wrap:wrap;gap:8px}
    .gen-title{font-family:'IBM Plex Mono',monospace;font-size:14px;font-weight:700;color:var(--accent)}
    .gen-badge{font-family:'IBM Plex Mono',monospace;font-size:8px;letter-spacing:1px;padding:3px 8px;background:var(--warm-bg);color:var(--warm);border:1px solid var(--warm-b);border-radius:1px}
    .gen-form{display:flex;gap:8px;margin-bottom:16px;flex-wrap:wrap}
    .gen-input{flex:1;min-width:200px;padding:10px 14px;background:var(--bg);border:1px solid var(--border2);border-radius:2px;color:var(--text);font-family:'IBM Plex Mono',monospace;font-size:13px;outline:none}
    .gen-input:focus{border-color:var(--accent)}
    .gen-select{padding:10px 14px;background:var(--bg);border:1px solid var(--border2);border-radius:2px;color:var(--text);font-family:'IBM Plex Mono',monospace;font-size:12px;outline:none;cursor:pointer;min-width:120px}
    .gen-select:focus{border-color:var(--accent)}
    .gen-btn{padding:10px 20px;background:var(--accent);color:var(--bg);border:none;border-radius:2px;font-family:'IBM Plex Mono',monospace;font-size:11px;font-weight:700;letter-spacing:1px;cursor:pointer;white-space:nowrap;transition:all .2s}
    .gen-btn:hover{opacity:0.9;transform:translateY(-1px);box-shadow:0 0 22px rgba(45,212,191,0.55)}
    .gen-btn:disabled{opacity:0.5;cursor:not-allowed}
    .gen-advanced-toggle{font-family:'IBM Plex Mono',monospace;font-size:10px;letter-spacing:0.5px;color:var(--text3);background:none;border:none;cursor:pointer;padding:6px 0;margin-bottom:4px;transition:color .15s;display:flex;align-items:center;gap:5px}
    .gen-advanced-toggle:hover{color:var(--accent)}
    .gen-advanced-toggle.open{color:var(--accent)}
    .gen-advanced{background:var(--bg);border:1px solid var(--border);border-radius:6px;padding:14px;margin-bottom:10px;animation:genAdvIn .2s ease}
    @keyframes genAdvIn{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:translateY(0)}}
    .gen-adv-row{display:flex;gap:10px;margin-bottom:10px;flex-wrap:wrap}
    .gen-adv-row:last-child{margin-bottom:0}
    .gen-adv-field{flex:1;display:flex;flex-direction:column;gap:4px}
    .gen-adv-label{font-family:'IBM Plex Mono',monospace;font-size:8px;letter-spacing:1.5px;color:var(--text3);font-weight:600}
    .gen-adv-select{min-width:0;font-size:11px;padding:8px 10px}
    .gen-adv-input{font-size:11px;padding:8px 10px}
    @media(max-width:640px){.gen-adv-row{flex-direction:column}.gen-adv-field{max-width:none !important}}
    .gen-status{font-family:'IBM Plex Mono',monospace;font-size:10px;color:var(--text3);margin-bottom:12px}
    .gen-results{display:flex;flex-direction:column;gap:8px}
    .gen-prompt{background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:16px;transition:all .2s}
    .gen-prompt:hover{border-color:var(--accent-b)}
    .gen-prompt-num{font-family:'IBM Plex Mono',monospace;font-size:9px;color:var(--muted);margin-bottom:4px}
    .gen-prompt-title{font-size:13px;font-weight:700;color:var(--text);margin-bottom:6px}
    .gen-prompt-body{font-family:'IBM Plex Mono',monospace;font-size:11px;color:var(--text2);line-height:1.6;margin-bottom:8px;white-space:pre-wrap}
    .gen-prompt-tip{font-size:10px;color:var(--warm);padding:8px 10px;background:var(--warm-bg);border-left:2px solid var(--warm);border-radius:0 2px 2px 0;margin-bottom:8px}
    .gen-prompt-actions{display:flex;gap:6px}
    .gen-copy{padding:5px 12px;background:var(--accent-bg);border:1px solid var(--accent-b);color:var(--accent);font-family:'IBM Plex Mono',monospace;font-size:9px;font-weight:700;border-radius:6px;cursor:pointer;transition:all .2s}
    .gen-copy:hover{background:var(--accent);color:#0d1f1e}
    .gen-export{padding:5px 12px;background:var(--bg3);border:1px solid var(--border2);color:var(--text3);font-family:'IBM Plex Mono',monospace;font-size:9px;font-weight:700;border-radius:6px;cursor:pointer;transition:all .2s}
    .gen-export:hover{border-color:var(--accent);color:var(--accent)}
    /* ── Quality Summary Panel ── */
    .gen-quality-summary{display:flex;align-items:center;justify-content:space-between;gap:16px;background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:16px;margin-bottom:12px}
    .gen-qs-left{display:flex;align-items:center;gap:14px}
    .gen-qs-score-wrap{text-align:center;min-width:52px}
    .gen-qs-score{font-family:'IBM Plex Mono',monospace;font-size:24px;font-weight:900;line-height:1}
    .gen-qs-score.high{color:var(--accent)}
    .gen-qs-score.mid{color:var(--warm)}
    .gen-qs-score.low{color:#ff5f57}
    .gen-qs-score-label{font-family:'IBM Plex Mono',monospace;font-size:8px;letter-spacing:1.5px;color:var(--text3);margin-top:2px}
    .gen-qs-title{font-family:'IBM Plex Mono',monospace;font-size:11px;font-weight:700;color:var(--text);letter-spacing:0.5px}
    .gen-qs-sub{font-size:11px;color:var(--text3);margin-top:2px}
    .gen-qs-fix-btn{font-family:'IBM Plex Mono',monospace;font-size:10px;font-weight:700;letter-spacing:0.5px;padding:8px 16px;background:rgba(251,191,36,0.1);border:1px solid rgba(251,191,36,0.3);border-radius:6px;color:var(--warm);cursor:pointer;transition:all .2s;white-space:nowrap}
    .gen-qs-fix-btn:hover{background:rgba(251,191,36,0.2);border-color:rgba(251,191,36,0.5)}
    .gen-prompt-score{font-family:'IBM Plex Mono',monospace;font-size:10px;font-weight:600;letter-spacing:0.5px}
    .gen-prompt-weak{border-color:rgba(255,95,87,0.3);background:rgba(255,95,87,0.02)}
    @media(max-width:640px){.gen-quality-summary{flex-direction:column;align-items:flex-start}}
    /* ── Presets ── */
    .gen-presets-wrap{margin-bottom:14px}
    .gen-presets-label{font-family:'IBM Plex Mono',monospace;font-size:8px;letter-spacing:2px;color:var(--text3);margin-bottom:8px}
    .gen-presets{display:flex;gap:8px;overflow-x:auto;padding-bottom:6px;scrollbar-width:thin;scrollbar-color:var(--border) transparent}
    .gen-presets::-webkit-scrollbar{height:4px}
    .gen-presets::-webkit-scrollbar-track{background:transparent}
    .gen-presets::-webkit-scrollbar-thumb{background:var(--border);border-radius:2px}
    .gen-preset{flex-shrink:0;display:flex;flex-direction:column;gap:3px;padding:10px 14px;background:var(--bg);border:1px solid var(--border);border-radius:6px;cursor:pointer;transition:all .2s;text-align:left;min-width:150px}
    .gen-preset:hover{border-color:var(--accent-b);background:var(--accent-bg);transform:translateY(-1px)}
    .gen-preset-icon{font-size:16px}
    .gen-preset-name{font-family:'IBM Plex Mono',monospace;font-size:11px;font-weight:700;color:var(--text);white-space:nowrap}
    .gen-preset-meta{font-family:'IBM Plex Mono',monospace;font-size:8px;color:var(--text3);letter-spacing:0.5px;white-space:nowrap}
    .dash-footer p{font-family:'IBM Plex Mono',monospace;font-size:10px;color:var(--text3)}
    .dash-footer a{color:var(--accent);text-decoration:underline;text-underline-offset:3px}

    *:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:2px}
    @media(max-width:700px){
      nav{padding:0 16px}.dash{padding:24px 16px 60px}.dash-grid{grid-template-columns:1fr}
      .plan-card{flex-direction:column;align-items:flex-start}.plan-actions{width:100%}.plan-actions .btn-sm{flex:1;text-align:center}
      .builder-card{flex-direction:column;align-items:flex-start}.btn-builder{width:100%;text-align:center}
      .quick-grid{grid-template-columns:1fr}
      .export-header,.export-row{grid-template-columns:2fr 1fr 80px}.export-header>:nth-child(2),.export-row>:nth-child(2){display:none}.export-header>:nth-child(4),.export-row>:nth-child(4){display:none}
      .nav-user{display:none}
    }

    /* ── AI GENERATOR UPGRADES ── */
    .gen-cat-tabs{display:flex;gap:4px;margin-bottom:8px;flex-wrap:wrap}
    .gen-cat-tab{font-family:'IBM Plex Mono',monospace;font-size:9px;font-weight:700;letter-spacing:1px;padding:5px 12px;border-radius:20px;border:1px solid var(--border);background:transparent;color:var(--text3);cursor:pointer;transition:all .15s}
    .gen-cat-tab:hover{border-color:rgba(45,212,191,0.3);color:var(--accent)}
    .gen-cat-tab.active{background:var(--accent-bg);border-color:var(--accent-b);color:var(--accent)}
    .gen-layout{display:grid;grid-template-columns:200px 1fr;gap:0;border:1px solid var(--border);border-radius:8px;overflow:hidden;margin-bottom:16px}
    .gen-model-panel{background:var(--bg2);border-right:1px solid var(--border);overflow-y:auto;max-height:420px}
    .gen-model-panel::-webkit-scrollbar{width:3px}
    .gen-model-panel::-webkit-scrollbar-thumb{background:var(--border2)}
    .gen-model-group-label{font-family:'IBM Plex Mono',monospace;font-size:8px;letter-spacing:2px;color:var(--text3);padding:10px 12px 4px;display:flex;align-items:center;gap:6px}
    .gen-model-group-label::after{content:'';flex:1;height:1px;background:var(--border)}
    .gen-model-btn{width:100%;background:none;border:none;cursor:pointer;padding:8px 12px;display:flex;align-items:center;gap:8px;transition:background .12s;text-align:left}
    .gen-model-btn:hover{background:var(--bg3)}
    .gen-model-btn.active{background:var(--accent-bg);border-right:2px solid var(--accent)}
    .gen-model-icon{width:24px;height:24px;border-radius:2px;display:flex;align-items:center;justify-content:center;font-size:9px;font-family:'IBM Plex Mono',monospace;font-weight:900;flex-shrink:0}
    .gen-mi-text{background:rgba(0,255,209,.1);color:var(--accent)}
    .gen-mi-image{background:rgba(167,139,250,.1);color:var(--cool)}
    .gen-mi-video{background:rgba(255,95,87,.1);color:#FF5F57}
    .gen-mi-audio{background:rgba(255,190,46,.1);color:var(--warm)}
    .gen-model-name{font-size:11px;font-weight:600;color:var(--text);line-height:1.2}
    .gen-model-sub{font-family:'IBM Plex Mono',monospace;font-size:8px;color:var(--text3)}
    .gen-main-panel{display:flex;flex-direction:column;min-width:0}
    .gen-active-model{padding:8px 14px;background:var(--bg2);border-bottom:1px solid var(--border);display:flex;align-items:center;gap:8px}
    .gen-active-icon{width:20px;height:20px;border-radius:2px;display:flex;align-items:center;justify-content:center;font-size:8px;font-family:'IBM Plex Mono',monospace;font-weight:900}
    .gen-active-label{font-family:'IBM Plex Mono',monospace;font-size:9px;font-weight:700;color:var(--text)}
    .gen-active-sub{font-family:'IBM Plex Mono',monospace;font-size:8px;color:var(--text3);margin-left:2px}
    .gen-inner{padding:14px}
    /* History */
    .gen-history-wrap{margin-top:24px;background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:20px 24px}
    .gen-history-title{font-family:'IBM Plex Mono',monospace;font-size:9px;letter-spacing:2px;color:var(--text3);margin-bottom:8px;display:flex;align-items:center;justify-content:space-between}
    .gen-history-list{display:flex;flex-direction:column;gap:6px;max-height:260px;overflow-y:auto}
    .gen-history-list::-webkit-scrollbar{width:3px}
    .gen-history-list::-webkit-scrollbar-thumb{background:var(--border2)}
    .gen-history-item{padding:10px 12px;background:var(--surface);border:1px solid var(--border);border-radius:2px;cursor:pointer;transition:all .12s}
    .gen-history-item:hover{border-color:var(--accent-b);background:var(--bg2)}
    .gen-history-item.active{border-color:var(--accent-b);background:var(--accent-bg)}
    .gen-hi-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:4px}
    .gen-hi-model{font-family:'IBM Plex Mono',monospace;font-size:8px;font-weight:700;letter-spacing:.5px;padding:2px 5px;border-radius:1px}
    .gen-hi-date{font-family:'IBM Plex Mono',monospace;font-size:8px;color:var(--text3)}
    .gen-hi-input{font-size:11px;color:var(--text2);line-height:1.4;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}
    .gen-hi-preview{font-family:'IBM Plex Mono',monospace;font-size:9px;color:var(--text3);margin-top:3px;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden;opacity:.65}
    .gen-history-empty{padding:20px;text-align:center;font-family:'IBM Plex Mono',monospace;font-size:9px;color:var(--text3)}
    .gen-export-btn{font-family:'IBM Plex Mono',monospace;font-size:8px;letter-spacing:1px;font-weight:700;padding:3px 8px;background:transparent;border:1px solid var(--border2);border-radius:2px;color:var(--text3);cursor:pointer;transition:all .15s;position:relative}
    .gen-export-btn:hover{border-color:var(--accent-b);color:var(--accent)}
    .gen-export-menu{position:absolute;top:calc(100% + 4px);right:0;background:var(--bg2);border:1px solid var(--border2);border-radius:4px;overflow:hidden;z-index:50;min-width:120px;display:none}
    .gen-export-menu.open{display:block}
    .gen-export-option{display:block;width:100%;padding:8px 12px;font-family:'IBM Plex Mono',monospace;font-size:9px;letter-spacing:1px;color:var(--text2);background:transparent;border:none;cursor:pointer;text-align:left;transition:background .12s}
    .gen-export-option:hover{background:var(--bg3);color:var(--accent)}

    /* ── LISTING MODAL ── */
    .listing-modal-bg{position:fixed;inset:0;background:rgba(10,10,14,0.85);z-index:2000;display:flex;align-items:center;justify-content:center;padding:20px}
    .listing-modal{background:var(--bg2);border:1px solid var(--border2);border-radius:8px;width:100%;max-width:680px;max-height:90vh;overflow-y:auto;position:relative}
    .listing-modal::-webkit-scrollbar{width:4px}
    .listing-modal::-webkit-scrollbar-thumb{background:var(--border2)}
    .listing-modal-header{display:flex;justify-content:space-between;align-items:center;padding:20px 24px 16px;border-bottom:1px solid var(--border)}
    .listing-modal-title{font-family:'IBM Plex Mono',monospace;font-size:13px;font-weight:700;color:var(--accent)}
    .listing-modal-close{background:none;border:none;color:var(--text3);font-size:18px;cursor:pointer;padding:4px;transition:color .2s}
    .listing-modal-close:hover{color:var(--text)}
    .listing-modal-body{padding:20px 24px}
    .listing-field{margin-bottom:18px}
    .listing-field-label{font-family:'IBM Plex Mono',monospace;font-size:9px;letter-spacing:2px;color:var(--text3);margin-bottom:6px;display:flex;justify-content:space-between;align-items:center}
    .listing-field-copy{font-family:'IBM Plex Mono',monospace;font-size:9px;padding:3px 10px;background:transparent;border:1px solid var(--border2);border-radius:2px;color:var(--accent);cursor:pointer;transition:all .15s}
    .listing-field-copy:hover{background:var(--accent-bg)}
    .listing-field-copy.done{color:var(--accent);border-color:var(--accent)}
    .listing-field-value{background:var(--bg);border:1px solid var(--border);border-radius:4px;padding:12px 14px;font-size:13px;color:var(--text);line-height:1.6;white-space:pre-wrap;word-break:break-word}
    .listing-tags{display:flex;flex-wrap:wrap;gap:6px}
    .listing-tag{font-family:'IBM Plex Mono',monospace;font-size:10px;padding:4px 10px;background:var(--accent-bg);border:1px solid var(--accent-b);border-radius:20px;color:var(--accent);cursor:pointer;transition:all .15s}
    .listing-tag:hover{background:var(--accent);color:#0d1f1e}
    .listing-price-row{display:flex;gap:12px}
    .listing-price-box{flex:1;background:var(--bg);border:1px solid var(--border);border-radius:4px;padding:12px 14px;text-align:center}
    .listing-price-num{font-family:'IBM Plex Mono',monospace;font-size:26px;font-weight:900;color:var(--accent)}
    .listing-price-lbl{font-family:'IBM Plex Mono',monospace;font-size:9px;color:var(--text3);margin-top:2px;letter-spacing:1px}
    .listing-tip{background:rgba(251,191,36,0.06);border:1px solid rgba(251,191,36,0.2);border-radius:4px;padding:12px 14px}
    .listing-tip-label{font-family:'IBM Plex Mono',monospace;font-size:9px;color:var(--warm);letter-spacing:1.5px;margin-bottom:6px}
    .listing-tip-text{font-size:12px;color:var(--text2);line-height:1.6}
    .listing-modal-footer{display:flex;gap:10px;padding:16px 24px;border-top:1px solid var(--border);flex-wrap:wrap}
    .listing-cta-btn{font-family:'IBM Plex Mono',monospace;font-size:11px;font-weight:700;letter-spacing:.5px;padding:10px 20px;background:var(--accent);color:#0d1f1e;border:none;border-radius:6px;cursor:pointer;text-decoration:none;transition:all .15s;display:inline-block}
    .listing-cta-btn:hover{opacity:.88;transform:translateY(-1px)}
    .listing-copy-all{font-family:'IBM Plex Mono',monospace;font-size:11px;font-weight:700;padding:10px 20px;background:transparent;border:1px solid var(--border2);border-radius:6px;color:var(--text2);cursor:pointer;transition:all .15s}
    .listing-copy-all:hover{border-color:var(--accent);color:var(--accent)}
    .listing-generating{text-align:center;padding:48px 24px}
    .listing-gen-title{font-family:'IBM Plex Mono',monospace;font-size:13px;color:var(--accent);margin-bottom:8px}
    .listing-gen-sub{font-size:12px;color:var(--text3)}
    #toast{position:fixed;bottom:24px;right:24px;z-index:999;display:flex;flex-direction:column;gap:8px;pointer-events:none}
    .toast-item{font-family:'IBM Plex Mono',monospace;font-size:11px;padding:10px 16px;border-radius:8px;border:1px solid;display:flex;align-items:center;gap:8px;pointer-events:auto;animation:toastIn .25s ease both;max-width:300px;box-shadow:0 4px 20px rgba(0,0,0,0.3)}
    .toast-item.out{animation:toastOut .25s ease both}
    .toast-success{background:rgba(45,212,191,0.12);border-color:rgba(45,212,191,0.3);color:#2dd4bf}
    .toast-error{background:rgba(251,113,133,0.1);border-color:rgba(251,113,133,0.3);color:#fb7185}
    .toast-info{background:rgba(167,139,250,0.1);border-color:rgba(167,139,250,0.3);color:#a78bfa}
    @keyframes toastIn{from{opacity:0;transform:translateX(20px)}to{opacity:1;transform:translateX(0)}}
    @keyframes toastOut{from{opacity:1;transform:translateX(0)}to{opacity:0;transform:translateX(20px)}}
    @keyframes shimmer{0%{background-position:200% center}100%{background-position:-200% center}}
  


    .wizard-wrap{margin-top:20px}
    .wizard-card{background:var(--surface);border:1px solid var(--border);border-radius:2px;padding:20px;margin-bottom:12px}
    .wizard-step{display:none}
    .wizard-step.active{display:block}
    .wizard-q{font-family:'IBM Plex Mono',monospace;font-size:13px;font-weight:700;margin-bottom:14px;color:var(--text)}
    .wizard-options{display:grid;grid-template-columns:1fr 1fr;gap:8px}
    .wizard-opt{padding:10px 14px;background:var(--bg2);border:1px solid var(--border);border-radius:2px;cursor:pointer;font-size:12px;color:var(--text2);transition:all .2s;text-align:left}
    .wizard-opt:hover{border-color:var(--accent-b);color:var(--accent);background:var(--accent-bg)}
    .wizard-opt.selected{border-color:var(--accent-b);color:var(--accent);background:var(--accent-bg)}
    .wizard-progress{display:flex;gap:6px;margin-bottom:16px}
    .wizard-dot{width:8px;height:8px;border-radius:50%;background:var(--border);transition:background .2s}
    .wizard-dot.done{background:var(--accent)}
    .wizard-rec-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px;margin-top:12px}
    .wizard-rec-card{background:var(--bg2);border:1px solid var(--accent-b);border-radius:2px;padding:14px;text-align:center}
    .wizard-rec-emoji{font-size:24px;margin-bottom:6px}
    .wizard-rec-name{font-family:'IBM Plex Mono',monospace;font-size:10px;font-weight:700;color:var(--text);margin-bottom:4px}
    .wizard-rec-price{font-size:10px;color:var(--accent)}
    .wizard-rec-btn{margin-top:10px;font-family:'IBM Plex Mono',monospace;font-size:9px;font-weight:700;padding:6px 12px;background:var(--accent);color:var(--bg);border:none;border-radius:2px;cursor:pointer;width:100%}
    .wizard-rec-btn:hover{opacity:0.85}

    /* ── COMPETITOR GAP FINDER ── */
    .gap-card{background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:28px;margin-bottom:24px;transition:all var(--tr)}
    .gap-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px;flex-wrap:wrap;gap:8px}
    .gap-title{font-family:'IBM Plex Mono',monospace;font-size:14px;font-weight:700;color:var(--warm)}
    .gap-badge{font-family:'IBM Plex Mono',monospace;font-size:8px;letter-spacing:1px;padding:3px 8px;background:rgba(251,191,36,0.08);color:var(--warm);border:1px solid rgba(251,191,36,0.2);border-radius:1px}
    .gap-form{display:flex;gap:8px;margin-bottom:12px;flex-wrap:wrap;align-items:flex-end}
    .gap-field{display:flex;flex-direction:column;gap:4px;flex:1;min-width:160px}
    .gap-field-label{font-family:'IBM Plex Mono',monospace;font-size:8px;letter-spacing:1.5px;color:var(--text3);font-weight:600}
    .gap-input{padding:10px 14px;background:var(--bg);border:1px solid var(--border2);border-radius:2px;color:var(--text);font-family:'IBM Plex Mono',monospace;font-size:12px;outline:none;width:100%}
    .gap-input:focus{border-color:var(--accent)}
    .gap-select{padding:10px 14px;background:var(--bg);border:1px solid var(--border2);border-radius:2px;color:var(--text);font-family:'IBM Plex Mono',monospace;font-size:12px;outline:none;cursor:pointer;width:100%}
    .gap-select:focus{border-color:var(--accent)}
    .gap-btn{padding:10px 20px;background:var(--warm);color:var(--bg);border:none;border-radius:2px;font-family:'IBM Plex Mono',monospace;font-size:11px;font-weight:700;letter-spacing:1px;cursor:pointer;white-space:nowrap;transition:all .2s;align-self:flex-end}
    .gap-btn:hover{opacity:0.9;transform:translateY(-1px);box-shadow:0 0 22px rgba(251,191,36,0.35)}
    .gap-btn:disabled{opacity:0.5;cursor:not-allowed}
    .gap-status{font-family:'IBM Plex Mono',monospace;font-size:10px;color:var(--text3);margin-bottom:12px}
    .gap-summary{background:rgba(251,191,36,0.04);border:1px solid rgba(251,191,36,0.15);border-radius:6px;padding:14px 16px;margin-bottom:16px}
    .gap-summary-label{font-family:'IBM Plex Mono',monospace;font-size:9px;letter-spacing:1.5px;color:var(--warm);margin-bottom:6px}
    .gap-summary-text{font-size:12px;color:var(--text2);line-height:1.6}
    .gap-results{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:16px}
    .gap-item{background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:16px;transition:all .2s;position:relative;overflow:hidden}
    .gap-item:hover{border-color:rgba(251,191,36,0.3);transform:translateY(-2px);box-shadow:0 6px 20px rgba(0,0,0,0.2)}
    .gap-item-rank{position:absolute;top:0;right:0;font-family:'IBM Plex Mono',monospace;font-size:8px;font-weight:900;letter-spacing:1px;padding:4px 8px;background:rgba(251,191,36,0.08);color:var(--warm);border-bottom-left-radius:6px}
    .gap-item-name{font-family:'IBM Plex Mono',monospace;font-size:12px;font-weight:700;color:var(--text);margin-bottom:6px;padding-right:40px}
    .gap-item-type{font-family:'IBM Plex Mono',monospace;font-size:8px;letter-spacing:1px;color:var(--text3);margin-bottom:8px;text-transform:uppercase}
    .gap-item-why{font-size:11px;color:var(--text2);line-height:1.5;margin-bottom:10px}
    .gap-meters{display:flex;flex-direction:column;gap:6px;margin-bottom:12px}
    .gap-meter{display:flex;align-items:center;gap:8px}
    .gap-meter-label{font-family:'IBM Plex Mono',monospace;font-size:8px;letter-spacing:1px;color:var(--text3);width:80px;flex-shrink:0}
    .gap-meter-track{flex:1;height:5px;background:var(--bg3);border-radius:3px;overflow:hidden}
    .gap-meter-fill{height:100%;border-radius:3px;transition:width .6s ease}
    .gap-meter-val{font-family:'IBM Plex Mono',monospace;font-size:9px;color:var(--text2);width:30px;text-align:right;flex-shrink:0}
    .gap-item-meta{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}
    .gap-item-price{font-family:'IBM Plex Mono',monospace;font-size:14px;font-weight:900;color:var(--accent)}
    .gap-item-prompts{font-family:'IBM Plex Mono',monospace;font-size:9px;color:var(--text3)}
    .gap-item-diff{font-size:10px;color:var(--text3);font-style:italic;margin-bottom:10px;line-height:1.4}
    .gap-item-search{font-family:'IBM Plex Mono',monospace;font-size:9px;color:var(--text3);margin-bottom:10px;padding:6px 10px;background:var(--bg2);border-radius:3px}
    .gap-item-search em{color:var(--text2);font-style:normal}
    .gap-gen-btn{width:100%;padding:8px;background:var(--accent-bg);border:1px solid var(--accent-b);color:var(--accent);font-family:'IBM Plex Mono',monospace;font-size:10px;font-weight:700;letter-spacing:0.5px;border-radius:4px;cursor:pointer;transition:all .2s}
    .gap-gen-btn:hover{background:var(--accent);color:#0d1f1e}
    .gap-avoid{margin-top:4px}
    .gap-avoid-title{font-family:'IBM Plex Mono',monospace;font-size:9px;letter-spacing:2px;color:var(--red);margin-bottom:8px}
    .gap-avoid-list{display:flex;flex-direction:column;gap:6px}
    .gap-avoid-item{display:flex;align-items:flex-start;gap:8px;padding:8px 12px;background:rgba(251,113,133,0.04);border:1px solid rgba(251,113,133,0.1);border-radius:4px}
    .gap-avoid-icon{font-size:12px;flex-shrink:0;margin-top:1px}
    .gap-avoid-text{font-size:11px;color:var(--text2);line-height:1.4}
    .gap-avoid-name{font-weight:600;color:var(--text)}
    .gap-trend{margin-top:12px;padding:12px 16px;background:rgba(167,139,250,0.04);border:1px solid rgba(167,139,250,0.15);border-radius:6px}
    .gap-trend-label{font-family:'IBM Plex Mono',monospace;font-size:9px;letter-spacing:1.5px;color:var(--cool);margin-bottom:4px}
    .gap-trend-text{font-size:12px;color:var(--text2);line-height:1.5}
    .gap-loading{text-align:center;padding:40px 20px}
    .gap-loading-icon{font-size:28px;margin-bottom:12px;animation:gapPulse 1.5s ease infinite}
    .gap-loading-text{font-family:'IBM Plex Mono',monospace;font-size:11px;color:var(--warm)}
    .gap-loading-sub{font-size:11px;color:var(--text3);margin-top:4px}
    @keyframes gapPulse{0%,100%{opacity:0.4;transform:scale(1)}50%{opacity:1;transform:scale(1.1)}}
    @media(max-width:700px){.gap-results{grid-template-columns:1fr}.gap-form{flex-direction:column}.gap-btn{width:100%}}
    /* ════════════════════════════════════════════════════════
       KOVA SIDEBAR SHELL — v3.11.0
    ════════════════════════════════════════════════════════ */
    .kova-shell{display:flex;min-height:100vh;position:relative}
    .kova-sidebar{width:200px;background:#111115;border-right:1px solid var(--border);display:flex;flex-direction:column;position:fixed;top:0;left:0;height:100vh;z-index:500;transition:transform .25s cubic-bezier(.4,0,.2,1)}
    .kova-main{flex:1;margin-left:200px;min-height:100vh;display:flex;flex-direction:column;min-width:0;padding-top:50px}
    .kova-topbar{position:fixed;top:0;left:200px;right:0;height:50px;background:rgba(17,17,21,0.97);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;padding:0 32px;z-index:100}
    .kova-topbar-title{font-family:'IBM Plex Mono',monospace;font-size:11px;letter-spacing:2px;color:var(--accent)}
    .kova-ham{display:none;background:transparent;border:1px solid var(--border);border-radius:4px;color:var(--text2);padding:5px 10px;cursor:pointer;font-size:15px;line-height:1}
    .kova-content{padding:36px 40px 80px;max-width:960px;margin:0 auto;width:100%}

    /* Sidebar internals */
    .sidebar-logo-area{height:50px;padding:0 20px;display:flex;flex-direction:column;justify-content:center;border-bottom:1px solid var(--border)}
    .sidebar-logo{font-family:'IBM Plex Mono',monospace;font-size:16px;font-weight:900;color:var(--text);text-decoration:none;letter-spacing:-0.5px;line-height:1}
    .sidebar-logo .sa{color:var(--accent)}
    .sidebar-label{font-family:'IBM Plex Mono',monospace;font-size:7px;letter-spacing:2px;color:var(--text3);margin-top:3px;line-height:1}
    .sidebar-nav{display:flex;flex-direction:column;padding:10px 0;flex-shrink:0}
    .sidebar-item{display:flex;align-items:center;gap:10px;padding:10px 18px;cursor:pointer;color:var(--text3);font-family:'IBM Plex Mono',monospace;font-size:10px;letter-spacing:.8px;transition:all .15s;border:none;background:transparent;border-left:2px solid transparent;text-decoration:none;width:100%;text-align:left}
    .sidebar-item:hover{color:var(--text2);background:rgba(255,255,255,0.03)}
    .sidebar-item.si-active{color:var(--accent)!important;background:rgba(45,212,191,0.07);border-left-color:var(--accent)}
    .sidebar-link{display:flex}
    .si-icon{font-size:13px;width:16px;text-align:center;flex-shrink:0;line-height:1}
    .si-text{flex:1}
    .si-badge{font-size:7px;letter-spacing:1px;padding:2px 5px;border-radius:3px;line-height:1.4}
    .si-teal{background:rgba(45,212,191,0.12);color:var(--accent)}
    .si-warm{background:rgba(251,191,36,0.1);color:var(--warm)}
    .sidebar-spacer{flex:1}
    .sidebar-foot{padding:14px 18px;border-top:1px solid var(--border)}
    .sidebar-plan-row{display:flex;align-items:center;gap:8px;margin-bottom:6px;flex-wrap:wrap}
    .si-plan-badge{font-family:'IBM Plex Mono',monospace;font-size:8px;letter-spacing:1px;font-weight:700;padding:2px 7px;border-radius:2px}
    .si-plan-info{font-family:'IBM Plex Mono',monospace;font-size:9px;color:var(--text3)}
    .si-email{font-family:'IBM Plex Mono',monospace;font-size:9px;color:var(--text3);margin-bottom:10px;word-break:break-all;line-height:1.4;max-width:160px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
    .si-logout{font-family:'IBM Plex Mono',monospace;font-size:9px;letter-spacing:1px;color:var(--text3);background:transparent;border:1px solid var(--border2);border-radius:3px;padding:5px 10px;cursor:pointer;transition:all .15s;width:100%;text-align:left}
    .si-logout:hover{color:var(--text);border-color:var(--text3)}

    /* Sidebar overlay (mobile backdrop) */
    .sidebar-overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,0.55);z-index:400;opacity:0;pointer-events:none;transition:opacity .25s}

    /* Panels */
    .kova-panel{display:none}
    .kova-panel.kp-active{display:block}

    /* Override old dash max-width now handled by kova-content */
    .dash{max-width:none;margin:0;padding:0}

    /* Mobile */
    @media(max-width:768px){
      .kova-sidebar{transform:translateX(-200px)}
      .kova-sidebar.sb-open{transform:translateX(0)}
      .sidebar-overlay{display:block}
      .sidebar-overlay.sb-open{opacity:1;pointer-events:auto}
      .kova-main{margin-left:0}
      .kova-ham{display:flex}
      .kova-content{padding:20px 16px 60px}
      .kova-topbar{padding:0 16px;left:0}
    }
    @media(max-width:480px){
      .dash-grid{grid-template-columns:1fr}
      .plan-card{grid-column:auto}
    }

    /* ── FIX: Override rogue nav{} rule that targets <nav class="sidebar-nav"> ── */
    .kova-sidebar nav,
    .kova-sidebar .sidebar-nav {
      position: static !important;
      top: auto !important;
      left: auto !important;
      right: auto !important;
      height: auto !important;
      z-index: auto !important;
      background: transparent !important;
      -webkit-backdrop-filter: none !important;
      backdrop-filter: none !important;
      border-bottom: none !important;
      padding: 8px 0 !important;
      display: flex !important;
      flex-direction: column !important;
      width: 100% !important;
      justify-content: flex-start !important;
      align-items: stretch !important;
    }

    /* ── Sidebar sizing improvements ── */
    .sidebar-item {
      font-size: 12px !important;
      letter-spacing: 1px !important;
      padding: 11px 18px !important;
    }
    .si-icon {
      font-size: 14px !important;
    }
    .sidebar-logo {
      font-size: 20px !important;
    }
    .sidebar-label {
      font-size: 9px !important;
    }
    .sidebar-logo-area {
      padding: 20px 20px 16px !important;
    }

    /* ── Fix active state not bleeding full-width ── */
    .sidebar-item.si-active,
    .sidebar-item:hover {
      width: 100% !important;
      box-sizing: border-box !important;
    }

    /* ── Topbar title font ── */
    .kova-topbar-title {
      font-size: 12px !important;
    }

    /* ══════════════════════════════════════════════════════════════
       POLISH PANEL — teaser (Coming Soon) — added v3.13.0 (?v=364)
       ══════════════════════════════════════════════════════════════ */
    .si-soon{background:rgba(251,191,36,0.1);color:var(--warm)}
    .polish-card{background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:40px 36px;transition:all var(--tr)}
    .polish-pill{display:inline-block;background:var(--accent-bg);color:var(--accent);border:1px solid var(--accent-b);font-family:'IBM Plex Mono',monospace;font-size:10px;font-weight:700;letter-spacing:1.5px;padding:5px 12px;border-radius:2px;margin-bottom:20px}
    .polish-title{font-family:'IBM Plex Mono',monospace;font-size:28px;font-weight:900;color:var(--text);letter-spacing:-0.5px;line-height:1.15;margin-bottom:14px}
    .polish-desc{font-family:var(--sans);font-size:14px;color:var(--text2);line-height:1.6;margin-bottom:28px;max-width:560px}
    .polish-illus-wrap{background:var(--bg2);border:1px solid var(--border);border-radius:6px;padding:28px 24px;margin-bottom:28px}
    .polish-illus-wrap svg{width:100%;height:auto;display:block;max-width:100%}
    .polish-notify-btn{font-family:'IBM Plex Mono',monospace;font-size:11px;font-weight:700;letter-spacing:1.5px;padding:12px 22px;background:var(--accent);color:#0d1f1e;border:none;border-radius:4px;cursor:pointer;transition:all .15s;display:inline-flex;align-items:center;gap:10px}
    .polish-notify-btn:hover:not(:disabled){opacity:.88;transform:translateY(-1px)}
    .polish-notify-btn:disabled{opacity:.55;cursor:wait}
    .polish-notify-btn svg{width:14px;height:14px;flex-shrink:0}
    .polish-joined-pill{display:inline-flex;align-items:center;gap:10px;background:rgba(45,212,191,0.08);color:var(--accent);border:1px solid var(--accent-b);font-family:'IBM Plex Mono',monospace;font-size:11px;font-weight:700;letter-spacing:1.5px;padding:11px 20px;border-radius:4px}
    .polish-joined-pill svg{width:14px;height:14px;flex-shrink:0}
    .polish-foot{font-family:var(--sans);font-size:12px;color:var(--text3);margin-top:14px}
    @media(max-width:640px){.polish-card{padding:28px 22px}.polish-title{font-size:22px}}

    /* ─────────── POLISH PANEL V1.0 (added ?v=365) ─────────── */
    .polish-v1-wrap{display:none}
    .polish-v1-card{background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:28px 32px;transition:all var(--tr)}
    .polish-v1-header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:6px}
    .polish-v1-title{font-family:'IBM Plex Mono',monospace;font-size:22px;font-weight:900;color:var(--text);letter-spacing:-0.5px;line-height:1.15;margin:0}
    .polish-v1-beta{font-family:'IBM Plex Mono',monospace;font-size:9px;font-weight:700;letter-spacing:1.5px;padding:4px 10px;border-radius:2px;background:var(--warm-bg);color:var(--warm);border:1px solid var(--warm-b);flex-shrink:0}
    .polish-v1-lede{font-family:var(--sans);font-size:13px;color:var(--text2);line-height:1.55;margin:0 0 22px;max-width:620px}
    .polish-v1-field-row{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:8px}
    .polish-v1-label{font-family:'IBM Plex Mono',monospace;font-size:10px;letter-spacing:2px;color:var(--text3);display:block;margin-bottom:8px}
    .polish-v1-charcount{font-family:'IBM Plex Mono',monospace;font-size:10px;color:var(--text3)}
    .polish-v1-textarea{width:100%;padding:14px 16px;background:var(--bg);border:1px solid var(--border2);border-radius:4px;color:var(--text);font-family:var(--sans);font-size:13px;line-height:1.55;resize:vertical;box-sizing:border-box;outline:none;transition:border-color .15s}
    .polish-v1-textarea:focus{border-color:var(--accent)}
    .polish-v1-textarea::placeholder{color:var(--text3)}
    /* v3.20.1 (S25, v1.3.1 Audience): single-line text input matching the     */
    /* .polish-v1-textarea aesthetic — same border, background, focus, and     */
    /* placeholder treatment — but compact single-line padding so it reads     */
    /* as a short-answer helper field rather than a long-form textarea.        */
    /* margin-bottom:10px matches the slider/textarea rhythm above the hint.   */
    .polish-v1-audience-input{width:100%;padding:10px 14px;background:var(--bg);border:1px solid var(--border2);border-radius:4px;color:var(--text);font-family:var(--sans);font-size:13px;line-height:1.4;box-sizing:border-box;outline:none;transition:border-color .15s;margin-bottom:10px}
    .polish-v1-audience-input:focus{border-color:var(--accent)}
    .polish-v1-audience-input::placeholder{color:var(--text3)}
    .polish-v1-slider{display:grid;grid-auto-flow:column;grid-auto-columns:1fr;background:var(--bg);border:1px solid var(--border2);border-radius:4px;overflow:hidden;margin-bottom:10px}
    .polish-v1-slider-opt{font-family:'IBM Plex Mono',monospace;font-size:11px;font-weight:600;letter-spacing:1px;padding:11px 8px;background:transparent;border:none;color:var(--text3);cursor:pointer;transition:all .15s;border-right:1px solid var(--border2)}
    .polish-v1-slider-opt:last-child{border-right:none}
    .polish-v1-slider-opt:hover:not(.polish-v1-slider-active){color:var(--text2);background:var(--bg3)}
    .polish-v1-slider-active{background:var(--accent-bg);color:var(--accent)}
    .polish-v1-slider-hint{font-family:var(--sans);font-size:12px;color:var(--text3);margin:0 0 24px;font-style:italic}
    .polish-v1-submit-row{display:flex;align-items:center;gap:14px;flex-wrap:wrap}
    .polish-v1-submit{padding:12px 28px;background:var(--accent);color:#0d1f1e;border:none;border-radius:4px;font-family:'IBM Plex Mono',monospace;font-size:11px;font-weight:700;letter-spacing:1.5px;cursor:pointer;white-space:nowrap;transition:all .2s}
    .polish-v1-submit:hover:not(:disabled){opacity:.9;transform:translateY(-1px);box-shadow:0 0 18px rgba(45,212,191,0.45)}
    .polish-v1-submit:disabled{opacity:.55;cursor:wait;transform:none;box-shadow:none}
    .polish-v1-status{font-family:'IBM Plex Mono',monospace;font-size:10px;color:var(--text3)}
    .polish-v1-lang-hint{font-family:'IBM Plex Mono',monospace;font-size:10px;color:var(--text3);letter-spacing:.05em;white-space:nowrap}
    .polish-v1-error{margin-top:14px;padding:12px 14px;background:rgba(239,68,68,0.08);border:1px solid rgba(239,68,68,0.25);border-radius:4px;font-family:var(--sans);font-size:13px;color:#f87171;line-height:1.45}
    /* v2.3.3 (S33, Fork W.1): polish quota counter + rate-limit soft-block. */
    .polish-v1-counter{margin-top:10px;font-family:'IBM Plex Mono',monospace;font-size:10px;letter-spacing:1.2px;color:var(--text3);text-transform:uppercase}
    .polish-v1-counter-blocked{color:#f87171}
    .polish-v1-ratelimit-block{margin-top:14px;padding:18px 22px;background:rgba(239,68,68,0.06);border:1px solid rgba(239,68,68,0.25);border-radius:6px;font-family:var(--sans);line-height:1.5}
    .polish-v1-ratelimit-title{font-family:'IBM Plex Mono',monospace;font-size:12px;letter-spacing:1.4px;color:#f87171;font-weight:700;margin-bottom:6px;text-transform:uppercase}
    .polish-v1-ratelimit-meta{font-size:13px;color:var(--text2);margin-bottom:14px}
    .polish-v1-ratelimit-upgrade-btn{display:inline-block;padding:10px 20px;background:var(--accent);color:#0d1f1e;border:none;border-radius:4px;font-family:'IBM Plex Mono',monospace;font-size:11px;font-weight:700;letter-spacing:1.3px;text-decoration:none;cursor:pointer;transition:all .2s}
    .polish-v1-ratelimit-upgrade-btn:hover{opacity:.9;transform:translateY(-1px);box-shadow:0 0 18px rgba(45,212,191,0.45)}
    .polish-v1-ratelimit-maxnote{font-family:'IBM Plex Mono',monospace;font-size:11px;letter-spacing:.6px;color:var(--text3);margin-top:4px}
    .polish-v1-result{margin-top:18px;background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:26px 32px}
    .polish-v1-scores{display:flex;align-items:center;gap:14px;margin-bottom:24px;flex-wrap:wrap}
    .polish-v1-score-box{background:var(--bg);border:1px solid var(--border);border-radius:4px;padding:12px 18px;min-width:90px;text-align:center}
    .polish-v1-score-after{background:var(--accent-bg);border-color:var(--accent-b)}
    .polish-v1-score-label{display:block;font-family:'IBM Plex Mono',monospace;font-size:9px;letter-spacing:2px;color:var(--text3);margin-bottom:4px}
    .polish-v1-score-after .polish-v1-score-label{color:var(--accent)}
    .polish-v1-score-num{display:block;font-family:'IBM Plex Mono',monospace;font-size:28px;font-weight:900;color:var(--text);line-height:1}
    .polish-v1-score-after .polish-v1-score-num{color:var(--accent)}
    .polish-v1-arrow{color:var(--text3);width:40px;display:flex;align-items:center;justify-content:center}
    .polish-v1-arrow svg{width:40px;height:12px;display:block}
    .polish-v1-score-delta{font-family:'IBM Plex Mono',monospace;font-size:11px;font-weight:700;letter-spacing:1px;padding:4px 10px;border-radius:3px;background:var(--bg3);color:var(--text3)}
    .polish-v1-delta-pos{background:var(--accent-bg);color:var(--accent);border:1px solid var(--accent-b)}
    .polish-v1-delta-neu{background:var(--bg3);color:var(--text2);border:1px solid var(--border)}
    .polish-v1-delta-neg{background:rgba(239,68,68,0.08);color:#f87171;border:1px solid rgba(239,68,68,0.2)}
    .polish-v1-output-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:10px}
    .polish-v1-output-label{font-family:'IBM Plex Mono',monospace;font-size:10px;letter-spacing:2px;color:var(--text3)}
    .polish-v1-copy{display:inline-flex;align-items:center;gap:8px;padding:7px 12px;background:transparent;border:1px solid var(--border2);border-radius:4px;color:var(--text2);font-family:'IBM Plex Mono',monospace;font-size:10px;font-weight:600;letter-spacing:1px;cursor:pointer;transition:all .15s}
    .polish-v1-copy:hover{border-color:var(--accent);color:var(--accent)}
    .polish-v1-copy svg{width:12px;height:12px;flex-shrink:0}
    .polish-v1-output{padding:16px 18px;background:var(--bg);border:1px solid var(--border);border-radius:4px;font-family:var(--sans);font-size:13px;line-height:1.6;color:var(--text);white-space:pre-wrap;word-break:break-word;margin-bottom:22px}
    .polish-v1-feedback{margin-bottom:20px}
    .polish-v1-feedback .polish-v1-output-label{display:block;margin-bottom:10px}
    .polish-v1-summary{font-family:var(--sans);font-size:13px;color:var(--text2);line-height:1.55;margin:0 0 14px;padding-left:14px;border-left:2px solid var(--border2)}
    .polish-v1-improvements{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:8px}
    .polish-v1-imp{display:flex;align-items:flex-start;gap:12px;padding:10px 12px;background:var(--bg);border:1px solid var(--border);border-radius:4px}
    .polish-v1-imp-note{font-family:var(--sans);font-size:13px;color:var(--text);line-height:1.5}
    .polish-v1-category-pill{display:inline-block;font-family:'IBM Plex Mono',monospace;font-size:9px;font-weight:700;letter-spacing:1px;padding:3px 8px;border-radius:2px;flex-shrink:0;margin-top:1px;white-space:nowrap}
    .pv1-cat-clarity{background:var(--accent-bg);color:var(--accent);border:1px solid var(--accent-b)}
    .pv1-cat-structure{background:var(--warm-bg);color:var(--warm);border:1px solid var(--warm-b)}
    .pv1-cat-specificity{background:rgba(167,139,250,0.08);color:#a78bfa;border:1px solid rgba(167,139,250,0.25)}
    .pv1-cat-context{background:rgba(251,146,60,0.08);color:#fb923c;border:1px solid rgba(251,146,60,0.25)}
    .pv1-cat-tone{background:rgba(96,165,250,0.08);color:#60a5fa;border:1px solid rgba(96,165,250,0.25)}
    .pv1-cat-format{background:rgba(148,163,184,0.08);color:#94a3b8;border:1px solid rgba(148,163,184,0.25)}
    .polish-v1-glossaries{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding-top:12px;border-top:1px solid var(--border)}
    .polish-v1-gloss-lbl{font-family:'IBM Plex Mono',monospace;font-size:10px;letter-spacing:1.5px;color:var(--text3)}
    .polish-v1-glossary-chip{font-family:'IBM Plex Mono',monospace;font-size:10px;color:var(--text2);background:var(--bg3);padding:3px 9px;border-radius:10px;border:1px solid var(--border)}
    @media(max-width:640px){
      .polish-v1-card{padding:22px 18px}
      .polish-v1-result{padding:20px 18px}
      .polish-v1-title{font-size:18px}
      .polish-v1-slider{grid-template-columns:1fr 1fr}
      .polish-v1-slider-opt{border-right:1px solid var(--border2);border-bottom:1px solid var(--border2)}
      .polish-v1-slider-opt:nth-child(2){border-right:none}
      .polish-v1-slider-opt:nth-last-child(-n+2){border-bottom:none}
      .polish-v1-slider-opt:last-child{border-right:none}
      .polish-v1-scores{gap:10px}
      .polish-v1-score-box{min-width:70px;padding:10px 14px}
      .polish-v1-score-num{font-size:24px}
    }

    /* ─────────── POLISH PANEL V1.1 REFINE ROW (added ?v=367) ─────────── */
    /* Green scoped to this block only via --refine-green CSS var. Does not */
    /* affect any other Kova element. To remove the feature: delete this    */
    /* block + the .polish-v1-refine markup + initPolishRefineRow() in JS.  */
    .polish-v1-refine{--refine-green:#4ade80;--refine-green-bg:rgba(74,222,128,0.08);--refine-green-b:rgba(74,222,128,0.38);margin-top:22px;margin-bottom:26px}
    .polish-v1-refine-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px;gap:12px;flex-wrap:wrap}
    .polish-v1-refine-label{font-family:'IBM Plex Mono',monospace;font-size:10px;letter-spacing:2px;color:var(--text3);display:inline-flex;align-items:center;gap:8px;line-height:1}
    .polish-v1-refine-gate{background:rgba(74,222,128,0.14);color:var(--refine-green);font-family:'IBM Plex Mono',monospace;font-size:9px;font-weight:700;letter-spacing:1.5px;padding:2px 7px;border-radius:3px;line-height:1.4}
    .polish-v1-refine-optional{font-family:'IBM Plex Mono',monospace;font-size:10px;color:var(--text3);font-style:italic}
    .polish-v1-refine-row{display:grid;grid-template-columns:1fr 1fr;gap:10px}
    .polish-v1-refine-picker-wrap{position:relative}
    .polish-v1-refine-picker{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;box-sizing:border-box;background:transparent;border:1px dashed var(--border2);border-radius:6px;padding:10px 13px;font-family:var(--sans);font-size:12px;color:var(--text2);cursor:pointer;text-align:left;transition:all .15s}
    .polish-v1-refine-picker:hover:not(.is-locked):not(.is-filled){border-color:var(--refine-green);color:var(--text)}
    .polish-v1-refine-picker:focus-visible{outline:none;border-color:var(--refine-green);box-shadow:0 0 0 2px rgba(74,222,128,0.2)}
    .polish-v1-refine-picker-text{display:inline-flex;align-items:baseline;gap:5px;flex:1 1 auto;min-width:0;overflow:hidden}
    .polish-v1-refine-picker-cat{color:var(--text3);font-weight:400;flex-shrink:0}
    .polish-v1-refine-picker-val{color:var(--text3);font-weight:400;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
    .polish-v1-refine-picker-chev{width:10px;height:6px;color:var(--text3);flex-shrink:0}
    .polish-v1-refine-picker.is-filled{background:var(--refine-green-bg);border:1px solid var(--refine-green);color:var(--refine-green)}
    .polish-v1-refine-picker.is-filled .polish-v1-refine-picker-cat{color:var(--refine-green);opacity:.7}
    .polish-v1-refine-picker.is-filled .polish-v1-refine-picker-val{color:var(--refine-green);font-weight:600}
    .polish-v1-refine-clear{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;font-size:12px;line-height:1;color:var(--refine-green);opacity:.7;cursor:pointer;user-select:none;flex-shrink:0;border-radius:3px;transition:opacity .15s,background .15s}
    .polish-v1-refine-clear:hover{opacity:1;background:rgba(74,222,128,0.14)}
    .polish-v1-refine-clear:focus-visible{outline:none;opacity:1;box-shadow:0 0 0 2px rgba(74,222,128,0.3)}
    .polish-v1-refine-picker.is-locked{opacity:.5;cursor:not-allowed;border-style:solid;border-color:var(--border)}
    .polish-v1-refine-picker.is-locked:hover{border-color:var(--border);color:var(--text2)}
    .polish-v1-refine-popover{position:absolute;top:calc(100% + 4px);left:0;right:0;background:var(--bg2);border:1px solid var(--refine-green-b);border-radius:4px;padding:4px;z-index:50;box-shadow:0 4px 12px rgba(0,0,0,0.45)}
    .polish-v1-refine-option{display:block;width:100%;box-sizing:border-box;text-align:left;background:transparent;border:none;padding:8px 10px;border-radius:4px;cursor:pointer;font-family:var(--sans);color:var(--text);transition:background .1s}
    .polish-v1-refine-option:hover{background:var(--bg3)}
    .polish-v1-refine-option:focus-visible{outline:none;background:var(--bg3);box-shadow:inset 0 0 0 1px var(--refine-green)}
    .polish-v1-refine-option.is-selected{background:var(--refine-green-bg)}
    .polish-v1-refine-option.is-selected .polish-v1-refine-option-name{color:var(--refine-green)}
    .polish-v1-refine-option-name{display:block;font-size:12px;font-weight:600;color:var(--text);margin-bottom:2px}
    .polish-v1-refine-option-desc{display:block;font-size:11px;color:var(--text3);line-height:1.35}
    .polish-v1-refine-upsell{font-family:var(--sans);font-size:11px;color:var(--text3);margin:12px 0 0;font-style:italic}
    /* Applied-bricks chip row — shown inside result card after a polish. */
    .polish-v1-applied{display:none;align-items:center;gap:8px;flex-wrap:wrap;padding-top:12px;border-top:1px solid var(--border);margin-bottom:8px}
    .polish-v1-applied.is-shown{display:flex}
    .polish-v1-applied.is-shown + .polish-v1-glossaries{padding-top:0;border-top:0}
    .polish-v1-applied-lbl{font-family:'IBM Plex Mono',monospace;font-size:10px;letter-spacing:1.5px;color:var(--text3)}
    .polish-v1-applied-chip{display:inline-flex;align-items:baseline;gap:5px;font-family:'IBM Plex Mono',monospace;font-size:10px;background:rgba(74,222,128,0.08);padding:3px 9px;border-radius:10px;border:1px solid rgba(74,222,128,0.3);white-space:nowrap}
    .polish-v1-applied-chip-cat{color:var(--text3);font-weight:400;opacity:.85}
    .polish-v1-applied-chip-val{color:#4ade80;font-weight:600}

    /* ─────────── POLISH PANEL V1.2 REFINE ROW 2 (v3.18.0) ─────────── */
    /* Second REFINE row (Goal + Format, Pro+). Stacked below the v1.1 row  */
    /* inside the same .polish-v1-refine outer wrap so --refine-green scopes */
    /* once from the ancestor. The Goal picker uses a dialog-style popover   */
    /* (3 labeled textareas + CLEAR/APPLY buttons) instead of the preset    */
    /* option-list pattern — same outer .polish-v1-refine-popover styling   */
    /* (absolute position, bg2, green border, shadow) but internal layout   */
    /* comes from .polish-v1-refine-goal-* rules.                           */
    .polish-v1-refine-head-v2{margin-top:22px}
    /* v1.3 (v3.19.0) — third REFINE row (Scope + Persona, MAX only). Same */
    /* 22px top margin as row 2 to separate it from row 2's upsell copy. */
    /* The Persona picker reuses .polish-v1-refine-popover-goal + all     */
    /* .polish-v1-refine-goal-* internal classes verbatim — dialog shape  */
    /* is identical to Goal (3 labeled textareas + CLEAR/APPLY).          */
    .polish-v1-refine-head-v3{margin-top:22px}
    .polish-v1-refine-popover-goal{padding:0}
    .polish-v1-refine-goal-body{display:flex;flex-direction:column;gap:10px;padding:12px}
    .polish-v1-refine-goal-field{display:flex;flex-direction:column;gap:4px}
    .polish-v1-refine-goal-field label{font-family:'IBM Plex Mono',monospace;font-size:9px;letter-spacing:1.5px;color:var(--text3);font-weight:700}
    .polish-v1-refine-goal-field textarea{background:var(--bg3);border:1px solid var(--border2);border-radius:4px;padding:7px 9px;font-family:var(--sans);font-size:12px;color:var(--text);resize:vertical;min-height:36px;max-height:120px;box-sizing:border-box;width:100%;line-height:1.4;transition:border-color .15s,box-shadow .15s}
    .polish-v1-refine-goal-field textarea::placeholder{color:var(--text3);opacity:.7}
    .polish-v1-refine-goal-field textarea:focus{outline:none;border-color:var(--refine-green);box-shadow:0 0 0 2px rgba(74,222,128,0.2)}
    .polish-v1-refine-goal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:2px}
    .polish-v1-refine-goal-btn{font-family:'IBM Plex Mono',monospace;font-size:10px;letter-spacing:1.5px;font-weight:700;padding:6px 12px;border-radius:4px;cursor:pointer;border:1px solid var(--border2);background:transparent;color:var(--text2);transition:all .15s}
    .polish-v1-refine-goal-btn:hover{border-color:var(--text3);color:var(--text)}
    .polish-v1-refine-goal-btn:focus-visible{outline:none;border-color:var(--refine-green);box-shadow:0 0 0 2px rgba(74,222,128,0.2)}
    .polish-v1-refine-goal-btn.is-primary{background:var(--refine-green-bg);border-color:var(--refine-green);color:var(--refine-green)}
    .polish-v1-refine-goal-btn.is-primary:hover{background:rgba(74,222,128,0.14);color:var(--refine-green)}

    @media(max-width:640px){
      .polish-v1-refine-row{grid-template-columns:1fr}
      .polish-v1-refine-head{flex-wrap:wrap;gap:6px}
      .polish-v1-refine-head-v2{margin-top:18px}
      .polish-v1-refine-head-v3{margin-top:18px}
    }

    /* ═══════════════════════════════════════════════════════════
       SETTINGS PANEL — v3.16.0 (Session 16)
       ═══════════════════════════════════════════════════════════ */

    /* Sidebar divider — separates product rows from utility (SETTINGS) */
    .sidebar-divider{height:1px;background:var(--border);margin:8px 14px;opacity:.6}

    /* Sidebar plan-row — converted from <div> to <button> for clickability (Idea A).
       Resets default button chrome + matches original flex layout. */
    .sidebar-plan-row{display:flex;align-items:center;gap:8px;margin-bottom:6px;flex-wrap:wrap;
      background:transparent;border:none;padding:0;width:100%;text-align:left;cursor:pointer;
      border-radius:3px;transition:background .15s}
    .sidebar-plan-row:hover{background:rgba(255,255,255,0.03)}
    .sidebar-plan-row:focus-visible{outline:2px solid var(--accent);outline-offset:2px}

    /* Settings panel container — inherits .kova-panel baseline */
    #panel-settings{max-width:680px}
    #panel-settings .dash-header{margin-bottom:20px}
    #panel-settings .dash-main-greeting{font-family:'IBM Plex Mono',monospace;font-size:28px;font-weight:900;color:var(--text);letter-spacing:-0.5px}

    /* Settings card — reusable section container */
    .settings-card{background:var(--surface);border:1px solid var(--border);border-radius:2px;padding:24px;margin-bottom:16px}
    .settings-section-title{display:block;font-family:'IBM Plex Mono',monospace;font-size:10px;letter-spacing:2px;color:var(--accent);margin-bottom:16px;font-weight:700}

    /* Row — label + value side-by-side (horizontal) or stacked (column variant) */
    .settings-row{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:10px 0;border-bottom:1px solid var(--border);min-height:36px}
    .settings-row:last-child{border-bottom:none}
    .settings-row-col{flex-direction:column;align-items:flex-start;gap:10px}
    .settings-row-label{font-family:'IBM Plex Mono',monospace;font-size:10px;letter-spacing:1.5px;color:var(--text3);font-weight:600;text-transform:uppercase}
    .settings-row-value{font-family:'IBM Plex Mono',monospace;font-size:13px;color:var(--text);word-break:break-all;text-align:right}
    .settings-row-col .settings-row-value{text-align:left}
    .settings-row-hint{font-family:'IBM Plex Mono',monospace;font-size:10px;color:var(--text3);font-style:italic;margin-top:2px}

    /* Action button (sign out in Account) */
    .settings-action-btn{font-family:'IBM Plex Mono',monospace;font-size:10px;letter-spacing:1px;color:var(--text2);background:transparent;border:1px solid var(--border2);border-radius:3px;padding:6px 12px;cursor:pointer;transition:all .15s}
    .settings-action-btn:hover{color:var(--text);border-color:var(--text3)}
    .settings-action-btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}

    /* Plan section specifics */
    .settings-plan-head{display:flex;align-items:center;gap:12px;margin-bottom:8px;flex-wrap:wrap}
    .settings-plan-name{font-family:'Plus Jakarta Sans',sans-serif;font-size:18px;font-weight:700;color:var(--text)}
    .settings-plan-meta{font-family:'IBM Plex Mono',monospace;font-size:11px;color:var(--text2);margin-bottom:18px;line-height:1.5}
    .settings-plan-actions{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:4px}
    .settings-billing-row{margin-top:14px;padding-top:14px;border-top:1px solid var(--border)}
    .settings-billing-link{font-family:'IBM Plex Mono',monospace;font-size:11px;color:var(--accent);text-decoration:none;transition:opacity .15s}
    .settings-billing-link:hover{opacity:.8}
    .settings-billing-link:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:2px}

    /* Font-size toggle — segmented control */
    .fs-toggle{display:inline-flex;border:1px solid var(--border2);border-radius:4px;overflow:hidden;background:var(--bg2)}
    .fs-btn{font-family:'IBM Plex Mono',monospace;font-size:13px;font-weight:700;color:var(--text3);background:transparent;border:none;padding:10px 18px;cursor:pointer;transition:all .15s;border-right:1px solid var(--border2);display:flex;align-items:baseline;gap:6px}
    .fs-btn:last-child{border-right:none}
    .fs-btn:hover{color:var(--text2);background:rgba(255,255,255,0.03)}
    .fs-btn.fs-active{color:var(--accent);background:rgba(45,212,191,0.08)}
    .fs-btn-sub{font-size:9px;font-weight:400;letter-spacing:1px;color:var(--text3);opacity:.7}
    .fs-btn.fs-active .fs-btn-sub{color:var(--accent);opacity:.7}
    .fs-btn:focus-visible{outline:2px solid var(--accent);outline-offset:-2px;position:relative;z-index:1}

    @media(max-width:640px){
      #panel-settings{max-width:100%}
      .settings-card{padding:18px}
      .settings-row{flex-direction:column;align-items:flex-start;gap:8px}
      .settings-row .settings-row-value{text-align:left}
      .fs-toggle{width:100%}
      .fs-btn{flex:1;padding:12px 8px;justify-content:center}
    }

/* ═══════════════════════════════════════════════════════════════════════
   v1.4 DEEP ANALYSIS + SHARPEN (S24, v3.20.0)
   Max-only panel rendered below the polished output when response carries
   deepAnalysis. Color tokens scoped locally — no global leakage.
   ═══════════════════════════════════════════════════════════════════════ */

.polish-v1-da {
  --da-green: #4ade80;
  --da-green-bg: rgba(74, 222, 128, 0.08);
  --da-green-b: rgba(74, 222, 128, 0.32);
  --da-warm: var(--warm, #fbbf24);
  --da-warm-bg: rgba(251, 191, 36, 0.08);
  --da-warm-b: rgba(251, 191, 36, 0.32);
  --da-red: var(--red, #ef4444);
  --da-red-bg: rgba(239, 68, 68, 0.08);
  --da-red-b: rgba(239, 68, 68, 0.32);

  margin-top: 20px;
  padding: 16px 18px;
  background: var(--bg2);
  border: 1px solid var(--border);
  border-radius: 6px;
}

/* ── Head row ── */
.polish-v1-da-head {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
  margin-bottom: 14px;
}
.polish-v1-da-label {
  font-family: 'IBM Plex Mono', monospace;
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 1.5px;
  color: var(--text3);
  text-transform: uppercase;
}
.polish-v1-da-verdict {
  font-family: 'IBM Plex Mono', monospace;
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 1px;
  text-transform: uppercase;
  padding: 3px 9px;
  border-radius: 3px;
  border: 1px solid var(--border);
  color: var(--text2);
  background: var(--bg3);
}
.polish-v1-da-verdict-pass { color: var(--da-green); background: var(--da-green-bg); border-color: var(--da-green-b) }
.polish-v1-da-verdict-warn { color: var(--da-warm);  background: var(--da-warm-bg);  border-color: var(--da-warm-b) }
.polish-v1-da-verdict-fail { color: var(--da-red);   background: var(--da-red-bg);   border-color: var(--da-red-b) }
.polish-v1-da-badge {
  margin-left: auto;
  font-family: 'IBM Plex Mono', monospace;
  font-size: 9px;
  font-weight: 700;
  letter-spacing: 1.5px;
  color: var(--accent);
  background: rgba(45, 212, 191, 0.1);
  border: 1px solid rgba(45, 212, 191, 0.32);
  padding: 2px 7px;
  border-radius: 3px;
}

/* ── 5-axis scorecard ── */
.polish-v1-da-axes {
  display: flex;
  flex-direction: column;
  gap: 6px;
  margin-bottom: 14px;
}
.polish-v1-da-axis {
  display: grid;
  grid-template-columns: 150px 54px 70px 1fr;
  gap: 12px;
  align-items: center;
  padding: 9px 12px;
  background: var(--bg3);
  border-left: 3px solid var(--text3);
  border-radius: 3px;
}
.polish-v1-da-axis-pass { border-left-color: var(--da-green) }
.polish-v1-da-axis-warn { border-left-color: var(--da-warm) }
.polish-v1-da-axis-fail { border-left-color: var(--da-red) }

.polish-v1-da-axis-name {
  font-family: 'IBM Plex Mono', monospace;
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.5px;
  color: var(--text);
  text-transform: uppercase;
}
.polish-v1-da-axis-score {
  font-family: 'IBM Plex Mono', monospace;
  font-size: 13px;
  font-weight: 700;
  color: var(--text);
  text-align: right;
}
.polish-v1-da-axis-verdict {
  font-family: 'IBM Plex Mono', monospace;
  font-size: 9px;
  font-weight: 700;
  letter-spacing: 1px;
  text-transform: uppercase;
  padding: 2px 6px;
  border-radius: 3px;
  text-align: center;
  border: 1px solid var(--border);
  color: var(--text2);
  background: var(--bg2);
}
.polish-v1-da-axis-verdict-pass { color: var(--da-green); background: var(--da-green-bg); border-color: var(--da-green-b) }
.polish-v1-da-axis-verdict-warn { color: var(--da-warm);  background: var(--da-warm-bg);  border-color: var(--da-warm-b) }
.polish-v1-da-axis-verdict-fail { color: var(--da-red);   background: var(--da-red-bg);   border-color: var(--da-red-b) }

.polish-v1-da-axis-exp {
  font-size: 12px;
  color: var(--text2);
  line-height: 1.45;
}

/* strengths + weaknesses secondary list (appears below main axis row) */
.polish-v1-da-axis-detail {
  grid-column: 1 / -1;
  margin: 4px 0 0;
  padding: 0 0 0 14px;
  list-style: none;
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.polish-v1-da-axis-detail li {
  font-size: 11px;
  line-height: 1.4;
  position: relative;
  padding-left: 18px;
}
.polish-v1-da-axis-detail li::before {
  position: absolute;
  left: 0;
  font-family: 'IBM Plex Mono', monospace;
  font-size: 10px;
  font-weight: 700;
}
.polish-v1-da-axis-detail-strength {
  color: var(--text2);
}
.polish-v1-da-axis-detail-strength::before {
  content: "+";
  color: var(--da-green);
}
.polish-v1-da-axis-detail-weakness {
  color: var(--text2);
}
.polish-v1-da-axis-detail-weakness::before {
  content: "−";
  color: var(--da-warm);
}

/* ── Success criteria list ── */
.polish-v1-da-criteria-wrap {
  margin-bottom: 14px;
  padding: 12px 14px;
  background: var(--bg3);
  border: 1px solid var(--border);
  border-radius: 4px;
}
.polish-v1-da-sub {
  display: block;
  font-family: 'IBM Plex Mono', monospace;
  font-size: 9px;
  font-weight: 700;
  letter-spacing: 1.5px;
  color: var(--text3);
  text-transform: uppercase;
  margin-bottom: 6px;
}
.polish-v1-da-criteria {
  margin: 0;
  padding-left: 18px;
  list-style: disc;
  color: var(--text2);
}
.polish-v1-da-criteria li {
  font-size: 12px;
  line-height: 1.5;
  padding: 2px 0;
}

/* ── Sharpen clarification card ── */
.polish-v1-da-sharpen {
  padding: 14px 16px;
  background: var(--bg3);
  border: 1px solid var(--da-green-b);
  border-left: 3px solid var(--da-green);
  border-radius: 4px;
  margin-bottom: 12px;
}
.polish-v1-da-sharpen-head {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
  margin-bottom: 6px;
}
.polish-v1-da-sharpen-label {
  font-family: 'IBM Plex Mono', monospace;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.5px;
  color: var(--text);
  text-transform: uppercase;
}
.polish-v1-da-sharpen-target {
  font-family: 'IBM Plex Mono', monospace;
  font-size: 9px;
  font-weight: 700;
  letter-spacing: 1px;
  padding: 2px 7px;
  border-radius: 3px;
  color: var(--da-green);
  background: var(--da-green-bg);
  border: 1px solid var(--da-green-b);
  text-transform: uppercase;
}
.polish-v1-da-sharpen-question {
  margin: 2px 0 10px;
  color: var(--text2);
  font-size: 13px;
  line-height: 1.5;
}
.polish-v1-da-sharpen-input {
  width: 100%;
  box-sizing: border-box;
  padding: 9px 11px;
  font-family: var(--sans);
  font-size: 13px;
  line-height: 1.45;
  color: var(--text);
  background: var(--bg2);
  border: 1px solid var(--border2);
  border-radius: 4px;
  resize: vertical;
  min-height: 62px;
  max-height: 180px;
  transition: border-color 0.15s, box-shadow 0.15s;
}
.polish-v1-da-sharpen-input:focus {
  outline: none;
  border-color: var(--da-green);
  box-shadow: 0 0 0 2px var(--da-green-bg);
}
.polish-v1-da-sharpen-foot {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  margin-top: 8px;
  flex-wrap: wrap;
}
.polish-v1-da-sharpen-count {
  font-family: 'IBM Plex Mono', monospace;
  font-size: 10px;
  color: var(--text3);
  letter-spacing: 0.5px;
}
.polish-v1-da-sharpen-btn {
  font-family: 'IBM Plex Mono', monospace;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 1.5px;
  padding: 8px 16px;
  background: var(--da-green);
  color: var(--bg);
  border: 1px solid var(--da-green);
  border-radius: 4px;
  cursor: pointer;
  transition: opacity 0.15s, transform 0.05s;
}
.polish-v1-da-sharpen-btn:hover:not(:disabled) {
  opacity: 0.88;
}
.polish-v1-da-sharpen-btn:active:not(:disabled) {
  transform: translateY(1px);
}
.polish-v1-da-sharpen-btn:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}
.polish-v1-da-sharpen-error {
  margin-top: 8px;
  padding: 6px 10px;
  background: var(--da-red-bg);
  border: 1px solid var(--da-red-b);
  border-radius: 3px;
  color: var(--da-red);
  font-size: 12px;
  line-height: 1.4;
}

/* ── v1→v2 comparison view ── */
.polish-v1-da-compare {
  margin-top: 16px;
  padding: 14px 16px;
  background: var(--bg3);
  border: 1px solid var(--border);
  border-radius: 4px;
}
.polish-v1-da-compare-head {
  font-family: 'IBM Plex Mono', monospace;
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 1.5px;
  color: var(--text3);
  text-transform: uppercase;
  margin-bottom: 10px;
}
.polish-v1-da-compare-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 12px;
}
.polish-v1-da-compare-col {
  padding: 11px 13px;
  background: var(--bg2);
  border: 1px solid var(--border);
  border-radius: 4px;
  border-left: 3px solid var(--text3);
}
.polish-v1-da-compare-col-after {
  border-left-color: var(--da-green);
}
.polish-v1-da-compare-label {
  display: block;
  font-family: 'IBM Plex Mono', monospace;
  font-size: 9px;
  font-weight: 700;
  letter-spacing: 1.5px;
  color: var(--text3);
  text-transform: uppercase;
  margin-bottom: 6px;
}
.polish-v1-da-compare-col-after .polish-v1-da-compare-label {
  color: var(--da-green);
}
.polish-v1-da-compare-body {
  font-family: var(--sans);
  font-size: 12px;
  line-height: 1.5;
  color: var(--text);
  white-space: pre-wrap;
  word-break: break-word;
  max-height: 240px;
  overflow-y: auto;
}
.polish-v1-da-compare-foot {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  margin-top: 10px;
  padding-top: 8px;
  border-top: 1px dashed var(--border2);
  flex-wrap: wrap;
}
.polish-v1-da-compare-revert {
  font-family: 'IBM Plex Mono', monospace;
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 1.5px;
  padding: 6px 12px;
  background: transparent;
  color: var(--text2);
  border: 1px solid var(--border2);
  border-radius: 3px;
  cursor: pointer;
  transition: color 0.15s, border-color 0.15s;
}
.polish-v1-da-compare-revert:hover {
  color: var(--text);
  border-color: var(--text3);
}
.polish-v1-da-compare-note {
  font-size: 11px;
  color: var(--text3);
  font-style: italic;
}

/* ── Judge-failed error row ── */
.polish-v1-da-error {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 10px 12px;
  background: var(--da-warm-bg);
  border: 1px solid var(--da-warm-b);
  border-radius: 4px;
  font-size: 12px;
  color: var(--da-warm);
}
.polish-v1-da-error-icon {
  font-weight: 700;
  font-size: 14px;
}
.polish-v1-da-error-text {
  flex: 1;
  line-height: 1.4;
}

/* ── Responsive: ≤700px collapses axis grid and comparison view ── */
@media (max-width: 700px) {
  .polish-v1-da {
    padding: 12px 14px;
  }
  .polish-v1-da-axis {
    grid-template-columns: 1fr 48px 60px;
    grid-template-rows: auto auto;
    gap: 6px 10px;
  }
  .polish-v1-da-axis-exp {
    grid-column: 1 / -1;
  }
  .polish-v1-da-compare-grid {
    grid-template-columns: 1fr;
  }
  .polish-v1-da-sharpen-foot {
    flex-direction: column;
    align-items: stretch;
    gap: 8px;
  }
  .polish-v1-da-sharpen-btn {
    width: 100%;
  }
}

/* ═════════════════════════════════════════════════════════════════════════
   S45 MOBILE HARDENING PASS (Apr 24 2026) — v2.4.0
   ═════════════════════════════════════════════════════════════════════════
   P0+P1 fixes from Phase 3 dashboard mobile audit. Desktop unchanged.
   Paired with site.css v1.2.0 (which carries the cross-surface GL-1 input-
   zoom + CP-1 tap-target rules that also reach the dashboard once shipped
   there too).
   ═════════════════════════════════════════════════════════════════════════ */

/* ─── GEN-1 · GENERATOR LAYOUT: STACK MODEL + MAIN AT ≤768px (P0)
   Root cause: .gen-layout grid-template-columns:200px 1fr was never given
   a mobile breakpoint. At 500px viewport this forced 16 elements to
   overflow the viewport by up to 62px right. Children with min-width set
   for desktop (.gen-input min-width:200px, .gen-select min-width:120px,
   .gen-preset min-width:150px) compounded the overflow.
   
   Fix stacks model-panel above main-panel, unlocks width constraints on
   form controls, relaxes .gen-preset min-width slightly so the horizontal
   preset carousel stays scrollable without eating viewport width.
*/
@media (max-width: 768px) {
  .gen-layout {
    grid-template-columns: 1fr;
    overflow: visible;
  }
  .gen-model-panel {
    border-right: none;
    border-bottom: 1px solid var(--border);
    max-height: 260px;
  }
  .gen-input {
    min-width: 0;
    width: 100%;
  }
  .gen-select {
    min-width: 0;
  }
  .gen-preset {
    min-width: 140px;
  }
}

/* ─── GL-1 · KILL iOS INPUT ZOOM ON DASHBOARD FORMS (P0)
   Per-class list because site.css global input{font-size:16px} wouldn't
   reach dashboard (dashboard.html loads dashboard.css too, both in the
   cascade, and class-targeted rules win over element selectors).
   Scope: touch devices only — desktop font-size tokens preserved.
*/
@media (hover: none) and (pointer: coarse) {
  .gen-input,
  .gen-select,
  .gen-adv-select,
  .gen-adv-input,
  .polish-v1-textarea,
  .polish-v1-audience-input,
  .polish-v1-refine-picker {
    font-size: 16px;
  }
}

/* ─── SH-1 · SIDEBAR NAV BUTTONS 44px MIN (P1)
   Live measurement: 38px computed height across all 8 sidebar items.
   Dashboard nav is higher-traffic than marketing nav; tap-miss rate on
   vertical stacks is higher than horizontal rows.
*/
@media (max-width: 768px) {
  .sidebar-item {
    padding: 14px 18px;
    min-height: 44px;
    font-size: 11px;
  }
  .si-logout {
    padding: 10px 14px;
    min-height: 44px;
  }
}

/* ─── SH-2 · HAMBURGER 44px MIN + LEFT-SIDE POSITION (P1)
   Entry-point control for the entire mobile nav system; was 27×27px.
   v2.4.1: also flipped the topbar flex-direction so the hamburger sits
   on the LEFT — the sidebar drawer slides in from the left, and the
   trigger-side-matches-drawer-side convention is universal on iOS,
   Android, and every major mobile app. Previously hamburger-right
   created a mental-model mismatch (tap right to open something from
   the left). The topbar content is a 2-element flex (title + ham);
   row-reverse swaps their visual order without touching markup. */
@media (max-width: 768px) {
  .kova-topbar {
    flex-direction: row-reverse;
  }
  .kova-ham {
    padding: 10px 14px;
    min-height: 44px;
    min-width: 44px;
    font-size: 18px;
    line-height: 1;
  }
  /* Builder panel has its own scoped topbar (L1370 area); same flip. */
  #panel-builder .kova-topbar {
    flex-direction: row-reverse;
  }
}

/* ─── GL-2 · DASHBOARD ACTION BUTTON TAP TARGETS (P1)
   Primary actions (.gen-btn, .polish-v1-submit) bumped to 44px floor.
   Secondary actions (.gen-copy, .gen-export, .polish-v1-copy) to 36px —
   they're duplicative of primary copy actions so 36px is acceptable.
   The .polish-v1-refine-clear was 16×16px (the X to clear a picker);
   bumped to 32×32px which is Apple's minimum for "small" targets.
*/
@media (hover: none) and (pointer: coarse) {
  .gen-btn,
  .polish-v1-submit {
    min-height: 44px;
  }
  .gen-copy,
  .gen-export,
  .polish-v1-copy {
    min-height: 36px;
    padding: 10px 14px;
  }
  .polish-v1-refine-clear {
    width: 32px;
    height: 32px;
    font-size: 14px;
    padding: 4px;
  }
}

/* === END S45 MOBILE HARDENING PASS === */

/* ═════════════════════════════════════════════════════════════════════════
   S45 v2.4.2 — Quick-start preview pulse + scroll behavior
   ═════════════════════════════════════════════════════════════════════════
   Paired with dashboard/index.html v3.34.0 (quick-start preview step).
   When a user taps a .gen-preset tile, usePreset() now populates all form
   fields (topic, niche, platform, audience, tone, model, count, prompt
   type) but STOPS before generatePrompts(). The pulse animation below
   draws attention to the Generate button so the user knows the tile was
   loaded and what to do next.
*/

@keyframes genBtnPreviewPulse {
  0%   { box-shadow: 0 0 0 0 rgba(45, 212, 191, 0.55); }
  50%  { box-shadow: 0 0 0 10px rgba(45, 212, 191, 0); }
  100% { box-shadow: 0 0 0 0 rgba(45, 212, 191, 0); }
}

.gen-btn.gen-btn-preview-pulse {
  animation: genBtnPreviewPulse 1.2s ease-out 2;  /* 2 pulses = ~2.4s */
}

/* Respect users who've asked for reduced motion — pulse not critical. */
@media (prefers-reduced-motion: reduce) {
  .gen-btn.gen-btn-preview-pulse {
    animation: none;
    /* Static highlight instead: subtle outline glow, no motion */
    outline: 2px solid var(--accent);
    outline-offset: 2px;
  }
}

/* === END v2.4.2 PREVIEW PULSE === */
