
* { margin:0; padding:0; box-sizing:border-box; }
.sm-login-body { min-height:100vh; overflow:auto; font-family:var(--font-ui); background:radial-gradient(circle at 12% 18%, color-mix(in srgb, var(--primary) 16%, transparent), transparent 34%),radial-gradient(circle at 88% 82%, color-mix(in srgb, var(--primary-hover) 12%, transparent), transparent 32%),var(--bg-page); color:var(--text); }
.sm-login-top { display:flex; align-items:center; justify-content:space-between; gap:16px; height:60px; padding:10px 20px; background:var(--topbar-bg); color:var(--topbar-text); border-bottom:1px solid var(--topbar-border); box-shadow:var(--shadow-soft); }
.sm-login-brand { display:inline-flex; align-items:center; gap:10px; color:var(--topbar-text); text-decoration:none; }
.sm-login-brand-logo { display:block; width:auto; height:40px; max-width:min(62vw, 270px); object-fit:contain; }
.sm-login-top-note { font-size:13px; font-weight:600; color:color-mix(in srgb, var(--topbar-text) 82%, transparent); }
.sm-login-main { min-height:calc(100vh - 60px); display:grid; place-items:center; padding:40px 20px; }
.sm-login-card { position:relative; overflow:hidden; width:min(100%, 460px); padding:40px; background:var(--bg-surface); border:1px solid var(--border); border-radius:var(--radius); box-shadow:var(--shadow-modal); backdrop-filter:blur(18px); }
.sm-login-card::before { content:""; position:absolute; inset:0 0 auto; height:4px; background:var(--grad-accent); }
.sm-login-card-brand { display:flex; align-items:center; gap:14px; margin-bottom:26px; }
.sm-login-card-icon { width:46px; height:46px; display:block; border-radius:12px; box-shadow:var(--shadow-card); }
.sm-login-title { font-family:var(--font-display); font-size:28px; line-height:1.15; font-weight:700; color:var(--text); letter-spacing:-.025em; }
.sm-login-subtitle { margin-top:6px; font-size:15px; line-height:1.45; color:var(--text-dim); }
.sm-field { display:block; margin-bottom:16px; }
.sm-field-label { display:block; margin-bottom:7px; color:var(--text); font-size:13px; font-weight:700; }
.sm-input { width:100%; min-height:48px; padding:12px 14px; background:var(--bg-input); border:1px solid var(--border-strong); color:var(--text); border-radius:10px; font:inherit; font-size:16px; transition:border-color .2s,box-shadow .2s,background .2s; }
.sm-input:focus { outline:none; border-color:var(--primary); box-shadow:0 0 0 3px var(--primary-soft); background:var(--bg-surface-alt); }
.sm-input::placeholder { color:var(--text-faint); }
.sm-btn { width:100%; min-height:48px; padding:12px 16px; background:var(--grad-accent); color:var(--primary-text); border:none; border-radius:24px; font:inherit; font-size:16px; font-weight:700; cursor:pointer; box-shadow:var(--shadow-card); transition:filter .2s,transform .2s,box-shadow .2s; }
.sm-btn:hover { filter:brightness(1.08); transform:translateY(-1px); box-shadow:var(--shadow-hover); }
.sm-btn:active { transform:translateY(0); }
.sm-btn:focus-visible { outline:3px solid var(--primary-soft); outline-offset:3px; }
.sm-error,.sm-revoked { padding:12px 14px; border-radius:10px; font-size:14px; line-height:1.45; margin-bottom:16px; text-align:left; }
.sm-error { background:var(--danger-soft); border:1px solid var(--danger-border); color:var(--danger); }
.sm-revoked { background:var(--warning-soft); border:1px solid var(--warning-border); color:var(--warning); }
.sm-footer { text-align:center; margin-top:24px; padding-top:20px; border-top:1px solid var(--border-faint); font-size:13px; color:var(--text-faint); }
@media (max-width:600px) { .sm-login-top { padding:10px 16px; } .sm-login-top-note { display:none; } .sm-login-main { align-items:start; padding:24px 14px; } .sm-login-card { padding:30px 22px; } }
@media (prefers-reduced-motion:reduce) { .sm-btn,.sm-input { transition:none; } }
/* v3.10 DEEPEN Component 1: thread context bar */
	.sm-thread-bar { display:flex; gap:4px; margin-bottom:10px; overflow-x:auto; padding:6px 0; }
	.sm-thread-label { font-size:11px; color:var(--text-dim); text-transform:uppercase; letter-spacing:.5px; margin-right:4px; align-self:center; }
	.sm-thread-chip { font-size:12px; white-space:nowrap; background:rgba(79,141,249,.12); border:1px solid rgba(79,141,249,.2); border-radius:4px; padding:3px 8px; cursor:pointer; transition:background .15s; }
	.sm-thread-chip:hover { background:rgba(79,141,249,.25); border-color:var(--primary); }
	.sm-thread-chip a { color:var(--text-link); text-decoration:none; }
	.sm-thread-chip a:hover { color:var(--text-inverse); }

:root {
  /* === Unified theme tokens (same as SamiPanel) === */
  --theme-name: "sami-default";
  --theme-mode: "dark"; /* SamiMail's default is dark */

  /* Text */
  --text:           #e9eff7;
  --topbar-text:    #ffffff;
  --text-dim:       #b8c4d1;
  --text-faint:     #8b9bb0;
  --text-inverse:   #1f2937;
  --text-link:      #4f8df9;
  --text-link-hover:#9d85f7; /* S6.5 */

  /* Surfaces */
  --bg-page:        #0a0e14;
  --bg-surface:     rgba(17, 24, 35, 0.72);
  --bg-surface-alt: #14202c;
  --bg-input:       #1c2938;
  --bg-hover:       rgba(55, 72, 98, 0.45);
  --bg-code:        #14202c;

  /* Borders */
  --border:         rgba(55, 72, 98, 0.45);
  --border-strong:  rgba(75, 95, 125, 0.55);
  --border-faint:   rgba(45, 60, 85, 0.35);

  /* Brand */
  --primary:        #4f8df9;
  --primary-hover:  #6b46e5; /* S6.5 */
  --primary-soft:   rgba(79, 141, 249, 0.15);
  --primary-text:   #ffffff;

  /* Semantic */
  --success:        #22c55e;
  --success-soft:   rgba(34, 197, 94, 0.15);
  --success-border: #22c55e;
  --danger:         #f04b4b; /* S6.4: 4.5:1 on --bg-surface-alt */
  --danger-soft:    rgba(239, 68, 68, 0.15);
  --danger-border:  #ef4444;
  --warning:        #f0d020;
  --warning-soft:   rgba(240, 208, 32, 0.15);
  --warning-border: #f0d020;
  --info:           #4f8df9;
  --info-soft:      rgba(79, 141, 249, 0.15);
  --info-border:    #4f8df9;

  /* SamiMail legacy aliases (existing styles still work) */
  --bg:        var(--bg-page);
  --surface:   var(--bg-surface);
  --card:      var(--bg-surface-alt);
  --card-hi:   var(--bg-input);
  --muted:     var(--text-dim);
  --accent:    var(--primary);
  --accent2:   var(--primary-hover);
  --gold:      var(--warning);
  --red:       var(--danger);

  /* Layout */
  --radius:    14px;
  --shadow:    0 12px 40px rgba(2, 6, 14, 0.55);
  --shadow-soft: 0 2px 12px rgba(2, 6, 14, 0.35);
  --shadow-card:  0 2px 8px rgba(2, 6, 14, 0.30);
  --shadow-hover: 0 6px 20px rgba(2, 6, 14, 0.45);
  --shadow-modal: 0 20px 60px rgba(2, 6, 14, 0.70);
  /* B43: --grad-accent-deep = same hue family, lightness capped at 0.26 so
     the white glyph clears WCAG 4.5:1 on EVERY theme — enforced by
     TestTopbarDeepAccentWhiteContrast (topbar_icon_btns_b42_test.go). */
  --grad-accent: linear-gradient(135deg, #4f8df9, #7c5cf5);
  --grad-accent-deep: linear-gradient(135deg, #043280, #20087d);
  --topbar-bg:    linear-gradient(135deg, #4f8df9, #7c5cf5);
  --topbar-text:  #ffffff;
  --topbar-border: rgba(255, 255, 255, 0.14);
  --sidebar-bg:   linear-gradient(180deg, #4f8df9, #7c5cf5);
  /* Shared surface for the dark sidebar and the Select page toolbar. */
  --selection-bar-bg: color-mix(in srgb, var(--primary) 22%, var(--bg-surface));

  /* Fonts (Sami Grotesk is the brand face — Sami Sans phased out 2026-08-22) */
  --font-display: 'Sami Grotesk', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
  --font-body:    'Sami Grotesk', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
  --font-mono:    'SF Mono', Monaco, Consolas, monospace;

  /* S6.7: starred-pill glyph on --grad-accent-deep fills — >= 4.5:1
     per theme, enforced by TestThemePaletteFillAndHoverContrast.
     (S6.6 carried a duplicate pair in the second, fonts-only :root —
     removed there; this is the single source of truth for default-dark.) */
  --gold-text:      #ffe082;
  /* S6.7: required token — solid danger fill under #fff glyphs,
     >= 4.5:1 per theme (TestThemePaletteFillAndHoverContrast). */
  --badge-danger:   #dc2626;
}


/* ===== Sami brand fonts ===== */
/* OFL 1.1 (Sami Grotesk / Sami Classy / Sami Classy Condensed /
   Sami Serif / Sami Neat Sans). Local copies at /opt/samimail/brand/fonts/*.
   Originals (Inter / Playfair Display / Source Serif Pro / Fira Code) are
   kept as fallbacks for older browsers and clean OS-only fetches. */
@font-face { font-family:'Sami Grotesk'; font-weight:400; font-style:normal; font-display:swap; src:url('/brand/fonts/Sami%20Grotesk/SamiGrotesk-Regular.woff2') format('woff2'); }
@font-face { font-family:'Sami Grotesk'; font-weight:500; font-style:normal; font-display:swap; src:url('/brand/fonts/Sami%20Grotesk/SamiGrotesk-Medium.woff2') format('woff2'); }
@font-face { font-family:'Sami Grotesk'; font-weight:700; font-style:normal; font-display:swap; src:url('/brand/fonts/Sami%20Grotesk/SamiGrotesk-Bold.woff2') format('woff2'); }
@font-face { font-family:'Sami Grotesk'; font-weight:600; font-style:normal; font-display:swap; src:url('/brand/fonts/Sami%20Grotesk/SamiGrotesk-Bold.woff2') format('woff2'); }
@font-face { font-family:'Sami Classy'; font-weight:400; font-style:normal; font-display:swap; src:url('/brand/fonts/Sami%20Classy/SamiClassy-Regular.woff2') format('woff2'); }
@font-face { font-family:'Sami Classy'; font-weight:600; font-style:normal; font-display:swap; src:url('/brand/fonts/Sami%20Classy/SamiClassy-SemiBold.woff2') format('woff2'); }
@font-face { font-family:'Sami Classy'; font-weight:700; font-style:normal; font-display:swap; src:url('/brand/fonts/Sami%20Classy/SamiClassy-Bold.woff2') format('woff2'); }
@font-face { font-family:'Sami Classy Condensed'; font-weight:400; font-style:normal; font-display:swap; src:url('/brand/fonts/Sami%20Classy%20Condensed/SamiClassyCond-Regular.woff2') format('woff2'); }
@font-face { font-family:'Sami Classy Condensed'; font-weight:600; font-style:normal; font-display:swap; src:url('/brand/fonts/Sami%20Classy%20Condensed/SamiClassyCond-SemiBold.woff2') format('woff2'); }
@font-face { font-family:'Sami Classy Condensed'; font-weight:700; font-style:normal; font-display:swap; src:url('/brand/fonts/Sami%20Classy%20Condensed/SamiClassyCond-Bold.woff2') format('woff2'); }
@font-face { font-family:'Sami Serif'; font-weight:400; font-style:normal; font-display:swap; src:url('/brand/fonts/Sami%20Serif/SamiSerif-Regular.woff2') format('woff2'); }
@font-face { font-family:'Sami Serif'; font-weight:600; font-style:normal; font-display:swap; src:url('/brand/fonts/Sami%20Serif/SamiSerif-Semibold.woff2') format('woff2'); }
@font-face { font-family:'Sami Serif'; font-weight:700; font-style:normal; font-display:swap; src:url('/brand/fonts/Sami%20Serif/SamiSerif-Bold.woff2') format('woff2'); }
@font-face { font-family:'Sami Neat Sans'; font-weight:400; font-style:normal; font-display:swap; src:url('/brand/fonts/Sami%20Neat%20Sans/SamiNeatSans-Regular-Complete.woff2') format('woff2'); }
@font-face { font-family:'Sami Neat Sans'; font-weight:700; font-style:normal; font-display:swap; src:url('/brand/fonts/Sami%20Neat%20Sans/SamiNeatSans-Bold-Complete.woff2') format('woff2'); }

:root {
  --font-brand: 'Sami Classy', 'Playfair Display', Georgia, serif;
  --font-display: 'Sami Grotesk', 'Inter', system-ui, sans-serif;
  --font-ui: 'Sami Grotesk', 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
  --font-email: 'Sami Serif', 'Source Serif Pro', Georgia, serif;
  --font-condensed: 'Sami Classy Condensed', 'Sami Classy', 'Playfair Display', Georgia, serif;
  --font-neat: 'Sami Neat Sans', 'JetBrains Mono', 'SFMono-Regular', Consolas, monospace;
}
* { margin:0; padding:0; box-sizing:border-box; }
html,body { height:100%; }
body { font-family:var(--font-ui); background:var(--bg-page); color:var(--text); font-size:14px; overflow:hidden; }

/* ===== Top bar — frosted glass ===== */
.sm-top { display:flex; align-items:center; gap:16px; padding:6px 20px; background:var(--topbar-bg); color:var(--topbar-text); border-bottom:1px solid var(--topbar-border); height:52px; position:fixed; top:0; left:0; right:0; z-index:50; box-shadow:0 1px 0 rgba(0,0,0,.08) inset; transition:background .2s ease; }
/* Brand frame: topbar and sidebar draw from the active theme tokens.
   Both light and dark sidebars use --sidebar-bg; content-area grays and the
   selection toolbar remain independent and unchanged. */
[data-theme*="-light"] .sm-side { background:var(--sidebar-bg); border-right-color:color-mix(in srgb, var(--topbar-text) 100%, transparent); }
[data-theme*="-dark"] .sm-side { background:var(--sidebar-bg); border-right-color:var(--border); }
[data-theme*="-light"] .sm-side-title { color:color-mix(in srgb, var(--topbar-text) 70%, transparent); }
[data-theme*="-dark"] .sm-side-title { color:color-mix(in srgb, var(--topbar-text) 70%, transparent); }
[data-theme*="-light"] .sm-folder { color:color-mix(in srgb, var(--topbar-text) 85%, transparent); }
[data-theme*="-dark"] .sm-folder { color:color-mix(in srgb, var(--topbar-text) 85%, transparent); }
[data-theme*="-light"] .sm-folder:hover { background:rgba(255,255,255,0.12); color:var(--topbar-text); }
[data-theme*="-dark"] .sm-folder:hover { background:rgba(255,255,255,0.12); color:var(--topbar-text); }
[data-theme*="-light"] .sm-folder.active { background:rgba(255,255,255,0.22); color:var(--topbar-text); font-weight:600; }
[data-theme*="-dark"] .sm-folder.active { background:rgba(255,255,255,0.22); color:var(--topbar-text); font-weight:600; }
[data-theme*="-light"] .sm-folder .cnt { background:rgba(255,255,255,0.22); color:var(--topbar-text); }
[data-theme*="-dark"] .sm-folder .cnt { background:rgba(255,255,255,0.22); color:var(--topbar-text); }
[data-theme*="-light"] .sm-folder.active .cnt { background:var(--grad-accent-deep, var(--primary)); color:#fff; }
[data-theme*="-dark"] .sm-folder.active .cnt { background:var(--grad-accent-deep, var(--primary)); color:#fff; }
[data-theme*="-light"] .sm-folder .tot { color:color-mix(in srgb, var(--topbar-text) 55%, transparent); }
[data-theme*="-dark"] .sm-folder .tot { color:color-mix(in srgb, var(--topbar-text) 55%, transparent); }
[data-theme*="-light"] .sm-quota { color:color-mix(in srgb, var(--topbar-text) 85%, transparent); border-top-color:color-mix(in srgb, var(--topbar-text) 12%, transparent); }
[data-theme*="-dark"] .sm-quota { color:color-mix(in srgb, var(--topbar-text) 85%, transparent); border-top-color:color-mix(in srgb, var(--topbar-text) 12%, transparent); }
[data-theme*="-light"] .sm-quota-text { color:color-mix(in srgb, var(--topbar-text) 70%, transparent); }
[data-theme*="-dark"] .sm-quota-text { color:color-mix(in srgb, var(--topbar-text) 70%, transparent); }
[data-theme*="-light"] .sm-quota-bar { background:rgba(0,0,0,0.18); }
[data-theme*="-dark"] .sm-quota-bar { background:rgba(0,0,0,0.18); }
[data-theme*="-light"] .sm-search input { background:color-mix(in srgb, var(--topbar-text) 18%, transparent); border:1px solid color-mix(in srgb, var(--topbar-text) 30%, transparent); color:var(--topbar-text); }
[data-theme*="-dark"] .sm-search input { background:rgba(255,255,255,0.18); border:1px solid rgba(255,255,255,0.30); color:#ffffff; }
[data-theme*="-light"] .sm-search input::placeholder { color:color-mix(in srgb, var(--topbar-text) 78%, transparent); }
[data-theme*="-dark"] .sm-search input::placeholder { color:rgba(255,255,255,0.78); }
[data-theme*="-light"] .sm-search input:focus:not(:focus-visible) { background:rgba(255,255,255,0.28); border-color:#ffffff; box-shadow:0 0 0 3px rgba(255,255,255,0.22); }
[data-theme*="-dark"] .sm-search input:focus:not(:focus-visible) { background:rgba(255,255,255,0.28); border-color:#ffffff; box-shadow:0 0 0 3px rgba(255,255,255,0.22); }
[data-theme*="-light"] .sm-search .ico { color:color-mix(in srgb, var(--topbar-text) 85%, transparent); }
[data-theme*="-dark"] .sm-search .ico { color:rgba(255,255,255,0.85); }
/* topbar buttons (sm-view-toggle / sm-theme-toggle / sm-help-btn) take the per-theme DEEP accent gradient (B43); see the base rule near .sm-theme-toggle */
[data-theme*="-light"] .sm-top .sm-user { color:#ffffff; }
[data-theme*="-dark"] .sm-top .sm-user { color:#ffffff; }
/* v3.145.1: the legacy per-theme .sm-logout color rules (white text for the
   old text-link design) were DELETED — they out-specified the v3.145 frosted
   pill and painted white-on-white. Sign out is styled solely by the
   .sm-top .sm-logout pill rules below. */
[data-theme*="-light"] .sm-thread-chip { background:color-mix(in srgb, var(--topbar-text) 18%, transparent); border-color:color-mix(in srgb, var(--topbar-text) 30%, transparent); color:var(--topbar-text); }
[data-theme*="-dark"] .sm-thread-chip { background:rgba(255,255,255,0.18); border-color:rgba(255,255,255,0.30); color:#ffffff; }
[data-theme*="-light"] .sm-thread-chip:hover { background:rgba(255,255,255,0.32); border-color:#ffffff; }
[data-theme*="-dark"] .sm-thread-chip:hover { background:rgba(255,255,255,0.32); border-color:#ffffff; }
/* v3.145 (Sami): topbar controls adopt the search-bar frosted-pill treatment.
   On signature-color topbars (forest green etc.) the old styles left dark
   chip text sitting directly on the brand gradient — unreadable. Quick-filter
   chips keep that light frosted pill with dark text. B43 (Sami, 2026-09-11)
   moved the ROUND icon buttons to the theme accent gradient instead (see
   the B43 rules below). Active/filter states show a primary ring + bold. */
.sm-top .sm-qf-chip { background:rgba(255,255,255,0.88); border:1px solid rgba(255,255,255,0.55); color:#16281c; }
.sm-top .sm-qf-chip:hover { background:#ffffff; border-color:#ffffff; color:#0e1f14; }
.sm-top .sm-qf-chip .sm-qf-chip-dot { opacity:.7; }
/* Active chip stays frosted (dark text — WCAG-safe on every theme; white-on-
   primary fails on most brand primaries) and shows engagement via a thick
   primary ring + primary dot, not a fill flip. */
.sm-top .sm-qf-chip.active { border-color:var(--primary); box-shadow:0 0 0 2px var(--primary); color:#0e1f14; font-weight:700; }
.sm-top .sm-qf-chip.active .sm-qf-chip-dot { background:var(--primary); opacity:1; }
.sm-top .sm-qf-chip.active:hover { background:#ffffff; border-color:var(--primary-hover); box-shadow:0 0 0 2px var(--primary-hover); color:#0e1f14; }
/* B43 (Sami): the frosted white pill is GONE — the round circles wear the
   THEME ACCENT itself (base rule supplies var(--grad-accent) + foreground,
   the same pairing as Compose and Sign out). Separation from the
   same-gradient topbar is an INSET white ring in box-shadow — no border,
   so no layout shift and the 38px geometry contract holds. */
.sm-top #sm-density-btn[aria-pressed="true"] {
  box-shadow:inset 0 0 0 2px rgba(255,255,255,0.65); font-weight:700;
}
/* Sign out: compact topbar counterpart to Compose — same accent gradient,
   foreground, rounded shape, elevation and hover lift; width/margins stay
   topbar-sized so the 52px fixed bar and mobile overflow contract hold. */
.sm-top .sm-logout {
  display:inline-flex; align-items:center; justify-content:center;
  background:var(--grad-accent-deep, var(--primary)); color:#fff;
  border:none; border-radius:24px; padding:9px 16px; font-size:14px; font-weight:700;
  box-shadow:0 4px 16px color-mix(in srgb, var(--primary) 40%, transparent);
  transition:transform .2s, box-shadow .2s, filter .2s;
}
.sm-top .sm-logout:hover {
  transform:translateY(-1px); color:#fff;
  box-shadow:0 6px 22px color-mix(in srgb, var(--primary) 55%, transparent);
  filter:saturate(1.08);
}
@media (prefers-reduced-motion:reduce) {
  .sm-top .sm-logout { transition:none; }
  .sm-top .sm-logout:hover { transform:none; filter:none; }
}
[data-theme*="-light"] .sm-list-head-check input { accent-color:#ffffff; }
[data-theme*="-dark"] .sm-list-head-check input { accent-color:#ffffff; }
.sm-logo { height:30px; display:block; }
.sm-search { flex:1; max-width:560px; margin:0 auto; position:relative; }
.sm-search input { width:100%; padding:10px 16px 10px 42px; background:rgba(22,32,46,.55); border:1px solid var(--border); border-radius:24px; color:var(--text); font-size:14px; transition:all .2s; }
.sm-search input:focus:not(:focus-visible) { outline:none; border-color:var(--primary); box-shadow:0 0 0 3px rgba(79,141,249,.18); background:rgba(28,41,56,.7); }
.sm-search .ico { position:absolute; left:14px; top:50%; transform:translateY(-50%); color:var(--text-dim); }
/* v3.75 quick-filter popover button + dropdown + chip row */
.sm-search-filter-btn { position:absolute; right:8px; top:50%; transform:translateY(-50%); background:transparent; border:1px solid var(--border); border-radius:14px; color:var(--text-dim); cursor:pointer; padding:4px 8px; font-size:11px; line-height:1; }
.sm-search-filter-btn:hover { color:var(--text); border-color:var(--primary); }
.sm-search-filter-pop { position:absolute; right:0; top:calc(100% + 6px); background:var(--bg-surface); border:1px solid var(--border); border-radius:12px; box-shadow:0 10px 32px rgba(0,0,0,.35); padding:8px; min-width:240px; display:none; z-index:50; }
.sm-search-filter-pop[data-open="true"] { display:block; }
.sm-search-filter-item { display:block; width:100%; text-align:left; padding:6px 10px; border:0; background:transparent; color:var(--text); cursor:pointer; border-radius:6px; font-size:13px; }
.sm-search-filter-item:hover { background:rgba(79,141,249,.12); }
.sm-search-filter-hint { padding:6px 10px; font-size:11px; color:var(--text-dim); }
.sm-search-chips { display:flex; flex-wrap:wrap; gap:6px; justify-content:center; padding:6px 8px 0; max-width:560px; margin:0 auto; }
.sm-search-chip { display:inline-flex; align-items:center; gap:4px; padding:3px 4px 3px 8px; border:1px solid var(--border); border-radius:14px; background:rgba(79,141,249,.12); color:var(--text); font-size:11.5px; line-height:1; }
.sm-search-chip-key { color:var(--primary); font-weight:600; }
.sm-search-chip-val { color:var(--text-dim); }
.sm-search-chip-x { border:0; background:transparent; color:var(--text-dim); cursor:pointer; font-size:14px; padding:0 4px; line-height:1; border-radius:50%; }
.sm-search-chip-x:hover { color:var(--text); background:rgba(255,255,255,.08); }
/* v3.117 (B17) quick filter chips */
.sm-qf-strip{display:none;flex-wrap:wrap;gap:6px;padding:0;max-width:760px;margin:0}
.sm-qf-strip.has-active{display:flex}
.sm-qf-strip .sm-qf-chip:not(.active){display:none}
.sm-top.qf-reveal .sm-qf-strip{display:flex;position:absolute;left:50%;top:calc(100% + 6px);transform:translateX(-50%);width:max-content;max-width:min(760px,calc(100vw - 32px));padding:8px;background:var(--bg-surface);border:1px solid var(--border);border-radius:14px;box-shadow:var(--shadow);z-index:75}
.sm-top.qf-reveal .sm-qf-strip .sm-qf-chip{display:inline-flex}
.sm-qf-chip{display:inline-flex;align-items:center;gap:5px;padding:4px 10px;border-radius:14px;background:transparent;border:1px solid var(--border);color:var(--text-dim);font-size:11.5px;line-height:1;cursor:pointer;user-select:none;transition:background .12s,color .12s,border-color .12s;font-family:inherit}
.sm-qf-chip:hover{color:var(--text);border-color:var(--primary);background:rgba(79,141,249,.08)}
.sm-qf-chip:focus-visible{outline:2px solid var(--primary);outline-offset:1px}
.sm-qf-chip.active{background:var(--grad-accent-deep,var(--primary));color:#fff;border-color:var(--primary)}
.sm-qf-chip.active:hover{background:var(--grad-accent-deep,var(--primary));color:#fff;opacity:.92}
/* S6.4: deep accent fill already paints #fff text on every theme. */
.sm-qf-chip-dot{width:5px;height:5px;border-radius:50%;background:currentColor;opacity:.55;flex-shrink:0}
.sm-qf-chip.active .sm-qf-chip-dot{background:#fff;opacity:.95}
@media(max-width:600px){.sm-qf-chip{padding:3px 8px;font-size:11px}}
/* v3.91 saved searches */
.sm-ssearch-row { padding-top:2px; }
.sm-ssearch-chip { display:inline-flex; align-items:center; gap:2px; padding:3px 4px 3px 4px; border:1px dashed var(--border); border-radius:14px; background:transparent; color:var(--text); font-size:11.5px; line-height:1; }
.sm-ssearch-link { color:var(--text-dim); text-decoration:none; padding:0 4px; }
.sm-ssearch-link:hover { color:var(--text); text-decoration:underline; }
.sm-ssearch-chip.active { border-style:solid; border-color:var(--primary); }
.sm-ssearch-chip.active .sm-ssearch-link { color:var(--primary); font-weight:600; }
.sm-ssearch-form { display:inline-flex; margin:0; padding:0; }
.sm-ssearch-x { border:0; background:transparent; color:var(--text-dim); cursor:pointer; font-size:14px; padding:0 4px; line-height:1; border-radius:50%; }
.sm-ssearch-x:hover { color:var(--text); background:rgba(255,255,255,.08); }
.sm-ssearch-save-form { display:inline-flex; margin:0 0 0 8px; padding:0; vertical-align:middle; }
.sm-ssearch-save { border:1px solid var(--border); background:transparent; color:var(--text-dim); font-size:11.5px; padding:3px 10px; border-radius:12px; cursor:pointer; line-height:1; }
.sm-ssearch-save:hover { color:var(--text); border-color:var(--primary); }
.sm-ssearch-saved-flag { color:var(--primary); font-size:11.5px; margin-left:8px; }
[data-theme*="-light"] .sm-search-chip { background:color-mix(in srgb, var(--accent) 18%, transparent); }
[data-theme*="-dark"] .sm-search-chip { background:rgba(79,141,249,.12); }
@media (max-width: 860px) { .sm-search-filter-btn { display:none; } }
/* v3.108 / C46: incremental-search debounce loading state.
   When .sm-search-loading is on the form, the input dims and a
   14px spinner fades in over the filter button. The spinner is
   positioned absolute on the .sm-search container (which has
   position:relative from .sm-search { ... position:relative }). */
.sm-search-loading input { opacity:.55; transition:opacity .15s; }
.sm-search-loading::after { content:""; position:absolute; right:34px; top:50%; transform:translateY(-50%); width:14px; height:14px; border:2px solid var(--text-dim); border-top-color:transparent; border-radius:50%; animation:sm-search-spin 0.9s linear infinite; opacity:.85; pointer-events:none; }
@keyframes sm-search-spin { to { transform:translateY(-50%) rotate(360deg); } }

.sm-top-right { display:flex; align-items:center; gap:12px; }
.sm-user { display:flex; align-items:center; gap:8px; font-size:13px; color:var(--text-dim); }
/* v3.79: forwarder more-toggle */
/* v3.74: H-menu dropdown */
.sm-user-menu { position:relative; }
.sm-user-btn { display:flex; align-items:center; gap:8px; background:none; border:none; cursor:pointer; color:inherit; font:inherit; padding:4px 8px; border-radius:8px; }
.sm-user-btn:hover { background:color-mix(in srgb, var(--accent) 20%, transparent); }
.sm-user-dropdown { position:absolute; top:calc(100% + 8px); right:0; min-width:240px; background:var(--bg2, var(--panel-bg,#1c2938)); border:1px solid var(--border); border-radius:12px; box-shadow:0 12px 40px rgba(0,0,0,.4); padding:10px; z-index:900; }
.sm-ud-sec { font-size:10px; text-transform:uppercase; letter-spacing:.6px; color:var(--text-dim); margin:8px 4px 4px; font-weight:700; }
.sm-identity-row { display:flex; align-items:center; gap:8px; width:100%; padding:7px 8px; border:none; background:none; color:var(--text); border-radius:8px; cursor:pointer; text-align:left; font-size:12.5px; }
.sm-identity-row:hover { background:color-mix(in srgb, var(--accent) 14%, transparent); }
.sm-identity-row.active { background:color-mix(in srgb, var(--accent) 22%, transparent); font-weight:600; }
.sm-identity-row .sm-avatar-sm { width:24px; height:24px; font-size:11px; }
.sm-ud-upload { display:block; padding:7px 8px; border-radius:8px; cursor:pointer; color:var(--text); font-size:12.5px; }
.sm-ud-upload:hover { background:color-mix(in srgb, var(--accent) 14%, transparent); }
.sm-avatar-sm { width:32px; height:32px; border-radius:50%; background:linear-gradient(135deg,var(--primary),#8b5cf6); display:flex; align-items:center; justify-content:center; font-size:13px; font-weight:700; color:var(--text-inverse); overflow:hidden; }
.sm-avatar-img { width:32px; height:32px; border-radius:50%; object-fit:cover; display:block; background:linear-gradient(135deg,var(--primary),#8b5cf6); }
.sm-logout { color:var(--text-dim); text-decoration:none; font-size:13px; padding:6px 12px; border-radius:8px; transition:all .15s; }
.sm-logout:hover { color:var(--text); background:var(--bg-surface-alt); }

/* v3.145.5: unified notification centre. Both notification and calendar
   badges belong to the one Notifications bell. The bell is the positioning
   anchor; without this, absolutely positioned badges attach to a distant
   ancestor and can appear beside Sign out. Explicit [hidden] rules prevent
   the flex declaration from exposing the initial zero-count badges. */
.sm-top #sm-notifs-btn { position:relative; overflow:visible; }
.sm-reminders-badge, .sm-notifs-badge { position:absolute; top:2px; right:1px; display:inline-flex; align-items:center; justify-content:center; min-width:15px; height:15px; padding:0 3px; margin:0; border-radius:8px; background:var(--badge-danger, var(--danger)); color:#fff; font-size:9.5px; font-weight:700; line-height:1; }
.sm-reminders-badge[hidden], .sm-notifs-badge[hidden] { display:none !important; }
[data-theme*="-dark"] .sm-reminders-badge { color:var(--text-inverse); background:var(--badge-danger, var(--danger)); }
.sm-rem-panel, .sm-notifs-panel { position:absolute; top:54px; right:14px; width:340px; max-height:480px; overflow-y:auto; background:var(--bg-surface); border:1px solid var(--border); border-radius:14px; box-shadow:0 12px 40px rgba(0,0,0,.18); z-index:60; font-family:inherit; }
  /* v3.136 (C40): notifications feed */
  .sm-notifs-panel ul { list-style:none; margin:0; padding:0; max-height:340px; overflow:auto; }
  .sm-notifs-panel li { padding:10px 14px; border-bottom:1px solid var(--border,#e5e7eb); display:flex; flex-direction:column; gap:2px; }
  .sm-notifs-panel li.unread { background:rgba(79,141,249,.08); }
  .sm-notifs-panel li.empty { color:var(--text-dim,#8a94a6); text-align:center; }
  .sm-notifs-panel li em { font-style:normal; font-weight:600; font-size:14px; color:var(--text,#111); }
  .sm-notifs-panel li small { font-size:12.5px; color:var(--text-dim,#8a94a6); }
  .sm-notifs-panel li time { font-size:11px; color:var(--text-dim,#8a94a6); }
  .sm-notifs-head { display:flex; align-items:center; gap:8px; padding:10px 14px; border-bottom:1px solid var(--border,#e5e7eb); }
  .sm-notifs-head strong { flex:1; font-size:13.5px; }
  .sm-notifs-head button { border:none; background:none; color:var(--primary,#4a8ad8); cursor:pointer; font-size:12.5px; padding:4px 6px; border-radius:6px; }
  .sm-notifs-head button:hover { background:rgba(79,141,249,.12); }

.sm-rem-panel[hidden] { display:none; }
.sm-rem-panel-head { display:flex; align-items:center; justify-content:space-between; padding:11px 14px; border-bottom:1px solid var(--border); font-size:13px; font-weight:700; color:var(--text); }
.sm-rem-panel-empty { padding:18px 14px; color:var(--text-dim); font-size:13px; text-align:center; }
.sm-rem-item { display:flex; align-items:flex-start; gap:10px; padding:10px 14px; border-bottom:1px solid var(--border); font-size:13px; }
.sm-rem-item:last-child { border-bottom:none; }
.sm-rem-item.overdue { background:rgba(245,158,11,.08); }
[data-theme*="-dark"] .sm-rem-item.overdue { background:rgba(245,158,11,.15); }
.sm-rem-item-info { flex:1; min-width:0; }
.sm-rem-item-title { font-weight:600; color:var(--text); margin-bottom:2px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.sm-rem-item-meta { font-size:11.5px; color:var(--text-dim); font-family:ui-monospace, Menlo, monospace; }
.sm-rem-item-actions { display:flex; gap:5px; flex:none; }
.sm-rem-item-btn { background:var(--bg-surface-alt); color:var(--text); border:1px solid var(--border); border-radius:7px; padding:4px 8px; font-size:11.5px; font-weight:600; cursor:pointer; font-family:inherit; }
.sm-rem-item-btn:hover { background:var(--grad-accent-deep, var(--primary)); color:#fff; border-color:transparent; }
.sm-rem-item-btn.primary { background:var(--grad-accent-deep, var(--primary)); color:#fff; border-color:transparent; }
.sm-rem-item-btn.primary:hover { filter:brightness(1.08); }


/* ===== Layout ===== */
/* v3.169.2 (Sami): sidebar back to full height - starts right under the topbar, nothing overlays its top; the bulk bar now spans only the list/read area. */.sm-app { display:flex; height:calc(100vh - 52px); margin-top:52px; }
.sm-side { width:264px; min-width:264px; background:var(--bg-surface); border-right:1px solid var(--border); border-top:3px solid rgba(255,255,255,.35); padding:0 10px 16px; overflow-y:scroll; scrollbar-gutter:stable; display:flex; flex-direction:column; scrollbar-width:thin; scrollbar-color:color-mix(in srgb, var(--text-dim) 45%, transparent) transparent; overscroll-behavior:contain; }
[data-theme$="-light"] .sm-side { border-top-color:rgba(0,0,0,.35); }
[data-theme$="-light"] .sm-list-head { border-top-color:rgba(0,0,0,.35); }
[data-theme$="-light"] .sm-read { border-color:rgba(0,0,0,.35); }
[data-theme$="-light"] .sm-list { border-right-color:rgba(0,0,0,.35); }
/* v3.145.7 (Sami): visible, slim scrollbar so long folder/forwarder lists
   advertise scrollability instead of silently clipping. */
.sm-side::-webkit-scrollbar { width:12px; }
.sm-side::-webkit-scrollbar-track { background:color-mix(in srgb, var(--text-dim) 14%, transparent); border-radius:6px; }
.sm-side::-webkit-scrollbar-thumb { background:color-mix(in srgb, var(--text-dim) 70%, var(--text) 20%); border-radius:6px; border:2px solid transparent; background-clip:padding-box; }
.sm-side::-webkit-scrollbar-thumb:hover { background:color-mix(in srgb, var(--text-dim) 55%, transparent); }
.sm-main { flex:1; display:flex; min-width:0; }
.sm-list { width:clamp(380px,29vw,440px); min-width:340px; border-right:3px solid rgba(255,255,255,.35); overflow-y:auto; background:var(--bg-page); isolation:isolate; }

/* v3.169.6 (Sami): reserve room for the fixed bulk bar so the top of the
   message list (folder name + select row) is never covered. The bar's real
   height (it wraps) is measured by JS into --bulkbar-h. */
.sm-main { padding-top: var(--bulkbar-h, 0px); }
.sm-list-head { position:sticky; top:0; z-index:20; background:var(--bg-surface); backdrop-filter:blur(14px); -webkit-backdrop-filter:blur(14px); border-bottom:1px solid var(--border); border-top:3px solid rgba(255,255,255,.35); }
body[data-theme$="-light"] .sm-list > .sm-list-head { background:rgba(255,255,255,.88); }
.sm-read { flex:1; overflow-y:auto; background:var(--bg-page); border:3px solid rgba(255,255,255,.35); border-radius:10px 10px 0 0; }

/* ===== Sidebar ===== */
.sm-compose-btn { display:flex; align-items:center; justify-content:center; gap:12px; width:100%; padding:13px 14px; background:var(--grad-accent-deep, var(--primary)); color:#fff; border:none; border-radius:24px; font-size:17px; font-weight:700; letter-spacing:.02em; cursor:pointer; box-shadow:inset 0 0 0 1px color-mix(in srgb, #ffffff 38%, transparent), 0 4px 16px color-mix(in srgb, var(--primary) 40%, transparent); transition:all .2s; margin-top:9px; margin-bottom:14px; }
.sm-compose-btn:hover { transform:translateY(-1px); box-shadow:0 6px 22px color-mix(in srgb, var(--primary) 55%, transparent); filter:saturate(1.08); }
/* v3.169.4 (Sami): sidebar group spacers - quiet light-gray hairlines that
   collapse the group above/below them on click. */
.sm-side-spacer {
  display:block;
  width:100%;
  height:2px;
  margin:10px 0;
  padding:0;
  border:none;
  border-radius:1px;
  background:rgba(160,170,185,.45);
  cursor:pointer;
  transition:background .15s ease, transform .15s ease;
}
.sm-side-spacer:hover { background:rgba(160,170,185,.85); transform:scaleY(1.6); }
.sm-side-spacer:focus-visible { outline:2px solid var(--primary); outline-offset:3px; }
/* v3.169.5 (Sami): sidebar back-to-top pill. Same capsule look as the new-mail
   pill but small, tucked at the bottom of the sidebar, only visible once the
   folder list is scrolled down. */
.sm-side-top {
  position:fixed;
  left:132px;
  bottom:18px;
  transform:translateX(-50%);
  z-index:300;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:44px;
  height:30px;
  font-size:14px;
  color:var(--primary-text,#fff);
  background:linear-gradient(135deg,var(--primary) 0%,var(--primary-hover) 100%);
  border:1px solid var(--primary);
  border-radius:999px;
  cursor:pointer;
  box-shadow:0 4px 14px rgba(0,0,0,.18), 0 0 0 3px rgba(79,141,249,.14);
  transition:transform .12s ease, box-shadow .12s ease;
  user-select:none;
}
.sm-side-top[hidden] { display:none !important; }
.sm-side-top:hover { transform:translateX(-50%) translateY(-1px); box-shadow:0 6px 18px rgba(0,0,0,.24), 0 0 0 4px rgba(79,141,249,.22); }
.sm-side-top:active { transform:translateX(-50%) translateY(0); }
.sm-side-top-icon { display:inline-block; animation:sm-side-top-bob 1.6s ease-in-out infinite; }
@keyframes sm-side-top-bob { 0%,100% { transform:translateY(0); } 50% { transform:translateY(-2px); } }
@media (prefers-reduced-motion: reduce) { .sm-side-top-icon { animation:none; } }
@media (max-width:860px) { .sm-side-top { left:50%; } }

.sm-folders { display:flex; flex-direction:column; gap:2px; margin-top:10px; }
.sm-folder { display:flex; align-items:center; gap:12px; padding:10px 14px; border-radius:10px; color:var(--text-dim); text-decoration:none; font-size:13.5px; cursor:pointer; transition:all .15s; border:none; background:none; width:100%; text-align:left; }
.sm-folder:hover { background:var(--bg-surface-alt); color:var(--text); }
.sm-folder.active { background:rgba(59,130,246,.14); color:var(--primary); font-weight:600; }
.sm-folder .fic { width:20px; text-align:center; opacity:.85; }
.sm-folder .cnt { background:var(--bg-input); color:var(--text-dim); font-size:11px; padding:2px 8px; border-radius:10px; }
.sm-folder.active .cnt { background:var(--grad-accent-deep, var(--primary)); color:#fff; }
.sm-folder .tot { background:transparent; color:var(--text-dim); font-size:11px; padding:2px 4px; border-radius:6px; opacity:.5; }
.sm-folder-cnt { margin-left:auto; display:flex; gap:4px; align-items:center; }
/* v3.154 (S1.1): folder manager panel */
.sm-folder-mgr > summary { list-style:none; cursor:pointer; opacity:.85; }
.sm-folder-mgr > summary::-webkit-details-marker { display:none; }
.sm-folder-mgr[open] > summary { opacity:1; }
.sm-folder-mgr-body { padding:6px 10px 10px 22px; display:flex; flex-direction:column; gap:6px; }
.sm-folder-mgr-new { display:flex; gap:6px; }
.sm-folder-mgr-new input[type=text] { flex:1; min-width:0; padding:5px 8px; border-radius:6px; border:1px solid var(--border); background:var(--bg-input); color:var(--text); font-size:12.5px; }
.sm-folder-mgr-row { display:flex; align-items:center; gap:4px; flex-wrap:wrap; }
.sm-folder-mgr-name { font-size:12px; color:var(--text-dim); flex:0 0 100%; margin-top:4px; }
.sm-folder-mgr-ren { display:flex; gap:4px; flex:1; min-width:0; }
.sm-folder-mgr-ren input[type=text] { flex:1; min-width:0; padding:4px 7px; border-radius:6px; border:1px solid var(--border); background:var(--bg-input); color:var(--text); font-size:12px; }
.sm-folder-mgr-btn { background:none; border:1px solid var(--border); border-radius:6px; padding:3px 7px; cursor:pointer; color:var(--text-dim); font-size:12px; }
.sm-folder-mgr-btn:hover { color:var(--text); border-color:var(--text-dim); }
.sm-side-title { font-size:11px; text-transform:uppercase; letter-spacing:.08em; color:var(--text-dim); padding:14px 14px 6px; }

/* v3.131: working collapse for the sidebar toggle. On <=860px the sidebar
   is a fixed slide-in drawer, so the rail layout is desktop-only and every
   rule here is scoped to min-width:861px — mobile is never reshaped by a
   persisted collapsed preference. Icon spans (.fic) carry meaning in rail
   mode; text nodes have no wrapper, hence the font-size:0 technique. */
@media (min-width:861px) {
  /* v3.145.5 (Sami): collapse no longer squeezes to an icon rail. The
     sidebar keeps its full width; the folder list slides UP out of view
     (max-height + opacity + translate) and the quota block settles to the
     bottom. Compose and the toggle stay put. Toggle again and the list
     slides back down. The class name "collapsed" is kept so the toggle JS,
     settings persistence, the "[" shortcut, PJAX re-init and server-side
     SideClass rendering work unchanged. */
  /* v3.145.7 (Sami): max-height + overflow:hidden clipped long folder lists
     (many forwarder labels) with NO scrollbar — invisible content. The slide
     now animates opacity+transform only; .sm-side keeps overflow-y:auto so
     the whole list stays reachable by scroll at any length. */
  /* B28 (Sami 2026-08-30): collapse hides ONLY the extra zone
     (Starred..Scheduled + forwarders). Inbox..Trash (.sm-folders) sit
     ABOVE the toggle and stay visible whether expanded or collapsed. */
  .sm-folders-extra { display:flex; flex-direction:column; gap:2px; margin-top:8px; transition:opacity .26s ease, transform .32s cubic-bezier(.4,0,.2,1); }
  .sm-side.collapsed .sm-folders-extra { max-height:0; overflow:hidden; opacity:0; transform:translateY(-14px); pointer-events:none; }
  .sm-quota { transition:margin-top .32s cubic-bezier(.4,0,.2,1); }
  .sm-side.collapsed .sm-quota { margin-top:auto; }
  /* base glyph ◀ (fold away) rotates to ▶ when collapsed */
  .sm-side.collapsed .sm-side-toggle { transform:rotate(180deg); }
}
/* B28r2 (Sami correction): "the button should be white" = the GLYPH is
   white — NO pill/field behind it. Original transparent button, subtle
   hover tint only. */
/* B28r4 (green-theme report): the sidebar's TEXT convention is
   var(--topbar-text) (labels: color-mix(--topbar-text 85%)), NOT var(--text)
   (dark ink). The glyph follows the labels so it reads white on the green
   theme and correct on every other theme, exactly like folder labels do. */
/* B28r3: the old &#9664; text glyph fell back to a symbol/emoji font that
   paints its own black and ignores CSS color. The glyph is now an inline
   SVG with fill=currentColor, so color:var(--text) genuinely controls it
   (white on dark themes). Rotation animation unchanged (CSS transform). */
.sm-side-toggle { flex:none; align-self:flex-end; width:30px; height:30px; display:inline-flex; align-items:center; justify-content:center; background:none; border:none; border-radius:8px; color:var(--topbar-text); cursor:pointer; transition:transform .2s ease, background .15s ease, color .15s ease; font-size:13px; line-height:1; }
.sm-side-toggle:hover { background:rgba(255,255,255,0.12); color:var(--topbar-text); }
.sm-side-toggle .sm-tg { display:block; flex:none; }

/* v3.110 (C35): drag-to-reorder sidebar folders. The .sm-folder-draggable
   cursor turns into a "grab" hand when over the row; dragging lifts the
   row with a subtle shadow; the drop target gets a horizontal accent
   line on whichever half of the row the cursor is over. */
.sm-folder-draggable { cursor: grab; }
.sm-folder-draggable:active { cursor: grabbing; }
.sm-folder-dragging { opacity: .35; transform: scale(.98); box-shadow: 0 6px 22px rgba(2,6,14,.32); }
.sm-folder-drop-before { box-shadow: inset 0 3px 0 0 var(--primary) !important; }
.sm-folder-drop-after  { box-shadow: inset 0 -3px 0 0 var(--primary) !important; }
/* Touch-friendly: on <= 480px screens, the drop indicator uses a
   slightly thicker line so it's visible against cramped rows. */
@media (max-width: 480px) {
  .sm-folder-drop-before { box-shadow: inset 0 4px 0 0 var(--primary) !important; }
  .sm-folder-drop-after  { box-shadow: inset 0 -4px 0 0 var(--primary) !important; }
}
.sm-quota { margin-top:auto; padding:14px; font-size:12px; color:var(--text-dim); border-top:1px solid var(--border); }
    .sm-quota-bar { height:6px; background:rgba(255,255,255,0.08); border-radius:3px; margin-top:8px; overflow:hidden; }
    .sm-quota-fill { height:100%; border-radius:3px; transition:width .4s ease; }
    .sm-quota-ok { background:linear-gradient(90deg,#34d399,#10b981); }
    .sm-quota-warn { background:linear-gradient(90deg,#fbbf24,var(--warning)); }
    .sm-quota-crit { background:linear-gradient(90deg,var(--danger),var(--danger)); }
    .sm-quota-text { margin-top:6px; font-size:11px; color:var(--text-dim); }
    .sm-quota-stacked .sm-quota-bar:first-child { margin-top:0; }
    .sm-quota-stacked .sm-quota-text + .sm-quota-bar { margin-top:4px; }

/* ===== Message list ===== */
/* v3.32 topbar select-all + filter-unread */
.sm-list-head-check { display:flex; align-items:center; padding-right:10px; cursor:pointer; }
.sm-list-head-check input { width:16px; height:16px; accent-color:var(--primary); cursor:pointer; }
[data-theme$="-light"] .sm-list-head-check input { accent-color:#ffffff; }
.sm-tb-select-all-top-active { background:var(--primary-soft) !important; border-color:var(--primary) !important; }
[data-theme$="-light"] .sm-tb-select-all-top-active { background:rgba(255,255,255,0.32) !important; border-color:#ffffff !important; }
#sm-unread-toggle.is-filtering { background:var(--primary-soft) !important; border-color:var(--primary) !important; color:var(--primary-text) !important; }
[data-theme$="-light"] #sm-unread-toggle.is-filtering { background:color-mix(in srgb, var(--topbar-text) 32%, transparent) !important; border-color:var(--topbar-text) !important; color:#ffffff !important; }
.sm-list-head { display:flex; align-items:center; justify-content:space-between; padding:7px 18px; border-radius:10px 10px 0 0; }
.sm-list-title { font-size:13px; font-weight:600; color:var(--text); letter-spacing:-.005em; }
.sm-pager { display:flex; gap:6px; align-items:center; font-size:12px; color:var(--text-dim); }
.sm-pager a { color:var(--text-dim); text-decoration:none; padding:4px 10px; border-radius:6px; transition:all .15s; }
.sm-pager a:hover { background:var(--bg-surface-alt); color:var(--text); }
.sm-row { display:flex; gap:12px; min-height:76px; padding:13px 16px; border-bottom:1px solid var(--border); cursor:pointer; transition:background .18s ease, transform .1s ease, box-shadow .18s ease; position:relative; align-items:flex-start; }
.sm-row:hover { background:var(--bg-hover); box-shadow:inset 3px 0 0 color-mix(in srgb, var(--primary) 55%, transparent); }
.sm-row:active { transform:scale(.995); }
.sm-row.active { background:var(--primary-soft); box-shadow:inset 3px 0 0 var(--primary); }
.sm-row.unread { background:color-mix(in srgb, var(--primary) 7%, transparent); }
.sm-row.unread .sm-r-sub, .sm-row.unread .sm-r-from { font-weight:700; color:var(--text); }
.sm-row:not(.unread) .sm-r-sub { color:var(--text-dim); font-weight:400; }
.sm-row:not(.unread) .sm-r-from { color:var(--text-dim); font-weight:400; }
/* Unread dot — Gmail-style blue pill on the left edge of unread rows */
.sm-row.unread::before { content:''; position:absolute; left:0; top:14px; bottom:14px; width:3px; border-radius:2px; background:var(--primary); }
/* Checkbox always visible (Sami 09-17: hover-only checkboxes hid bulk
   select on touch; v3.151) — quiet idle, full on hover */
.sm-r-check { opacity:.45; transition:opacity .15s; }
.sm-row:hover .sm-r-check, .sm-r-check:has(input:checked), .sm-list.has-selection .sm-r-check { opacity:1; }
/* v3.151 select-same-sender micro-button in the checkbox column */
.sm-r-same { display:inline-flex; align-items:center; justify-content:center; width:22px; height:22px; margin-right:2px; border:none; border-radius:6px; background:transparent; color:var(--text-dim); cursor:pointer; opacity:.45; transition:opacity .15s, background .12s, color .12s; font-size:13px; line-height:1; padding:0; flex:none; }
.sm-row:hover .sm-r-same, .sm-list.has-selection .sm-r-same { opacity:.7; }
.sm-r-same:focus-visible { outline:2px solid var(--primary); outline-offset:1px; opacity:1; }
.sm-r-same:hover { opacity:1 !important; background:var(--primary-soft); color:var(--primary); }
.sm-r-same:active { transform:scale(.92); }
/* Keyboard-highlighted row */
.sm-kbd-active { outline:none; background:rgba(59,130,246,.14) !important; box-shadow:inset 3px 0 0 var(--primary); }
/* Navigation feedback: dim content while the next page loads */
html.sm-nav-away .sm-list, html.sm-nav-away .sm-read { opacity:.45; transition:opacity .2s; pointer-events:none; }
/* B27: safety valve — if a soft-nav ever leaves the dim stuck >8s it is a bug; JS clears it. */
html.sm-nav-stuck .sm-list, html.sm-nav-stuck .sm-read { opacity:1; pointer-events:auto; }
/* Print: only the read pane, clean white layout */
@media print {
  .sm-top, .sm-side, .sm-list, .sm-bulk-bar, .sm-help-overlay, .sm-toast, .sm-menu-btn, .sm-search { display:none !important; }
  .sm-main { display:block !important; }
  .sm-read { display:block !important; position:static !important; inset:auto !important; width:100% !important; }
  .sm-read-inner { max-width:100% !important; padding:0 !important; }
  .sm-actions { display:none !important; }
  body { background:var(--text-inverse) !important; }
  .sm-body, .sm-read-subject, .sm-read-from, .sm-read-addr { color:#111 !important; }
  .sm-body a { color:#0645ad !important; }
  .sm-body .sm-quote { border-left:2px solid var(--text-faint) !important; background:none !important; color:var(--text) !important; }
  .sm-read-head { border-bottom:1px solid #ccc !important; }
}
/* Toast (v3.77 SnackBar stack) */
.sm-toast { display:none; }
body[data-theme$="-light"] .sm-toast { background: transparent; }
.sm-r-av { width:38px; height:38px; min-width:38px; border-radius:50%; display:flex; align-items:center; justify-content:center; font-size:14px; font-weight:700; color:var(--text-inverse); position:relative; overflow:hidden; }
.sm-r-av img { position:absolute; inset:0; width:100%; height:100%; border-radius:50%; object-fit:cover; }
.sm-r-body { flex:1; min-width:0; }
.sm-r-top { display:flex; align-items:baseline; gap:8px; }
.sm-r-from { font-size:13.5px; font-weight:400; color:var(--text); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.sm-r-date { margin-left:auto; font-size:11.5px; color:var(--text-dim); white-space:nowrap; }
.sm-r-sub { font-size:13.5px; font-weight:400; color:var(--text); margin:3px 0 2px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.sm-r-prev { font-size:12.5px; color:var(--text-dim); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.sm-r-flag { position:absolute; right:14px; bottom:10px; color:var(--warning); font-size:13px; }
.sm-empty { display:flex; flex-direction:column; align-items:center; justify-content:center; padding:64px 24px; color:var(--text-dim); gap:10px; text-align:center; }
.sm-empty-art { width:120px; height:96px; display:grid; place-items:center; margin-bottom:2px; border-radius:26px; background:linear-gradient(145deg, color-mix(in srgb, var(--primary) 12%, var(--bg-surface-alt)), var(--bg-surface)); border:1px solid color-mix(in srgb, var(--primary) 22%, var(--border)); box-shadow:var(--shadow-soft); }
.sm-empty-art svg { width:104px; height:82px; overflow:visible; }
.sm-empty-art .line { fill:none; stroke:var(--text-dim); stroke-width:3; stroke-linecap:round; stroke-linejoin:round; }
.sm-empty-art .wash { fill:color-mix(in srgb, var(--primary) 13%, transparent); stroke:none; }
.sm-empty-art .accent { fill:color-mix(in srgb, var(--primary) 32%, transparent); stroke:var(--primary); stroke-width:2; stroke-linejoin:round; }
.sm-empty-art .badge { fill:var(--primary); }
.sm-empty-art .check { fill:none; stroke:#fff; stroke-width:4; stroke-linecap:round; stroke-linejoin:round; }
.sm-empty-art .spark { fill:none; stroke:var(--primary); stroke-width:3; stroke-linecap:round; }
.sm-empty-title { color:var(--text); font-size:16px; font-weight:700; margin-top:4px; }
.sm-empty-copy { max-width:360px; font-size:13px; line-height:1.55; }
.sm-empty-compact { padding:18px 10px 14px; gap:7px; }
.sm-empty-compact .sm-empty-art { width:92px; height:72px; border-radius:20px; }
.sm-empty-compact .sm-empty-art svg { width:80px; height:62px; }
.sm-empty-compact .sm-empty-title { font-size:14px; }
.sm-empty-compact .sm-empty-copy { font-size:12px; max-width:270px; }
.sm-empty-tip { margin-top:6px; padding:7px 11px; border-radius:999px; background:var(--bg-surface-alt); border:1px solid var(--border); color:var(--text-dim); font-size:11.5px; }

/* v3.106 (C44): Quick-reply chips — small pill row above the
   inline reply body. Renders only when the inline reply form is
   open. Interactive feedback on hover/active; keyboard focus
   ring matches the global --primary outline. */
.sm-qreply-chips { display:flex; flex-wrap:wrap; gap:6px; margin:8px 0 6px; padding:4px 2px; min-height:6px; }
.sm-qreply-chip { display:inline-flex; align-items:center; gap:6px; padding:5px 11px; border:1px solid var(--border); border-radius:999px; background:var(--bg-surface); color:var(--text); font:inherit; font-size:12.5px; font-weight:500; cursor:pointer; transition:all .12s ease; line-height:1; user-select:none; }
.sm-qreply-chip:hover { border-color:var(--primary); color:var(--text); background:var(--primary-soft); transform:translateY(-1px); box-shadow:0 2px 8px rgba(2,6,14,.18); }
.sm-qreply-chip:active { transform:translateY(0); background:var(--bg-surface-alt); }
.sm-qreply-chip:focus-visible { outline:2px solid var(--primary); outline-offset:2px; }
.sm-qreply-chip.is-active { border-color:var(--primary); background:var(--primary-soft); color:var(--text); }
.sm-qreply-chip[data-chip-id="clear"] { color:var(--text-dim); }
.sm-qreply-chip[data-chip-id="clear"]:hover { color:var(--danger); border-color:rgba(239,68,68,.45); background:rgba(239,68,68,.08); }
.sm-qreply-chip .ico { font-size:14px; line-height:1; }

/* v3.106: minimal styling for the inline-reply form so the
   chips + textarea + send button sit consistently. Original
   ship had no .sm-inline-reply rule — relied on inherited form
   styles which made the chips hard to position visually. */
.sm-inline-reply { display:flex; flex-direction:column; gap:8px; margin-top:18px; padding:16px 18px; background:var(--bg-surface); border:1px solid var(--border); border-radius:14px; box-shadow:var(--shadow-soft, 0 2px 10px rgba(0,0,0,.04)); }
.sm-inline-reply[hidden] { display:none !important; }
.sm-ir-head { display:flex; align-items:center; justify-content:space-between; gap:10px; }
.sm-ir-label { font-size:13px; color:var(--text-dim); }
.sm-ir-label b { color:var(--text); font-weight:600; }
.sm-ir-x { background:transparent; border:0; color:var(--text-dim); cursor:pointer; font-size:14px; padding:4px 8px; border-radius:6px; font-family:inherit; line-height:1; }
.sm-ir-x:hover { background:var(--bg-input); color:var(--danger); }
.sm-ir-to, .sm-ir-subject, .sm-ir-body { width:100%; padding:9px 12px; border-radius:8px; border:1px solid var(--border); background:var(--bg-input); color:var(--text); font:inherit; font-size:14px; }
.sm-ir-body { resize:vertical; min-height:120px; line-height:1.5; }
.sm-ir-to:focus:not(:focus-visible), .sm-ir-subject:focus:not(:focus-visible), .sm-ir-body:focus:not(:focus-visible) { outline:none; border-color:var(--primary); box-shadow:0 0 0 3px var(--primary-soft); }
.sm-ir-foot { display:flex; align-items:center; gap:10px; }
.sm-ir-send { padding:8px 18px; border-radius:8px; border:1px solid var(--primary); background:var(--grad-accent-deep, var(--primary)); color:#fff; cursor:pointer; font:inherit; font-weight:600; font-size:13.5px; }
.sm-ir-send:hover { filter:brightness(1.08); }
.sm-ir-send[disabled] { opacity:.5; cursor:not-allowed; }
.sm-ir-status { font-size:12.5px; color:var(--text-dim); }

/* ===== Reading pane ===== */
.sm-read-inner { max-width:860px; margin:0 auto; padding:28px 32px 60px; }
.sm-read-head { padding:20px 0 16px; border-bottom:1px solid var(--border); margin-bottom:20px; }
.sm-read-subject { font-size:21px; font-weight:700; line-height:1.3; margin-bottom:14px; }
.sm-badge { display:inline-block; font-size:10.5px; font-weight:600; padding:2px 8px; border-radius:20px; vertical-align:middle; margin-left:6px; letter-spacing:.02em; }
.sm-badge-signed { background:var(--success-soft); color:var(--success); border:1px solid rgba(52,211,153,.35); }
.sm-badge-dkim { background:rgba(59,130,246,.12); color:var(--info); border:1px solid rgba(96,165,250,.3); }
.sm-read-meta { display:flex; align-items:center; gap:12px; }
.sm-read-av { width:44px; height:44px; border-radius:50%; display:flex; align-items:center; justify-content:center; font-weight:700; color:var(--text-inverse); font-size:16px; }
.sm-read-who { flex:1; min-width:0; }
.sm-read-from { font-size:14px; font-weight:600; }
.sm-read-addr { font-size:12.5px; color:var(--text-dim); }
.sm-read-date { font-size:12px; color:var(--text-dim); text-align:right; }
.sm-actions { display:flex; gap:6px; margin:16px 0 0; padding-top:16px; border-top:1px solid var(--border); flex-wrap:wrap; align-items:center; }
/* v3.146 (B26): one-click unsubscribe pill */
.sm-unsub { display:inline-flex; align-items:center; gap:6px; }
.sm-unsub-status { font-size:12.5px; color:var(--text-dim); align-self:center; }
.sm-act { display:inline-flex; align-items:center; gap:7px; padding:8px 14px; background:rgba(22,32,46,.55); border:1px solid var(--border); color:var(--text-dim); border-radius:20px; font-size:12.5px; cursor:pointer; text-decoration:none; transition:all .18s cubic-bezier(.2,.7,.3,1); backdrop-filter:blur(6px); }
.sm-act:hover { color:var(--text); background:var(--bg-hover); border-color:var(--border-strong); transform:translateY(-1px); box-shadow:0 3px 10px rgba(2,6,14,.35); }
.sm-act:active { transform:translateY(0); }
/* v3.145.2 (Sami): the Add-to-calendar CTA rendered as a generic oversized
   primary pill that clashed with the theme. It now uses the compose-button
   DNA (theme gradient + theme text color, same compact size/radius as its
   read-pane siblings) so it reads as THE primary action yet stays native. */
.sm-addcal-btn {
  background: var(--grad-accent-deep, var(--primary));
  color: #fff;
  border: none;
  border-radius: 18px;
  padding: 7px 16px;
  font-size: 12.5px;
  font-weight: 600;
  box-shadow: 0 2px 10px color-mix(in srgb, var(--primary) 35%, transparent);
}
.sm-addcal-btn:hover { filter: brightness(1.08); transform: translateY(-1px); box-shadow: 0 4px 14px color-mix(in srgb, var(--primary) 45%, transparent); }
.sm-addcal-btn:active { transform: translateY(0); filter: brightness(.97); }
/* v3.145.2 (Sami): the read-pane action pills (Print / Raw / Reply / Forward /
   Back …) adopt the same compose-gradient DNA so the whole row shares one
   accent language: theme gradient fill, theme text color, compact pills.
   Keyboard-hint chips inside them invert to translucent white for legibility. */
.sm-act {
  background: var(--grad-accent-deep, var(--primary));
  color: #fff;
  border: none;
  box-shadow: 0 2px 10px color-mix(in srgb, var(--primary) 30%, transparent);
}
.sm-act:hover { background: var(--grad-accent-deep, var(--primary)); color: #fff; filter: brightness(1.08); transform: translateY(-1px); box-shadow: 0 4px 14px color-mix(in srgb, var(--primary) 42%, transparent); }
.sm-act .kbd { background: rgba(255,255,255,.22); border-color: rgba(255,255,255,.35); color: var(--primary-text, #fff); }
/* v3.145.4: the snooze <select> carries .sm-act but is a form control — it
   needs explicit font inheritance, else it renders in the UA font. */
select.sm-snooze-wake { font-family: inherit; }
/* v3.145.5 font parity (Sami): every action pill — links, buttons and the
   snooze select — draws from one declaration. Form controls do not inherit
   the document font by default, so the bottom-row pills (Mute / Expand all
   quotes / Add VIP / Add to Tasks / Snooze) rendered in the UA font while
   the top row (Print / Raw / Reply...) inherited Sami Grotesk via the <a>
   default. Placed after the theme blocks; nothing may override it. */
.sm-actions .sm-act,
.sm-actions button.sm-act,
.sm-actions select.sm-act,
form .sm-act,
.sm-folders button,
.sm-side-toggle {
  font-family: var(--font-ui);
}
/* v3.145.2: the legacy light-theme white-pill overrides for .sm-act are
   superseded (they out-specify the gradient rules above and revert the
   compose-gradient look on every -light theme). */
body[data-theme$="-light"] .sm-act { background: var(--grad-accent-deep, var(--primary)); border-color: transparent; color: #fff; }
body[data-theme$="-light"] .sm-act:hover { background: var(--grad-accent-deep, var(--primary)); border-color: transparent; color: #fff; filter: brightness(1.08); }

.sm-act.danger:hover { color:var(--danger); border-color:rgba(239,68,68,.45); background:rgba(239,68,68,.1); }
/* v3.145.4: destructive pills (Delete / Block / Junk) get a solid danger-red
   fill so they read as destructive on every theme — previously Junk's inline
   color:var(--red) resolved to nothing (themes define --danger, not --red)
   and it was nearly invisible. */
.sm-act.danger { background: var(--badge-danger, #dc2626); color:#fff; border:none; box-shadow: 0 2px 10px color-mix(in srgb, var(--badge-danger, #dc2626) 35%, transparent); }
.sm-act.danger:hover { background: var(--badge-danger, #dc2626); color:#fff; transform: translateY(-1px); }
.sm-act.gold { color:var(--gold-text, #ffe082); }
/* v3.145.4: Not Junk (success action, junk folders only) — green fill mirroring .danger */
.sm-act.sm-notjunk-btn { background:#047857; color:#fff; border:none; }
/* v3.170: Not Junk leads the junk-folder bulk toolbar — green fill so the
   primary recovery action reads instantly (Sami could not find it when it
   trailed Cancel at the far end of a filled toolbar). */
.sm-tb-btn.sm-notjunk-tb { background:#047857; color:#fff; border:none; font-weight:600; }
.sm-tb-btn.sm-notjunk-tb:hover { filter: brightness(1.08); transform: translateY(-1px); }
.sm-act.sm-notjunk-btn:hover { filter: brightness(1.08); transform: translateY(-1px); }
.sm-act .kbd { display:inline-block; font-size:10px; padding:1px 5px; margin-left:6px; background:var(--bg-input); border:1px solid var(--border); border-radius:4px; color:var(--text-dim); font-family:ui-monospace,monospace; vertical-align:middle; }
.sm-act:hover .kbd { color:var(--text); }
.sm-body { font-family:var(--font-email); font-size:14.5px; line-height:1.7; color:var(--text); overflow-wrap:break-word; }
.sm-body img { max-width:100%; border-radius:8px; }
.sm-body a { color:var(--primary); }
.sm-body pre { font-family:var(--font-neat); background:var(--bg-surface-alt); padding:14px; border-radius:8px; overflow-x:auto; font-size:13px; }
.sm-body blockquote { border-left:3px solid var(--border); margin:10px 0; padding:4px 14px; color:var(--text-dim); }
.sm-quote-wrap { margin:6px 0; }
.sm-quote-wrap > summary { list-style:none; cursor:pointer; user-select:none; padding:5px 10px; margin:0 0 4px; font-size:12.5px; color:var(--text-dim); border:1px dashed var(--border); border-radius:7px; background:var(--bg-surface-alt); display:inline-block; }
.sm-quote-wrap > summary::-webkit-details-marker { display:none; }
.sm-quote-wrap > summary::before { content:"\25BC \2003"; font-size:10px; opacity:.65; }
.sm-quote-wrap[open] > summary::before { content:"\25B6 \2003"; }
.sm-quote-wrap > summary:hover { color:var(--primary); border-color:var(--primary); background:var(--bg-input); }
iframe.sm-mail-frame .sm-quote-wrap > summary { color:#555; border-color:#d9d9d9; background:#f7f7f7; }
iframe.sm-mail-frame .sm-quote-wrap > summary:hover { color:#0b57d0; border-color:#0b57d0; background:#eef4ff; }
.sm-quote-all-btn { padding:5px 10px; }


/* ===== v3.8 Paper view — authored HTML email ===== */
.sm-paper { margin:18px 0 8px; background:var(--text-inverse); border:1px solid rgba(120,140,170,.25); border-radius:var(--radius); box-shadow:var(--shadow-soft), 0 0 0 4px rgba(79,141,249,.04); overflow:hidden; }
iframe.sm-mail-frame { display:block; width:100%; height:340px; border:0; background:var(--text-inverse); }
iframe.sm-mail-frame.loaded { background:var(--text-inverse); }
.sm-read-body-slot { position:relative; }
/* Gmail-style quoted block from plain-text emails */
.sm-body .sm-quote { border-left:3px solid var(--border); background:var(--bg-surface-alt); border-radius:0 8px 8px 0; margin:12px 0; padding:10px 16px; color:var(--text-dim); font-size:13.5px; white-space:pre-wrap; }
.sm-body .sm-quote .sm-quote { background:transparent; padding:2px 10px; }
.sm-body hr.sm-sep { border:none; border-top:1px solid var(--border); margin:16px 0; }
.sm-body hr.sm-sep.sig { opacity:.5; margin:12px 0 8px; }
/* Constrain HTML email layout: marketing tables & fixed-width containers
   must scroll inside the pane, not blow out the layout. */
.sm-body table { max-width:100%; display:block; overflow-x:auto; }
.sm-body .sm-overflow-guard { max-width:100%; overflow-x:auto; }
.sm-body p { margin:0 0 12px; }
.sm-att { display:flex; align-items:center; gap:10px; padding:12px 16px; background:var(--bg-surface-alt); border:1px solid var(--border); border-radius:10px; margin:8px 8px 8px 0; color:var(--text); text-decoration:none; font-size:13px; transition:all .15s; }
.sm-att:hover { background:var(--bg-input); }
/* v3.23 per-row overflow menu */
.sm-r-more { position:relative; margin-left:6px; align-self:flex-start; }
.sm-r-more-btn { background:none; border:none; color:var(--text-dim); font-size:17px; cursor:pointer; padding:2px 7px; border-radius:6px; line-height:1; }
.sm-r-more-btn:hover { background:var(--bg-input); color:var(--text); }
.sm-r-menu { display:none; position:absolute; right:0; top:26px; z-index:50; background:var(--bg-surface-alt); border:1px solid var(--border); border-radius:10px; box-shadow:0 8px 24px rgba(0,0,0,.35); padding:5px; min-width:150px; }
.sm-r-menu.open { display:block; }
.sm-r-menu form { margin:0; }
.sm-r-menu button, .sm-r-menu a { display:block; width:100%; text-align:left; background:none; border:none; color:var(--text); font-size:12.5px; padding:7px 12px; border-radius:7px; cursor:pointer; text-decoration:none; }
.sm-r-menu button:hover, .sm-r-menu a:hover { background:var(--bg-input); }
/* v3.22 attachment preview lightbox */
.sm-prev-overlay { position:fixed; inset:0; background:rgba(0,0,0,.72); z-index:1000; display:none; align-items:center; justify-content:center; padding:24px; }
.sm-prev-overlay.open { display:flex; }
.sm-prev-box { background:var(--bg-surface-alt); border:1px solid var(--border); border-radius:12px; max-width:920px; width:100%; max-height:92vh; display:flex; flex-direction:column; overflow:hidden; }
.sm-prev-head { display:flex; align-items:center; gap:10px; padding:12px 16px; border-bottom:1px solid var(--border); }
.sm-prev-head .nm { font-size:13.5px; font-weight:600; flex:1; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.sm-prev-body { flex:1; overflow:auto; display:flex; align-items:center; justify-content:center; background:rgba(0,0,0,.15); min-height:240px; }
.sm-prev-body img { max-width:100%; max-height:76vh; }
.sm-prev-body iframe { width:100%; height:76vh; border:0; }
.sm-prev-foot { padding:8px 16px; font-size:12px; color:var(--text-dim); }
.sm-att .aico { font-size:18px; }
/* Folder badge on search-result rows */
.sm-r-box { display:inline-block; margin-left:8px; padding:1px 8px; background:var(--grad-accent-deep, var(--primary)); color:#fff; border-radius:9px; font-size:10.5px; font-weight:600; letter-spacing:.3px; vertical-align:middle; opacity:.85; }

/* ===== Compose ===== */
.sm-comp-overlay { position:fixed; inset:0; background:rgba(5,8,12,.66); backdrop-filter:blur(6px); z-index:100; display:flex; align-items:center; justify-content:center; padding:28px 24px; }
.sm-comp { width:min(920px,100%); max-height:calc(100vh - 96px); background:var(--bg-surface); border:1px solid color-mix(in srgb, var(--primary) 22%, var(--border)); border-top:3px solid var(--grad-accent, var(--primary)); border-radius:20px; box-shadow:0 24px 64px rgba(2,6,16,.34), 0 0 0 1px color-mix(in srgb, var(--primary) 6%, transparent); display:flex; flex-direction:column; overflow:hidden; animation:pop .18s ease; }
@keyframes pop { from{transform:scale(.96);opacity:0} to{transform:scale(1);opacity:1} }
.sm-comp-head { display:flex; align-items:center; justify-content:space-between; padding:18px 24px 16px; border-bottom:1px solid var(--border); background:linear-gradient(90deg, color-mix(in srgb, var(--primary) 10%, transparent), transparent 60%); font-weight:650; font-size:15.5px; letter-spacing:.01em; }
.sm-comp-head a { color:var(--text-dim); text-decoration:none; font-size:18px; }
.sm-comp-body { padding:22px 24px 18px; overflow-y:auto; display:flex; flex-direction:column; gap:2px; }
/* 2026-09-16: theme-pass — inputs pick up the active theme accent */
/* (merged into .sm-comp field rules above) */
.sm-comp-body input:focus:not(:focus-visible), .sm-comp-body textarea:focus:not(:focus-visible) { outline:none; border-color:var(--primary); box-shadow:0 0 0 3px color-mix(in srgb, var(--primary) 16%, transparent); }
.sm-comp textarea::placeholder, .sm-comp input::placeholder { color:var(--text-faint, var(--text-dim)); }
.sm-comp input[type="text"], .sm-comp input:not([type]), .sm-comp textarea { width:100%; background:var(--bg-surface-alt); border:1px solid var(--border); border-radius:12px; padding:13px 16px; color:var(--text); font-size:14.5px; margin-bottom:14px; transition:border-color .15s, box-shadow .15s, background .15s; font-family:inherit; }
.sm-comp input[type="text"]:hover, .sm-comp input:not([type]):hover, .sm-comp textarea:hover { border-color:color-mix(in srgb, var(--primary) 38%, var(--border)); }
.sm-comp input:focus:not(:focus-visible), .sm-comp input:focus-visible, .sm-comp textarea:focus:not(:focus-visible), .sm-comp textarea:focus-visible { border-color:var(--primary); background:var(--bg-surface); box-shadow:0 0 0 3px color-mix(in srgb, var(--primary) 14%, transparent); }
/* To / Cc / Bcc share one visual group: separated by hairlines, no gaps */
.sm-comp .sm-ac-wrap { margin-bottom:0; }
.sm-comp .sm-ac-wrap + .sm-ac-wrap,
.sm-comp .sm-bcc-row { margin-top:-14px; }
.sm-comp .sm-ac-wrap input, .sm-comp .sm-bcc-row input { border-radius:0; }
.sm-comp .sm-ac-wrap:first-of-type input { border-radius:12px 12px 0 0; }
.sm-comp .sm-bcc-row input { border-radius:0; }
.sm-comp .sm-bcc-toggle { display:inline-block; margin:-6px 0 14px 2px; font-size:12.5px; font-weight:600; color:var(--primary); text-decoration:none; }
.sm-comp .sm-bcc-toggle:hover { text-decoration:underline; }
.sm-comp .sm-from-row { margin-bottom:14px; }
.sm-comp input:focus:not(:focus-visible), .sm-comp textarea:focus:not(:focus-visible) { outline:none; border-color:var(--primary); }
.sm-comp input#sm-subject { font-size:16px; font-weight:600; padding:14px 16px; margin-top:16px; }
.sm-comp textarea { min-height:340px; resize:vertical; line-height:1.65; font-size:14.5px; }
.sm-comp .sm-receipt-row { margin:-4px 0 14px; font-size:12.5px; color:var(--text-dim); display:flex; gap:16px; align-items:center; }
.sm-comp .sm-receipt-row label { display:inline-flex; gap:6px; align-items:center; cursor:pointer; }
@media (max-width:700px) { .sm-comp { max-height:calc(100vh - 72px); border-radius:12px; } .sm-comp textarea { min-height:220px; } }
.sm-comp-foot { display:flex; justify-content:flex-end; align-items:center; gap:10px; padding:16px 24px 18px; border-top:1px solid var(--border); background:color-mix(in srgb, var(--bg-surface-alt) 55%, transparent); }
.sm-send-btn { padding:11px 28px; background:var(--grad-accent-deep); border:none; color:#fff; border-radius:22px; font-size:14px; font-weight:600; cursor:pointer; box-shadow:0 4px 16px color-mix(in srgb, var(--primary) 40%, transparent); transition:all .2s; }
.sm-send-btn:hover { transform:translateY(-1px); box-shadow:0 6px 20px rgba(79,141,249,.55); }
.sm-ghost-btn { padding:11px 20px; background:none; border:1px solid var(--border); color:var(--text-dim); border-radius:22px; font-size:13px; cursor:pointer; text-decoration:none; display:inline-block; transition:all .15s; }
.sm-ghost-btn:hover { color:var(--text); border-color:var(--border); }

/* ===== Toast stack (v3.77 SnackBar) ===== */
.sm-toasts { position:fixed; top:14px; right:14px; display:flex; flex-direction:column; gap:8px; max-width:min(380px, calc(100vw - 28px)); z-index:600; pointer-events:none; }
.sm-toast-item { pointer-events:auto; display:flex; align-items:center; gap:8px; padding:10px 12px; background:var(--bg-input); color:var(--text); border:1px solid var(--border); border-left:3px solid var(--primary); border-radius:10px; box-shadow:var(--shadow); font-size:13px; line-height:1.35; animation:sm-toast-slide-in .22s ease; min-width:240px; }
.sm-toast-item.sm-toast-success { border-left-color:var(--success); }
.sm-toast-item.sm-toast-warn    { border-left-color:#f59e0b; }
.sm-toast-item.sm-toast-error   { border-left-color:#ef4444; }
.sm-toast-msg { flex:1; min-width:0; overflow-wrap:anywhere; }
.sm-toast-act { background:none; border:none; color:var(--primary); font-weight:700; cursor:pointer; font-size:13px; padding:2px 6px; margin-left:4px; border-radius:6px; }
.sm-toast-act:hover { background:rgba(59,130,246,.12); }
.sm-toast-x   { background:none; border:none; color:var(--text-faint); font-size:18px; line-height:1; cursor:pointer; padding:0 4px; border-radius:6px; }
.sm-toast-x:hover { color:var(--text); background:rgba(255,255,255,.06); }
.sm-toast-item.hiding { opacity:0; transform:translateX(8px); transition:opacity .25s, transform .25s; }
@keyframes sm-toast-slide-in { from { opacity:0; transform:translateX(10px); } to { opacity:1; transform:translateX(0); } }
body[data-theme$="-light"] .sm-toast-item { background:var(--bg-surface); color:var(--text); }

/* ===== Responsive ===== */
.sm-menu-btn { display:none; background:none; border:none; color:var(--text); font-size:20px; cursor:pointer; padding:4px 8px; border-radius:8px; }
.sm-menu-btn:hover { background:var(--bg-surface-alt); }
.sm-read-back { display:none; }
@media (max-width:1100px) { .sm-list { width:320px; } }
@media (max-width:860px) {
  .sm-menu-btn { display:block; }
  .sm-read { display:none; } .sm-list { flex:1; width:auto; border-right:none; }
  .sm-read.open { display:block; position:fixed; inset:52px 0 0 0; z-index:50; background:var(--bg-page); }
  .sm-side { position:fixed; left:-280px; z-index:60; transition:left .25s; height:calc(100vh - 52px); }
  .sm-side.open { left:0; box-shadow:var(--shadow); }
  .sm-read-back { display:inline-flex; }
  .sm-search { display:none; }
  .sm-read-inner { padding:16px 14px 40px; }
  /* v3.107 (C34): bulk-bar slides UNDER the open read pane (was racing at z-index:40) */
  .sm-bulk-bar { z-index:35; }
  /* v3.107 (C34): backdrop overlay behind the open sidebar */
  .sm-mobile-backdrop { position:fixed; inset:52px 0 0 0; background:rgba(5,8,12,.55); z-index:55; opacity:0; pointer-events:none; transition:opacity .2s ease; -webkit-tap-highlight-color:transparent; }
  .sm-mobile-backdrop.on { opacity:1; pointer-events:auto; }
  /* v3.107 (C34): topbar right-side action overflow menu on <=480px */
  .sm-top-overflow { display:none; }
  .sm-top-overflow-menu { position:absolute; top:calc(100% + 6px); right:0; background:var(--bg-surface); border:1px solid var(--border); border-radius:12px; box-shadow:var(--shadow); padding:6px; min-width:200px; z-index:80; }
  .sm-top-overflow-menu[hidden] { display:none !important; }
  .sm-top-overflow-item { display:flex; align-items:center; gap:10px; width:100%; padding:8px 10px; background:transparent; border:0; border-radius:8px; color:var(--text); font-size:13.5px; cursor:pointer; text-align:left; }
  .sm-top-overflow-item:hover { background:var(--bg-input); }
  .sm-top-overflow-icon { font-size:14px; width:18px; text-align:center; }
  .sm-top-overflow-label { flex:1; }
}
/* v3.116 (B23): Quiet hours / DND chip + settings card accent. The chip
   sits in the topbar; the accent is used by the settings save button
   focus ring (mirrors --primary so themes stay coherent). */
.sm-quiet-chip { display:inline-flex; align-items:center; gap:5px; padding:4px 10px; border-radius:999px; background:rgba(99,102,241,.16); color:#6366f1; font-size:12px; font-weight:600; border:1px solid rgba(99,102,241,.32); cursor:pointer; user-select:none; transition:opacity .15s,transform .12s; line-height:1; }
.sm-quiet-chip:hover { opacity:.85; transform:translateY(-1px); }
.sm-quiet-chip[hidden] { display:none !important; }
[data-theme*="-dark"] .sm-quiet-chip { color:#a5b4fc; background:rgba(99,102,241,.22); border-color:rgba(99,102,241,.4); }
@media (max-width:480px) {
  /* v3.107 (C34): small-phone breakpoint — denser layout, no row truncation, full-width rows */
  .sm-top { padding:0 10px; }
  .sm-logo { height:26px; }
  .sm-side { width:88vw; max-width:300px; left:-88vw; }
  .sm-side.open { left:0; }
  .sm-list-title { font-size:13px; }
  .sm-row { padding:11px 12px; min-height:48px; }
  .sm-row-sub { font-size:13px; }
  .sm-row-pre { font-size:12.5px; }
  .sm-row-from { font-size:13.5px; }
  .sm-row-date { font-size:11.5px; }
  /* v3.107 (C34): topbar right-side action overflow menu visible at <=480px */
  .sm-top-overflow { display:inline-flex; }
  .sm-top-overflowed { display:none !important; }
  /* v3.107 (C34): read-pane back button is more visible on touch */
  .sm-read-back { padding:10px 14px; font-size:14px; min-height:42px; }
  /* v3.107 (C34): bulk-bar wraps cleanly on a 4" phone */
  .sm-bulk-bar { padding:8px 10px; gap:6px; left:0; }
  .sm-tb-btn { padding:7px 11px; font-size:12.5px; }
  .sm-tb-sel { max-width:80px; font-size:13px; }
}
::-webkit-scrollbar { width:9px; height:9px; }
::-webkit-scrollbar-thumb { background:#22344a; border-radius:5px; border:2px solid transparent; background-clip:padding-box; }
::-webkit-scrollbar-thumb:hover { background:#2e4258; background-clip:padding-box; }
::-webkit-scrollbar-track { background:transparent; }

/* ===== Bulk-select toolbar ===== */
.sm-folder-head-action { margin-left:8px; }
.sm-folder-action { border:1px solid var(--border); border-radius:8px; padding:6px 10px; background:var(--surface); color:var(--text); font:inherit; font-size:12.5px; font-weight:650; cursor:pointer; white-space:nowrap; }
.sm-folder-action.danger { background:var(--danger); color:#fff; border-color:var(--danger); }
.sm-folder-action.danger:hover { background:color-mix(in srgb, var(--danger) 88%, #000); border-color:color-mix(in srgb, var(--danger) 88%, #000); }
.sm-folder-action:hover { background:var(--hover); }
.sm-bulk-bar { display:flex; align-items:center; gap:8px; padding:8px 16px; background:var(--selection-bar-bg); border-bottom:1px solid color-mix(in srgb, var(--primary) 45%, var(--border)); position:fixed; top:52px; left:264px; right:0; z-index:40; flex-wrap:wrap; backdrop-filter:blur(14px); -webkit-backdrop-filter:blur(14px); }
/* Light themes need a quieter Select page bar; the shared 22% dark-mode
   tint reads too heavy against pale content surfaces. */
[data-theme*="-light"] .sm-bulk-bar {
  background:color-mix(in srgb, var(--primary) 10%, var(--bg-surface));
  border-bottom-color:color-mix(in srgb, var(--primary) 24%, var(--border));
}
/* v3.151b: actions ALWAYS visible (Sami: 'Mark as read disappeared' — the bar's
   zero-selection empty state hid every action until a row was checked). Zero-UID
   submits are blocked in JS + server-side, so idle buttons are safe. */
.sm-bulk-bar.empty .sm-bulk-actions { display:flex; opacity:.75; } .sm-bulk-bar[data-cross-folder="1"] .sm-tb-xf-hide { display:none !important; }
/* v3.169.7 (Sami): Mark read/unread only make sense with a selection - hide
   them when no message is selected so the bar stays short. */
.sm-bulk-bar.empty button.sm-tb-btn[value="read"],
.sm-bulk-bar.empty button.sm-tb-btn[value="unread"] { display:none; } .sm-bulk-bar.has-sel .sm-bulk-hint { display:none; } .sm-bulk-actions { display:flex; gap:6px; align-items:center; flex-wrap:wrap; } .sm-bulk-hint { font-size:13.5px; color:var(--text); font-weight:600; margin-right:8px; } .sm-bulk-bar.sm-all-pages { background:rgba(59,130,246,.18); border-bottom-color:rgba(59,130,246,.5); } .sm-bulk-bar.sm-all-pages::before { content:'All ' attr(data-all-pages-total) ' messages in ' attr(data-box) ' selected'; display:inline-block; margin-right:8px; font-size:12.5px; color:var(--text); font-weight:500; } .sm-bulk-bar.sm-all-pages .sm-bulk-hint, .sm-bulk-bar.sm-all-pages .sm-tb-count { display:none !important; }
.sm-tb-count { font-size:12.5px; color:var(--text); margin-right:8px; }
.sm-tb-form { display:flex; gap:6px; align-items:center; flex-wrap:wrap; }
.sm-tb-btn { padding:5px 11px; background:var(--bg-surface-alt); border:1px solid var(--border); color:var(--text); border-radius:16px; font-size:12px; cursor:pointer; transition:all .15s; }
.sm-tb-btn:hover { background:var(--bg-input); border-color:var(--border); }
.sm-tb-btn.danger { color:var(--danger); border-color:rgba(239,68,68,.3); }
.sm-tb-btn.danger:hover { background:rgba(239,68,68,.08); }
.sm-tb-btn.ghost { background:none; border-color:transparent; color:var(--text-dim); }
.sm-bulk-bar .sm-tb-btn.ghost { color:var(--text); font-size:13.5px; font-weight:600; }
.sm-tb-mv { display:inline-flex; align-items:center; gap:6px; padding:0 4px 0 8px; background:var(--bg-surface-alt); border:1px solid var(--border); border-radius:16px; }
.sm-tb-sel { background:transparent; color:var(--text); border:none; padding:5px 4px; font-size:12px; max-width:120px; }
.sm-tb-sel:focus:not(:focus-visible) { outline:none; }
.sm-r-check { display:flex; align-items:center; padding-right:8px; padding-top:6px; }
.sm-r-check input { width:16px; height:16px; accent-color:var(--primary); cursor:pointer; }
.sm-row { display:flex; gap:8px; padding:12px 16px; border-bottom:1px solid var(--border); cursor:pointer; transition:background .18s ease; position:relative; align-items:flex-start; }
.sm-row-cb { cursor:pointer; }
@media (max-width:860px) {
  .sm-toolbar { position:relative; top:0; }
}

/* ===== Topbar action buttons =====
   Sami 2026-08-19: restyle all six topbar action buttons (refresh /
   select-all / unread filter / view toggle / theme picker / help) to
   match the compose button. Each button is its own gradient pill so it
   reads as a button and works against any topbar background.
   Hover lifts the button 1px and deepens the shadow, mirroring the
   compose hover. Active state (.sm-tb-select-all-top-active,
   #sm-unread-toggle.is-filtering) gets a brightness + saturation
   boost plus a white ring so the toggle state is unmistakable. */
.sm-theme-toggle, .sm-help-btn, .sm-view-toggle {
  display:inline-flex; align-items:center; justify-content:center;
  background:var(--grad-accent-deep); color:#ffffff;
  border:none; border-radius:24px;
  width:38px; height:38px;
  cursor:pointer; font-size:15px; line-height:1;
  /* B46 (Sami): classy — crisp outer ring (reads as a border, no layout
     shift) plus a soft depth shadow under the circle. */
  box-shadow:0 0 0 1.5px rgba(255,255,255,0.32), 0 3px 12px rgba(0,0,0,0.35);
  transition:transform .18s ease, box-shadow .18s ease, filter .18s ease;
  font-family:var(--font-body);
}
.sm-theme-toggle:hover, .sm-help-btn:hover, .sm-view-toggle:hover {
  transform:translateY(-1px);
  box-shadow:0 0 0 1.5px rgba(255,255,255,0.50), 0 6px 18px rgba(0,0,0,0.42);
  filter:saturate(1.08);
}
.sm-theme-toggle:active, .sm-help-btn:active, .sm-view-toggle:active {
  transform:translateY(0); filter:brightness(1.12);
}
/* B43 r3 (judge r2): this rule MUST live after the base circle rule above.
   Equal specificity + earlier position meant the base box-shadow silently
   won and the active white ring never rendered (pre-existing dead rule).
   Also applies to #sm-unread-toggle.is-filtering (higher specificity). */
.sm-tb-select-all-top-active, #sm-unread-toggle.is-filtering { filter:brightness(.82) saturate(1.3); box-shadow:0 0 0 1.5px rgba(255,255,255,0.50), inset 0 0 0 2px rgba(255,255,255,0.30); }
/* B44: uniform stroke-icon faces — inline SVG painted with currentColor
   (white under .sm-top; themes recolor glyphs natively). Overflow-menu
   copies of these icons inherit the menu's own colors. */
.sm-top .sm-view-toggle svg, .sm-top .sm-theme-toggle svg, .sm-top .sm-help-btn svg { display:block; color:#ffffff; }
/* B46 (Sami): faces felt lifeless — fatten the traced paths so the icons
   carry real weight at 17px (viewBox 480: 26 units ≈ 0.9px of added
   stroke). Round joins keep the MiniMax curves smooth. */
.sm-top .sm-view-toggle svg path, .sm-top .sm-theme-toggle svg path, .sm-top .sm-help-btn svg path {
  stroke:currentColor; stroke-width:26px; stroke-linejoin:round; stroke-linecap:round;
}
.sm-top-overflow-icon svg { width:13px; height:13px; display:inline-block; vertical-align:-2px; }

/* ===== Theme switcher dropdown ===== */
/* B43 (Sami): the wrapper must join the flex row's rhythm — inline-block
   gave the density/theme pair zero gap while every sibling pair got 12px. */
.sm-theme-switcher { position: relative; display: inline-flex; align-items: center; gap: 12px; }
.sm-theme-menu { position: absolute; top: calc(100% + 8px); right: 0; min-width: 220px; background: var(--bg-surface); border: 1px solid var(--border); border-radius: 8px; box-shadow: var(--shadow); padding: 8px; z-index: 200; font-family: var(--font-body); font-size: 13px; color: var(--text); }
.sm-theme-menu-header { padding: 6px 10px 4px; font-size: 10px; font-weight: 700; color: var(--text-faint); text-transform: uppercase; letter-spacing: 0.05em; }
.sm-theme-menu-sep { height: 1px; background: var(--border-faint); margin: 6px 0; }
.sm-theme-opt { display: flex; align-items: center; gap: 10px; width: 100%; padding: 8px 10px; border: 0; background: transparent; color: var(--text); border-radius: 4px; cursor: pointer; font-family: var(--font-body); font-size: 13px; text-align: left; transition: background 0.1s; }
.sm-theme-opt:hover { background: var(--bg-hover); }
.sm-theme-swatch { display: inline-block; width: 14px; height: 14px; border-radius: 3px; border: 1px solid var(--border-strong); flex-shrink: 0; }
.sm-theme-opt-label { flex: 1; }


/* ===== Conversation badges ===== */
.sm-conv-count { display:inline-block; padding:1px 7px; background:var(--bg-surface-alt); border:1px solid var(--border); color:var(--text-dim); border-radius:10px; font-size:11px; margin-left:6px; font-weight:500; }
.sm-conv-unread { display:inline-block; min-width:20px; padding:1px 7px; background:var(--grad-accent-deep, var(--primary)); color:#fff; border-radius:10px; font-size:11px; font-weight:700; margin-left:6px; }
.sm-conv-parts { display:inline-flex; margin-left:6px; vertical-align:-3px; }
.sm-conv-part { display:inline-flex; align-items:center; justify-content:center; width:16px; height:16px; border-radius:50%; font-size:9px; font-weight:700; color:var(--text-inverse); margin-right:-4px; border:1px solid var(--bg-surface-alt); }

/* ===== Per-page selector ===== */
.sm-pp-sel { background:transparent; color:var(--text-dim); border:none; padding:4px 6px; font-size:11.5px; cursor:pointer; border-radius:6px; margin-left:6px; }
.sm-pp-sel:hover { color:var(--text); background:var(--bg-surface-alt); }
.sm-pp-sel:focus:not(:focus-visible) { outline:none; }
.sm-pp-pos { padding:0 4px; }

/* ===== Sessions manager ===== */
.sm-sessions-btn { background:var(--bg-surface-alt); border:1px solid var(--border); color:var(--text-dim); padding:6px 12px; border-radius:8px; font-size:12.5px; cursor:pointer; transition:all .15s; }
.sm-sessions-btn:hover { color:var(--text); background:var(--bg-input); }
.sm-sessions-modal { position:fixed; inset:0; background:rgba(5,8,12,.6); backdrop-filter:blur(4px); z-index:200; display:flex; align-items:center; justify-content:center; padding:24px; }
.sm-sessions-card { width:560px; max-width:100%; background:var(--bg-surface); border:1px solid var(--border); border-radius:14px; box-shadow:var(--shadow); overflow:hidden; animation:pop .18s ease; }
.sm-sessions-head { display:flex; align-items:center; justify-content:space-between; padding:16px 20px; border-bottom:1px solid var(--border); font-weight:600; font-size:15px; }
.sm-sessions-x { background:none; border:none; color:var(--text-dim); font-size:22px; cursor:pointer; padding:0 6px; }
.sm-sessions-x:hover { color:var(--text); }
.sm-sessions-body { padding:14px 20px; max-height:360px; overflow-y:auto; }
.sm-sess-row { display:flex; gap:10px; align-items:center; padding:10px 12px; border:1px solid var(--border); border-radius:8px; margin-bottom:8px; background:var(--bg-surface-alt); }
.sm-sess-row.current { border-color:var(--primary); box-shadow:0 0 0 1px rgba(59,130,246,.3) inset; }
.sm-sess-meta { flex:1; min-width:0; font-size:12.5px; color:var(--text-dim); }
.sm-sess-meta .when { color:var(--text); font-size:13px; }
.sm-sess-meta .ua { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.sm-sess-rev { background:var(--bg-input); border:1px solid var(--border); color:var(--danger); padding:5px 10px; border-radius:6px; font-size:12px; cursor:pointer; }
.sm-sess-rev:hover { background:rgba(239,68,68,.1); }
.sm-sess-rev:disabled { opacity:.4; cursor:default; }
.sm-sess-empty { padding:24px; text-align:center; color:var(--text-dim); font-size:13px; }
.sm-sessions-foot { display:flex; align-items:center; gap:8px; padding:14px 20px; border-top:1px solid var(--border); }
.sm-ghost-btn.danger { color:var(--danger); border-color:rgba(239,68,68,.3); }
.sm-ghost-btn.danger:hover { background:rgba(239,68,68,.08); }
.sm-sessions-modal[hidden] { display:none !important; }
/* About (v3.158): out-of-the-way sidebar link + modal. */
.sm-about-copy { text-align:center; font-size:11px; color:var(--text-dim); padding:8px 14px 0; letter-spacing:.02em; margin:0; }
  .sm-about-link { display:flex; align-items:center; gap:6px; margin-top:8px; padding:4px 8px; border-radius:6px; background:none; border:none; color:color-mix(in srgb, var(--topbar-text) 60%, transparent); font-size:11.5px; font-weight:700; cursor:pointer; text-align:left; }
.sm-about-link:hover { color:var(--topbar-text); background:rgba(128,128,128,.12); }
.sm-about-modal { position:fixed; inset:0; background:rgba(5,8,12,.6); backdrop-filter:blur(4px); z-index:200; display:flex; align-items:center; justify-content:center; padding:24px; }
.sm-about-modal[hidden] { display:none !important; }
.sm-about-card { width:340px; max-width:100%; background:var(--bg-surface); border:1px solid var(--border); border-radius:14px; box-shadow:var(--shadow); overflow:hidden; animation:pop .18s ease; text-align:center; }
.sm-about-head { display:flex; align-items:center; justify-content:space-between; padding:12px 16px; border-bottom:1px solid var(--border); font-weight:600; font-size:14px; }
.sm-about-x { background:none; border:none; color:var(--text-dim); font-size:22px; cursor:pointer; padding:0 6px; line-height:1; }
.sm-about-x:hover { color:var(--text); }
.sm-about-body { padding:22px 24px 20px; }
.sm-about-applogo { height:44px; margin:0 auto 4px; display:block; }
.sm-about-name { font-size:17px; font-weight:700; margin:2px 0 2px; }
.sm-about-ver { font-size:12.5px; color:var(--text-dim); line-height:1.7; margin:0 0 14px; }
.sm-about-ver code { font-family:var(--font-mono,monospace); font-size:11.5px; color:var(--text); background:var(--bg-input); border:1px solid var(--border); border-radius:4px; padding:1px 5px; }
.sm-about-sep { border-top:1px solid var(--border); margin:0 0 14px; }
.sm-about-brand-label { font-size:11px; letter-spacing:.08em; text-transform:uppercase; color:var(--text-dim); margin:0 0 8px; }
.sm-about-brand-img { height:26px; max-width:220px; display:block; margin:0 auto; }

body[data-theme$="-light"] .sm-conv-unread { background:var(--primary-hover); }

/* ===== Keyboard active row ===== */
.sm-row.sm-kbd-active { background:var(--primary-soft); box-shadow:inset 3px 0 0 var(--primary),inset -3px 0 0 var(--primary); }

/* ===== Help overlay ===== */
.sm-help-overlay { position:fixed; inset:0; background:rgba(5,8,12,.7); backdrop-filter:blur(6px); z-index:300; display:flex; align-items:center; justify-content:center; padding:24px; }
/* The browser's [hidden] rule sets display:none, but our display:flex wins on
   specificity. Explicitly hide when the [hidden] attribute is present. */
.sm-help-overlay[hidden] { display:none !important; }
.sm-help-overlay.sm-hidden { display:none !important; }
.sm-help-card { background:var(--bg-surface); border:1px solid var(--border); border-radius:14px; max-width:520px; width:100%; box-shadow:var(--shadow); overflow:hidden; }
.sm-help-head { padding:14px 18px; border-bottom:1px solid var(--border); display:flex; justify-content:space-between; align-items:center; font-weight:600; font-size:14px; }
.sm-help-x { background:none; border:none; color:var(--text-dim); font-size:22px; cursor:pointer; line-height:1; padding:0 4px; }
.sm-help-x:hover { color:var(--text); }
.sm-help-body { padding:16px 18px; max-height:60vh; overflow-y:auto; }
.sm-kbd-row { display:flex; gap:12px; align-items:center; padding:6px 0; font-size:13px; color:var(--text); }
.sm-kbd-row kbd { display:inline-block; padding:2px 8px; background:var(--bg-surface-alt); border:1px solid var(--border); border-radius:5px; font-family:var(--font-neat); font-size:12px; min-width:24px; text-align:center; }

/* ===== LIGHT THEME ===== */
body[data-theme="sami-default-light"] {
  --theme-name: "sami-default";
  --theme-mode: "light";

  --text:           #1f2937;
  --text-dim:       #5b6573;
  --text-faint:     #606f85; /* S6.4 */
  --text-inverse:   #e9eff7;
  --text-link:      #2563eb;
  --text-link-hover:#1d4ed8;

  --bg-page:        #f3f5fa;
  --bg-surface:     rgba(255, 255, 255, 0.82);
  --bg-surface-alt: rgba(238, 242, 248, 0.72);
  --bg-input:       #ffffff;
  --bg-hover:       rgba(190, 200, 216, 0.30);
  --bg-code:        #f5f7fb;

  --border:         rgba(190, 200, 216, 0.70);
  --border-strong:  rgba(160, 175, 195, 0.85);
  --border-faint:   rgba(220, 228, 240, 0.70);

  --primary:        #2563eb;
  --primary-hover:  #1d4ed8;
  --primary-soft:   rgba(37, 99, 235, 0.10);
  --primary-text:   #ffffff;

  --success:        #117f3a; /* S6.4 */
  --success-soft:   rgba(22, 163, 74, 0.10);
  --success-border: #16a34a;
  --danger:         #d32424; /* S6.4 */
  --danger-soft:    rgba(220, 38, 38, 0.10);
  --danger-border:  #dc2626;
  --warning:        #a55a05; /* S6.4 */
  --warning-soft:   rgba(217, 119, 6, 0.10);
  --warning-border: #d97706;
  --info:           #2563eb;
  --info-soft:      rgba(37, 99, 235, 0.10);
  --info-border:    #2563eb;

  --bg:        var(--bg-page);
  --surface:   var(--bg-surface);
  --card:      var(--bg-surface-alt);
  --card-hi:   var(--bg-input);
  --muted:     var(--text-dim);
  --accent:    var(--primary);
  --accent2:   var(--primary-hover);
  --gold:      var(--warning);
  --red:       var(--danger);

  --shadow:       0 10px 36px rgba(40, 55, 90, 0.16);
  --shadow-soft:  0 2px 10px rgba(40, 55, 90, 0.12);
  --grad-accent:  linear-gradient(135deg, #2563eb, #5b4df0);
  --grad-accent-deep: linear-gradient(135deg, #0b2e79, #140a7a);
  --topbar-bg:    linear-gradient(135deg, #2563eb, #5b4df0);
  --topbar-text:  #ffffff;
  --topbar-border: rgba(0, 0, 0, 0.10);
  --sidebar-bg:   linear-gradient(180deg, #2563eb, #5b4df0);

  /* S6.7: starred-pill glyph on --grad-accent-deep fills — >= 4.5:1
     per theme, enforced by TestThemePaletteFillAndHoverContrast. */
  --gold-text:      #ffe082;
  /* S6.7: required token — solid danger fill under #fff glyphs,
     >= 4.5:1 per theme (TestThemePaletteFillAndHoverContrast). */
  --badge-danger:   #dc2626;
}

/* ===== 5 additional themes (sami-default lives in :root + sami-default-light) ===== */
[data-theme="sami-sunset-light"] {
  --theme-name: "sami-sunset";
  --theme-mode: "light";
  --text:           #1a1a1a;
  --text-dim:       #374151;
  --text-faint:     #6b7280;
  --text-inverse:   #ffffff;
  --text-link:      #a55a05; /* S6.4 */
  --text-link-hover:#92400e; /* S6.5 */
  --bg-page:        #f0f2f5;
  --bg-surface:     #ffffff;
  --bg-surface-alt: #f8f9fa;
  --bg-input:       #ffffff;
  --bg-hover:       #f0f0f0;
  --bg-code:        #f5f5f5;
  --border:         #e0e0e0;
  --border-strong:  #d0d0d0;
  --border-faint:   #f0f0f0;
  --primary:        #ad5008; /* S6.5: AA as text + under #fff */
  --primary-hover:  #ad5008; /* S6.5 */
  --primary-soft:   #fbf4eb;
  --primary-text:   #ffffff;
  --success:        #12823b; /* S6.4 */
  --success-soft:   #ecf7f0;
  --success-border: #16a34a;
  --danger:         #dc2626;
  --danger-soft:    #fceded;
  --danger-border:  #dc2626;
  --warning:        #c54a0a; /* S6.4 */
  --warning-soft:   #fff3cd;
  --warning-border: #856404;
  --info:           #2E61A8;
  --info-soft:      #eef2f8;
  --info-border:    #2E61A8;
  --btn-bg:         #d97706;
  --btn-bg-hover:   #f59e0b;
  --btn-text:       #ffffff;
  --btn-border:     #d97706;
  /* v3.35: brand-frame topbar + sidebar in sunset signature color */
  --topbar-bg:      linear-gradient(135deg, #d97706 0%, #f59e0b 100%);
  --topbar-text:    #ffffff;
  --topbar-border:  rgba(0, 0, 0, 0.12);
  --sidebar-bg:     linear-gradient(180deg, #d97706 0%, #f59e0b 100%);
  /* v3.145.3: theme-matched accent gradient (was falling back to the base blue) */
  --grad-accent: linear-gradient(135deg, #d97706, #f59e0b);
  --grad-accent-deep: linear-gradient(135deg, #814704, #7f5205);

  /* S6.7: starred-pill glyph on --grad-accent-deep fills — >= 4.5:1
     per theme, enforced by TestThemePaletteFillAndHoverContrast. */
  --gold-text:      #ffe082;
  /* S6.7: required token — solid danger fill under #fff glyphs,
     >= 4.5:1 per theme (TestThemePaletteFillAndHoverContrast). */
  --badge-danger:   #dc2626;
}


[data-theme="sami-sunset-dark"] {
  --theme-name: "sami-sunset";
  --theme-mode: "dark";
  --text:           #e9eff7;
  --text-dim:       #b8c4d1;
  --text-faint:     #8b9bb0;
  --text-inverse:   #1a1a1a;
  --text-link:      #ff8e07;
  --text-link-hover:#ffa608;
  --bg-page:        #0a0e14;
  --bg-surface:     rgba(17,24,35,0.72);
  --bg-surface-alt: #14202c;
  --bg-input:       #1c2938;
  --bg-hover:       rgba(55,72,98,0.45);
  --bg-code:        #14202c;
  --border:         rgba(55,72,98,0.45);
  --border-strong:  rgba(75,95,125,0.55);
  --border-faint:   rgba(45,60,85,0.35);
  --primary:        #ff8e07;
  --primary-hover:  #c2410c; /* S6.5 */
  --primary-soft:   #333333;
  --primary-text:   #ffffff;
  --success:        #6bcf80;
  --success-soft:   #1a3a23;
  --success-border: #2e7d32;
  --danger:         #ff6b6b;
  --danger-soft:    #3a1a1a;
  --danger-border:  #c62828;
  --warning:        #ffb74d;
  --warning-soft:   #2a2318;
  --warning-border: #856404;
  --info:           #5387d1; /* S6.4 */
  --info-soft:      #333333;
  --info-border:    #2c2c2c;
  --btn-bg:         #ff8e07;
  --btn-bg-hover:   #ffa608;
  --btn-text:       #ffffff;
  --btn-border:     #ff8e07;
  /* v3.35: brand-frame topbar + sidebar in sunset signature color */
  --topbar-bg:      linear-gradient(135deg, #f59e0b 0%, #d97706 100%);
  --topbar-text:    #ffffff;
  --topbar-border:  rgba(255, 255, 255, 0.10);
  --sidebar-bg:     linear-gradient(180deg, #f59e0b 0%, #d97706 100%);
  /* v3.145.3: theme-matched accent gradient (was falling back to the base blue) */
  --grad-accent: linear-gradient(135deg, #ff8e07, #ffa608);
  --grad-accent-deep: linear-gradient(135deg, #854800, #855500);

  /* S6.7: starred-pill glyph on --grad-accent-deep fills — >= 4.5:1
     per theme, enforced by TestThemePaletteFillAndHoverContrast. */
  --gold-text:      #ffe082;
  /* S6.7: required token — solid danger fill under #fff glyphs,
     >= 4.5:1 per theme (TestThemePaletteFillAndHoverContrast). */
  --badge-danger:   #dc2626;
}


[data-theme="sami-forest-light"] {
  --theme-name: "sami-forest";
  --theme-mode: "light";
  --text:           #1a1a1a;
  --text-dim:       #374151;
  --text-faint:     #6b7280;
  --text-inverse:   #ffffff;
  --text-link:      #166534; /* deepened 2026-09-22: match panel forest (AA on white) */
  --text-link-hover:#14532d;
  --bg-page:        #f0f2f5;
  --bg-surface:     #ffffff;
  --bg-surface-alt: #f8f9fa;
  --bg-input:       #ffffff;
  --bg-hover:       #f0f0f0;
  --bg-code:        #f5f5f5;
  --border:         #e0e0e0;
  --border-strong:  #d0d0d0;
  --border-faint:   #f0f0f0;
  --primary:        #166534; /* deepened 2026-09-22: match panel forest */
  --primary-hover:  #15803d; /* panel primary-hover */
  --primary-soft:   #ecf7f0;
  --primary-text:   #ffffff;
  --success:        #16823e; /* S6.4 */
  --success-soft:   #edfaf2;
  --success-border: #22c55e;
  --danger:         #dc2626;
  --danger-soft:    #fceded;
  --danger-border:  #dc2626;
  --warning:        #9d6507; /* S6.4 */
  --warning-soft:   #fff3cd;
  --warning-border: #856404;
  --info:           #2E61A8;
  --info-soft:      #eef2f8;
  --info-border:    #2E61A8;
  --btn-bg:         #166534; /* deepened 2026-09-22: match panel forest */
  --btn-bg-hover:   #14532d; /* panel btn-hover */
  --btn-text:       #ffffff;
  --btn-border:     #166534;
  /* v3.35: brand-frame topbar + sidebar in forest signature color
     (deepened 2026-09-22 to the panel's WCAG-gated forest gradients) */
  --topbar-bg:      linear-gradient(135deg, #166534 0%, #15803d 100%);
  --topbar-text:    #ffffff;
  --topbar-border:  rgba(0, 0, 0, 0.12);
  --sidebar-bg:     linear-gradient(180deg, #166534 0%, #15803d 100%);
  /* v3.145.3: theme-matched accent gradient (was falling back to the base blue) */
  --grad-accent: linear-gradient(135deg, #166534, #15803d);
  --grad-accent-deep: linear-gradient(135deg, #14532d, #166534);

  /* S6.7: starred-pill glyph on --grad-accent-deep fills — >= 4.5:1
     per theme, enforced by TestThemePaletteFillAndHoverContrast. */
  --gold-text:      #ffe082;
  /* S6.7: required token — solid danger fill under #fff glyphs,
     >= 4.5:1 per theme (TestThemePaletteFillAndHoverContrast). */
  --badge-danger:   #dc2626;
}


[data-theme="sami-forest-dark"] {
  --theme-name: "sami-forest";
  --theme-mode: "dark";
  --text:           #e9eff7;
  --text-dim:       #b8c4d1;
  --text-faint:     #8b9bb0;
  --text-inverse:   #1a1a1a;
  --text-link:      #1ac358;
  --text-link-hover:#1ee467;
  --bg-page:        #0a0e14;
  --bg-surface:     rgba(17,24,35,0.72);
  --bg-surface-alt: #14202c;
  --bg-input:       #1c2938;
  --bg-hover:       rgba(55,72,98,0.45);
  --bg-code:        #14202c;
  --border:         rgba(55,72,98,0.45);
  --border-strong:  rgba(75,95,125,0.55);
  --border-faint:   rgba(45,60,85,0.35);
  --primary:        #1ac358;
  --primary-hover:  #0f6b33; /* S6.5 */
  --primary-soft:   #333333;
  --primary-text:   #ffffff;
  --success:        #6bcf80;
  --success-soft:   #1a3a23;
  --success-border: #2e7d32;
  --danger:         #ff6b6b;
  --danger-soft:    #3a1a1a;
  --danger-border:  #c62828;
  --warning:        #ffb74d;
  --warning-soft:   #2a2318;
  --warning-border: #856404;
  --info:           #5387d1; /* S6.4 */
  --info-soft:      #333333;
  --info-border:    #2c2c2c;
  --btn-bg:         #1ac358;
  --btn-bg-hover:   #1ee467;
  --btn-text:       #ffffff;
  --btn-border:     #1ac358;
  /* v3.35: brand-frame topbar + sidebar in forest signature color
     (deepened 2026-09-22 to the panel's WCAG-gated forest gradients) */
  --topbar-bg:      linear-gradient(135deg, #15803d 0%, #166534 100%);
  --topbar-text:    #ffffff;
  --topbar-border:  rgba(255, 255, 255, 0.10);
  --sidebar-bg:     linear-gradient(180deg, #15803d 0%, #166534 100%);
  /* v3.145.3: theme-matched accent gradient (was falling back to the base blue) */
  --grad-accent: linear-gradient(135deg, #1ac358, #1ee467);
  --grad-accent-deep: linear-gradient(135deg, #14532d, #166534);

  /* S6.7: starred-pill glyph on --grad-accent-deep fills — >= 4.5:1
     per theme, enforced by TestThemePaletteFillAndHoverContrast. */
  --gold-text:      #ffe082;
  /* S6.7: required token — solid danger fill under #fff glyphs,
     >= 4.5:1 per theme (TestThemePaletteFillAndHoverContrast). */
  --badge-danger:   #dc2626;
}


[data-theme="sami-cyber-light"] {
  --theme-name: "sami-cyber";
  --theme-mode: "light";
  --text:           #1a1a1a;
  --text-dim:       #374151;
  --text-faint:     #6b7280;
  --text-inverse:   #ffffff;
  --text-link:      #9049d4; /* S6.4 */
  --text-link-hover:#8e48d1;
  --bg-page:        #f0f2f5;
  --bg-surface:     #ffffff;
  --bg-surface-alt: #f8f9fa;
  --bg-input:       #ffffff;
  --bg-hover:       #f0f0f0;
  --bg-code:        #f5f5f5;
  --border:         #e0e0e0;
  --border-strong:  #d0d0d0;
  --border-faint:   #f0f0f0;
  --primary:        #9333ea; /* S6.5 */
  --primary-hover:  #9333ea; /* S6.5 */
  --primary-soft:   #f8f1fe;
  --primary-text:   #ffffff;
  --success:        #147a8a; /* S6.4 */
  --success-soft:   #edfbfd;
  --success-border: #22d3ee;
  --danger:         #b55160; /* S6.4 */
  --danger-soft:    #fef3f5;
  --danger-border:  #fb7185;
  --warning:        #8d6b14; /* S6.4 */
  --warning-soft:   #fff3cd;
  --warning-border: #856404;
  --info:           #2E61A8;
  --info-soft:      #eef2f8;
  --info-border:    #2E61A8;
  --btn-bg:         #a855f7;
  --btn-bg-hover:   #c084fc;
  --btn-text:       #ffffff;
  --btn-border:     #a855f7;
  /* v3.35: brand-frame topbar + sidebar in cyber signature color */
  --topbar-bg:      linear-gradient(135deg, #a855f7 0%, #c084fc 100%);
  --topbar-text:    #ffffff;
  --topbar-border:  rgba(0, 0, 0, 0.12);
  --sidebar-bg:     linear-gradient(180deg, #a855f7 0%, #c084fc 100%);
  /* v3.145.3: theme-matched accent gradient (was falling back to the base blue) */
  --grad-accent: linear-gradient(135deg, #a855f7, #c084fc);
  --grad-accent-deep: linear-gradient(135deg, #44067f, #420381);

  /* S6.7: starred-pill glyph on --grad-accent-deep fills — >= 4.5:1
     per theme, enforced by TestThemePaletteFillAndHoverContrast. */
  --gold-text:      #ffe082;
  /* S6.7: required token — solid danger fill under #fff glyphs,
     >= 4.5:1 per theme (TestThemePaletteFillAndHoverContrast). */
  --badge-danger:   #dc2626;
}


[data-theme="sami-cyber-dark"] {
  --theme-name: "sami-cyber";
  --theme-mode: "dark";
  --text:           #e9eff7;
  --text-dim:       #b8c4d1;
  --text-faint:     #8b9bb0;
  --text-inverse:   #1a1a1a;
  --text-link:      #c966ff;
  --text-link-hover:#eb76ff;
  --bg-page:        #0a0e14;
  --bg-surface:     rgba(17,24,35,0.72);
  --bg-surface-alt: #14202c;
  --bg-input:       #1c2938;
  --bg-hover:       rgba(55,72,98,0.45);
  --bg-code:        #14202c;
  --border:         rgba(55,72,98,0.45);
  --border-strong:  rgba(75,95,125,0.55);
  --border-faint:   rgba(45,60,85,0.35);
  --primary:        #c966ff;
  --primary-hover:  #9333ea; /* S6.5 */
  --primary-soft:   #333333;
  --primary-text:   #ffffff;
  --success:        #6bcf80;
  --success-soft:   #1a3a23;
  --success-border: #2e7d32;
  --danger:         #ff6b6b;
  --danger-soft:    #3a1a1a;
  --danger-border:  #c62828;
  --warning:        #ffb74d;
  --warning-soft:   #2a2318;
  --warning-border: #856404;
  --info:           #5387d1; /* S6.4 */
  --info-soft:      #333333;
  --info-border:    #2c2c2c;
  --btn-bg:         #c966ff;
  --btn-bg-hover:   #eb76ff;
  --btn-text:       #ffffff;
  --btn-border:     #c966ff;
  /* v3.35: brand-frame topbar + sidebar in cyber signature color */
  --topbar-bg:      linear-gradient(135deg, #c084fc 0%, #a855f7 100%);
  --topbar-text:    #ffffff;
  --topbar-border:  rgba(255, 255, 255, 0.10);
  --sidebar-bg:     linear-gradient(180deg, #c084fc 0%, #a855f7 100%);
  /* v3.145.3: theme-matched accent gradient (was falling back to the base blue) */
  --grad-accent: linear-gradient(135deg, #c966ff, #eb76ff);
  --grad-accent-deep: linear-gradient(135deg, #560085, #710085);

  /* S6.7: starred-pill glyph on --grad-accent-deep fills — >= 4.5:1
     per theme, enforced by TestThemePaletteFillAndHoverContrast. */
  --gold-text:      #ffe082;
  /* S6.7: required token — solid danger fill under #fff glyphs,
     >= 4.5:1 per theme (TestThemePaletteFillAndHoverContrast). */
  --badge-danger:   #dc2626;
}


[data-theme="sami-ocean-light"] {
  --theme-name: "sami-ocean";
  --theme-mode: "light";
  --text:           #1a1a1a;
  --text-dim:       #374151;
  --text-faint:     #6b7280;
  --text-inverse:   #ffffff;
  --text-link:      #077792; /* S6.4 */
  --text-link-hover:#075e75; /* S6.5 */
  --bg-page:        #f0f2f5;
  --bg-surface:     #ffffff;
  --bg-surface-alt: #f8f9fa;
  --bg-input:       #ffffff;
  --bg-hover:       #f0f0f0;
  --bg-code:        #f5f5f5;
  --border:         #e0e0e0;
  --border-strong:  #d0d0d0;
  --border-faint:   #f0f0f0;
  --primary:        #0e7490; /* S6.5 */
  --primary-hover:  #0e7490; /* S6.5 */
  --primary-soft:   #ebf6f8;
  --primary-text:   #ffffff;
  --success:        #0b825a; /* S6.4 */
  --success-soft:   #ebf9f4;
  --success-border: #10b981;
  --danger:         #d23651; /* S6.4 */
  --danger-soft:    #feeff2;
  --danger-border:  #f43f5e;
  --warning:        #9d6507; /* S6.4 */
  --warning-soft:   #fff3cd;
  --warning-border: #856404;
  --info:           #2E61A8;
  --info-soft:      #eef2f8;
  --info-border:    #2E61A8;
  --btn-bg:         #0891b2;
  --btn-bg-hover:   #06b6d4;
  --btn-text:       #ffffff;
  --btn-border:     #0891b2;
  /* v3.35: brand-frame topbar + sidebar in ocean signature color */
  --topbar-bg:      linear-gradient(135deg, #0891b2 0%, #06b6d4 100%);
  --topbar-text:    #ffffff;
  --topbar-border:  rgba(0, 0, 0, 0.12);
  --sidebar-bg:     linear-gradient(180deg, #0891b2 0%, #06b6d4 100%);
  /* v3.145.3: theme-matched accent gradient (was falling back to the base blue) */
  --grad-accent: linear-gradient(135deg, #0891b2, #06b6d4);
  --grad-accent-deep: linear-gradient(135deg, #06677f, #046f81);

  /* S6.7: starred-pill glyph on --grad-accent-deep fills — >= 4.5:1
     per theme, enforced by TestThemePaletteFillAndHoverContrast. */
  --gold-text:      #ffe082;
  /* S6.7: required token — solid danger fill under #fff glyphs,
     >= 4.5:1 per theme (TestThemePaletteFillAndHoverContrast). */
  --badge-danger:   #dc2626;
}


[data-theme="sami-ocean-dark"] {
  --theme-name: "sami-ocean";
  --theme-mode: "dark";
  --text:           #e9eff7;
  --text-dim:       #b8c4d1;
  --text-faint:     #8b9bb0;
  --text-inverse:   #1a1a1a;
  --text-link:      #09aed5;
  --text-link-hover:#0bcbf9;
  --bg-page:        #0a0e14;
  --bg-surface:     rgba(17,24,35,0.72);
  --bg-surface-alt: #14202c;
  --bg-input:       #1c2938;
  --bg-hover:       rgba(55,72,98,0.45);
  --bg-code:        #14202c;
  --border:         rgba(55,72,98,0.45);
  --border-strong:  rgba(75,95,125,0.55);
  --border-faint:   rgba(45,60,85,0.35);
  --primary:        #09aed5;
  --primary-hover:  #0e7490; /* S6.5 */
  --primary-soft:   #333333;
  --primary-text:   #ffffff;
  --success:        #6bcf80;
  --success-soft:   #1a3a23;
  --success-border: #2e7d32;
  --danger:         #ff6b6b;
  --danger-soft:    #3a1a1a;
  --danger-border:  #c62828;
  --warning:        #ffb74d;
  --warning-soft:   #2a2318;
  --warning-border: #856404;
  --info:           #5387d1; /* S6.4 */
  --info-soft:      #333333;
  --info-border:    #2c2c2c;
  --btn-bg:         #09aed5;
  --btn-bg-hover:   #0bcbf9;
  --btn-text:       #ffffff;
  --btn-border:     #09aed5;
  /* v3.35: brand-frame topbar + sidebar in ocean signature color */
  --topbar-bg:      linear-gradient(135deg, #06b6d4 0%, #0891b2 100%);
  --topbar-text:    #ffffff;
  --topbar-border:  rgba(255, 255, 255, 0.10);
  --sidebar-bg:     linear-gradient(180deg, #06b6d4 0%, #0891b2 100%);
  /* v3.145.3: theme-matched accent gradient (was falling back to the base blue) */
  --grad-accent: linear-gradient(135deg, #09aed5, #0bcbf9);
  --grad-accent-deep: linear-gradient(135deg, #05687f, #036981);

  /* S6.7: starred-pill glyph on --grad-accent-deep fills — >= 4.5:1
     per theme, enforced by TestThemePaletteFillAndHoverContrast. */
  --gold-text:      #ffe082;
  /* S6.7: required token — solid danger fill under #fff glyphs,
     >= 4.5:1 per theme (TestThemePaletteFillAndHoverContrast). */
  --badge-danger:   #dc2626;
}


[data-theme="sami-rose-light"] {
  --theme-name: "sami-rose";
  --theme-mode: "light";
  --text:           #1a1a1a;
  --text-dim:       #374151;
  --text-faint:     #6b7280;
  --text-inverse:   #ffffff;
  --text-link:      #d31b44; /* S6.4 */
  --text-link-hover:#bf183d;
  --bg-page:        #f0f2f5;
  --bg-surface:     #ffffff;
  --bg-surface-alt: #f8f9fa;
  --bg-input:       #ffffff;
  --bg-hover:       #f0f0f0;
  --bg-code:        #f5f5f5;
  --border:         #e0e0e0;
  --border-strong:  #d0d0d0;
  --border-faint:   #f0f0f0;
  --primary:        #be123c; /* S6.5 */
  --primary-hover:  #be123c; /* S6.5 */
  --primary-soft:   #fcecf0;
  --primary-text:   #ffffff;
  --success:        #12823b; /* S6.4 */
  --success-soft:   #ecf7f0;
  --success-border: #16a34a;
  --danger:         #dc2626;
  --danger-soft:    #fceded;
  --danger-border:  #dc2626;
  --warning:        #9d6507; /* S6.4 */
  --warning-soft:   #fff3cd;
  --warning-border: #856404;
  --info:           #2E61A8;
  --info-soft:      #eef2f8;
  --info-border:    #2E61A8;
  --btn-bg:         #e11d48;
  --btn-bg-hover:   #f43f5e;
  --btn-text:       #ffffff;
  --btn-border:     #e11d48;
  /* v3.35: brand-frame topbar + sidebar in rose signature color */
  --topbar-bg:      linear-gradient(135deg, #e11d48 0%, #f43f5e 100%);
  --topbar-text:    #ffffff;
  --topbar-border:  rgba(0, 0, 0, 0.12);
  --sidebar-bg:     linear-gradient(180deg, #e11d48 0%, #f43f5e 100%);
  /* v3.145.3: theme-matched accent gradient (was falling back to the base blue) */
  --grad-accent: linear-gradient(135deg, #e11d48, #f43f5e);
  --grad-accent-deep: linear-gradient(135deg, #750f26, #7d071b);

  /* S6.7: starred-pill glyph on --grad-accent-deep fills — >= 4.5:1
     per theme, enforced by TestThemePaletteFillAndHoverContrast. */
  --gold-text:      #ffe082;
  /* S6.7: required token — solid danger fill under #fff glyphs,
     >= 4.5:1 per theme (TestThemePaletteFillAndHoverContrast). */
  --badge-danger:   #dc2626;
}


[data-theme="sami-rose-dark"] {
  --theme-name: "sami-rose";
  --theme-mode: "dark";
  --text:           #e9eff7;
  --text-dim:       #b8c4d1;
  --text-faint:     #8b9bb0;
  --text-inverse:   #1a1a1a;
  --text-link:      #ff4d75; /* S6.4 */
  --text-link-hover:#ff86ae; /* S6.5 */
  --bg-page:        #0a0e14;
  --bg-surface:     rgba(17,24,35,0.72);
  --bg-surface-alt: #14202c;
  --bg-input:       #1c2938;
  --bg-hover:       rgba(55,72,98,0.45);
  --bg-code:        #14202c;
  --border:         rgba(55,72,98,0.45);
  --border-strong:  rgba(75,95,125,0.55);
  --border-faint:   rgba(45,60,85,0.35);
  --primary:        #ff4778; /* S6.5 */
  --primary-hover:  #c11c49; /* S6.5 */
  --primary-soft:   #333333;
  --primary-text:   #ffffff;
  --success:        #6bcf80;
  --success-soft:   #1a3a23;
  --success-border: #2e7d32;
  --danger:         #ff6b6b;
  --danger-soft:    #3a1a1a;
  --danger-border:  #c62828;
  --warning:        #ffb74d;
  --warning-soft:   #2a2318;
  --warning-border: #856404;
  --info:           #5387d1; /* S6.4 */
  --info-soft:      #333333;
  --info-border:    #2c2c2c;
  --btn-bg:         #ff2256;
  --btn-bg-hover:   #ff2864;
  --btn-text:       #ffffff;
  --btn-border:     #ff2256;
  /* v3.35: brand-frame topbar + sidebar in rose signature color */
  --topbar-bg:      linear-gradient(135deg, #f43f5e 0%, #e11d48 100%);
  --topbar-text:    #ffffff;
  --topbar-border:  rgba(255, 255, 255, 0.10);
  --sidebar-bg:     linear-gradient(180deg, #f43f5e 0%, #e11d48 100%);
  /* v3.145.3: theme-matched accent gradient (was falling back to the base blue) */
  --grad-accent: linear-gradient(135deg, #ff2256, #ff2864);
  --grad-accent-deep: linear-gradient(135deg, #85001f, #850025);

  /* S6.7: starred-pill glyph on --grad-accent-deep fills — >= 4.5:1
     per theme, enforced by TestThemePaletteFillAndHoverContrast. */
  --gold-text:      #ffe082;
  /* S6.7: required token — solid danger fill under #fff glyphs,
     >= 4.5:1 per theme (TestThemePaletteFillAndHoverContrast). */
  --badge-danger:   #dc2626;
}



body[data-theme$="-light"] .sm-row.unread { background:rgba(238,242,248,.95); }
body[data-theme$="-light"] .sm-r-prev { color:#5b6573; }
/* v3.74: light mode keeps accent topbar (white override removed) */
body[data-theme$="-light"] .sm-toolbar { background:rgba(37,99,235,.07); }
body[data-theme$="-light"] .sm-body { color:#2c3441; }
body[data-theme$="-light"] .sm-body pre { background:#f0f3f8; color:#1f2937; }
body[data-theme$="-light"] .sm-paper { border-color:rgba(140,155,180,.35); box-shadow:0 1px 6px rgba(40,55,90,.14); }
/* v3.145.2: legacy light-mode .sm-act overrides removed — the compose-gradient
   pill styling above now applies on every theme (see the -light re-assert
   inside the v3.145.2 block, which outranks nothing but documents intent). */
@media (prefers-color-scheme: light) {
  body:not([data-theme]) {
    --bg:#f3f5fa; --surface:rgba(255,255,255,.82); --card:rgba(238,242,248,.72); --card-hi:#e4ebf5;
    --border:rgba(190,200,216,.7); --accent:#2563eb; --accent2:#1d4ed8;
    --text:#1f2937; --muted:#5b6573; --shadow:0 10px 36px rgba(40,55,90,.16); --shadow-soft:0 2px 10px rgba(40,55,90,.12);
    --grad-accent:linear-gradient(135deg,#2563eb,#5b4df0);
    --grad-accent-deep: linear-gradient(135deg, #0b2e79, #140a7a);
  }
}

/* ===== v3.27 UX polish ===== */

/* Command palette */
.sm-palette { position:fixed; inset:0; background:rgba(5,8,12,.7); backdrop-filter:blur(6px); z-index:350; display:flex; align-items:flex-start; justify-content:center; padding:14vh 24px 24px; }
.sm-palette[hidden] { display:none !important; }
.sm-palette.sm-hidden { display:none !important; }
.sm-palette-inner { background:var(--bg-surface-alt); border:1px solid var(--border); border-radius:14px; box-shadow:var(--shadow); width:100%; max-width:560px; overflow:hidden; }
.sm-palette-input { width:100%; padding:16px 20px; background:transparent; border:0; border-bottom:1px solid var(--border); color:var(--text); font-size:15px; outline:none; font-family:inherit; box-sizing:border-box; }
.sm-palette-input::placeholder { color:var(--text-dim); }
.sm-palette-list { max-height:48vh; overflow-y:auto; padding:6px 0; }
.sm-palette-item { display:flex; align-items:center; gap:12px; padding:10px 20px; cursor:pointer; color:var(--text); font-size:13.5px; transition:background .12s; }
.sm-palette-item:hover, .sm-palette-item.sm-pal-active { background:var(--bg-input); }
.sm-palette-item .sm-pal-key { margin-left:auto; font-size:11px; color:var(--text-dim); border:1px solid var(--border); padding:1px 6px; border-radius:4px; font-family:ui-monospace,monospace; }
.sm-palette-item .sm-pal-icon { font-size:15px; opacity:.85; width:18px; text-align:center; }
.sm-palette-empty { padding:24px 20px; text-align:center; color:var(--text-dim); font-size:13px; }
.sm-palette-foot { padding:8px 20px; border-top:1px solid var(--border); font-size:11px; color:var(--text-dim); display:flex; gap:14px; }
.sm-palette-foot kbd { font-family:ui-monospace,monospace; border:1px solid var(--border); padding:1px 5px; border-radius:3px; background:rgba(0,0,0,.2); }
/* v3.102 (C31): palette recent section + divider */
.sm-pal-recent .sm-pal-lbl::before { content: "recent \2022 "; opacity:.55; font-size:11px; }
.sm-palette-divider { padding:6px 20px 4px; display:flex; align-items:center; gap:10px; }
.sm-palette-divider hr { flex:1; border:0; border-top:1px solid var(--border); margin:0; }
.sm-palette-divider span { font-size:11px; color:var(--text-dim); text-transform:uppercase; letter-spacing:.06em; }
.sm-pal-lbl { flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
/* v3.102 (C31): settings page palette card */
.sm-palette-settings { display:grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap:8px 12px; }
.sm-palette-settings label { display:flex; align-items:center; gap:8px; padding:6px 10px; border:1px solid var(--border); border-radius:8px; cursor:pointer; font-size:13px; }
.sm-palette-settings input[type=checkbox] { accent-color: var(--primary); }
.sm-palette-settings label:hover { background:var(--bg-input); }

/* Toolbar grouping */
.sm-act-group { display:inline-flex; gap:2px; padding:0 8px; border-right:1px solid var(--border); align-items:center; }
.sm-act-group:last-child { border-right:0; }
.sm-act-group:first-child { padding-left:0; }

/* Row click loading shimmer */
.sm-row.sm-row-loading { opacity:.5; transition:opacity .12s; pointer-events:none; }
.sm-row.sm-row-loading::after { content:''; position:absolute; inset:0; background:linear-gradient(90deg, transparent, rgba(79,141,249,.18), transparent); background-size:200% 100%; animation:sm-shimmer 1.2s infinite; }
@keyframes sm-shimmer { from { background-position:-200px 0; } to { background-position:200px 0; } }

/* Keyboard hint footer */

/* Compact toolbar on narrow screens */
@media (max-width: 720px) {
  .sm-act-group { padding:0 6px; }
}


/* ===== v3.27 UX polish ===== */

/* Command palette */
.sm-palette { position:fixed; inset:0; background:rgba(5,8,12,.7); backdrop-filter:blur(6px); z-index:350; display:flex; align-items:flex-start; justify-content:center; padding:14vh 24px 24px; }
.sm-palette[hidden] { display:none !important; }
.sm-palette.sm-hidden { display:none !important; }
.sm-palette-inner { background:var(--bg-surface-alt); border:1px solid var(--border); border-radius:14px; box-shadow:var(--shadow); width:100%; max-width:560px; overflow:hidden; }
.sm-palette-input { width:100%; padding:16px 20px; background:transparent; border:0; border-bottom:1px solid var(--border); color:var(--text); font-size:15px; outline:none; font-family:inherit; box-sizing:border-box; }
.sm-palette-input::placeholder { color:var(--text-dim); }
.sm-palette-list { max-height:48vh; overflow-y:auto; padding:6px 0; }
.sm-palette-item { display:flex; align-items:center; gap:12px; padding:10px 20px; cursor:pointer; color:var(--text); font-size:13.5px; transition:background .12s; }
.sm-palette-item:hover, .sm-palette-item.sm-pal-active { background:var(--bg-input); }
.sm-palette-item .sm-pal-key { margin-left:auto; font-size:11px; color:var(--text-dim); border:1px solid var(--border); padding:1px 6px; border-radius:4px; font-family:ui-monospace,monospace; }
.sm-palette-item .sm-pal-icon { font-size:15px; opacity:.85; width:18px; text-align:center; }
.sm-palette-empty { padding:24px 20px; text-align:center; color:var(--text-dim); font-size:13px; }
.sm-palette-foot { padding:8px 20px; border-top:1px solid var(--border); font-size:11px; color:var(--text-dim); display:flex; gap:14px; }
.sm-palette-foot kbd { font-family:ui-monospace,monospace; border:1px solid var(--border); padding:1px 5px; border-radius:3px; background:rgba(0,0,0,.2); }
/* v3.102 (C31): palette recent section + divider */
.sm-pal-recent .sm-pal-lbl::before { content: "recent \2022 "; opacity:.55; font-size:11px; }
.sm-palette-divider { padding:6px 20px 4px; display:flex; align-items:center; gap:10px; }
.sm-palette-divider hr { flex:1; border:0; border-top:1px solid var(--border); margin:0; }
.sm-palette-divider span { font-size:11px; color:var(--text-dim); text-transform:uppercase; letter-spacing:.06em; }
.sm-pal-lbl { flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
/* v3.102 (C31): settings page palette card */
.sm-palette-settings { display:grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap:8px 12px; }
.sm-palette-settings label { display:flex; align-items:center; gap:8px; padding:6px 10px; border:1px solid var(--border); border-radius:8px; cursor:pointer; font-size:13px; }
.sm-palette-settings input[type=checkbox] { accent-color: var(--primary); }
.sm-palette-settings label:hover { background:var(--bg-input); }

/* Toolbar grouping */
.sm-act-group { display:inline-flex; gap:2px; padding:0 8px; border-right:1px solid var(--border); align-items:center; }
.sm-act-group:last-child { border-right:0; }
.sm-act-group:first-child { padding-left:0; }

/* Row click loading shimmer */
.sm-row.sm-row-loading { opacity:.5; transition:opacity .12s; pointer-events:none; }
.sm-row.sm-row-loading::after { content:''; position:absolute; inset:0; background:linear-gradient(90deg, transparent, rgba(79,141,249,.18), transparent); background-size:200% 100%; animation:sm-shimmer 1.2s infinite; }
@keyframes sm-shimmer { from { background-position:-200px 0; } to { background-position:200px 0; } }

/* Keyboard hint footer */

/* Compact toolbar on narrow screens */
@media (max-width: 720px) {
  .sm-act-group { padding:0 6px; }
}


[data-theme="sami-azure-light"] {
  --theme-name: "sami-azure";
  --theme-mode: "light";
  --text:           #1f2937;
  --text-dim:       #5b6573;
  --text-faint:     #606f85; /* S6.4 */
  --text-inverse:   #ffffff;
  --text-link:      #2563eb;
  --text-link-hover:#1d4ed8;
  --bg-page:        #f3f5fa;
  --bg-surface:     rgba(255, 255, 255, 0.82);
  --bg-surface-alt: rgba(238, 242, 248, 0.72);
  --bg-input:       #ffffff;
  --bg-hover:       rgba(190, 200, 216, 0.30);
  --bg-code:        #f5f7fb;
  --border:         rgba(190, 200, 216, 0.70);
  --border-strong:  rgba(160, 175, 195, 0.85);
  --border-faint:   rgba(220, 228, 240, 0.70);
  --primary:        #2563eb;
  --primary-hover:  #1d4ed8;
  --primary-soft:   rgba(37, 99, 235, 0.10);
  --primary-text:   #ffffff;
  --success:        #117f3a; /* S6.4 */
  --danger:         #d32424; /* S6.4 */
  --warning:        #a55a05; /* S6.4 */
  --info:           #2563eb;
  /* Brand frame: blue topbar + blue sidebar, neutral content area */
  --topbar-bg:      linear-gradient(135deg, #4f8df9, #7c5cf5);
  --topbar-text:    #ffffff;
  --topbar-border:  rgba(255,255,255,0.18);
  --sidebar-bg:     linear-gradient(180deg, #4f8df9 0%, #7c5cf5 100%);
  /* Tailwind shadow so the brand frame sits above the white list/read panes */
  --shadow:         0 10px 36px rgba(40, 55, 90, 0.16);
  --shadow-soft:    0 2px 10px rgba(40, 55, 90, 0.12);
  --grad-accent:    linear-gradient(135deg, #4f8df9, #7c5cf5);
  --grad-accent-deep: linear-gradient(135deg, #043280, #20087d);

  /* S6.7: starred-pill glyph on --grad-accent-deep fills — >= 4.5:1
     per theme, enforced by TestThemePaletteFillAndHoverContrast. */
  --gold-text:      #ffe082;
  /* S6.7: required token — solid danger fill under #fff glyphs,
     >= 4.5:1 per theme (TestThemePaletteFillAndHoverContrast). */
  --badge-danger:   #dc2626;
}


[data-theme="sami-azure-dark"] {
  --theme-name: "sami-azure";
  --theme-mode: "dark";
  --text:           #e9eff7;
  --text-dim:       #b8c4d1;
  --text-faint:     #8b9bb0;
  --text-inverse:   #1f2937;
  --text-link:      #4f8df9;
  --text-link-hover:#9d85f7; /* S6.5 */
  /* S6.4 contrast hardening applies to azure tokens below (same palette as :root). */
  --bg-page:        #0a0e14;
  --bg-surface:     rgba(17, 24, 35, 0.72);
  --bg-surface-alt: #14202c;
  --bg-input:       #1c2938;
  --bg-hover:       rgba(55, 72, 98, 0.45);
  --bg-code:        #14202c;
  --border:         rgba(55, 72, 98, 0.45);
  --border-strong:  rgba(75, 95, 125, 0.55);
  --border-faint:   rgba(45, 60, 85, 0.35);
  --primary:        #4f8df9;
  --primary-hover:  #6b46e5; /* S6.5 */
  --primary-soft:   rgba(79, 141, 249, 0.15);
  --primary-text:   #ffffff;
  --success:        #22c55e;
  --danger:         #f04b4b; /* S6.4 */
  --warning:        #f0d020;
  --info:           #4f8df9;
  /* Brand frame: deeper blue topbar + sidebar, dark content area below */
  --topbar-bg:      linear-gradient(135deg, #2563eb, #6d28d9);
  --topbar-text:    #ffffff;
  --topbar-border:  rgba(255,255,255,0.12);
  --sidebar-bg:     linear-gradient(180deg, #1e40af 0%, #5b21b6 100%);
  --grad-accent:    linear-gradient(135deg, #4f8df9, #7c5cf5);
  --grad-accent-deep: linear-gradient(135deg, #043280, #20087d);

  /* S6.7: starred-pill glyph on --grad-accent-deep fills — >= 4.5:1
     per theme, enforced by TestThemePaletteFillAndHoverContrast. */
  --gold-text:      #ffe082;
  /* S6.7: required token — solid danger fill under #fff glyphs,
     >= 4.5:1 per theme (TestThemePaletteFillAndHoverContrast). */
  --badge-danger:   #dc2626;
}

/* ===== Blue (DashCaddy deep royal blue DNA: bg #1908AC, cards #0d1533,
   accent #9cd4ff) — B30, Sami request 2026-09-03 ===== */
[data-theme="sami-blue-dark"] {
  --theme-name: "sami-blue";
  --theme-mode: "dark";
  --text:           #e8f1ff;
  --text-dim:       #c3d3f2;
  --text-faint:     #9eafdb;
  --text-inverse:   #0d1533;
  --text-link:      #7ec8ff;
  --text-link-hover:#9cd4ff;
  --bg-page:        #1908ac;
  --bg-surface:     rgba(13, 21, 51, 0.82);
  --bg-surface-alt: #101a3f;
  --bg-input:       #0d1533;
  --bg-hover:       rgba(28, 45, 106, 0.55);
  --bg-code:        #0d1533;
  --border:         rgba(28, 45, 106, 0.65);
  --border-strong:  rgba(45, 68, 140, 0.75);
  --border-faint:   rgba(24, 38, 92, 0.5);
  --primary:        #6fb2ff;
  --primary-hover:  #1d4ed8; /* S6.5 */
  --primary-soft:   rgba(156, 212, 255, 0.15);
  --primary-text:   #0d1533;
  --success:        #7ec8ff;
  /* B46 (Sami): badge red aligned to blue-light — the pastel pink read
     as “notifications are pink” on the royal-blue frame. */
  --danger:         #e45656; /* S6.4: AA as text on cards */
  --badge-danger:   #dc2626; /* S6.4: Sami B42 red badge on the topbar */
  --warning:        #ffd080;
  --info:           #9cd4ff;
  /* Brand frame: royal blue topbar + sidebar (DashCaddy --bg), navy content */
  --topbar-bg:      linear-gradient(135deg, #1908ac, #2563eb);
  --topbar-text:    #ffffff;
  --topbar-border:  rgba(255,255,255,0.14);
  --sidebar-bg:     linear-gradient(180deg, #150b7a 0%, #0d1533 100%);
  --grad-accent:    linear-gradient(135deg, #9cd4ff, #6fb2ff);
  /* B46 (Sami): circles must be the SAME royal deep as blue-light — the
     sky-derived deep went teal. Enforced by test (deepOf equality). */
  --grad-accent-deep: linear-gradient(135deg, #102a75, #003e85);

  /* S6.7: starred-pill glyph on --grad-accent-deep fills — >= 4.5:1
     per theme, enforced by TestThemePaletteFillAndHoverContrast. */
  --gold-text:      #ffe082;
}

/* ===== Blue light (DashCaddy royal-blue DNA on a pale royal base)
   — B31, Sami request 2026-09-03 ===== */
[data-theme="sami-blue-light"] {
  --theme-name: "sami-blue";
  --theme-mode: "light";
  --text:           #16233f;
  --text-dim:       #46587c;
  --text-faint:     #55678c;
  --text-inverse:   #ffffff;
  --text-link:      #1d4ed8;
  --text-link-hover:#1908ac;
  --bg-page:        #eef2fb;
  --bg-surface:     rgba(255, 255, 255, 0.82);
  --bg-surface-alt: rgba(228, 235, 250, 0.72);
  --bg-input:       #ffffff;
  --bg-hover:       rgba(120, 145, 200, 0.25);
  --bg-code:        #f2f5fc;
  --border:         rgba(120, 145, 200, 0.55);
  --border-strong:  rgba(90, 115, 175, 0.75);
  --border-faint:   rgba(175, 192, 228, 0.60);
  --primary:        #1d4ed8;
  --primary-hover:  #1908ac;
  --primary-soft:   rgba(29, 78, 216, 0.10);
  --primary-text:   #ffffff;
  --success:        #117c38; /* S6.4 */
  --danger:         #cf2424; /* S6.4: AA as text on cards */
  --badge-danger:   #dc2626; /* S6.4: Sami B42 red badge on the topbar */
  --warning:        #a15804; /* S6.4 */
  --info:           #1d4ed8;
  /* Brand frame: royal blue topbar + sidebar (DashCaddy DNA), pale content */
  --topbar-bg:      linear-gradient(135deg, #1908ac, #2563eb);
  --topbar-text:    #ffffff;
  --topbar-border:  rgba(255,255,255,0.18);
  --sidebar-bg:     linear-gradient(180deg, #1b2f8a 0%, #2563eb 100%);
  /* Shadow so the brand frame sits above the white panes (azure-light pattern) */
  --shadow:         0 10px 36px rgba(25, 8, 90, 0.16);
  --shadow-soft:    0 2px 10px rgba(25, 8, 90, 0.12);
  --grad-accent:    linear-gradient(135deg, #1d4ed8, #6fb2ff);
  --grad-accent-deep: linear-gradient(135deg, #102a75, #003e85);

  /* S6.7: starred-pill glyph on --grad-accent-deep fills — >= 4.5:1
     per theme, enforced by TestThemePaletteFillAndHoverContrast. */
  --gold-text:      #ffe082;
}

/* ===== v3.56 snooze / density / skeletons / swipe ===== */
.sm-r-snooze { border-top:1px solid var(--border); margin-top:4px; padding-top:4px; display:flex; flex-direction:column; gap:2px; }
.sm-r-snooze form { margin:0; }
.sm-r-snooze button { width:100%; text-align:left; }
.sm-snooze-wake { font-size:12px; padding:4px 6px; border-radius:6px; border:1px solid var(--border); background:var(--bg-surface); color:var(--text); }
.sm-snooze-wake-at { display:none; font-size:12px; padding:4px 6px; border-radius:6px; border:1px solid var(--border); background:var(--bg-surface); color:var(--text); margin-left:4px; min-width:200px; }
.sm-snooze-form.custom-on .sm-snooze-wake-at { display:inline-block; }
.sm-snooze-form.custom-on .sm-snooze-wake { display:none; }
/* v3.90 follow-up reminders: follow-up button reuses snooze picker styling */
.sm-followup-btn { border-color:rgba(79,141,249,.45); background:var(--bg-surface); color:var(--accent-cyan); }
.sm-rule-form { display:flex; gap:10px; flex-wrap:wrap; align-items:center; margin:12px 0; }
.sm-rule-form select, .sm-rule-form input[name=\"pattern\"] { padding:8px 10px; border-radius:8px; border:1px solid var(--border); background:var(--bg-surface); color:var(--text); }
.sm-rule-form input[name=\"pattern\"] { flex:1; min-width:180px; }
.sm-chk { display:inline-flex; gap:6px; align-items:center; font-size:13.5px; color:var(--text-dim); }
.sm-rule-list { list-style:none; margin:10px 0 0; padding:0; }
.sm-rule-item { display:flex; gap:12px; align-items:center; padding:9px 4px; border-bottom:1px solid var(--border); font-size:14px; flex-wrap:wrap; }
.sm-rule-item.sm-rule-off .sm-rule-desc { opacity:.55; text-decoration:line-through; }
.sm-rule-desc { flex:1; min-width:200px; }
.sm-inline { display:inline; }
.sm-act-sm { padding:5px 10px; font-size:12.5px; border-radius:7px; }
.sm-danger { color:#e5484d; }
.sm-task-btn { border-color:rgba(79,141,249,.45); background:var(--bg-surface); color:var(--text-link); }
.sm-tasks-head { display:flex; align-items:center; gap:10px; padding:10px 4px 14px; }
.sm-tasks-head h2 { margin:0; font-size:17px; }
.sm-tasks-count { color:var(--text-dim,#8892a0); font-size:13px; }
ul.sm-tasks { list-style:none; margin:0; padding:0; }
.sm-task-item { display:flex; align-items:flex-start; gap:8px; padding:9px 6px; border-bottom:1px solid var(--border, rgba(255,255,255,.08)); }
.sm-task-item.done .sm-task-title { text-decoration:line-through; opacity:.55; }
.sm-task-checkform { display:inline; }
.sm-task-check { background:none; border:none; cursor:pointer; font-size:16px; line-height:1.3; color:var(--text-link); padding:2px 4px; }
.sm-task-main { flex:1; min-width:0; }
.sm-task-title { color:var(--text); font-weight:600; text-decoration:none; word-break:break-word; }
.sm-task-title:hover { text-decoration:underline; color:var(--text-link); }
.sm-task-meta { font-size:12.5px; color:var(--text-dim,#8892a0); margin-top:2px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.sm-task-delform { display:inline; }
.sm-task-del { background:none; border:none; cursor:pointer; color:var(--text-dim,#8892a0); font-size:15px; padding:2px 6px; }
.sm-task-del:hover { color:#e5484d; }
.sm-tasks-foot { padding:12px 4px; font-size:12.5px; }
body[data-density="compact"] .sm-row { padding:6px 10px; min-height:0; }
body[data-density="compact"] .sm-r-body { gap:1px; }
body[data-density="compact"] .sm-r-prev { display:none; }
body[data-density="compact"] .sm-r-from, body[data-density="compact"] .sm-r-sub { font-size:12.5px; }
body[data-density="compact"] .sm-r-av { width:26px; height:26px; font-size:11px; }
#sm-density-btn[aria-pressed="true"] { background:var(--grad-accent-deep); color:#ffffff; }
/* navigation skeletons */
.sm-sk-wrap { padding:6px 0; }
.sm-sk-row { display:flex; gap:10px; align-items:center; padding:12px 14px; border-bottom:1px solid var(--border); }
.sm-sk-av { width:34px; height:34px; border-radius:50%; flex:none; }
.sm-sk-lines { flex:1; display:flex; flex-direction:column; gap:7px; }
.sm-sk-l1 { height:11px; width:45%; border-radius:4px; }
.sm-sk-l2 { height:10px; width:85%; border-radius:4px; }
.sm-sk-av, .sm-sk-l1, .sm-sk-l2 { background:linear-gradient(90deg, var(--border) 25%, rgba(79,141,249,.16) 50%, var(--border) 75%); background-size:400% 100%; animation:sm-sk-shimmer 1.15s linear infinite; }
@keyframes sm-sk-shimmer { from { background-position:100% 0; } to { background-position:-100% 0; } }
/* swipe-to-archive / delete */
.sm-row { transition:transform .18s ease, opacity .18s ease; touch-action:pan-y; }
.sm-swipe-under { position:absolute; inset:0; display:flex; align-items:center; justify-content:flex-end; padding:0 18px; font-weight:600; font-size:13px; color:#fff; z-index:0; border-radius:inherit; }
.sm-swipe-under.archive { background:linear-gradient(90deg, transparent 55%, #16a34a); }
.sm-swipe-under.delete { background:linear-gradient(270deg, transparent 55%, #dc2626); justify-content:flex-start; }
.sm-row.sm-swiping { z-index:2; background:var(--bg-surface); }
/* v3.105 (C41) — Gmail-style new-mail activity bar.
   Fixed bottom-center pill, surfaces when polling detects new mail.
   Sits above the list (z-index 400); never obstructs the toolbar. */
.sm-new-mail-pill {
  position:fixed;
  left:50%;
  bottom:24px;
  transform:translateX(-50%);
  z-index:400;
  pointer-events:auto;
  animation:sm-new-mail-rise .28s cubic-bezier(.2,.7,.3,1.1);
}
.sm-new-mail-pill[hidden] { display:none !important; }
.sm-new-mail-pill-btn {
  display:inline-flex;
  align-items:center;
  gap:8px;
  padding:10px 18px;
  font-size:13.5px;
  font-weight:600;
  color:var(--primary-text,#fff);
  background:linear-gradient(135deg,var(--primary) 0%,var(--primary-hover) 100%);
  border:1px solid var(--primary);
  border-radius:999px;
  cursor:pointer;
  box-shadow:0 4px 14px rgba(0,0,0,.18), 0 0 0 3px rgba(79,141,249,.18);
  transition:transform .12s ease, box-shadow .12s ease, opacity .12s ease;
  user-select:none;
}
.sm-new-mail-pill-btn:hover {
  transform:translateY(-1px);
  box-shadow:0 6px 18px rgba(0,0,0,.24), 0 0 0 4px rgba(79,141,249,.25);
}
.sm-new-mail-pill-btn:active { transform:translateY(0); }
.sm-new-mail-pill-icon {
  display:inline-block;
  font-size:14px;
  animation:sm-new-mail-bob 1.6s ease-in-out infinite;
}
@keyframes sm-new-mail-rise {
  from { transform:translate(-50%, 28px); opacity:0; }
  to   { transform:translate(-50%, 0);    opacity:1; }
}
@keyframes sm-new-mail-bob {
  0%, 100% { transform:translateY(0); }
  50%      { transform:translateY(2px); }
}
@media (prefers-reduced-motion: reduce) {
  .sm-new-mail-pill { animation:none; }
  .sm-new-mail-pill-icon { animation:none; }
}

/* v3.123 / IF-3: prefers-reduced-motion global kill (app surface).
   Collapses every animation/transition to a single ~0ms frame and
   disables smooth scroll. The fill-mode scoping keeps forwards-filled
   animations (v3.118 progress bar) on their FINAL keyframe instead of
   snapping back to the hidden start frame when duration collapses. */
@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}
@media (prefers-reduced-motion:reduce){.sm-progress.is-animating{animation-fill-mode:forwards}}

/* v3.124 / IF-2: 44px touch targets for standalone app controls.
   The coarse-input rule covers touch laptops/tablets at any width; the
   narrow-layout rule covers mobile emulation and touch devices that do not
   expose pointer:coarse. Desktop fine-pointer base sizing stays unchanged. */
@media (pointer:coarse) {
  .sm-tb-btn, .sm-menu-btn, .sm-logout { min-width:44px; min-height:44px; }
  .sm-folder { min-height:44px; }
}
@media (max-width:860px) {
  .sm-tb-btn, .sm-menu-btn, .sm-logout { min-width:44px; min-height:44px; }
  .sm-folder { min-height:44px; }
}


body {
  --sm-control-bg: var(--topbar-bg);
  --sm-control-fg: var(--topbar-text);
  --sm-control-shadow: color-mix(in srgb, var(--primary) 42%, transparent);
  --sm-control-hover-shadow: color-mix(in srgb, var(--primary) 58%, transparent);
}
.sm-compose-btn { font-family:inherit; }
/* B42 (2026-09-09): the three round topbar icon buttons (view toggle,
   theme picker, help) were REMOVED from this shared group. Painting them
   var(--sm-control-bg) = var(--topbar-bg) gave them the exact same
   gradient as the topbar behind them — self-camouflaging, invisible in
   every theme (Sami could not see the keyboard-shortcuts ? button in
   light mode). They intentionally keep the v3.145 frosted-pill rules
   earlier in appCSS: white pill + dark glyph, visible on every topbar. */
.sm-compose-btn,
.sm-top .sm-user-btn,
.sm-top .sm-menu-btn,
.sm-top .sm-logout {
  background:var(--sm-control-bg);
  color:var(--sm-control-fg);
  border:1px solid color-mix(in srgb, var(--sm-control-fg) 24%, transparent);
  box-shadow:0 4px 14px var(--sm-control-shadow);
}
.sm-compose-btn:hover,
.sm-top .sm-user-btn:hover,
.sm-top .sm-menu-btn:hover,
.sm-top .sm-logout:hover {
  background:var(--sm-control-bg);
  color:var(--sm-control-fg);
  box-shadow:0 6px 18px var(--sm-control-hover-shadow);
  filter:brightness(1.08) saturate(1.06);
}
.sm-user-btn { min-height:38px; max-width:260px; }
.sm-user-btn > span:last-child { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.sm-user-dropdown {
  width:min(360px, calc(100vw - 24px));
  max-height:min(560px, calc(100vh - 88px));
  overflow:auto;
  background:var(--bg-surface);
  color:var(--text);
  border-color:var(--border-strong);
  box-shadow:var(--shadow-modal);
}
.sm-user-dropdown[hidden] { display:none !important; }
.sm-identity-row { color:var(--text); }
.sm-identity-row:hover { background:var(--primary-soft); }
.sm-identity-row.active { background:var(--primary-soft); box-shadow:inset 3px 0 0 var(--primary); }
.sm-avatar-upload-label { display:flex; align-items:center; justify-content:center; margin-top:8px; padding:9px 12px; border-radius:9px; cursor:pointer; background:var(--sm-control-bg); color:var(--sm-control-fg); font-size:12.5px; font-weight:700; }
.sm-avatar-upload-status { min-height:18px; margin:7px 4px 0; color:var(--text-dim); font-size:11.5px; overflow-wrap:anywhere; }
.sm-avatar-upload-status[data-state="error"] { color:var(--danger); }
.sm-avatar-upload-status[data-state="success"] { color:var(--success); }
.sm-forwarder-group { display:flex; flex-direction:column; }
.sm-forwarder-group .sm-folder { font-size:15px; font-weight:700; }

/* v3.97 — C28 unified modal system */
.sm-modal-root { position:fixed; inset:0; background:rgba(5,8,12,.55); backdrop-filter:blur(4px); z-index:10000; display:flex; align-items:center; justify-content:center; padding:20px; }
.sm-modal-root[hidden], .sm-modal-root.sm-hidden { display:none !important; }
.sm-modal-card { background:var(--bg-surface); color:var(--text); border:1px solid var(--border); border-radius:14px; max-width:520px; width:100%; max-height:82vh; display:flex; flex-direction:column; box-shadow:0 16px 48px rgba(0,0,0,.35); animation:sm-modal-in .16s ease-out; }
.sm-modal-card.sm-modal-narrow { max-width:420px; }
@keyframes sm-modal-in { from { opacity:0; transform:translateY(8px) scale(.985); } to { opacity:1; transform:none; } }
@media (prefers-reduced-motion: reduce) { .sm-modal-card { animation:none; } }
.sm-modal-head { padding:14px 18px 8px; display:flex; align-items:center; justify-content:space-between; gap:12px; font-family:var(--font-display, "Sami Grotesk", system-ui, sans-serif); font-size:15px; font-weight:700; color:var(--text); }
.sm-modal-x { background:none; border:none; color:var(--text-dim); font-size:22px; line-height:1; cursor:pointer; padding:0 6px; border-radius:6px; flex-shrink:0; }
.sm-modal-x:hover { color:var(--text); background:var(--bg-surface-alt); }
.sm-modal-body { padding:6px 18px 16px; font-size:13.5px; line-height:1.55; color:var(--text); overflow-y:auto; }
.sm-modal-body p { margin:0 0 8px; }
.sm-modal-body p:last-child { margin-bottom:0; }
.sm-modal-actions { padding:0 18px 16px; display:flex; justify-content:flex-end; gap:8px; flex-shrink:0; }
.sm-modal-btn { font:inherit; font-size:13px; font-weight:600; padding:8px 16px; border-radius:9px; border:1px solid var(--border); background:var(--bg-surface-alt); color:var(--text); cursor:pointer; transition:background .12s, border-color .12s; }
.sm-modal-btn:hover { border-color:var(--primary); }
.sm-modal-btn.primary { background:var(--primary); border-color:var(--primary); color:#fff; }
.sm-modal-btn.danger { background:var(--danger); border-color:var(--danger); color:#fff; }
.sm-modal-btn:focus-visible, .sm-modal-x:focus-visible { outline:2px solid var(--primary); outline-offset:2px; }
.sm-modal-input { width:100%; box-sizing:border-box; font:inherit; font-size:13.5px; padding:9px 11px; margin-top:10px; border-radius:9px; border:1px solid var(--border); background:var(--bg-surface-alt); color:var(--text); }
.sm-modal-input:focus:not(:focus-visible) { outline:2px solid var(--primary); border-color:var(--primary); }
@media (max-width:480px) { .sm-modal-root { padding:14px; } .sm-modal-card { max-height:88vh; } }
