/* Relay — outreach relay · COMMAND CENTER (LIGHT SKIN)
   Mission-control / trading-terminal precision, now on a premium light palette:
   warm-cool off-white base, white elevated cards, hairline grid, instrument-
   readout stats. Same Relay brand identity — single accent: amber phosphor
   #E89A3C (runs deeper for text legibility on white).
   Type system: Space Grotesk (display) + JetBrains Mono (all data/labels).
   Theme hook: <html data-theme="light"> (default). A future dark theme would
   live under :root[data-theme="dark"]; today :root carries the light tokens. */

:root {
  color-scheme: light;
  /* Premium LIGHT skin — warm-cool off-white base, white elevated cards.
     Same Relay command-center character, just light. Elevation runs the
     opposite way to the old dark theme: bg (page) is the tinted off-white,
     panel/panel-2 are white-ish cards, bg-2 is the RECESSED surface (inputs,
     sidebar, insets). */
  --bg: #f5f6f8;              /* page canvas — warm-cool off-white */
  --bg-2: #eef0f4;            /* recessed: inputs, sidebar low, insets */
  --panel: #ffffff;           /* cards */
  --panel-2: #f7f8fa;         /* secondary panels, chips, hud, ghost hover */
  --elevated: #eaecf1;        /* avatars, hover fills, tag chips */
  --border: rgba(16,20,32,.10);   /* hairline */
  --border-2: rgba(16,20,32,.16); /* stronger hairline */
  --hair: rgba(16,20,32,.07);
  --text: #14151a;            /* near-black primary */
  --muted: #5a6272;           /* secondary (~5.9:1 on white) */
  --faint: #7b8494;           /* tertiary labels/meta */
  /* Brand / primary accent — amber phosphor. Kept identical hue.
     On light, "hover" runs DEEPER (not lighter) so it stays legible as a
     text/rail/eyebrow accent AND reads as a correct button press-state. */
  --accent: #E89A3C;
  --accent-hover: #C87A1E;    /* deeper amber — legible on white + hover fill */
  --accent-fill: #D8862A;     /* badge/pill fill (white text ok) */
  --accent-text: #B26A12;     /* deepest amber — for accent text on white */
  /* Button fill — derived from the runtime --accent (so agency brand overrides
     still flow through) but darkened enough that white label text clears WCAG
     4.5:1. color-mix fallback: --accent-text. */
  --accent-btn: #A8630F;
  --accent-btn: color-mix(in srgb, var(--accent) 68%, #000);
  --accent-soft: rgba(232, 154, 60, 0.16);
  --accent-line: rgba(232, 154, 60, 0.55);
  --accent-glow: rgba(232, 154, 60, 0.30);
  --focus: rgba(232, 154, 60, 0.62);
  /* Form field surface — white on light (unchanged). Flips to a recessed dark
     tone in the dark skin so inputs read as distinct fields, not white boxes. */
  --field-bg: #ffffff;
  /* Frosted-glass surface (topbar HUD strip, sticky batch bar, toasts). */
  --glass: rgba(250, 250, 252, .78);
  --green: #16a34a;
  --amber: #d1810a;
  /* Danger / reject / critical — stays RED, distinct from the amber brand accent */
  --red: #e5484d;
  --danger: #dc2626;
  --danger-bg: #dc2626;
  --danger-fill: #c81e1e;
  --danger-hover: #b91c1c;
  --blue: #3b82f6;
  --radius: 6px;              /* technical corners */
  --radius-sm: 4px;
  --radius-lg: 12px;          /* softer containers */
  --shadow: 0 1px 2px rgba(16,24,40,.06), 0 8px 24px -10px rgba(16,24,40,.16);
  --shadow-lg: 0 24px 60px -18px rgba(16,24,40,.22), 0 4px 14px rgba(16,24,40,.08);
  --font: "Space Grotesk", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
  --mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
  --ease: cubic-bezier(0.22, 0.61, 0.36, 1);
  --spring: cubic-bezier(0.34, 1.4, 0.5, 1);
}

/* ============================================================= DARK SKIN
   The original command-center dark palette, restored under the data-theme hook.
   Light stays the default (bare :root); the toggle in the sidebar footer flips
   <html data-theme="dark"> and persists to localStorage. Only the tokens that
   differ are overridden — everything else inherits from :root. */
:root[data-theme="dark"] {
  color-scheme: dark;
  --bg: #0e1117;              /* soft dark, faintly cool navy-gray — never pure black */
  --bg-2: #11151c;
  --panel: #151a22;
  --panel-2: #1a1f29;
  --elevated: #212734;
  --border: #232a37;          /* hairline */
  --border-2: #2d3646;
  --hair: rgba(255,255,255,.06);
  --text: #e9edf4;
  --muted: #838d9e;
  --faint: #565f6e;
  /* Brand accent — amber phosphor. On dark, hover runs LIGHTER. */
  --accent: #E89A3C;
  --accent-hover: #F2AB55;
  --accent-fill: #D8862A;
  --accent-text: #F2AB55;     /* accent text legible on dark */
  /* On dark, buttons keep a saturated amber fill (white text clears contrast). */
  --accent-btn: #C87A1E;
  --accent-btn: color-mix(in srgb, var(--accent) 82%, #000);
  --accent-soft: rgba(232, 154, 60, 0.14);
  --accent-line: rgba(232, 154, 60, 0.5);
  --accent-glow: rgba(232, 154, 60, 0.34);
  --focus: rgba(232, 154, 60, 0.6);
  /* Inputs sit recessed BELOW the card (#151a22) so login/form fields read as
     distinct dark wells rather than blending into the panel. */
  --field-bg: #0f131a;
  /* Dark frosted glass for the topbar strip / batch bar / toasts. */
  --glass: rgba(15, 18, 24, .72);
  --green: #2ecc71;
  --amber: #f5a623;
  --red: #ff4d57;
  --danger: #ff4d57;
  --danger-bg: #7c111d;
  --danger-fill: #97141e;
  --danger-hover: #9a1728;
  --blue: #6ea0ff;
  --shadow: 0 12px 34px -10px rgba(3, 5, 10, 0.78), 0 2px 8px rgba(3, 5, 10, 0.5);
  --shadow-lg: 0 30px 70px -14px rgba(2, 4, 9, 0.8);
}
/* Canvas texture overlays flip to light-on-dark (screen) on the dark skin. */
:root[data-theme="dark"] body::before {
  opacity: 0.5;
  background-image: repeating-linear-gradient(0deg, rgba(255,255,255,.010) 0 1px, transparent 1px 3px);
  mix-blend-mode: overlay;
}
:root[data-theme="dark"] body::after { mix-blend-mode: overlay; opacity: 0.03; }
:root[data-theme="dark"] ::-webkit-scrollbar-thumb { background: #2d3646; }
:root[data-theme="dark"] ::-webkit-scrollbar-thumb:hover { background: #3a4557; }

/* ---- Dark-skin surface overrides ----
   Elevated surfaces below were authored with hardcoded LIGHT literals
   (#ffffff / white glass / light gradients) and had no dark counterpart, so
   they rendered as stray white blocks on the dark skin. Route each to a dark
   surface; light mode is untouched (these selectors only apply under
   data-theme="dark"). */
:root[data-theme="dark"] .drawer,
:root[data-theme="dark"] .modal {
  background: linear-gradient(180deg, #1a1f29, #151a22);
  box-shadow: var(--shadow-lg), inset 0 1px 0 rgba(255,255,255,.05);
}
:root[data-theme="dark"] .cmdk {
  background: #151a22;
  box-shadow: var(--shadow-lg), inset 0 1px 0 rgba(255,255,255,.05);
}
:root[data-theme="dark"] .ckdrop-panel { background: #1a1f29; }
:root[data-theme="dark"] .toast { background: rgba(26,31,41,.96); }
:root[data-theme="dark"] .rv-batch { background: rgba(21,26,34,.94); }
:root[data-theme="dark"] .skeleton,
:root[data-theme="dark"] .sk { background: #1a1f29; }
:root[data-theme="dark"] .skeleton::after,
:root[data-theme="dark"] .sk::after {
  background: linear-gradient(90deg, transparent, rgba(255,255,255,.06), transparent);
}
:root[data-theme="dark"] .switch .track { background: #2d3646; }
:root[data-theme="dark"] table.tbl tbody tr:hover { background: rgba(255,255,255,.03); }
/* Rule tag tints — light pastel fills → translucent dark tints. */
:root[data-theme="dark"] .tag.review { color: #e0a23c; border-color: rgba(232,154,60,.32); background: rgba(232,154,60,.12); }
:root[data-theme="dark"] .tag.inclusion { color: #4ade80; border-color: rgba(46,204,113,.3); background: rgba(46,204,113,.12); }
:root[data-theme="dark"] .tag.exclusion { color: #ff8087; border-color: rgba(255,77,87,.3); background: rgba(255,77,87,.12); }

/* Theme toggle control (sidebar footer) */
.theme-toggle {
  display: flex;
  align-items: center;
  gap: .5rem;
  width: 100%;
  padding: .5rem .7rem;
  margin-bottom: .3rem;
  background: var(--panel-2);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  color: var(--muted);
  font: 600 11.5px/1 var(--mono);
  letter-spacing: .04em;
  text-transform: uppercase;
  cursor: pointer;
  transition: color .15s var(--ease), border-color .15s var(--ease), background .15s var(--ease);
}
.theme-toggle:hover { color: var(--text); border-color: var(--border-2); background: var(--elevated); }
.theme-toggle .ic { width: 15px; height: 15px; flex: none; color: var(--accent); }
.theme-toggle .tt-label { flex: 1; text-align: left; }
/* Show the icon/label for the theme you'd switch TO. */
.theme-toggle .tt-sun, .theme-toggle .tt-to-light { display: none; }
.theme-toggle .tt-moon, .theme-toggle .tt-to-dark { display: inline-flex; }
:root[data-theme="dark"] .theme-toggle .tt-moon,
:root[data-theme="dark"] .theme-toggle .tt-to-dark { display: none; }
:root[data-theme="dark"] .theme-toggle .tt-sun,
:root[data-theme="dark"] .theme-toggle .tt-to-light { display: inline-flex; }

/* Language switcher (sidebar footer, next to the theme toggle) */
.lang-toggle {
  display: flex;
  align-items: center;
  gap: .5rem;
  width: 100%;
  padding: .5rem .7rem;
  margin-bottom: .3rem;
  background: var(--panel-2);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  color: var(--muted);
  transition: color .15s var(--ease), border-color .15s var(--ease), background .15s var(--ease);
}
.lang-toggle:hover { color: var(--text); border-color: var(--border-2); background: var(--elevated); }
.lang-toggle .ic { width: 15px; height: 15px; flex: none; color: var(--accent); }
.lang-toggle select {
  flex: 1;
  width: 100%;
  height: 1em;
  border: none;
  background: transparent;
  color: inherit;
  font: 600 11.5px/1 var(--mono);
  letter-spacing: .04em;
  text-transform: uppercase;
  cursor: pointer;
  padding: 0;
  margin: 0;
  outline: none;
  appearance: none;
  -webkit-appearance: none;
}
.lang-toggle select option { color: var(--text); background: var(--panel); text-transform: none; }

* { box-sizing: border-box; }
html, body { height: 100%; }
/* Reserve the scrollbar gutter so opening a modal (which locks scroll) can't
   shift the layout ~10px sideways. */
html { scrollbar-gutter: stable; }
body {
  margin: 0;
  background: var(--bg);
  color: var(--text);
  font: 14.5px/1.6 var(--font);
  font-weight: 400;
  letter-spacing: -0.004em;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

/* Faint scanline + grain overlay — command-center canvas texture.
   On the LIGHT skin these run as very subtle DARK multiply lines so the
   off-white base stays clean (white-on-light overlays were invisible). */
body::before {
  content: "";
  position: fixed;
  inset: 0;
  z-index: 9999;
  pointer-events: none;
  opacity: 0.35;
  background-image:
    repeating-linear-gradient(0deg, rgba(16,20,32,.014) 0 1px, transparent 1px 3px);
  mix-blend-mode: multiply;
}
body::after {
  content: "";
  position: fixed;
  inset: 0;
  z-index: 9998;
  pointer-events: none;
  opacity: 0.018;
  mix-blend-mode: multiply;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}

a { color: inherit; text-decoration: none; }
button { font-family: inherit; }
h1, h2, h3 { text-wrap: balance; }
p { text-wrap: pretty; }

/* ALL data / labels / figures ride the mono rail with tabular figures */
.stat-card .value, .meter .row .v, .cellbar .n, .chip .num, .mono, .kbd,
table.tbl td, table.tbl th, .stat-card .foot, .stat-card .label, .wsbadge,
.bubble .meta, .review-card .rc-head .when, .section-title, label.lbl,
.nav-foot, .hud, .badge, .pill-pending, .tag {
  font-variant-numeric: tabular-nums;
}

/* Focus rings — precise, on-brand */
:focus-visible { outline: 2px solid var(--focus); outline-offset: 2px; border-radius: 3px; }
button:focus-visible, .nav-item:focus-visible, .tab:focus-visible { outline-offset: 3px; }

::-webkit-scrollbar { width: 10px; height: 10px; }
::-webkit-scrollbar-thumb { background: #cfd4dd; border-radius: 2px; border: 2px solid var(--bg); }
::-webkit-scrollbar-thumb:hover { background: #b8bec9; }

/* ============================================================= LOGIN */
/* Secure terminal access panel */
.login-wrap {
  min-height: 100vh; display: grid; place-items: center; padding: 1.5rem;
  background: var(--bg);
}
.login-card {
  position: relative;
  background: var(--panel);
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  padding: 2.4rem 2.1rem 2.1rem;
  width: min(94vw, 400px);
  box-shadow: var(--shadow-lg);
}
.login-card .brand { display: flex; align-items: center; gap: .65rem; margin-bottom: 1.5rem; }
.login-card h1 { font-size: 1.2rem; margin: 0; font-weight: 600; letter-spacing: -.02em; }
/* Supportive subtitle — plain sans, no eyebrow/terminal ornament. */
.login-card p.sub {
  color: var(--muted); font-size: .9rem; letter-spacing: -.005em;
  margin: 0 0 1.5rem;
}
/* Login inputs read as active fields, not disabled — accent on focus only.
   --field-bg keeps them white on light and a recessed dark well on the dark skin
   (distinct from the login card, which is --panel). */
.login-card input { background: var(--field-bg); }
.login-card .field { margin-bottom: 1rem; }
.login-card #loginBtn { margin-top: .5rem; }

/* ============================================================= SHELL */
.shell { display: grid; grid-template-columns: 240px 1fr; min-height: 100vh; }
.sidebar {
  background: linear-gradient(180deg, var(--bg-2), var(--bg));
  border-right: 1px solid var(--border);
  display: flex; flex-direction: column;
  padding: 1.25rem .8rem;
  position: sticky; top: 0; height: 100vh;
}
.brand { display: flex; align-items: center; gap: .6rem; padding: 0 .35rem; }
.brand-mark {
  width: 32px; height: 32px; border-radius: var(--radius);
  background: linear-gradient(150deg, var(--accent-hover), #8a4e12);
  display: grid; place-items: center;
  font-family: var(--mono); font-weight: 700; font-size: .82rem; color: #fff;
  box-shadow: 0 3px 14px var(--accent-glow), inset 0 1px 0 rgba(255,255,255,.16);
  flex: 0 0 auto; letter-spacing: -.02em;
}
.brand-txt { line-height: 1.2; min-width: 0; }
.brand-txt strong { font-size: .92rem; font-weight: 600; letter-spacing: -.02em; display: block; }
.brand-txt span {
  font-family: var(--mono); font-size: .6rem; color: var(--faint);
  text-transform: uppercase; letter-spacing: .16em;
}

/* Client-panel context badge (workspace name + plan chip). */
.client-ctx {
  margin-top: 1rem; padding: .6rem .7rem; border-radius: 10px;
  background: var(--surface-2, rgba(127,127,127,.08));
  border: 1px solid var(--border);
}
.client-ctx .cc-ws {
  font-size: .82rem; font-weight: 600; letter-spacing: -.01em;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.client-ctx .cc-plan {
  display: flex; align-items: center; gap: .4rem; margin-top: .25rem;
  font-family: var(--mono); font-size: .6rem; text-transform: uppercase;
  letter-spacing: .12em; color: var(--faint);
}
.client-ctx .cc-dot {
  width: 6px; height: 6px; border-radius: 50%; background: var(--accent, #d9a441);
  display: inline-block;
}

.nav { margin-top: 1.6rem; display: flex; flex-direction: column; gap: 2px; }
.nav::before {
  content: "NAVIGAZIONE";
  font-family: var(--mono); font-size: .58rem; font-weight: 600;
  letter-spacing: .2em; color: var(--faint);
  padding: 0 .6rem .6rem; opacity: .8;
}
.nav-item {
  display: flex; align-items: center; gap: .65rem;
  padding: .55rem .62rem; border-radius: var(--radius-sm);
  color: var(--muted); font-weight: 500; font-size: .875rem;
  cursor: pointer; border: 1px solid transparent; user-select: none;
  position: relative;
  transition: background .16s var(--ease), color .16s var(--ease), transform .12s var(--spring);
}
.nav-item:hover { background: var(--panel-2); color: var(--text); }
.nav-item:active { transform: scale(.985); }
.nav-item.active {
  background: linear-gradient(90deg, var(--accent-soft), transparent 85%);
  color: var(--text); border-color: var(--accent-line);
}
.nav-item.active::before {
  content: ""; position: absolute; left: -0.8rem; top: 50%; transform: translateY(-50%);
  width: 3px; height: 60%; border-radius: 0 2px 2px 0; background: var(--accent-hover);
  box-shadow: 0 0 10px var(--accent-glow);
}
.nav-item .ic { width: 17px; height: 17px; flex: 0 0 auto; opacity: .85; }
.nav-item.active .ic { opacity: 1; }
.nav-item .badge {
  margin-left: auto; background: var(--accent-fill); color: #fff;
  font-family: var(--mono); font-size: .64rem; font-weight: 600; border-radius: 3px;
  padding: .05rem .4rem; min-width: 19px; text-align: center;
  box-shadow: 0 1px 5px var(--accent-glow);
}
.nav-spacer { flex: 1; }
.nav-foot {
  color: var(--faint); font-family: var(--mono); font-size: .62rem; line-height: 1.5;
  letter-spacing: .04em; padding: .7rem .62rem; border-top: 1px solid var(--border); margin-top: .6rem;
  text-transform: uppercase;
}

.main { min-width: 0; display: flex; flex-direction: column; height: 100vh; overflow: hidden; }

/* ---- Topbar HUD (status strip) ---- */
.topbar {
  display: flex; align-items: center; gap: 1.1rem;
  padding: .85rem 1.6rem; border-bottom: 1px solid var(--border);
  flex: 0 0 auto; background: var(--glass);
  backdrop-filter: blur(14px) saturate(1.4); -webkit-backdrop-filter: blur(14px) saturate(1.4);
}
.tb-head { min-width: 0; }
.tb-eyebrow {
  font-family: var(--mono); font-size: .58rem; font-weight: 600;
  letter-spacing: .22em; color: var(--faint); text-transform: uppercase; margin-bottom: .1rem;
}
.topbar h2 { margin: 0; font-size: 1.18rem; font-weight: 600; letter-spacing: -.03em; line-height: 1.1; }
.topbar .sub { color: var(--muted); font-size: .82rem; }
/* Compact fixed-width status strip — identical footprint on every page so it
   never jumps as page titles change width. */
.hud {
  margin-left: auto; display: flex; align-items: stretch; gap: 0; height: 34px;
  border: 1px solid var(--border); border-radius: var(--radius);
  overflow: hidden; background: var(--panel); flex: 0 0 auto;
}
.hud-cell {
  display: flex; flex-direction: column; justify-content: center; gap: .05rem;
  padding: 0 .7rem; border-left: 1px solid var(--border);
}
.hud-cell:nth-child(1) { width: 118px; }
.hud-cell:nth-child(2) { width: 118px; }
.hud-cell:nth-child(3) { width: 122px; }
.hud-cell:first-child { border-left: 0; }
.hud-k { font-family: var(--mono); font-size: .52rem; font-weight: 600; letter-spacing: .16em; color: var(--faint); line-height: 1.1; }
.hud-v {
  font-family: var(--mono); font-size: .66rem; font-weight: 600; letter-spacing: .05em;
  color: var(--text); display: inline-flex; align-items: center; gap: .35rem; white-space: nowrap; line-height: 1.1;
}
.hud-v.ok { color: var(--green); }
.hud-dot {
  width: 6px; height: 6px; border-radius: 50%; background: var(--green);
  box-shadow: 0 0 8px var(--green); animation: pulse 2s var(--ease) infinite;
}
@keyframes pulse { 0%,100% { opacity: 1; } 50% { opacity: .35; } }

.topbar .actions { display: flex; gap: .5rem; align-items: center; }

/* Content canvas — faint graph-paper grid */
.content {
  padding: 1.9rem 2rem; overflow-y: auto; flex: 1; scrollbar-gutter: stable;
  background-image:
    linear-gradient(rgba(16,20,32,.012) 1px, transparent 1px),
    linear-gradient(90deg, rgba(16,20,32,.012) 1px, transparent 1px);
  background-size: 28px 28px;
  background-position: -1px -1px;
}
.content > * { max-width: 1360px; margin-inline: auto; }
/* staggered entry for grids/lists on route change */
.content .grid, .content .review-list, .content .card, .content .chips, .content .toolbar {
  animation: rise .32s var(--ease) both;
}
.content .grid > *, .content .review-list > * { animation: rise .34s var(--ease) both; }
.content .grid > *:nth-child(2) { animation-delay: .04s; }
.content .grid > *:nth-child(3) { animation-delay: .08s; }
.content .grid > *:nth-child(4) { animation-delay: .12s; }
.content .grid > *:nth-child(5) { animation-delay: .16s; }
.content .grid > *:nth-child(6) { animation-delay: .2s; }
@keyframes rise { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }

/* ============================================================= BUTTONS */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: .45rem;
  padding: .5rem .9rem; border-radius: var(--radius-sm);
  border: 1px solid var(--border-2); background: var(--panel); color: var(--text);
  font-family: var(--mono); font-size: .78rem; font-weight: 500; letter-spacing: .02em; cursor: pointer;
  transition: background .16s var(--ease), border-color .16s var(--ease), transform .1s var(--spring), box-shadow .16s var(--ease);
  white-space: nowrap;
}
.btn:hover { background: var(--elevated); border-color: rgba(16,20,32,.22); }
.btn:active { transform: scale(.97); }
.btn:disabled { opacity: .45; cursor: not-allowed; }
.btn.primary {
  background: var(--accent-btn); border-color: var(--accent-btn); color: #fff;
  box-shadow: 0 2px 12px -3px var(--accent-glow), inset 0 1px 0 rgba(255,255,255,.12);
}
.btn.primary:hover { background: color-mix(in srgb, var(--accent-btn) 88%, #000); border-color: var(--accent-btn); box-shadow: 0 5px 18px -4px var(--accent-glow); }
.btn.ghost { background: transparent; border-color: var(--border-2); }
.btn.ghost:hover { background: var(--panel-2); }
/* Tonal accent button — accent affordance without a heavy filled CTA (used where
   a primary would over-compete, e.g. "Invita subito i nuovi"). */
.btn.accent-ghost { background: var(--accent-soft); border-color: var(--accent-line); color: var(--accent-text); }
.btn.accent-ghost:hover { background: var(--accent-soft); border-color: var(--accent-hover); color: var(--accent-text); }
.btn.danger { color: #fff; background: var(--danger-bg); border-color: var(--danger-fill); }
.btn.danger:hover { background: var(--danger-hover); }
.btn.success { color: #fff; background: var(--green); border-color: var(--green); font-weight: 600; }
.btn.success:hover { background: #12903f; }
.btn.sm { padding: .32rem .58rem; font-size: .72rem; }
.btn.block { width: 100%; }

/* ============================================================= CARDS / GRID */
.grid { display: grid; gap: 1rem; }
.stat-grid { grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); }
.card {
  background: var(--panel); border: 1px solid var(--border);
  border-radius: var(--radius); padding: 1.1rem 1.2rem;
  transition: border-color .16s var(--ease), box-shadow .16s var(--ease), transform .16s var(--ease);
}
.card.pad0 { padding: 0; overflow: hidden; }

/* Instrument-readout stat cards */
.stat-card { position: relative; overflow: hidden; padding: 1.15rem 1.2rem 1.2rem; }
/* neutral hairline by default — red top-rule reserved for the critical (accent) card */
.stat-card::before {
  content: ""; position: absolute; top: 0; left: 0; right: 0; height: 2px;
  background: linear-gradient(90deg, var(--border-2), transparent 60%);
}
.stat-card:has(.value.accent)::before {
  background: linear-gradient(90deg, var(--accent-line), transparent 60%);
}
.stat-card .label {
  color: var(--muted); font-family: var(--mono); font-size: .62rem;
  text-transform: uppercase; letter-spacing: .16em; font-weight: 600;
}
.stat-card .value {
  font-size: 2.5rem; font-weight: 600; letter-spacing: -.045em; margin-top: .3rem;
  line-height: 1; font-feature-settings: "tnum" 1;
}
.stat-card .value.accent { color: var(--accent-text); text-shadow: none; }
.stat-card .value.accent + .foot, .stat-card .value.accent ~ .foot { color: #a2711f; }
.stat-card .foot { color: var(--faint); font-family: var(--mono); font-size: .68rem; letter-spacing: .02em; margin-top: .4rem; }
/* Inline spark-bars — a small daily series pinned to the card's lower edge.
   Cards carrying bars get extra bottom padding so foot text never overlaps. */
.stat-card:has(.spark-bars) { padding-bottom: 2.9rem; }
.stat-card .spark-bars {
  height: 26px; position: absolute; left: 1.2rem; right: 1.2rem; bottom: .85rem;
  display: flex; align-items: flex-end; gap: 3px; pointer-events: none;
}
.stat-card .spark-bars i {
  flex: 1; border-radius: 2px 2px 1px 1px;
  background: var(--elevated); transition: height .3s var(--ease);
}
.stat-card .spark-bars i:nth-last-child(-n+2) { background: var(--accent); }
:root[data-theme="dark"] .stat-card .spark-bars i { background: rgba(255,255,255,.08); }

.section-title {
  font-family: var(--mono); font-size: .64rem; text-transform: uppercase; letter-spacing: .2em;
  color: var(--muted); font-weight: 600; margin: 2rem 0 .8rem;
  display: flex; align-items: center; gap: .7rem;
}
.section-title::before { content: "//"; color: var(--accent-hover); font-weight: 700; }
.section-title::after { content: ""; flex: 1; height: 1px; background: var(--hair); }
.section-title:first-child { margin-top: 0; }

/* ============================================================= ACCOUNT / WS CARDS */
.acct-grid { grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); }
.acct-card { display: flex; flex-direction: column; gap: .85rem; }
.acct-card:hover { border-color: var(--border-2); box-shadow: var(--shadow); transform: translateY(-2px); }
.acct-head { display: flex; align-items: flex-start; gap: .7rem; }
.avatar {
  width: 40px; height: 40px; border-radius: var(--radius); flex: 0 0 auto;
  background: var(--elevated); display: grid; place-items: center;
  font-family: var(--mono); font-weight: 600; color: var(--muted); font-size: .85rem;
  border: 1px solid var(--border-2); letter-spacing: .02em;
}
.acct-head .who { min-width: 0; }
.acct-head .who .nm { font-weight: 600; font-size: .95rem; letter-spacing: -.015em; }
.acct-head .who .ws { color: var(--faint); font-family: var(--mono); font-size: .72rem; letter-spacing: .02em; }
.acct-head .st {
  margin-left: auto; display: flex; align-items: center; gap: .35rem;
  font-family: var(--mono); font-size: .68rem; letter-spacing: .04em; color: var(--muted); white-space: nowrap; text-transform: uppercase;
}

/* ============================================================= METERS (instrument) */
.meters { display: flex; flex-direction: column; gap: .6rem; }
.meter .row { display: flex; justify-content: space-between; font-family: var(--mono); font-size: .7rem; margin-bottom: .3rem; }
.meter .row .k { color: var(--muted); text-transform: uppercase; letter-spacing: .1em; font-size: .62rem; align-self: center; }
.meter .row .v { color: var(--text); font-variant-numeric: tabular-nums; font-weight: 600; letter-spacing: .02em; }
.bar {
  position: relative; height: 5px; background: rgba(16,20,32,.08);
  border-radius: 3px; overflow: hidden;
}
:root[data-theme="dark"] .bar { background: rgba(255,255,255,.08); }
.bar > span {
  display: block; height: 100%; border-radius: 3px; min-width: 0;
  background: linear-gradient(90deg, #1c9a54, var(--green));
  box-shadow: 0 0 8px rgba(46,204,113,.45);
  transition: width .55s var(--ease);
}
.bar > span.amber { background: linear-gradient(90deg, #c47f12, var(--amber)); box-shadow: 0 0 8px rgba(245,166,35,.45); }
.bar > span.red { background: linear-gradient(90deg, #c9303a, var(--red)); box-shadow: 0 0 9px rgba(255,77,87,.5); }

/* ============================================================= DOTS / CHIPS / TAGS */
.dot { width: 8px; height: 8px; border-radius: 50%; display: inline-block; flex: 0 0 auto; box-shadow: 0 0 7px currentColor; }
.chip {
  display: inline-flex; align-items: center; gap: .4rem;
  background: var(--panel-2); border: 1px solid var(--border-2);
  border-radius: var(--radius-sm); padding: .27rem .62rem;
  font-family: var(--mono); font-size: .72rem; letter-spacing: .03em; color: var(--text);
}
.chip .num { color: var(--muted); font-variant-numeric: tabular-nums; }
.chips { display: flex; flex-wrap: wrap; gap: .5rem; }
.tag {
  background: var(--elevated); color: var(--muted); border-radius: var(--radius-sm);
  padding: .1rem .5rem; font-family: var(--mono); font-size: .7rem; letter-spacing: .03em;
  border: 1px solid var(--border); text-transform: uppercase;
}
.tag.review { color: #92500e; border-color: rgba(200,120,20,.28); background: #fcf3e6; }
.tag.inclusion { color: #15803d; border-color: rgba(22,163,74,.26); background: #e9f7ee; }
.tag.exclusion { color: #b42318; border-color: rgba(220,40,40,.24); background: #fdeceb; }
.pill-pending {
  background: var(--accent-fill); color: #fff; font-family: var(--mono); font-weight: 600;
  border-radius: 3px; padding: .05rem .5rem; font-size: .72rem; font-variant-numeric: tabular-nums;
}

/* ============================================================= TABLES */
.table-wrap { overflow-x: auto; }
table.tbl { width: 100%; border-collapse: collapse; min-width: 520px; }
table.tbl th, table.tbl td { text-align: left; padding: .66rem .95rem; border-bottom: 1px solid var(--border); vertical-align: middle; }
table.tbl th {
  font-family: var(--mono); font-size: .6rem; text-transform: uppercase; letter-spacing: .16em;
  color: var(--faint); font-weight: 600; background: var(--panel-2); position: sticky; top: 0;
}
table.tbl tr:last-child td { border-bottom: 0; }
table.tbl tbody tr { transition: background .14s var(--ease); }
table.tbl tbody tr:hover { background: rgba(16,20,32,.028); }
.cellbar { min-width: 120px; }
.cellbar .n { font-family: var(--mono); font-size: .72rem; margin-bottom: .28rem; font-variant-numeric: tabular-nums; color: var(--muted); }

/* ============================================================= FORMS */
.field { margin-bottom: 1rem; }
.field:last-child { margin-bottom: 0; }
label.lbl {
  display: block; font-family: var(--mono); font-size: .64rem; text-transform: uppercase;
  letter-spacing: .14em; color: var(--muted); margin-bottom: .42rem; font-weight: 600;
}
label.lbl .hint { text-transform: none; letter-spacing: 0; color: var(--faint); font-weight: 400; }
input[type=text], input[type=email], input[type=password], input[type=number], select, textarea {
  width: 100%; padding: .56rem .7rem; border-radius: var(--radius-sm); height: 36px;
  border: 1px solid var(--border-2); background: var(--field-bg); color: var(--text);
  font: inherit; font-size: .88rem; outline: none;
  transition: border-color .16s var(--ease), box-shadow .16s var(--ease), background .16s var(--ease);
}
textarea { height: auto; }
input:hover, select:hover, textarea:hover { border-color: var(--border-2); }
:root[data-theme="dark"] input:hover, :root[data-theme="dark"] select:hover, :root[data-theme="dark"] textarea:hover { border-color: #3a4557; }
:root:not([data-theme="dark"]) input:hover, :root:not([data-theme="dark"]) select:hover, :root:not([data-theme="dark"]) textarea:hover { border-color: rgba(16,20,32,.24); }
input:focus, select:focus, textarea:focus { border-color: var(--accent-line); box-shadow: 0 0 0 3px var(--accent-soft); background: var(--field-bg); }
input::placeholder, textarea::placeholder { color: var(--faint); }
textarea { resize: vertical; min-height: 90px; line-height: 1.55; font-family: var(--mono); font-size: .82rem; }
/* Prose textareas (persona system message, purpose, directions) — long natural
   language reads better in sans; mono is reserved for tokens/variables. */
textarea.prose { font-family: var(--font); font-size: .9rem; line-height: 1.6; }
input[type=number] { font-family: var(--mono); }
select { appearance: none; cursor: pointer; }
.form-row { display: grid; grid-template-columns: 1fr 1fr; gap: .9rem; }

.toggle { display: flex; align-items: center; justify-content: space-between; gap: 1rem; padding: .62rem 0; border-bottom: 1px solid var(--border); }
.toggle:last-child { border-bottom: 0; }
.toggle .tlabel { font-size: .88rem; }
.toggle .tlabel small { display: block; color: var(--faint); font-size: .76rem; margin-top: .14rem; }
.switch { position: relative; width: 40px; height: 22px; flex: 0 0 auto; }
.switch input { position: absolute; opacity: 0; width: 100%; height: 100%; margin: 0; cursor: pointer; }
.switch .track { position: absolute; inset: 0; background: #ccd1db; border-radius: 3px; transition: background .18s var(--ease); }
.switch .track::after { content: ""; position: absolute; top: 3px; left: 3px; width: 16px; height: 16px; border-radius: 2px; background: #fff; transition: transform .18s var(--spring); box-shadow: 0 1px 3px rgba(16,20,32,.28); }
.switch input:checked + .track { background: var(--accent); box-shadow: 0 0 10px -1px var(--accent-glow); }
.switch input:checked + .track::after { transform: translateX(18px); }
/* Locked toggle (core tools — always on, not switchable). */
.switch input:disabled { cursor: not-allowed; }
.switch input:disabled + .track { opacity: .55; }

/* ============================================================= LIST EDITOR */
.listed { display: flex; flex-direction: column; gap: .4rem; margin-bottom: .6rem; }
.listed .item { display: flex; align-items: center; gap: .5rem; background: var(--panel-2); border: 1px solid var(--border); border-radius: var(--radius-sm); padding: .42rem .62rem; transition: border-color .15s var(--ease); }
.listed .item:hover { border-color: var(--border-2); }
.listed .item span { flex: 1; font-size: .88rem; word-break: break-word; }
.listed .item .x { cursor: pointer; color: var(--faint); border: 0; background: none; font-size: 1.1rem; line-height: 1; padding: 0 .2rem; transition: color .15s; }
.listed .item .x:hover { color: var(--red); }
.add-row { display: flex; gap: .5rem; }
.add-row input { flex: 1; }

/* ============================================================= DRAWER */
.overlay { position: fixed; inset: 0; background: rgba(10, 12, 18, .5); backdrop-filter: blur(4px); -webkit-backdrop-filter: blur(4px); z-index: 40; opacity: 0; transition: opacity .22s var(--ease); }
.overlay.show { opacity: 1; }
/* Centered modal window (was a right-slide drawer). Same internal class names —
   only the presentation changed: overlay + centered container with its own
   internal scroll (head + tabs + body + foot inside). */
.drawer {
  position: fixed; z-index: 50; top: 50%; left: 50%;
  transform: translate(-50%, -46%) scale(.985);
  width: min(94vw, 880px); max-height: 86vh;
  background: linear-gradient(180deg, #ffffff, #fbfbfd);
  border: 1px solid var(--border-2); border-radius: var(--radius-lg);
  box-shadow: var(--shadow-lg), inset 0 1px 0 rgba(255,255,255,.7);
  display: flex; flex-direction: column; overflow: hidden;
  opacity: 0; transition: opacity .2s var(--ease), transform .2s var(--spring);
}
.drawer.show { opacity: 1; transform: translate(-50%, -50%) scale(1); }
.drawer-head { display: flex; align-items: center; gap: .8rem; padding: 1.1rem 1.35rem; border-bottom: 1px solid var(--border); flex: 0 0 auto; }
.drawer-head .who .nm { font-weight: 600; font-size: 1rem; letter-spacing: -.015em; }
.drawer-head .who .ws { color: var(--faint); font-family: var(--mono); font-size: .72rem; letter-spacing: .03em; }
.drawer-head .close { margin-left: auto; background: none; border: 1px solid var(--border-2); color: var(--muted); border-radius: var(--radius-sm); width: 32px; height: 32px; cursor: pointer; font-size: 1.1rem; transition: background .15s var(--ease), color .15s var(--ease); }
.drawer-head .close:hover { color: var(--text); background: var(--elevated); }
.tabs { display: flex; gap: .1rem; padding: .5rem .85rem 0; border-bottom: 1px solid var(--border); overflow-x: auto; flex: 0 0 auto; }
.tab {
  padding: .55rem .72rem; font-family: var(--mono); font-size: .72rem; letter-spacing: .06em; text-transform: uppercase;
  color: var(--muted); cursor: pointer; border: 0; background: none; border-bottom: 2px solid transparent; white-space: nowrap; font-weight: 500;
  transition: color .15s var(--ease), border-color .15s var(--ease);
}
.tab:hover { color: var(--text); }
.tab.active { color: var(--text); font-weight: 600; border-bottom-color: var(--accent-btn); }
.drawer-body { padding: 1.35rem; overflow-y: auto; flex: 1; }
.drawer-foot { padding: .95rem 1.35rem; border-top: 1px solid var(--border); display: flex; gap: .6rem; justify-content: flex-end; flex: 0 0 auto; }

/* ============================================================= MODAL */
.modal {
  position: fixed; z-index: 50; top: 50%; left: 50%; transform: translate(-50%, -46%) scale(.98);
  width: min(94vw, 480px);
  background: linear-gradient(180deg, #ffffff, #fbfbfd);
  border: 1px solid var(--border-2);
  border-radius: var(--radius-lg); box-shadow: var(--shadow-lg), inset 0 1px 0 rgba(255,255,255,.7);
  opacity: 0; transition: opacity .2s var(--ease), transform .2s var(--spring);
  max-height: 90vh; display: flex; flex-direction: column;
}
.modal.show { opacity: 1; transform: translate(-50%, -50%) scale(1); }
.modal-head { padding: 1.1rem 1.35rem; border-bottom: 1px solid var(--border); font-weight: 600; font-size: 1rem; letter-spacing: -.015em; display: flex; align-items: center; }
.modal-head .close { margin-left: auto; background: none; border: 0; color: var(--muted); cursor: pointer; font-size: 1.3rem; line-height: 1; transition: color .15s; }
.modal-head .close:hover { color: var(--text); }
.modal-body { padding: 1.35rem; overflow-y: auto; }
.modal-foot { padding: .95rem 1.35rem; border-top: 1px solid var(--border); display: flex; gap: .6rem; justify-content: flex-end; }

/* ============================================================= CHECKBOX DROPDOWN */
.ckdrop { position: relative; }
.ckdrop-btn {
  width: 100%; text-align: left; cursor: pointer;
  background: var(--panel-2); color: var(--text);
  border: 1px solid var(--border-2); border-radius: var(--radius-sm);
  padding: .55rem .7rem; font-size: .88rem; font-family: inherit;
  display: flex; align-items: center; gap: .4rem;
  transition: border-color .15s var(--ease), background .15s var(--ease);
}
.ckdrop-btn::after { content: "▾"; margin-left: auto; color: var(--faint); font-size: .8rem; }
.ckdrop.open .ckdrop-btn { border-color: var(--accent-hover); }
.ckdrop-btn.has-sel { color: var(--text); }
.ckdrop-panel {
  position: absolute; z-index: 60; top: calc(100% + 4px); left: 0; right: 0;
  max-height: 240px; overflow-y: auto;
  background: #ffffff;
  border: 1px solid var(--border-2); border-radius: var(--radius-sm);
  box-shadow: var(--shadow-lg); padding: .3rem;
}
.ckdrop-opt {
  display: flex; align-items: center; gap: .5rem; cursor: pointer;
  padding: .4rem .5rem; border-radius: var(--radius-sm); font-size: .85rem; color: var(--text);
}
.ckdrop-opt:hover { background: var(--panel-2); }
.ckdrop-opt input { accent-color: var(--accent-hover); width: 15px; height: 15px; cursor: pointer; }

/* ============================================================= CONVERSATION */
.thread { display: flex; flex-direction: column; gap: .7rem; max-width: 760px; }
.bubble { max-width: 74%; padding: .6rem .86rem; border-radius: var(--radius); font-size: .9rem; line-height: 1.55; word-wrap: break-word; }
.bubble .meta { font-family: var(--mono); font-size: .62rem; letter-spacing: .03em; color: var(--faint); margin-top: .3rem; }
.bubble.assistant { align-self: flex-end; background: var(--accent-soft); border: 1px solid var(--accent-line); border-bottom-right-radius: 2px; }
.bubble.user { align-self: flex-start; background: var(--panel-2); border: 1px solid var(--border-2); border-bottom-left-radius: 2px; }
.bubble.system { align-self: center; background: transparent; color: var(--faint); font-family: var(--mono); font-size: .74rem; font-style: normal; letter-spacing: .03em; }

/* ============================================================= REVIEW QUEUE */
.review-list { display: grid; gap: .9rem; max-width: 820px; }
.review-card { display: flex; flex-direction: column; gap: .7rem; position: relative; scroll-margin: 90px; }
/* neutral rail by default; red rail is the ACTIVE (keyboard-selected) state only */
.review-card::before {
  content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 2px;
  background: var(--border-2); border-radius: 2px 0 0 2px;
  transition: background .16s var(--ease), box-shadow .16s var(--ease);
}
/* Collapse-then-remove exit for an approved/rejected card (optimistic). */
.review-card.removing {
  max-height: 0 !important; opacity: 0; padding-block: 0; margin-block: 0; overflow: hidden;
  transition: max-height .28s var(--ease), opacity .28s var(--ease),
    padding-block .28s var(--ease), margin-block .28s var(--ease);
}
.review-card.selected { border-color: var(--accent-line); box-shadow: 0 0 0 1px var(--accent-line), var(--shadow); }
.review-card.selected::before { background: var(--accent-hover); box-shadow: 0 0 10px var(--accent-glow); }
.review-card .rc-head { display: flex; align-items: center; gap: .6rem; }
.review-card .rc-head .nm { font-weight: 600; letter-spacing: -.01em; }
.review-card .rc-head .when { margin-left: auto; color: var(--faint); font-family: var(--mono); font-size: .68rem; letter-spacing: .02em; }
.review-card .rc-text { background: var(--bg-2); border: 1px solid var(--border); border-radius: var(--radius-sm); padding: .72rem .88rem; font-size: .9rem; line-height: 1.55; white-space: pre-wrap; word-break: break-word; }
.review-card .rc-edit { min-height: 84px; background: var(--panel); border-color: var(--accent-line); box-shadow: 0 0 0 3px var(--accent-soft); }
.review-card .rc-actions { display: flex; gap: .6rem; align-items: center; }
.review-card .rc-actions .rc-editbtn { margin-right: auto; }
/* checkbox for batch-approve */
.rc-check { position: relative; width: 17px; height: 17px; flex: 0 0 auto; cursor: pointer; display: inline-flex; }
.rc-check input { position: absolute; opacity: 0; inset: 0; margin: 0; cursor: pointer; }
.rc-check span { position: absolute; inset: 0; border: 1px solid var(--border-2); border-radius: 3px; background: var(--bg-2); transition: background .14s var(--ease), border-color .14s var(--ease); }
.rc-check input:checked + span { background: var(--accent); border-color: var(--accent-hover); }
.rc-check input:checked + span::after { content: "✓"; position: absolute; inset: 0; display: grid; place-items: center; color: #fff; font-size: .68rem; font-weight: 700; }

/* Shortcut legend + batch bar */
.rv-legend {
  display: flex; flex-wrap: wrap; gap: .5rem 1rem; align-items: center;
  font-family: var(--mono); font-size: .68rem; letter-spacing: .04em; color: var(--faint);
  margin-bottom: 1.1rem; padding: .55rem .75rem;
  border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--panel-2);
}
.rv-legend .k { color: var(--muted); }
.rv-legend kbd {
  font-family: var(--mono); background: var(--bg-2); border: 1px solid var(--border-2);
  border-radius: 3px; padding: .04rem .34rem; font-size: .66rem; color: var(--text); margin-right: .28rem;
}
.rv-batch {
  position: sticky; bottom: .4rem; z-index: 5; margin-top: 1rem;
  display: flex; align-items: center; gap: .8rem;
  padding: .6rem .8rem; border: 1px solid var(--accent-line); border-radius: var(--radius-sm);
  background: rgba(255,255,255,.94); backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px);
  box-shadow: var(--shadow);
}
.rv-batch .cnt { font-family: var(--mono); font-size: .74rem; color: var(--muted); margin-right: auto; }
.rv-batch .cnt strong { color: var(--text); }

/* ============================================================= STATES */
.empty {
  text-align: center; padding: 3rem 1.5rem; color: var(--muted);
  border: 1px solid var(--border); border-radius: var(--radius-lg);
  background: var(--panel);
  display: flex; flex-direction: column; align-items: center; gap: .15rem;
}
.empty.compact { padding: 1.9rem 1.5rem; min-height: 160px; justify-content: center; }
.empty .ico {
  margin-bottom: .85rem; color: var(--muted);
  width: 52px; height: 52px; display: grid; place-items: center;
  border-radius: var(--radius); background: var(--panel-2); border: 1px solid var(--border-2);
}
.empty .ico svg { width: 24px; height: 24px; display: block; }
.empty .ico.ok { color: var(--green); border-color: rgba(22,163,74,.3); background: #eaf7ef; }
:root[data-theme="dark"] .empty .ico.ok { background: rgba(46,204,113,.12); }
.empty h3 { margin: 0 0 .35rem; font-size: 1rem; color: var(--text); font-weight: 600; letter-spacing: -.015em; }
.empty p { margin: 0; font-size: .85rem; max-width: 42ch; }

.loading { display: flex; align-items: center; justify-content: center; gap: .7rem; padding: 3rem; color: var(--muted); font-family: var(--mono); font-size: .78rem; letter-spacing: .08em; text-transform: uppercase; }
.spinner { width: 16px; height: 16px; border: 2px solid var(--border-2); border-top-color: var(--accent-hover); border-radius: 50%; animation: spin .7s linear infinite; }
.spinner.sm { width: 14px; height: 14px; border-width: 2px; }
@keyframes spin { to { transform: rotate(360deg); } }

/* ---- Skeleton loaders ---- */
.skeleton, .sk { position: relative; overflow: hidden; background: #e7e9ee; border-radius: var(--radius-sm); }
.skeleton::after, .sk::after {
  content: ""; position: absolute; inset: 0;
  background: linear-gradient(90deg, transparent, rgba(255,255,255,.75), transparent);
  transform: translateX(-100%); animation: shimmer 1.4s var(--ease) infinite;
}
.sk-line { height: 12px; margin: .4rem 0; }
.sk-line.w60 { width: 60%; } .sk-line.w40 { width: 40%; } .sk-line.w80 { width: 80%; }
.sk-card { height: 118px; border-radius: var(--radius); }
.sk-row { height: 44px; margin-bottom: 2px; }
@keyframes shimmer { to { transform: translateX(100%); } }

/* content-shaped skeletons */
.sk-wrap { display: grid; gap: 1rem; }
.sk-statgrid { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 1rem; }
.sk-stat { padding: 1.15rem 1.2rem 1.2rem; background: var(--panel); border: 1px solid var(--border); border-radius: var(--radius); }
.sk-table { background: var(--panel); border: 1px solid var(--border); border-radius: var(--radius); padding: .5rem .6rem; }
.sk-cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 1rem; }
.boot-loader { display: grid; place-items: center; }

/* ============================================================= COMMAND PALETTE */
.cmdk-hint {
  display: inline-flex; align-items: center; gap: .28rem;
  background: var(--panel-2); border: 1px solid var(--border-2); color: var(--muted);
  border-radius: var(--radius-sm); padding: .3rem .5rem; cursor: pointer;
  font-family: var(--mono); font-size: .68rem; letter-spacing: .04em;
  transition: background .15s var(--ease), color .15s var(--ease), border-color .15s var(--ease);
}
.cmdk-hint:hover { background: var(--elevated); color: var(--text); border-color: rgba(16,20,32,.22); }
.cmdk-hint .kbd { background: var(--bg-2); border: 1px solid var(--border-2); border-radius: 3px; padding: 0 .3rem; font-size: .66rem; line-height: 1.4; }

.cmdk-overlay { position: fixed; inset: 0; z-index: 90; background: rgba(18,22,32,.38); backdrop-filter: blur(4px); -webkit-backdrop-filter: blur(4px); opacity: 0; transition: opacity .16s var(--ease); display: flex; align-items: flex-start; justify-content: center; padding: 12vh 1.2rem 1.2rem; }
.cmdk-overlay.show { opacity: 1; }
.cmdk {
  width: min(96vw, 580px); max-height: 62vh; display: flex; flex-direction: column;
  background: #ffffff;
  border: 1px solid var(--border-2); border-radius: var(--radius-lg);
  box-shadow: var(--shadow-lg), inset 0 1px 0 rgba(255,255,255,.7);
  transform: translateY(-8px) scale(.99); opacity: 0; transition: opacity .16s var(--ease), transform .18s var(--spring); overflow: hidden;
}
.cmdk-overlay.show .cmdk { transform: none; opacity: 1; }
.cmdk-inrow { display: flex; align-items: center; gap: .6rem; padding: .85rem 1rem; border-bottom: 1px solid var(--border); }
.cmdk-inrow::before { content: "›"; color: var(--accent-hover); font-family: var(--mono); font-weight: 700; }
.cmdk-input { flex: 1; background: none; border: 0; outline: none; box-shadow: none; padding: 0; color: var(--text); font-family: var(--mono); font-size: .92rem; letter-spacing: .01em; }
.cmdk-input:focus { box-shadow: none; border: 0; background: none; }
.cmdk-list { overflow-y: auto; padding: .4rem; }
.cmdk-item { display: flex; align-items: center; gap: .7rem; padding: .55rem .7rem; border-radius: var(--radius-sm); cursor: pointer; color: var(--muted); }
.cmdk-item .cmdk-ic { width: 16px; height: 16px; flex: 0 0 auto; opacity: .8; color: var(--muted); }
.cmdk-item .cmdk-lbl { font-size: .88rem; color: var(--text); }
.cmdk-item .cmdk-hintx { margin-left: auto; font-family: var(--mono); font-size: .64rem; letter-spacing: .1em; text-transform: uppercase; color: var(--faint); }
.cmdk-item.active { background: linear-gradient(90deg, var(--accent-soft), transparent 90%); color: var(--text); box-shadow: inset 2px 0 0 var(--accent-btn); }
.cmdk-item.active .cmdk-ic { opacity: 1; color: var(--text); }
.cmdk-empty { padding: 1.4rem; text-align: center; color: var(--faint); font-family: var(--mono); font-size: .78rem; }
/* Group header (PAGINE / AZIONI) + selected-item chevron affordance. */
.cmdk-group {
  padding: .55rem .7rem .25rem; font-family: var(--mono); font-size: .58rem; font-weight: 600;
  text-transform: uppercase; letter-spacing: .18em; color: var(--faint);
}
.cmdk-group:first-child { padding-top: .3rem; }
.cmdk-chev { margin-left: auto; color: var(--accent-text); font-weight: 700; opacity: 0; transform: translateX(-3px); transition: opacity .12s var(--ease), transform .12s var(--ease); }
.cmdk-item.active .cmdk-chev { opacity: 1; transform: none; }

/* Neutral helper/hint text — grey, understated. NOT a warning: no amber rail,
   no boxed banner by default, so field hints stop reading as errors. */
.note {
  font-family: var(--mono); font-size: .74rem; line-height: 1.55; color: var(--muted);
  background: var(--panel-2); border: 1px solid var(--border);
  border-radius: var(--radius-sm); padding: .58rem .72rem;
}
/* Inline field helper — plain grey line under the input, no box. */
.note.faint {
  color: var(--faint); background: none; border: 0; padding: .3rem 0 0;
  display: block;
}
/* A helper carrying an info glyph reads as guidance, not a callout. */
.field .note, .field .note.faint { margin-top: .1rem; }
.errline { color: var(--red); font-family: var(--mono); font-size: .78rem; letter-spacing: .03em; }

/* ============================================================= TOASTS */
.toasts { position: fixed; bottom: 1.2rem; right: 1.2rem; z-index: 80; display: flex; flex-direction: column; gap: .55rem; max-width: 360px; }
.toast {
  background: rgba(255,255,255,.96); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px);
  color: var(--text);
  border: 1px solid var(--border-2); border-left: 2px solid var(--muted);
  border-radius: var(--radius-sm); padding: .68rem .9rem; box-shadow: var(--shadow);
  font-family: var(--mono); font-size: .78rem; letter-spacing: .01em; display: flex; gap: .5rem; align-items: flex-start;
  animation: toastin .24s var(--spring); opacity: 1; transition: opacity .3s, transform .3s;
}
.toast.ok { border-left-color: var(--green); }
.toast.err { border-left-color: var(--red); }
.toast.info { border-left-color: var(--blue); }
.toast.hide { opacity: 0; transform: translateX(20px); }
@keyframes toastin { from { opacity: 0; transform: translateX(20px); } to { opacity: 1; transform: translateX(0); } }

/* ============================================================= TOOLBAR / MISC */
.toolbar { display: flex; gap: .7rem; align-items: center; flex-wrap: wrap; margin-bottom: 1.4rem; }
.toolbar select { width: auto; min-width: 200px; }
.toolbar .grow { flex: 1; }
.muted { color: var(--muted); }
.faint { color: var(--faint); }
.mono { font-family: var(--mono); font-size: .8rem; letter-spacing: .01em; }
.wsbadge { font-family: var(--mono); font-size: .68rem; letter-spacing: .02em; color: var(--faint); }
.kbd { font-family: var(--mono); background: var(--panel-2); border: 1px solid var(--border-2); border-radius: 3px; padding: .05rem .36rem; font-size: .74rem; }
.connect-box { text-align: center; }
.connect-box .big-link { margin: 1.2rem 0 .8rem; }

/* ============================================================= INTEGRAZIONI HUB */
.builder-bar { display: flex; align-items: center; gap: .7rem; margin-bottom: 1rem; }
.builder-bar .grow { flex: 1; }

.integ-grid { grid-template-columns: repeat(auto-fill, minmax(340px, 1fr)); grid-auto-rows: 1fr; align-items: stretch; }
.integ-card { display: flex; flex-direction: column; gap: .7rem; height: 100%; }
.integ-card.disabled { opacity: .58; }
.integ-card.disabled:hover { border-color: var(--border); box-shadow: none; transform: none; }
.integ-head { display: flex; align-items: center; gap: .7rem; }
.integ-logo {
  width: 40px; height: 40px; border-radius: var(--radius); flex: 0 0 auto;
  display: grid; place-items: center; font-family: var(--mono); font-weight: 700; font-size: .82rem;
  border: 1px solid var(--border-2); background: var(--elevated); color: var(--muted); letter-spacing: -.01em;
}
/* Brand logo tiles — the ONE place brand color is allowed. Inline-SVG marks. */
.integ-logo svg { display: block; }
.integ-logo.brand-ghl        { background: #2a3ffb; border-color: #2a3ffb; box-shadow: 0 2px 12px -3px rgba(42,63,251,.5); }
.integ-logo.brand-calcom     { background: #0a0a0a; border-color: #2b2b2b; }
.integ-logo.brand-gcal       { background: #fff;    border-color: #dadce0; }
.integ-logo.brand-hubspot    { background: #ff7a59; border-color: #ff7a59; }
.integ-logo.brand-pipedrive  { background: #0f7a3d; border-color: #0f7a3d; }
.integ-logo.brand-calendly   { background: #006bff; border-color: #006bff; }
.integ-logo.brand-slack      { background: #fff;    border-color: #e6e6e6; }
.integ-logo.brand-telegram   { background: #229ED9; border-color: #229ED9; }
.integ-logo.brand-salesforce { background: #fff;    border-color: #d8eefb; }
.integ-logo.brand-zapier     { background: #ff4f00; border-color: #ff4f00; }
.integ-who { min-width: 0; margin-right: auto; }
.integ-who .nm { font-weight: 600; font-size: .95rem; letter-spacing: -.015em; }
.integ-who .ws { color: var(--faint); font-family: var(--mono); font-size: .7rem; letter-spacing: .02em; }
.integ-sub { color: var(--muted); font-size: .8rem; line-height: 1.45; margin: -.15rem 0 .1rem; }
.status-pill {
  display: inline-flex; align-items: center; gap: .38rem; white-space: nowrap;
  font-family: var(--mono); font-size: .64rem; text-transform: uppercase; letter-spacing: .1em; font-weight: 600;
  border: 1px solid var(--border-2); border-radius: 999px; padding: .18rem .6rem; color: var(--muted);
}
.status-pill.on { color: var(--green); border-color: rgba(22,163,74,.3); background: #eaf7ef; }
:root[data-theme="dark"] .status-pill.on { background: rgba(46,204,113,.12); }
.status-pill.off { color: var(--muted); border-color: var(--border-2); background: var(--panel-2); }
/* "Coming soon" is informational, not a CTA — neutral grey, never accent. */
.status-pill.soon { color: var(--muted); border-color: var(--border-2); background: var(--panel-2); }
.status-pill.soon .dot { background: var(--faint) !important; }
.ghl-form { border-top: 1px solid var(--border); padding-top: .9rem; margin-top: .1rem; }
.integ-tools-title { font-size: .58rem; text-transform: uppercase; letter-spacing: .2em; color: var(--faint); font-weight: 600; margin-top: .3rem; }
.integ-tools { display: flex; flex-direction: column; gap: .4rem; margin-top: .5rem; }
.integ-tool { display: flex; align-items: flex-start; gap: .55rem; padding: .45rem .55rem; background: var(--panel-2); border: 1px solid var(--border); border-radius: var(--radius-sm); }
.integ-tool .integ-tool-ic { flex: 0 0 auto; margin-top: .1rem; color: var(--muted); }
.integ-tool .integ-tool-ic svg { width: 15px; height: 15px; display: block; }
.integ-tool .itn { font-size: .84rem; font-weight: 600; letter-spacing: -.01em; }
.integ-tool .itd { color: var(--faint); font-size: .76rem; line-height: 1.4; }
/* Unlocked-tools accordion — keeps the connected card from towering over the
   empty integration cards. Chevron rotates open; matches // + ▸ marker system. */
.integ-tools-acc { margin-top: auto; border-top: 1px solid var(--border); padding-top: .6rem; }
.integ-tools-acc > summary {
  list-style: none; cursor: pointer; display: flex; align-items: center; gap: .5rem;
  min-height: 32px; font-family: var(--mono); font-size: .68rem; font-weight: 600;
  text-transform: uppercase; letter-spacing: .1em; color: var(--muted);
}
.integ-tools-acc > summary::-webkit-details-marker { display: none; }
.integ-tools-acc .acc-chev { transition: transform .16s var(--ease); color: var(--faint); display: inline-block; }
.integ-tools-acc[open] .acc-chev { transform: rotate(90deg); }

/* ---- Tool builder (n8n HTTP node style) ---- */
.builder { display: flex; flex-direction: column; }
.builder-block { border: 1px solid var(--border); border-radius: var(--radius-sm); padding: .7rem .8rem; margin-bottom: 1rem; background: var(--panel-2); }
.builder-block .bb-head { display: flex; align-items: center; gap: .6rem; margin-bottom: .6rem; }
.builder-block .bb-head .lbl .hint { text-transform: none; letter-spacing: 0; }
.builder-block .bb-head .btn { margin-left: auto; }
.raw-toggle { display: inline-flex; align-items: center; gap: .34rem; font-family: var(--mono); font-size: .68rem; color: var(--muted); cursor: pointer; letter-spacing: .04em; }
.raw-toggle input { width: 14px; height: 14px; }
.kv-row { display: flex; gap: .4rem; align-items: center; margin-bottom: .4rem; }
.kv-row input { flex: 1; min-width: 0; }
.kv-row select { width: auto; flex: 0 0 auto; min-width: 52px; padding: .4rem .4rem; }
.kv-row .kv-name { flex: 0 0 40%; display: flex; flex-direction: column; font-size: .82rem; }
.kv-row .kv-name small { font-size: .66rem; }
.param-row { display: grid; grid-template-columns: minmax(0,1.1fr) minmax(0,.8fr) auto minmax(0,1.4fr) auto; gap: .4rem; align-items: center; margin-bottom: .4rem; }
.param-row select { width: 100%; }
.param-row .req-chk { display: inline-flex; align-items: center; gap: .28rem; font-family: var(--mono); font-size: .64rem; color: var(--muted); white-space: nowrap; }
.param-row .req-chk input { width: 14px; height: 14px; }
.kv-row .x, .param-row .x { cursor: pointer; color: var(--faint); border: 0; background: none; font-size: 1.15rem; line-height: 1; padding: 0 .2rem; flex: 0 0 auto; transition: color .15s; }
.kv-row .x:hover, .param-row .x:hover { color: var(--red); }

/* ---- Dry-run test result ---- */
.test-result { margin-top: .7rem; border: 1px solid var(--border-2); border-left: 2px solid var(--muted); border-radius: var(--radius-sm); padding: .6rem .7rem; background: var(--bg-2); }
.test-result.ok { border-left-color: var(--green); }
.test-result.err { border-left-color: var(--red); }
.test-result .tr-top { display: flex; align-items: center; gap: .6rem; margin-bottom: .4rem; }
.test-result .tr-status { font-family: var(--mono); font-size: .68rem; font-weight: 700; letter-spacing: .08em; padding: .1rem .45rem; border-radius: 3px; background: var(--elevated); }
.test-result .tr-status.ok { color: var(--green); }
.test-result .tr-status.err { color: var(--red); }
.test-result .tr-dur { margin-left: auto; color: var(--faint); font-size: .68rem; }
.test-result .tr-req { font-size: .76rem; color: var(--text); word-break: break-all; margin-bottom: .3rem; }
.test-result .tr-sub { font-size: .56rem; text-transform: uppercase; letter-spacing: .18em; color: var(--faint); font-weight: 600; margin: .5rem 0 .2rem; }
.test-result .tr-pre { margin: 0; font-family: var(--mono); font-size: .74rem; line-height: 1.5; color: var(--muted); white-space: pre-wrap; word-break: break-word; max-height: 220px; overflow: auto; background: var(--panel); border: 1px solid var(--border); border-radius: var(--radius-sm); padding: .5rem .6rem; }

/* ============================================================= RESPONSIVE */
@media (max-width: 900px) {
  .hud { display: none; }
  .topbar .actions { margin-left: auto; }
}
@media (max-width: 820px) {
  .shell { grid-template-columns: 1fr; }
  .sidebar { position: fixed; z-index: 30; width: 240px; transform: translateX(-100%); transition: transform .24s var(--ease); }
  .sidebar.open { transform: translateX(0); }
  .main { height: auto; overflow: visible; }
  .content { overflow: visible; }
  .content > * { max-width: none; }
  .menu-btn { display: inline-flex !important; }
}
.menu-btn { display: none; }

@media (prefers-reduced-motion: reduce) {
  *, *::after, *::before { animation-duration: .001ms !important; animation-iteration-count: 1 !important; transition-duration: .001ms !important; }
  body::before { display: none; }
}

/* ============================================================= ANALYTICS */
/* Compact secondary-metric grid (below the KPI stat cards). */
.an-mini {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(130px, 1fr));
  gap: .5rem; margin-top: 1rem;
}
.an-cell {
  background: var(--panel); border: 1px solid var(--border); border-radius: var(--radius);
  padding: .55rem .7rem; display: flex; flex-direction: column; gap: .15rem;
}
.an-cell .k { font-family: var(--mono); font-size: .58rem; text-transform: uppercase; letter-spacing: .12em; color: var(--muted); }
.an-cell .v { font-family: var(--mono); font-size: 1.2rem; font-weight: 600; color: var(--text); font-variant-numeric: tabular-nums; }

/* Funnel — horizontal bars. */
.fn { display: flex; flex-direction: column; gap: .55rem; }
.fn-row { display: flex; align-items: center; gap: .7rem; }
.fn-lbl { flex: 0 0 92px; text-align: right; font-size: .78rem; color: var(--muted); }
.fn-track { flex: 1; height: 16px; background: var(--panel-2); border: 1px solid var(--border); border-radius: 4px; overflow: hidden; }
.fn-fill { display: block; height: 100%; min-width: 2px; border-radius: 3px; transition: width .4s var(--ease); }
.fn-val { flex: 0 0 46px; font-family: var(--mono); font-size: .82rem; font-weight: 600; color: var(--text); font-variant-numeric: tabular-nums; }

/* Activity trend — per-day bars + aligned sparse labels. */
.an-legend { margin-bottom: .7rem; }
.an-legend .lg { display: inline-flex; align-items: center; gap: .4rem; font-size: .72rem; color: var(--muted); }
.an-legend .lg i { width: 10px; height: 10px; border-radius: 2px; display: inline-block; }
.trend-bars { display: flex; align-items: flex-end; gap: 3px; height: 130px; border-bottom: 1px solid var(--border); padding-bottom: 2px; }
.trend-bars .tcol { flex: 1; height: 100%; display: flex; align-items: flex-end; min-width: 0; }
.trend-bars .tbar {
  width: 100%; max-width: 26px; margin: 0 auto; min-height: 0;
  background: linear-gradient(180deg, var(--accent-hover), var(--accent-fill));
  border-radius: 3px 3px 0 0; transition: height .35s var(--ease);
}
.trend-labels { display: flex; gap: 3px; margin-top: .35rem; }
.trend-labels .tlbl { flex: 1; text-align: center; font-family: var(--mono); font-size: .54rem; color: var(--faint); white-space: nowrap; overflow: hidden; }

/* ============================================================= NOTIFY CALLOUT */
/* One unified callout (icon + status + CTA), replacing the row of 3 loose
   buttons on Panoramica. */
.notify-callout {
  display: flex; align-items: center; gap: .7rem; flex-wrap: wrap;
  margin: 1rem 0 .2rem; padding: .7rem .9rem;
  background: var(--panel); border: 1px solid var(--border); border-radius: var(--radius);
}
.notify-callout.ok { border-color: rgba(22,163,74,.3); }
.notify-callout .nc-dot { width: 8px; height: 8px; border-radius: 50%; flex: 0 0 auto; box-shadow: 0 0 7px currentColor; }
.notify-callout .nc-text { font-size: .86rem; color: var(--text); }
.notify-callout .nc-text .num { color: var(--muted); font-family: var(--mono); font-size: .8rem; }
.notify-callout .nc-actions { margin-left: auto; display: flex; gap: .5rem; }

/* ============================================================= LEAD SEARCH FORM */
/* Constrain the search form to a readable measure instead of a 1300px sprawl. */
.lead-form { max-width: 940px; }
/* Advanced-filter / JSON accordions — coherent chevron, 40px hit area, no ASCII
   triangles. */
.lead-form details { border-top: 1px solid var(--border); margin: .8rem 0 0; }
.lead-form details > summary {
  list-style: none; cursor: pointer; display: flex; align-items: center; gap: .5rem;
  min-height: 40px; font-weight: 600; font-size: .9rem; color: var(--text);
}
.lead-form details > summary::-webkit-details-marker { display: none; }
.lead-form details > summary::before {
  content: "▸"; color: var(--faint); font-size: .8rem; transition: transform .16s var(--ease);
}
.lead-form details[open] > summary::before { transform: rotate(90deg); }

/* ============================================================= SIDEBAR ACTIVE */
/* Active nav item: tonal amber fill + accent icon (rail already handled). */
.nav-item.active .ic { color: var(--accent-text); }

/* ================================================================ DROPDOWNS */
/* Hand-rolled Select / MultiSelect / Combobox (public/dropdown.js). Replaces
   every native <select> + the old .ckdrop fake-dropdown. --dd-* tokens map onto
   the existing theme tokens, so [data-theme=dark] overrides flow through for
   free. The native <select> is kept in the DOM (display:none) as the source of
   truth; the visible control is a button trigger + floating listbox panel. */
:root {
  --dd-trigger-bg: var(--field-bg);
  --dd-trigger-border: var(--border-2);
  --dd-panel-bg: var(--panel);
  --dd-panel-border: var(--border);
  --dd-hl: rgba(232, 154, 60, 0.12);       /* highlight / hover row */
  --dd-ring: rgba(232, 154, 60, 0.25);     /* focus/open ring */
  --dd-radius: 8px;
  --dd-panel-radius: 11px;
  --dd-item-radius: 6px;
  --dd-panel-shadow: 0 4px 6px -1px rgba(0,0,0,.08), 0 10px 24px -4px rgba(0,0,0,.12);
}
:root[data-theme="dark"] {
  --dd-panel-bg: #1a1f29;
  --dd-panel-border: rgba(255,255,255,.08);
  --dd-panel-shadow: 0 4px 6px -1px rgba(0,0,0,.4), 0 12px 28px -4px rgba(0,0,0,.55);
}

/* native select survives as hidden model — never shown, never tabbable */
.dd-native { display: none !important; }

.dd { position: relative; width: 100%; }

.dd-trigger {
  display: flex; align-items: center; gap: .5rem; width: 100%;
  min-height: 36px; padding: .4rem .7rem; border-radius: var(--dd-radius);
  border: 1px solid var(--dd-trigger-border); background: var(--dd-trigger-bg); color: var(--text);
  font: inherit; font-size: .88rem; line-height: 1.3; cursor: pointer; text-align: left;
  transition: border-color .16s var(--ease), box-shadow .16s var(--ease), background .16s var(--ease);
}
:root:not([data-theme="dark"]) .dd-trigger:hover { border-color: rgba(16,20,32,.24); background: color-mix(in srgb, var(--field-bg) 97%, var(--accent) 3%); }
:root[data-theme="dark"] .dd-trigger:hover { border-color: #3a4557; background: color-mix(in srgb, var(--field-bg) 96%, var(--accent) 4%); }
.dd--open .dd-trigger, .dd-trigger:focus-visible {
  border-color: var(--accent-line); box-shadow: 0 0 0 3px var(--dd-ring); outline: none;
}
.dd-trigger:disabled { opacity: .55; cursor: not-allowed; }
.dd-label {
  flex: 1; min-width: 0; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;
  display: inline-flex; align-items: center; gap: 4px;
}
.dd-trigger.dd-ph .dd-label, .dd-ph { color: var(--faint); }
.dd-chev { flex: none; width: 16px; height: 16px; color: var(--muted); transition: transform .15s var(--ease); }
.dd--open .dd-chev { transform: rotate(180deg); }

.dd-panel {
  z-index: 10000; box-sizing: border-box;
  background: var(--dd-panel-bg); border: 1px solid var(--dd-panel-border);
  border-radius: var(--dd-panel-radius); box-shadow: var(--dd-panel-shadow);
  padding: 5px; overflow-y: auto; overflow-x: hidden;
  transform-origin: top center; animation: dd-in .13s var(--ease);
}
.dd-panel[hidden] { display: none; }
.dd--flip .dd-panel, .dd-panel--flip { transform-origin: bottom center; }
@keyframes dd-in { from { opacity: 0; transform: scale(.96); } to { opacity: 1; transform: scale(1); } }

.dd-list { display: flex; flex-direction: column; }
.dd-opt {
  display: flex; align-items: center; gap: .5rem; min-height: 34px; padding: 6px 10px;
  border-radius: var(--dd-item-radius); cursor: pointer; font-size: .88rem; color: var(--text);
  transition: background .1s var(--ease);
}
.dd-opt-check { width: 16px; height: 16px; flex: none; color: var(--accent-text); display: inline-flex; align-items: center; justify-content: center; }
.dd-opt-label { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.dd-opt.is-active { background: var(--dd-hl); }
.dd-opt.is-selected { font-weight: 600; }
.dd-opt.is-disabled { opacity: .4; cursor: not-allowed; }
.dd-empty { padding: 10px; color: var(--faint); font-size: .85rem; text-align: center; }

/* Combobox filter input, pinned to the top of the panel */
.dd-filter { position: sticky; top: 0; padding: 2px 2px 6px; background: var(--dd-panel-bg); z-index: 1; }
.dd-filter-input {
  width: 100%; height: 32px; padding: .4rem .6rem; border-radius: var(--dd-item-radius);
  border: 1px solid var(--border-2); background: var(--field-bg); color: var(--text);
  font: inherit; font-size: .85rem; outline: none;
}
.dd-filter-input:focus { border-color: var(--accent-line); box-shadow: 0 0 0 3px var(--dd-ring); }

/* MultiSelect chips inside the trigger */
.dd--multi .dd-trigger { height: auto; flex-wrap: wrap; padding: 4px 6px; gap: 4px; }
.dd--multi .dd-label { flex-wrap: wrap; }
.dd-chip {
  display: inline-flex; align-items: center; gap: 3px; padding: 2px 4px 2px 8px; border-radius: 6px;
  background: var(--accent-soft); color: var(--accent-text); font-size: 12px; font-weight: 600; line-height: 1.55;
}
.dd-chip-more { padding: 2px 8px; }
.dd-chip-x { display: inline-flex; padding: 1px; border: none; background: transparent; color: inherit; cursor: pointer; border-radius: 4px; }
.dd-chip-x:hover { background: rgba(0,0,0,.14); }
:root[data-theme="dark"] .dd-chip-x:hover { background: rgba(255,255,255,.14); }

/* Context widths — mirror the old native-select rules now that .dd is the control */
.toolbar .dd { width: auto; min-width: 200px; }
.kv-row .dd { width: auto; flex: 0 0 auto; min-width: 52px; }
.param-row .dd { width: 100%; }

/* Language switcher: bare/compact trigger inside the .lang-toggle pill */
.lang-toggle .dd { flex: 1; min-width: 0; width: auto; }
.dd--bare .dd-trigger {
  border: none; background: transparent; min-height: 1.4em; height: 1.4em; padding: 0; gap: 4px;
  font: 600 11.5px/1 var(--mono); letter-spacing: .04em; text-transform: uppercase; color: inherit;
}
.dd--bare .dd-trigger:hover { background: transparent; border: none; }
.dd--open.dd--bare .dd-trigger, .dd--bare .dd-trigger:focus-visible { box-shadow: none; }
.dd--bare .dd-chev { width: 13px; height: 13px; }

/* Coarse pointers (touch): ≥44px tap targets */
@media (pointer: coarse) {
  .dd-trigger { min-height: 44px; }
  .dd--bare .dd-trigger { min-height: 1.6em; }
  .dd-opt { min-height: 44px; }
  .dd-filter-input { height: 40px; }
}

/* ICP traffic-light relevance dots (migration 064) ------------------------- */
.rel-dot {
  display: inline-block; width: 10px; height: 10px; border-radius: 50%;
  flex: 0 0 auto; vertical-align: middle; margin-right: .5rem;
  border: 1px solid rgba(0,0,0,.12); cursor: default;
}
.rel-dot.green  { background: var(--green); }
.rel-dot.yellow { background: var(--amber); }
.rel-dot.red    { background: var(--red); }
.rel-dot.grey   { background: var(--muted); opacity: .55; }
/* Tier count summary "🟢 27 · 🟡 15 · 🔴 8" */
.rel-summary { display: flex; gap: .9rem; align-items: center; flex-wrap: wrap; margin: 0 0 .7rem; font-size: .9rem; }
.rel-summary .rl { display: inline-flex; align-items: center; gap: .35rem; color: var(--muted); }
.rel-summary .rl strong { color: var(--text, inherit); }
/* Tier checkboxes when adding leads to a campaign */
.rel-tiers { display: flex; flex-direction: column; gap: .45rem; margin: .3rem 0 .2rem; }
.rel-tiers label { display: flex; align-items: center; gap: .5rem; cursor: pointer; }
