:root{
  /* Muted neutral palette — soft blush canvas, dusty slate-blue chrome,
     pale grey + olive-taupe + dusty pink accents. Quiet and editorial. */
  --blush-bg:#F5E9E7;   --blush-bg-l:#FBF4F3;  /* page background */
  --blush-rose:#ECC5C6; --blush-rose-l:#F5DEDE; /* primary accent — pink wash */
  --slate:#8A9DB1;      --slate-l:#D2DAE3;    /* mid slate-blue */
  --slate-d:#3D4854;    --slate-dd:#2A323A;   /* deep slate for chrome + type */
  --olive-taupe:#837D68;--olive-taupe-l:#D8D5C9; /* olive-taupe accent */
  --olive-taupe-d:#4D4936;                     /* deep olive for text alt */
  --pearl:#C1C0C2;      --pearl-l:#EAEAEB;    /* neutral grey */
  --cream:#FFFFFF;      --cream-l:#FFFFFF;    /* white card surface */

  /* Aliases mapped to existing palette tokens used across the code base */
  --butter:var(--olive-taupe);     --butter-l:var(--olive-taupe-l);
  --moss:var(--olive-taupe);       --moss-l:var(--olive-taupe-l);
  --palm:var(--olive-taupe);       --palm-l:var(--olive-taupe-l);
  --guava:var(--blush-rose);       --guava-l:var(--blush-rose-l);
  --sunset:var(--blush-rose);      --sunset-l:var(--blush-rose-l);
  --sangria:var(--blush-rose);     --sangria-l:var(--blush-rose-l);
  --seabreeze:var(--pearl-l);
  --lagoon:var(--slate);           --lagoon-l:var(--slate-l);
  --odyssey:var(--slate-d);        --odyssey-l:var(--slate-l);
  /* Provide the historic teal/mint/coral names too so any hard-coded
     references in JS/inline styles still resolve cleanly */
  --teal:var(--slate-d);           --teal-d:var(--slate-dd);
  --teal-l:var(--slate-l);
  --coral:var(--blush-rose);       --coral-l:var(--blush-rose-l);
  --mint-l:var(--blush-bg-l);
  --peach-l:var(--blush-rose-l);
  --butter-soft-l:var(--olive-taupe-l);
  --olive:var(--olive-taupe);      --olive-l:var(--olive-taupe-l);

  /* Semantic tokens — chrome wears deep slate, accents wear blush-rose.
     Borders use mid slate so cards feel editorial and quiet. */
  --dark:var(--slate-dd);        /* Deep slate — sidebar, borders, type chrome */
  --mid:var(--slate-d);          /* Mid slate for hover surfaces */
  --warm-deep:var(--blush-rose); /* Blush rose for warm callouts */
  --accent:var(--blush-rose);    /* primary — headlines, active states */
  --accent-l:var(--blush-rose-l);
  --accent-dk:#D9A7A8;
  --accent-2:var(--slate);       /* secondary — slate-blue counterpoint */
  --accent-2-l:var(--slate-l);
  --accent-3:var(--olive-taupe); /* tertiary — olive accent */
  --accent-3-l:var(--olive-taupe-l);

  --amber:#9A6428;      --amber-l:var(--butter-l);
  --red:var(--sangria); --red-l:var(--sangria-l);
  --green:var(--palm);  --green-l:var(--palm-l);

  --border:var(--slate-l);        /* soft slate borders */
  --border-strong:var(--slate);
  --bg:#FFFFFF;                   /* pure white canvas */
  --bg-2:#F7F7F7;                 /* very light grey for secondary surfaces */
  --surface:#FFFFFF;              /* white card body for strongest contrast */
  --accent-block:var(--blush-rose-l); /* soft pink for decorative blocks */
  --text:var(--slate-dd);         /* deep slate type — readable on white */
  --muted:#6B7480;                /* desaturated slate-grey for secondary copy */
  --font:'DM Sans','Inter',system-ui,sans-serif;
  --font-display:'DM Sans','Inter',system-ui,sans-serif;
}

/* Backdrop kept clean — bold colour blocking is the look now */
.topbar,.sidebar,.main{position:relative;z-index:2;}

/* Zigzag / serrated dividers between major colour blocks
   (apply with class="zigzag-top" or "zigzag-bottom" to any section) */
.zigzag-top{
  -webkit-mask:linear-gradient(135deg,#0000 12px,#000 0) top left/16px 16px repeat-x,
              linear-gradient(225deg,#0000 12px,#000 0) top left/16px 16px repeat-x;
  -webkit-mask-composite:source-in;mask-composite:intersect;
  padding-top:16px;
}
.zigzag-bottom{
  -webkit-mask:linear-gradient(45deg,#0000 12px,#000 0) bottom left/16px 16px repeat-x,
              linear-gradient(-45deg,#0000 12px,#000 0) bottom left/16px 16px repeat-x;
  padding-bottom:16px;
}

/* Marquee / ticker strip — horizontally scrolling text, used as a section divider */
.marquee{background:var(--dark);color:var(--accent);overflow:hidden;white-space:nowrap;border-top:3px solid #1a1a1a;border-bottom:3px solid #1a1a1a;padding:8px 0;font-family:var(--font-display);font-weight:900;letter-spacing:.06em;text-transform:uppercase;font-size:13px;}
.marquee-track{display:inline-block;animation:marquee 32s linear infinite;}
.marquee-track span{padding:0 22px;display:inline-block;}
.marquee-track span::before{content:'◆';margin-right:22px;color:var(--accent);}
@keyframes marquee{from{transform:translateX(0)}to{transform:translateX(-50%)}}

/* Block-style decorative diamond badge */
.diamond-badge{display:inline-flex;align-items:center;justify-content:center;background:var(--sangria);color:#fbf0dd;font-family:var(--font-display);font-weight:900;letter-spacing:.06em;text-transform:uppercase;padding:14px 32px;border:3px solid #1a1a1a;clip-path:polygon(8% 0,92% 0,100% 50%,92% 100%,8% 100%,0 50%);font-size:14px;}
*{box-sizing:border-box;margin:0;padding:0;}
html,body{height:100%;font-family:var(--font);background:var(--bg);color:var(--text);font-size:14px;-webkit-font-smoothing:antialiased;}
.shell{display:grid;grid-template-columns:220px 1fr;grid-template-rows:52px 1fr;height:100vh;overflow:hidden;}
.topbar{grid-column:1/-1;background:var(--bg);display:flex;align-items:center;padding:8px 18px;gap:12px;z-index:20;border-bottom:2px solid var(--dark);min-height:56px;flex-wrap:nowrap;overflow-x:auto;}
.topbar::-webkit-scrollbar{height:4px;}
.topbar > *{flex-shrink:0;}
.brand-logo{height:26px;width:auto;display:block;}
.logo{color:var(--dark);font-family:var(--font-display);font-size:14px;font-weight:800;letter-spacing:.5px;background:var(--dark);color:#fff;padding:8px 16px;border-radius:24px;text-transform:uppercase;}
.logo span{color:var(--accent);font-weight:800;}
.version{font-size:9px;background:transparent;color:var(--muted);padding:2px 7px;letter-spacing:.1em;text-transform:uppercase;font-weight:600;border:1px solid var(--border-strong);border-radius:10px;}
.proj-btn{display:flex;align-items:center;gap:8px;background:var(--surface);border:2px solid var(--dark);border-radius:24px;padding:7px 18px;cursor:pointer;color:var(--dark);font-size:12px;min-width:140px;max-width:200px;font-family:var(--font);font-weight:600;letter-spacing:.02em;transition:all .15s;}
.proj-btn:hover{background:var(--accent);}
.save-badge{font-size:10px;padding:4px 12px;border-radius:24px;font-weight:600;letter-spacing:.04em;background:var(--green-l)!important;color:var(--green)!important;border:1.5px solid var(--green);}
.pills{margin-left:auto;display:flex;gap:6px;}
.pill{font-size:12px;padding:8px 18px;border-radius:24px;border:2px solid var(--dark);color:var(--dark);background:transparent;cursor:pointer;font-family:var(--font);letter-spacing:.02em;transition:all .15s;font-weight:600;}
.pill:hover{background:var(--dark);color:var(--accent);}
.pill.active{background:var(--accent);color:var(--dark);border-color:var(--dark);}
.sidebar{background:var(--dark);overflow-y:auto;display:flex;flex-direction:column;}
.sb-inner{padding:18px 0;flex:1;}
.sb-stats{display:grid;grid-template-columns:1fr 1fr;gap:8px;padding:0 16px 14px;}
.sb-stat{background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.06);border-radius:2px;padding:12px 12px;}
.sb-n{font-family:var(--font-display);font-size:28px;font-weight:500;color:white;line-height:1;letter-spacing:-.5px;}
.sb-l{font-size:9px;color:rgba(255,255,255,.4);margin-top:6px;letter-spacing:.1em;text-transform:uppercase;font-weight:500;}
.sb-lbl{font-size:9px;font-weight:600;letter-spacing:.15em;text-transform:uppercase;color:rgba(255,255,255,.3);padding:18px 16px 8px;border-top:1px solid rgba(255,255,255,.05);margin-top:8px;}
.sb-lbl:first-child,.sb-stats + .sb-lbl{border-top:none;margin-top:0;}
.sb-item{display:flex;align-items:center;gap:10px;padding:9px 16px;cursor:pointer;color:rgba(255,255,255,.72);font-size:12px;transition:all .15s ease;letter-spacing:.02em;border-left:3px solid transparent;position:relative;font-weight:500;}
.sb-item:hover{background:rgba(255,216,59,.08);color:white;border-left-color:var(--accent);padding-left:18px;}
.sb-item:hover .sb-cnt{background:var(--accent);color:var(--dark);}
.sb-item:hover .sb-dot{transform:scale(1.4);}
.sb-item:active{transform:scale(0.98);}
.sb-item.active{background:var(--accent);color:var(--dark);border-left-color:var(--dark);font-weight:700;}
.sb-item.active .sb-cnt{background:var(--dark);color:var(--accent);}
.sb-item.active .sb-dot{display:none;}
.sb-dot{width:6px;height:6px;border-radius:50%;flex-shrink:0;}
.sb-cnt{margin-left:auto;font-size:11px;background:rgba(255,255,255,.08);padding:2px 8px;border-radius:2px;font-weight:500;font-variant-numeric:tabular-nums;}
.sb-bottom{padding:14px 16px;border-top:1px solid rgba(255,255,255,.08);background:rgba(110,33,27,.35);}
.sb-btn{width:100%;font-size:10px;color:rgba(255,255,255,.55);border:1px solid rgba(255,255,255,.1);border-radius:2px;padding:8px;cursor:pointer;background:none;font-family:var(--font);text-align:center;margin-bottom:5px;letter-spacing:.05em;text-transform:uppercase;font-weight:500;transition:all .15s;}
.sb-btn:hover{background:rgba(255,255,255,.06);color:white;border-color:rgba(255,255,255,.2);}
.main{overflow:hidden;display:flex;flex-direction:column;}
.view{display:none;flex-direction:column;height:100%;overflow:hidden;}
.view.active{display:flex;}
.scroll{flex:1;overflow-y:auto;padding:20px;}
.cfg-bar{background:var(--surface);border-bottom:1px solid var(--border);padding:12px 22px;display:flex;align-items:center;gap:14px;flex-shrink:0;flex-wrap:wrap;}
.card{background:var(--surface);border:1px solid rgba(0,0,0,.04);border-radius:14px;padding:24px;margin-bottom:18px;box-shadow:0 1px 3px rgba(42,50,58,.04),0 4px 14px rgba(42,50,58,.06);}
label.lbl{display:block;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--dark);margin-bottom:7px;}
input,select,textarea{width:100%;padding:11px 14px;border:1.5px solid var(--dark);border-radius:12px;font-size:13px;font-family:var(--font);color:var(--text);background:var(--surface);transition:all .12s;font-weight:500;}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--dark);background:var(--accent-l);box-shadow:0 0 0 3px var(--accent);}
input:hover:not(:focus),select:hover:not(:focus),textarea:hover:not(:focus){border-color:var(--dark);}
textarea{resize:vertical;}
.g2{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:16px;}
.g3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:16px;margin-bottom:16px;}
.btn{padding:12px 26px;font-size:13px;font-weight:700;background:var(--dark);color:var(--accent);border:2px solid var(--dark);border-radius:30px;cursor:pointer;font-family:var(--font);display:inline-flex;align-items:center;gap:8px;letter-spacing:.04em;transition:all .15s;}
.btn:hover:not(:disabled){background:var(--accent);color:var(--dark);}
.btn:disabled{opacity:.4;cursor:not-allowed;}
.btn-full{width:100%;justify-content:center;}
.btn-ghost{padding:10px 18px;font-size:12px;background:var(--surface);border:2px solid var(--dark);border-radius:30px;cursor:pointer;font-family:var(--font);color:var(--dark);letter-spacing:.03em;font-weight:600;transition:all .15s;}
.btn-ghost:hover{background:var(--accent);}
.btn-edit{padding:6px 14px;font-size:11px;font-weight:600;background:var(--dark);border:2px solid var(--dark);border-radius:20px;cursor:pointer;color:var(--accent);font-family:var(--font);letter-spacing:.04em;transition:all .12s;}
.btn-edit:hover{background:var(--accent);color:var(--dark);}
.btn-del{padding:6px 12px;font-size:11px;background:var(--surface);border:2px solid var(--dark);border-radius:20px;cursor:pointer;color:var(--dark);font-family:var(--font);font-weight:600;transition:all .12s;}
.btn-del:hover{background:var(--red);color:white;border-color:var(--red);}
.err{background:var(--red-l);border:1px solid #f5c0c0;border-radius:7px;padding:8px 12px;color:var(--red);font-size:12px;margin-bottom:10px;}
.spinner{width:14px;height:14px;border:2px solid rgba(255,255,255,.3);border-top-color:white;border-radius:50%;animation:spin .6s linear infinite;flex-shrink:0;}
@keyframes spin{to{transform:rotate(360deg);}}
.api-banner{border:1.5px solid #f6a623;border-radius:10px;padding:12px 14px;margin-bottom:14px;display:flex;align-items:center;gap:10px;background:#fff8ee;font-size:12px;}
.api-banner.ok{border-color:#4caf50;background:#f0faf0;}
.result-card{background:#f9fff9;border:1.5px solid #b7dfca;border-radius:10px;padding:14px;margin-bottom:14px;animation:fadeIn .2s ease;}
@keyframes fadeIn{from{opacity:0;transform:translateY(-4px);}to{opacity:1;transform:translateY(0);}}
.pill-row{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:10px;}
.pill2{font-size:10px;font-weight:600;padding:2px 8px;border-radius:20px;display:inline-block;}
.rc-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:7px;}
.rc-f .rfl{font-size:9px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);font-weight:600;margin-bottom:1px;}
.rc-f .rfv{font-size:11px;}
/* Photo */
.photo-thumb{width:56px;height:56px;border-radius:6px;object-fit:cover;border:1px solid var(--border);cursor:pointer;}
.photo-ph{width:56px;height:56px;border-radius:6px;border:1.5px dashed var(--border);display:flex;align-items:center;justify-content:center;cursor:pointer;color:var(--muted);font-size:18px;background:var(--bg);}
.photo-ph:hover{border-color:var(--accent);color:var(--accent);}
/* Table */
.toolbar{padding:16px 24px;background:var(--bg);border-bottom:2px solid var(--dark);display:flex;align-items:center;gap:10px;flex-shrink:0;flex-wrap:wrap;}
.toolbar-title{font-family:var(--font-display);font-size:24px;font-weight:800;color:var(--dark);letter-spacing:-.5px;margin-right:8px;}
.tbl-wrap{flex:1;overflow:auto;position:relative;}
table{border-collapse:separate;border-spacing:0;font-size:12px;table-layout:fixed;}
.sch-compact{width:max-content;min-width:100%;}
thead th{background:var(--dark);color:rgba(255,255,255,.85);padding:12px 24px 12px 10px;text-align:left;font-size:10px;font-weight:600;letter-spacing:.12em;text-transform:uppercase;white-space:nowrap;position:sticky;top:0;z-index:10;border-bottom:2px solid var(--accent);overflow:hidden;text-overflow:ellipsis;user-select:none;box-shadow:0 4px 8px -2px rgba(15,15,15,.25);}
/* Sticky header corner cells (Actions / NS) sit above both axes */
thead th.fcol,thead th.fcol-2{z-index:12;}
thead th.sortable{cursor:pointer;}
thead th.sortable:hover{background:#2a2a2a;color:var(--accent);}
thead th .sort-ind{position:absolute;right:10px;top:50%;transform:translateY(-50%);font-size:11px;color:var(--accent);opacity:.4;transition:opacity .15s;}
thead th.sort-active .sort-ind{opacity:1;}
thead th.sort-active{color:var(--accent);background:#0d0d0d;}
tbody tr{background:var(--surface);}
tbody tr:nth-child(even) td{background:#f9f4e8;}
tbody tr.row-clickable{cursor:pointer;transition:box-shadow .15s ease;}
/* Row shadow rendered on the <tr> itself so it wraps the whole row as one
   uniform card-shadow — no cell-boundary seams. position:relative is required
   for the shadow to render; we deliberately don't add z-index so the sticky
   Actions/NS cells keep their own stacking. */
tbody tr.row-clickable:hover{
  position:relative;
  box-shadow:
    0 12px 28px -6px rgba(42,50,58,.20),    /* main soft drop */
    0 6px 12px -4px rgba(42,50,58,.10),     /* shorter close drop */
    6px 6px 0 -1px rgba(42,50,58,.10);      /* hard bottom-right offset for the card-lift feel */
}
/* Remove any leftover per-cell hover shadow so we don't double up */
tbody tr.row-clickable:hover td{box-shadow:none;}
/* All NATSPEC fields filled — soft green wash + green left edge so the user
   can scan which rows are ready for spec issue */
/* Status row tints — soft wash matching the status pill so the workflow
   stage is readable at a glance from the row colour alone */
tbody tr.row-status-not-started td{background:#FBF1F0!important;}
tbody tr.row-status-drafted     td{background:#FBF6F4!important;}
tbody tr.row-status-reviewed    td{background:#F2F2F3!important;}
tbody tr.row-status-approved    td{background:#EFEDE3!important;}
tbody tr.row-status-issued      td{background:#E8EDF2!important;}
tbody tr.row-status-on-hold     td{background:#F8E5E6!important;}
/* Hover handled by box-shadow on the row (see .row-clickable:hover above) —
   the row tint stays constant so the workflow stage colour isn't overwritten */
/* Inline status select inside the Actions column (under the round buttons) */
.st-sel-inline{
  font-size:11px;font-weight:700;letter-spacing:.02em;
  padding:4px 8px;border-radius:14px;border:1.5px solid var(--dark)!important;
  cursor:pointer;font-family:var(--font);width:auto;min-width:96px;text-align:center;
  appearance:none;-webkit-appearance:none;background-image:none;
}

tbody tr.row-complete td{background:#E8F1E2!important;}
tbody tr.row-complete:nth-child(even) td{background:#DDEBD4!important;}
tbody tr.row-complete td.fcol{border-left:3px solid #2F7A3C!important;background:#E8F1E2!important;}
tbody tr.row-complete:nth-child(even) td.fcol{background:#DDEBD4!important;}
tbody tr.row-complete td.fcol-2{background:#E8F1E2!important;}
tbody tr.row-complete:nth-child(even) td.fcol-2{background:#DDEBD4!important;}
tbody td{padding:10px 12px;border-bottom:1px solid #eef1f5;vertical-align:top;overflow:hidden;}
/* Wrap content within whatever width the column has — content stays visible, columns stay resizable */
.sch-compact tbody td{font-size:12px;line-height:1.4;vertical-align:top;white-space:normal;word-break:break-word;}
.sch-compact .cell-wrap{white-space:normal;word-break:break-word;}
.sch-compact .cell-ratings{font-size:11px;line-height:1.5;white-space:normal;}
.sch-compact .cell-flags{text-align:center;white-space:normal;}
.sch-compact .cell-spec{font-family:var(--font);font-size:11px;line-height:1.45;}

/* Column resize handle on every th.resizable — drag the right edge */
th.resizable{position:relative;}
th.resizable .col-resizer{position:absolute;top:0;right:0;width:6px;height:100%;cursor:col-resize;user-select:none;z-index:5;}
th.resizable .col-resizer:hover,th.resizable .col-resizer.resizing{background:var(--accent);}
body.resizing-col,body.resizing-col *{cursor:col-resize!important;user-select:none!important;}
/* Two sticky-left columns: NS first (slim), Actions second */
th.fcol,td.fcol{position:sticky;left:0;z-index:2;min-width:64px;text-align:center;}
th.fcol{z-index:4;}
td.fcol{background:var(--surface);}
th.fcol-2,td.fcol-2{position:sticky;left:130px;z-index:2;min-width:64px;}
th.fcol-2{z-index:4;}
td.fcol-2{background:var(--surface);border-right:2px solid var(--border);}
/* Round icon-only action buttons in the slim Actions column */
.btn-edit-round,.btn-dup-round,.btn-del-round{
  width:28px;height:28px;border-radius:50%;padding:0;font-size:12px;font-weight:700;
  display:inline-flex;align-items:center;justify-content:center;
  cursor:pointer;font-family:var(--font);transition:all .12s;line-height:1;
}
.btn-edit-round{background:var(--dark);color:var(--accent);border:1.5px solid var(--dark);}
.btn-edit-round:hover{background:var(--accent);color:var(--dark);transform:scale(1.08);}
.btn-dup-round{background:var(--surface);color:var(--dark);border:1.5px solid var(--dark);}
.btn-dup-round:hover{background:var(--accent-2-l);transform:scale(1.08);}
.btn-del-round{background:var(--surface);color:var(--dark);border:1.5px solid var(--dark);}
.btn-del-round:hover{background:var(--coral-l,#FBD5CE);color:var(--coral,#EE7E72);transform:scale(1.08);}
tbody tr:nth-child(even) td.fcol,
tbody tr:nth-child(even) td.fcol-2{background:#fafbfc;}
tbody tr:hover td.fcol,
tbody tr:hover td.fcol-2{background:var(--accent-l)!important;}
/* Photo scales to fit the Photo column width — drag the column wider and the
   thumbnail grows with it. Aspect ratio stays square. */
.tbl-photo{width:100%;max-width:240px;aspect-ratio:1/1;border-radius:12px;object-fit:cover;border:2px solid var(--dark);cursor:pointer;display:block;transition:transform .12s;}
.tbl-photo:hover{transform:scale(1.03);}
.tbl-photo-ph{width:100%;max-width:240px;aspect-ratio:1/1;border-radius:12px;border:1.5px dashed var(--dark);display:flex;align-items:center;justify-content:center;color:var(--dark);font-size:clamp(20px,4vw,40px);cursor:pointer;background:var(--surface);transition:all .12s;}
.tbl-photo-ph:hover{background:var(--accent);}
.chip{font-size:10px;font-weight:700;padding:3px 9px;border-radius:12px;display:inline-block;letter-spacing:.02em;border:1.5px solid var(--dark);}
.st-sel{font-size:11px;font-weight:700;padding:5px 12px;border-radius:14px;border:1.5px solid var(--dark)!important;cursor:pointer;font-family:var(--font);letter-spacing:.02em;}
.tbl-bar{background:var(--dark);padding:4px 16px;font-size:10px;color:rgba(255,255,255,.45);display:flex;gap:18px;flex-shrink:0;}
.tbl-bar span{color:rgba(255,255,255,.65);}
/* Combo box — input + always-available dropdown panel */
.combo{position:relative;display:flex;align-items:stretch;width:100%;}
.cb-input{flex:1;padding-right:34px!important;}
.cb-toggle{position:absolute;right:0;top:0;bottom:0;width:32px;background:transparent;border:none;border-left:1.5px solid var(--dark);cursor:pointer;color:var(--dark);font-size:13px;font-weight:700;display:flex;align-items:center;justify-content:center;border-radius:0 10px 10px 0;transition:all .12s;z-index:2;}
.cb-toggle:hover{background:var(--accent);}
.cb-panel{display:none;position:absolute;top:calc(100% + 4px);left:0;right:0;background:var(--surface);border:2px solid var(--dark);border-radius:10px;max-height:240px;overflow-y:auto;z-index:200;box-shadow:4px 4px 0 rgba(110,33,27,.18);}
.cb-panel.open{display:block;}
.cb-options{padding:4px 0;}
.cb-opt{padding:8px 14px;cursor:pointer;font-size:12px;color:var(--text);border-left:3px solid transparent;}
.cb-opt:hover{background:var(--accent-l);border-left-color:var(--accent);}
.cb-opt.selected{background:var(--accent);font-weight:700;color:var(--dark);}
.cb-opt.hidden{display:none;}
.cb-empty{padding:10px 14px;font-size:11px;color:var(--muted);font-style:italic;border-top:1px dashed var(--border);}

/* Natspec — enriched view */
.ns-group{font-family:var(--font-display);font-size:20px;font-weight:800;color:var(--dark);background:transparent;padding:18px 0 10px;border-bottom:2px solid var(--dark);margin:28px 0 14px;letter-spacing:-.4px;display:flex;align-items:baseline;gap:12px;}
.ns-group-cnt{font-family:var(--font);font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.12em;font-weight:500;}
.ns-row{display:flex;flex-direction:column;border:1px solid rgba(0,0,0,.04);border-radius:14px;margin-bottom:10px;overflow:hidden;background:var(--surface);transition:all .2s;box-shadow:0 1px 3px rgba(42,50,58,.04),0 4px 14px rgba(42,50,58,.06);}
.ns-row:hover{transform:translateX(2px);}
.ns-row.used{background:var(--accent-l);}
.ns-row.expanded{background:var(--surface);box-shadow:6px 6px 0 var(--dark);}
.ns-row-main{display:flex;align-items:stretch;cursor:pointer;}
.ns-row-main:hover{background:var(--bg);}
.ns-row.used .ns-row-main{background:var(--accent-l);}
.ns-row.used .ns-row-main:hover{background:var(--accent-l);}
.ns-code{width:78px;flex-shrink:0;background:var(--dark);color:var(--accent);padding:14px;font-weight:700;font-size:13px;display:flex;align-items:center;justify-content:center;font-family:var(--font);letter-spacing:.02em;}
.ns-row.used .ns-code{background:var(--accent);color:var(--dark);}
.ns-body{flex:1;padding:12px 16px;}
.ns-tag{font-size:10px;background:var(--bg-2);color:var(--muted);padding:3px 9px;border-radius:2px;font-weight:600;margin-left:6px;letter-spacing:.04em;text-transform:uppercase;border:1px solid var(--border);}
.ns-tag-fields{background:var(--accent-l);color:var(--dark);border-color:var(--dark);}
.ns-meta-line{margin-top:8px;display:flex;gap:14px;flex-wrap:wrap;font-size:11px;color:var(--muted);letter-spacing:.02em;}
.ns-meta-bit strong{color:var(--text);font-weight:600;}
.ns-row-stats{display:flex;align-items:center;gap:6px;padding:0 16px;flex-shrink:0;}
.ns-stat-pill{display:flex;flex-direction:column;align-items:center;justify-content:center;background:var(--surface);border:1px solid var(--border);padding:6px 10px;min-width:48px;border-radius:2px;}
.ns-stat-pill.ns-stat-approved{background:var(--green-l);border-color:var(--green);}
.ns-stat-pill.ns-stat-flagged{background:var(--amber-l);border-color:var(--amber);}
.ns-stat-n{font-family:var(--font-display);font-size:18px;font-weight:500;color:var(--dark);line-height:1;}
.ns-stat-l{font-size:8px;color:var(--muted);text-transform:uppercase;letter-spacing:.1em;margin-top:2px;font-weight:500;}
.ns-chev{color:var(--muted);font-size:14px;margin-left:6px;}
.ns-row.expanded .ns-chev{color:var(--accent);}

/* Detail panel */
.ns-detail{padding:24px 28px;background:var(--bg);border-top:1px solid var(--border);}
.ns-detail-block{margin-bottom:22px;}
.ns-detail-block:last-child{margin-bottom:0;}
.ns-detail-hdr{font-family:var(--font);font-size:9px;font-weight:600;letter-spacing:.18em;text-transform:uppercase;color:var(--accent);margin-bottom:10px;padding-bottom:6px;border-bottom:1px solid var(--border);display:flex;align-items:baseline;gap:10px;}
.ns-detail-cnt{font-family:var(--font-display);font-size:14px;color:var(--muted);font-weight:400;letter-spacing:0;text-transform:none;}
.ns-std-list{display:flex;flex-wrap:wrap;gap:6px;}
.ns-std{font-size:11px;background:var(--surface);border:1px solid var(--border);padding:6px 12px;border-radius:2px;color:var(--text);font-family:'Courier New',monospace;letter-spacing:.02em;}
.ns-clauses{display:grid;grid-template-columns:1fr 1fr 1fr;gap:18px;}
.ns-clause-col{background:var(--surface);border:1px solid var(--border);padding:14px 16px;border-radius:2px;}
.ns-clause-hdr{font-family:var(--font-display);font-size:14px;color:var(--accent);font-weight:500;margin-bottom:10px;padding-bottom:6px;border-bottom:1px solid var(--accent-l);font-style:italic;}
.ns-clause-list{margin:0;padding-left:16px;list-style:'— ';}
.ns-clause-list li{font-size:12px;line-height:1.7;color:var(--text);margin-bottom:6px;padding-left:4px;}
.ns-notes{background:var(--surface);border-left:3px solid var(--accent);padding:14px 18px;font-size:12px;line-height:1.7;color:var(--text);font-style:italic;font-family:var(--font-display);font-size:14px;}
.ns-items{display:flex;flex-direction:column;gap:4px;}
.ns-item{display:grid;grid-template-columns:80px 1fr 200px 100px;gap:12px;align-items:center;padding:10px 14px;background:var(--surface);border:1px solid var(--border);border-radius:2px;cursor:pointer;font-size:12px;transition:all .12s;}
.ns-item:hover{border-color:var(--accent);background:var(--accent-l);}
.ns-item-id{font-family:'Courier New',monospace;color:var(--accent);font-weight:600;font-size:10px;letter-spacing:.05em;}
.ns-item-name{font-weight:500;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.ns-item-loc{color:var(--muted);font-size:10px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.ns-item-st{font-size:9px;font-weight:600;padding:3px 8px;border-radius:2px;text-align:center;letter-spacing:.04em;}
.ns-related{display:flex;flex-direction:column;gap:4px;}
.ns-related-row{font-size:11px;padding:8px 14px;background:var(--surface);border:1px solid var(--border);border-radius:2px;cursor:pointer;transition:all .12s;}
.ns-related-row:hover{border-color:var(--accent);background:var(--accent-l);color:var(--accent);}
.ns-related-row strong{font-family:'Courier New',monospace;color:var(--accent);margin-right:8px;font-size:10px;letter-spacing:.05em;}
.ns-detail-actions{display:flex;gap:10px;margin-top:8px;}
.ns-t{font-weight:700;font-size:14px;color:var(--dark);}
.ns-d{font-size:12px;color:var(--muted);margin-top:4px;line-height:1.5;}
/* Custom worksection field editor */
.cf-row{display:flex;gap:8px;align-items:center;margin-bottom:6px;}
.cf-row input,.cf-row select{font-size:12px;padding:7px 9px;}

/* NATSPEC mapping audit */
.audit-stat{background:var(--bg-2);border-radius:10px;padding:10px 16px;font-size:11px;color:var(--muted);}
.audit-stat .audit-n{font-size:22px;font-weight:800;color:var(--text);display:block;}
.audit-section{margin-bottom:18px;}
.audit-hdr{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--text);margin-bottom:8px;padding-bottom:5px;border-bottom:1.5px solid var(--border);display:flex;align-items:center;}
.audit-row{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:8px;margin-bottom:4px;background:var(--bg-2);cursor:pointer;transition:background .12s;}
.audit-row:hover{background:var(--accent-l);}

/* Certificates & compliance */
.cert-row{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:10px;margin-bottom:5px;background:var(--bg-2);transition:opacity .15s;}
.cert-row-off{opacity:.45;}
.cert-status{width:120px;flex-shrink:0;font-size:11px;font-weight:700;padding:6px 8px;border-radius:10px;border:1.5px solid var(--border-strong);cursor:pointer;font-family:var(--font);}
.cert-status-required{background:var(--guava-l);color:#7A3A3B;border-color:var(--guava)!important;}
.cert-status-received{background:var(--olive-taupe-l);color:#4D4936;border-color:var(--olive-taupe)!important;}
.cert-status-na,.cert-status-none{background:var(--surface);color:var(--muted);}
.cert-info{flex:1;min-width:0;}
.cert-label{font-size:12px;font-weight:700;color:var(--text);}
.cert-hint{font-size:10px;color:var(--muted);line-height:1.4;}
.cert-ref{width:200px;flex-shrink:0;font-size:11px;padding:6px 10px;}
.cert-attach{flex-shrink:0;width:30px;height:30px;border-radius:50%;border:1.5px dashed var(--border-strong);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;font-size:13px;transition:all .12s;background:var(--surface);}
.cert-attach:hover{border-color:var(--dark);background:var(--accent-l);}
.cert-file{flex-shrink:0;display:inline-flex;align-items:center;gap:4px;font-size:10px;font-weight:600;background:var(--olive-taupe-l);border:1px solid var(--olive-taupe);border-radius:10px;padding:4px 8px;max-width:160px;}
.cert-file a{color:#4D4936;text-decoration:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.cert-file-x{background:none;border:none;cursor:pointer;font-size:10px;color:var(--muted);padding:0 2px;}
.cert-file-x:hover{color:var(--coral);}
.cert-chip{display:inline-block;font-size:10px;font-weight:700;padding:3px 10px;border-radius:12px;letter-spacing:.02em;}
.cert-chip-req{background:var(--guava-l);color:#7A3A3B;border:1px solid var(--guava);}
.cert-chip-ok{background:var(--olive-taupe-l);color:#4D4936;border:1px solid var(--olive-taupe);}
.cert-item-row{display:flex;align-items:flex-start;gap:14px;padding:14px 16px;background:var(--surface);border-radius:14px;margin-bottom:8px;cursor:pointer;box-shadow:0 1px 3px rgba(42,50,58,.04),0 4px 14px rgba(42,50,58,.06);transition:box-shadow .15s;}
.cert-item-row:hover{box-shadow:0 8px 20px rgba(42,50,58,.14);}

/* Spec section picker */
.sp-group{margin-bottom:16px;border:1px solid rgba(0,0,0,.04);border-radius:14px;overflow:hidden;background:var(--surface);box-shadow:0 1px 3px rgba(42,50,58,.04),0 4px 14px rgba(42,50,58,.06);}
.sp-group-hdr{display:flex;align-items:center;gap:10px;padding:10px 14px;background:var(--bg-2);border-bottom:2px solid var(--dark);font-weight:700;font-size:12px;}
.sp-group-stats{font-size:10px;color:var(--muted);font-weight:600;letter-spacing:.05em;}
.sp-group-toggle{margin-left:auto;background:transparent;border:1.5px solid var(--dark);border-radius:14px;padding:3px 12px;font-size:9px;font-weight:600;cursor:pointer;text-transform:uppercase;letter-spacing:.05em;}
.sp-group-toggle:hover{background:var(--accent);}
.sp-group-items{display:grid;grid-template-columns:repeat(2,1fr);gap:1px;background:var(--border);}
.sp-item{display:flex;align-items:center;gap:8px;padding:10px 14px;background:var(--surface);cursor:pointer;font-size:12px;transition:all .12s;}
.sp-item:hover{background:var(--bg);}
.sp-item-on{background:var(--accent-l);}
.sp-item-on:hover{background:var(--accent-l);}
.sp-item input{width:auto!important;margin:0!important;padding:0!important;border:none!important;}
.sp-code{font-family:var(--font);font-weight:700;background:var(--dark);color:var(--accent);padding:3px 10px;border-radius:10px;font-size:11px;letter-spacing:.04em;flex-shrink:0;}
.sp-title{flex:1;color:var(--dark);font-weight:500;}
.sp-tag{font-size:9px;font-weight:700;padding:2px 8px;border-radius:8px;text-transform:uppercase;letter-spacing:.04em;flex-shrink:0;}
.sp-tag-sched{background:var(--green);color:white;}
.sp-tag-std{background:var(--accent);color:var(--dark);}

/* Spec output */
.spec-draft{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:16px;margin-bottom:14px;}
.spec-ns-block{margin-bottom:20px;}
.spec-ns-hdr{background:var(--dark);color:white;padding:10px 14px;border-radius:8px 8px 0 0;font-weight:700;font-size:12px;}
.spec-clause-row{padding:8px 14px;border-left:1px solid var(--border);border-right:1px solid var(--border);border-bottom:1px solid #eef1f5;font-size:11px;line-height:1.6;display:flex;align-items:flex-start;gap:8px;}
.spec-clause-row:last-child{border-radius:0 0 8px 8px;border-bottom:1px solid var(--border);}
.spec-clause-row.keep{background:#f9fff9;border-left:3px solid #4caf50;}
.spec-clause-row.review{background:var(--amber-l);border-left:3px solid #f6a623;}
.spec-clause-row.ref{background:var(--accent-l);border-left:3px solid var(--accent);}
.cb{font-size:9px;font-weight:700;padding:2px 6px;border-radius:8px;flex-shrink:0;margin-top:1px;}
.cb-keep{background:#c8e6c9;color:#1b5e20;}
.cb-review{background:#ffe0b2;color:#7a3b00;}
.cb-ref{background:#bbdefb;color:#0d47a1;}
/* Modal */
.modal-bg{position:fixed;inset:0;background:rgba(26,25,22,.45);z-index:100;display:flex;align-items:center;justify-content:center;padding:16px;}
.modal-bg.hidden{display:none;}
.modal{background:var(--surface);border-radius:24px;width:720px;max-width:100%;max-height:92vh;overflow:hidden;display:flex;flex-direction:column;border:3px solid var(--dark);}
.modal-sm{width:480px;}
.modal-hdr{padding:20px 28px 16px;border-bottom:2px solid var(--dark);display:flex;align-items:center;justify-content:space-between;flex-shrink:0;background:var(--accent);}
.modal-hdr h2{font-family:var(--font-display);font-size:22px;font-weight:800;letter-spacing:-.3px;color:var(--dark);}
.modal-close{background:none;border:none;font-size:22px;cursor:pointer;color:var(--muted);line-height:1;}
.modal-body{padding:20px;overflow-y:auto;flex:1;}
.modal-footer{padding:12px 20px;border-top:1px solid var(--border);display:flex;gap:8px;justify-content:flex-end;flex-shrink:0;}
.es{margin-bottom:24px;}
.es-hdr{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--dark);margin-bottom:14px;padding-bottom:8px;border-bottom:2px solid var(--dark);font-family:var(--font);display:inline-block;background:var(--accent);padding:6px 14px;border-radius:20px;border-bottom:none;}
/* Natspec extended fields */
.ns-ext-section{background:var(--bg);border:1px solid var(--border);border-radius:9px;padding:14px;margin-top:4px;}
.ns-ext-title{font-size:11px;font-weight:700;color:var(--dark);margin-bottom:10px;display:flex;align-items:center;gap:6px;}
.ns-ext-badge{font-size:10px;background:var(--accent-l);color:var(--accent);padding:2px 8px;border-radius:10px;font-weight:600;}
.field-review{border-color:#f6a623!important;background:#fffdf5!important;}
.field-review-label{color:#b36200;font-weight:700;}
.proj-item{display:flex;align-items:center;gap:10px;padding:10px 12px;border:1px solid var(--border);border-radius:9px;margin-bottom:6px;cursor:pointer;}
.proj-item:hover,.proj-item.active-p{border-color:var(--accent);background:var(--accent-l);}
.proj-icon{width:36px;height:36px;border-radius:8px;background:var(--accent-l);display:flex;align-items:center;justify-content:center;font-size:18px;flex-shrink:0;}
.new-form{background:var(--bg);border-radius:10px;padding:16px;margin-top:14px;}
.lightbox{position:fixed;inset:0;background:rgba(0,0,0,.85);z-index:200;display:flex;align-items:center;justify-content:center;}
.lightbox.hidden{display:none;}
.lightbox img{max-width:90vw;max-height:90vh;border-radius:8px;object-fit:contain;}
.lb-close{position:absolute;top:20px;right:24px;color:white;font-size:32px;cursor:pointer;background:none;border:none;}
/* ── Import modal ── */
.col-map-row{display:grid;grid-template-columns:180px 1fr 140px;gap:10px;align-items:center;padding:7px 0;border-bottom:1px solid #eef1f5;}
.col-map-row:last-child{border-bottom:none;}
.col-map-header{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);padding:4px 0 8px;}
.preview-table{width:100%;border-collapse:collapse;font-size:11px;margin-top:12px;}
.preview-table th{background:var(--dark);color:white;padding:6px 8px;text-align:left;font-size:9px;font-weight:700;}
.preview-table td{padding:5px 8px;border-bottom:1px solid #eef1f5;max-width:120px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.preview-table tr:nth-child(even) td{background:#fafbfc;}
.import-progress{background:var(--accent-l);border:1px solid #b8d4f5;border-radius:8px;padding:12px 14px;margin-bottom:10px;}
.progress-bar{height:6px;background:#e0e0e0;border-radius:3px;overflow:hidden;margin-top:6px;}
.progress-fill{height:100%;background:var(--accent);border-radius:3px;transition:width .3s;}
.toast{position:fixed;bottom:24px;right:24px;background:var(--dark);color:white;padding:10px 18px;border-radius:9px;font-size:12px;z-index:300;opacity:0;transition:opacity .25s;pointer-events:none;}
.toast.show{opacity:1;}
/* Sidebar toggle button */
.sidebar-toggle{background:none;border:1px solid rgba(255,255,255,.18);border-radius:6px;color:rgba(255,255,255,.6);font-size:16px;cursor:pointer;padding:4px 8px;line-height:1;font-family:var(--font);}
.sidebar-toggle:hover{color:white;background:rgba(255,255,255,.1);}
/* Collapsible sidebar */
.shell.sidebar-collapsed{grid-template-columns:0px 1fr;}
.shell.sidebar-collapsed .sidebar{overflow:hidden;width:0;min-width:0;padding:0;border:none;}
.shell.sidebar-collapsed .sidebar .sb-inner,
.shell.sidebar-collapsed .sidebar .sb-bottom{display:none;}
/* Dashboard */
.dash-header{margin-bottom:32px;padding-bottom:24px;position:relative;}
.dash-header::after{content:'';position:absolute;bottom:0;left:0;width:60px;height:4px;background:var(--accent);border-radius:2px;}
.dash-header h1{font-family:var(--font-display);font-size:44px;font-weight:700;color:var(--dark);letter-spacing:-1.5px;line-height:1.05;}
.dash-header p{font-size:12px;color:var(--muted);margin-top:8px;letter-spacing:.05em;font-weight:500;}
.dash-cards{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:28px;}
.dash-card{background:var(--surface);border:1px solid rgba(0,0,0,.04);border-radius:14px;padding:22px 22px 24px;text-align:left;position:relative;transition:all .2s;box-shadow:0 1px 3px rgba(42,50,58,.04),0 4px 14px rgba(42,50,58,.06);}
.dash-card:hover{transform:translateY(-2px);box-shadow:6px 6px 0 var(--dark);}
.dash-card:nth-child(2){background:var(--accent);}
.dash-card::before{display:none;}
.dash-card-n{font-family:var(--font-display);font-size:52px;font-weight:800;color:var(--dark);line-height:1;letter-spacing:-2px;margin-top:8px;}
.dash-card-l{font-size:11px;color:var(--dark);margin-top:14px;text-transform:uppercase;letter-spacing:.1em;font-weight:700;}
.dash-status-row{display:flex;align-items:center;gap:10px;margin-bottom:10px;}
.dash-status-label{width:90px;font-size:11px;font-weight:600;color:var(--text);display:flex;align-items:center;gap:6px;}
.dash-status-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0;}
.dash-status-bar-bg{flex:1;height:10px;background:#eef1f5;border-radius:5px;overflow:hidden;}
.dash-status-bar-fill{height:100%;border-radius:5px;transition:width .3s;}
.dash-status-count{width:32px;font-size:11px;color:var(--muted);text-align:right;}
.dash-recent-item{display:flex;align-items:center;gap:10px;padding:10px 14px;border:1.5px solid var(--dark);border-radius:12px;margin-bottom:6px;cursor:pointer;font-size:13px;transition:all .12s;}
.dash-recent-item:hover{background:var(--accent-l);border-color:var(--accent);}
.dash-recent-id{font-family:monospace;font-size:10px;color:var(--accent);background:var(--accent-l);padding:2px 6px;border-radius:6px;font-weight:700;}
.dash-recent-product{flex:1;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.dash-recent-status{font-size:10px;font-weight:700;padding:2px 8px;border-radius:8px;}
.dash-actions{display:flex;gap:10px;margin-top:18px;}
/* Status bar improvements */
.tbl-bar .stat-dot{display:inline-block;width:6px;height:6px;border-radius:50%;margin-right:4px;vertical-align:middle;}
.tbl-bar .mini-progress{display:inline-flex;align-items:center;gap:6px;margin-left:8px;}
.tbl-bar .mini-progress-bar{width:60px;height:5px;background:rgba(255,255,255,.15);border-radius:3px;overflow:hidden;display:inline-block;}
.tbl-bar .mini-progress-fill{height:100%;background:#66bb6a;border-radius:3px;display:block;}
.tbl-bar .mini-progress-text{font-size:9px;color:rgba(255,255,255,.55);}
/* Duplicate button */
.btn-dup{padding:4px 8px;font-size:11px;background:transparent;border:1px solid #c8e6c9;border-radius:6px;cursor:pointer;color:#2e7d32;font-family:var(--font);}
.btn-dup:hover{background:#eaf5ee;}
/* Row flash on status change */
@keyframes rowFlash{0%{background:#fffde7;}100%{background:transparent;}}
.row-flash td{animation:rowFlash .8s ease;}
/* Keyboard shortcuts overlay */
.kb-overlay{position:fixed;inset:0;background:rgba(110,33,27,.55);z-index:150;display:flex;align-items:center;justify-content:center;padding:16px;}
.kb-overlay.hidden{display:none;}
.kb-card{background:var(--surface);border-radius:14px;width:440px;max-width:100%;box-shadow:0 24px 64px rgba(110,33,27,.35);overflow:hidden;}
.kb-hdr{padding:16px 20px 12px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;}
.kb-hdr h2{font-size:15px;font-weight:700;}
.kb-body{padding:16px 20px 20px;}
.kb-row{display:flex;align-items:center;gap:14px;padding:6px 0;border-bottom:1px solid #eef1f5;}
.kb-row:last-child{border-bottom:none;}
.kb-row kbd{display:inline-block;min-width:70px;text-align:center;background:var(--bg);border:1px solid var(--border);border-radius:5px;padding:3px 8px;font-size:11px;font-family:var(--font);font-weight:700;color:var(--dark);box-shadow:0 1px 2px rgba(0,0,0,.06);}
.kb-row span{font-size:12px;color:var(--text);}
::-webkit-scrollbar{width:5px;height:5px;}
::-webkit-scrollbar-thumb{background:rgba(0,0,0,.15);border-radius:3px;}

/* ── Onboarding animated illustrations ───────────────────────────────────── */
.ob-stage{position:relative;height:184px;border:1.5px solid var(--border);border-radius:14px;background:linear-gradient(180deg,var(--surface),var(--bg));overflow:hidden;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:9px;margin-bottom:6px;}
.ob-fadeup{opacity:0;animation:ob-fadeup .55s ease forwards;}
@keyframes ob-fadeup{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}
.ob-cloud{font-size:34px;animation:ob-pulse 2s ease-in-out infinite;}
@keyframes ob-pulse{0%,100%{transform:scale(1)}50%{transform:scale(1.12)}}
.ob-arrow{font-size:18px;color:var(--coral);animation:ob-down 1.4s ease-in-out infinite;}
@keyframes ob-down{0%{transform:translateY(-5px);opacity:.3}50%{opacity:1}100%{transform:translateY(6px);opacity:.2}}
.ob-row{background:var(--surface);border:1.5px solid var(--dark);border-radius:9px;padding:5px 12px;font-size:12px;font-weight:600;color:var(--dark);min-width:190px;text-align:center;}
.ob-pick{opacity:0;border-color:var(--green);color:var(--green);animation:ob-fadeup .5s ease forwards, ob-glow 1.6s ease-in-out 1s infinite;}
@keyframes ob-glow{0%,100%{box-shadow:0 0 0 0 rgba(26,107,58,0)}50%{box-shadow:0 0 0 4px rgba(26,107,58,.2)}}
.ob-caret{display:inline-block;color:var(--accent-dk,#b5838d);font-weight:700;animation:ob-blink 1s steps(1) infinite;}
@keyframes ob-blink{50%{opacity:0}}
.ob-type{display:inline-block;overflow:hidden;white-space:nowrap;vertical-align:bottom;animation:ob-type 1.8s steps(24) infinite alternate;}
@keyframes ob-type{from{width:0}to{width:100%}}
.ob-chip{display:inline-block;background:var(--dark);color:var(--accent);border-radius:9px;padding:4px 11px;font-size:11px;font-weight:700;animation:ob-pop .5s ease both;}
@keyframes ob-pop{0%{transform:scale(.2);opacity:0}70%{transform:scale(1.15)}100%{transform:scale(1);opacity:1}}
.ob-pulsebtn{background:var(--dark);color:#fff;border-radius:20px;padding:6px 16px;font-size:12px;font-weight:700;animation:ob-pulse 1.3s ease-in-out infinite;}
.ob-half{flex:1;display:flex;flex-direction:column;align-items:center;gap:7px;}
.ob-cap{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);}
.ob-doc{background:#fff;border:1px solid var(--border);border-radius:6px;padding:8px 9px;width:170px;display:flex;flex-direction:column;gap:4px;}
.ob-line{height:5px;border-radius:3px;background:var(--border);opacity:0;animation:ob-fadeup .4s ease forwards;}
.ob-field{display:flex;justify-content:space-between;align-items:center;gap:8px;font-size:10.5px;font-weight:600;padding:3px 9px;border-radius:6px;background:var(--surface);border:1px solid var(--border);color:var(--dark);opacity:0;animation:ob-fadeup .5s ease forwards;}
.ob-field b{color:var(--green);font-weight:800;}
.ob-field-review{background:var(--amber-l);border:1px solid var(--amber);color:var(--amber);}
.ob-review-tag{font-size:8px;font-weight:800;letter-spacing:.05em;background:var(--amber);color:#fff;border-radius:4px;padding:1px 6px;animation:ob-pulse 1.4s ease-in-out infinite;}

/* ═══════════════════════════════════════════════════════════════════════════
   PROGRAMA-INSPIRED RESTYLE (2026-07) — warm-neutral palette, light editorial
   serif headings, mono uppercase captions. Token overrides + a few targeted
   selectors; layout unchanged. Fully reversible: delete this block to revert.
   ═══════════════════════════════════════════════════════════════════════════ */
:root{
  --font:'Inter',system-ui,-apple-system,sans-serif;
  --font-display:'Fraunces',Georgia,'Times New Roman',serif;      /* light serif */
  --font-mono:'Roboto Mono',ui-monospace,SFMono-Regular,Menlo,monospace;
  --font-strong:'DM Sans','Inter',sans-serif;                     /* bold marks */

  /* Warm-neutral canvas + chrome (measured off programa.design) */
  --bg:#FCFBF9; --bg-2:#F4F1EA; --surface:#FFFFFF;
  --blush-bg:#F4F1EA; --blush-bg-l:#FBF9F5;
  --dark:#211F1B; --mid:#3A362F; --slate-dd:#211F1B; --slate-d:#3A362F;
  --text:#1A1916; --muted:#5A534C;
  --border:#E7E3DB; --border-strong:#D3CDC2;

  /* Green whisper — a soft sage that preserves --accent's dual role:
     light text on the dark chrome AND a light background for dark text.
     Deep forest reserved for rare emphasis (--warm-deep). */
  --accent:#C3CDAF; --accent-l:#EAEEE0; --accent-dk:#7E8B62; --warm-deep:#2F3830;
  --accent-2:#8C8470; --accent-2-l:#E2DDD2;   /* secondary → warm taupe */
  --accent-3:#9A9376; --accent-3-l:#DED9C9;   /* tertiary → olive */
}

/* Editorial light-serif headings (were heavy sans) */
.toolbar-title,.ns-group{font-family:var(--font-display);font-weight:400;letter-spacing:-.4px;}
.ns-clause-hdr{font-family:var(--font-display);font-weight:400;}
.dash-header h1,#dash-welcome,.view h1{font-family:var(--font-display)!important;font-weight:300;letter-spacing:-1px;}
.sb-n,.ns-stat-n,.dash-card-n{font-family:var(--font-display);font-weight:400;}

/* Keep the bold decorative marks on a strong sans */
.logo,.marquee,.diamond-badge{font-family:var(--font-strong);}

/* Mono uppercase captions / eyebrows — Programa's signature label treatment */
.sb-lbl,.sb-btn,.ns-detail-hdr,.ns-group-cnt,.dash-card-l,thead th,.cfg-bar{font-family:var(--font-mono);}
.lbl{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.07em;font-size:10.5px;color:var(--muted);}

/* Warm a stray hot-yellow sidebar hover left from an older palette */
.sb-item:hover{background:rgba(195,205,175,.10);}

/* ── Programa-style schedule card grid ── */
.sch-cards{flex:1;overflow:auto;padding:16px 18px;display:flex;flex-direction:column;gap:10px;background:var(--bg);}
.pcard-empty{text-align:center;color:var(--muted);padding:52px 20px;font-size:13px;}
.pcard{display:flex;align-items:stretch;flex-shrink:0;background:var(--surface);border:1px solid var(--border);border-radius:14px;overflow:hidden;cursor:pointer;transition:box-shadow .15s,border-color .15s,transform .15s;}
.pcard:hover{box-shadow:0 8px 26px -14px rgba(30,28,24,.4);border-color:var(--border-strong);}
.pcard-thumb{flex-shrink:0;width:94px;display:flex;align-items:center;justify-content:center;padding:14px;}
.pcard-img{width:66px;height:66px;object-fit:cover;border-radius:10px;background:#efece6;border:1px solid var(--border);}
.pcard-img-ph{display:flex;align-items:center;justify-content:center;font-size:22px;color:var(--muted);cursor:pointer;}
.pcard-img-ph:hover{border-color:var(--accent);color:var(--dark);}
.pcard-body{flex:1;display:flex;align-items:stretch;min-width:0;}
.pcard-cell{flex:1;min-width:0;padding:15px 15px;border-left:1px solid var(--border);display:flex;flex-direction:column;justify-content:center;gap:3px;}
.pcard-cell:first-child{border-left:none;}
.pcard-cell-id{flex:1.7;}
.pc-val{font-size:13px;font-weight:500;color:var(--text);line-height:1.35;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.pc-name{font-family:var(--font-display);font-size:17px;font-weight:400;letter-spacing:-.3px;white-space:normal;overflow:visible;text-overflow:clip;line-height:1.2;color:var(--dark);}
.pc-cap{font-family:var(--font-mono);font-size:9px;letter-spacing:.09em;text-transform:uppercase;color:var(--muted);}
.pc-sub{font-size:11px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.pc-dim{color:var(--muted);opacity:.5;}
.pc-idrow{display:flex;align-items:center;gap:6px;margin-top:4px;}
.pc-code{font-family:var(--font-mono);font-size:11px;color:var(--dark);background:var(--bg-2);border:1px solid var(--border);border-radius:6px;padding:1px 8px;letter-spacing:.03em;}
.pc-flag{width:9px;height:12px;background:#c06a3d;display:inline-block;clip-path:polygon(0 0,100% 0,100% 68%,50% 100%,0 68%);flex-shrink:0;}
.pc-nschip{display:inline-block;font-family:var(--font-mono);font-size:9px;padding:2px 8px;border-radius:20px;background:var(--accent-l);color:var(--dark);letter-spacing:.03em;margin-top:2px;}
.pc-nschip.ok{background:var(--green-l);color:var(--green);}
.pc-nschip.rev{background:var(--amber-l);color:var(--amber);}
.pcard-side{flex-shrink:0;width:196px;padding:14px 16px;display:flex;flex-direction:column;align-items:flex-end;justify-content:center;gap:11px;border-left:1px solid var(--border);}
.pcard-status{width:auto;min-width:130px;padding:7px 12px;border-radius:20px;border:1px solid rgba(0,0,0,.06);font-family:var(--font-mono);font-size:10px;font-weight:500;letter-spacing:.05em;text-transform:uppercase;cursor:pointer;appearance:none;-webkit-appearance:none;text-align:center;}
.pcard-actions{display:flex;align-items:center;gap:6px;}
.pcard-btn{padding:6px 17px;font-size:11px;font-weight:600;border:1px solid var(--dark);border-radius:20px;background:var(--surface);color:var(--dark);cursor:pointer;font-family:var(--font);letter-spacing:.02em;transition:all .12s;}
.pcard-btn:hover{background:var(--dark);color:var(--surface);}
.pcard-ic{width:29px;height:29px;border-radius:50%;border:1px solid var(--border);background:var(--surface);color:var(--muted);cursor:pointer;font-size:12px;transition:all .12s;padding:0;}
.pcard-ic:hover{border-color:var(--dark);color:var(--dark);}
@media(max-width:1160px){
  .pcard{flex-wrap:wrap;}
  .pcard-body{flex-wrap:wrap;flex-basis:calc(100% - 94px);}
  .pcard-cell{flex:1 1 33%;border-left:none;border-top:1px solid var(--border);}
  .pcard-side{width:100%;border-left:none;border-top:1px solid var(--border);flex-direction:row;justify-content:space-between;align-items:center;}
}
/* Inline-editable card cells (edit in place) */
.pc-edit{outline:none;border-radius:5px;cursor:text;transition:background .12s,box-shadow .12s;min-height:1.15em;padding:1px 4px;margin:-1px -4px;}
.pc-edit:hover{background:var(--bg-2);}
.pc-edit:focus{background:var(--surface);box-shadow:0 0 0 2px var(--accent);white-space:normal;overflow:visible;}
.pc-edit:empty:before{content:'—';color:var(--muted);opacity:.4;}
.pc-name.pc-edit:empty:before{content:attr(data-ph);opacity:.4;}
.pc-code-edit{font-family:var(--font-mono);letter-spacing:.02em;}
/* Inline "add product" bar */
.pcard-add{display:flex;gap:8px;padding:4px 2px 2px;flex-wrap:wrap;}
.pcard-add-btn{padding:9px 16px;font-size:12px;font-weight:600;border:1px dashed var(--border-strong);border-radius:12px;background:var(--surface);color:var(--muted);cursor:pointer;font-family:var(--font);letter-spacing:.02em;transition:all .12s;}
.pcard-add-btn:hover{border-color:var(--dark);color:var(--dark);}
.pcard-add-btn.primary{border-style:solid;border-color:var(--dark);color:var(--dark);}
.pcard-add-btn.primary:hover{background:var(--dark);color:var(--surface);}
.pcard-add-url{display:flex;gap:8px;padding:4px 2px 6px;align-items:center;flex-wrap:wrap;}
.pcard-add-url input{flex:1;min-width:240px;max-width:560px;padding:9px 13px;}
.pcard-add{flex-shrink:0;}
/* Sections (user-defined grouping) */
.psec{flex-shrink:0;margin-bottom:14px;}
.psec-hdr{display:flex;align-items:center;gap:10px;padding:6px 2px 10px;border-bottom:1px solid var(--border);margin-bottom:10px;}
.psec-name{font-family:var(--font-display);font-size:18px;font-weight:400;color:var(--dark);letter-spacing:-.3px;}
.psec-name.pc-edit{padding:1px 6px;margin:-1px -6px;border-radius:6px;min-width:60px;}
.psec-ung{color:var(--muted);font-style:italic;font-size:16px;}
.psec-count{font-family:var(--font-mono);font-size:10px;color:var(--muted);background:var(--bg-2);border:1px solid var(--border);border-radius:20px;padding:2px 9px;letter-spacing:.03em;}
.psec-sp{flex:1;}
.psec-del{font-family:var(--font-mono);font-size:9px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);background:none;border:1px solid var(--border);border-radius:16px;padding:4px 11px;cursor:pointer;transition:all .12s;}
.psec-del:hover{border-color:#b23b3b;color:#b23b3b;}
.psec-empty{color:var(--muted);font-size:12px;padding:12px 4px 4px;font-style:italic;}
.psec .pcard{margin-bottom:8px;}
.pcard-section{width:auto;max-width:160px;padding:4px 9px;border-radius:16px;border:1px solid var(--border);font-family:var(--font-mono);font-size:9px;letter-spacing:.02em;color:var(--muted);background:var(--surface);cursor:pointer;text-transform:uppercase;}
.pcard-section:hover{border-color:var(--dark);color:var(--dark);}
.pcard-add-into{font-family:var(--font-mono);font-size:9px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);align-self:center;margin-left:8px;}
.pcard-add-sec{width:auto;padding:8px 11px;border-radius:12px;border:1px solid var(--border);font-size:12px;font-family:var(--font);cursor:pointer;}

/* ══ Programa-matched button system — compact rects, Inter 13 / weight 500,
   near-black text, hairline borders, no uppercase / letter-spacing.
   Primary = dark fill + near-white text. (measured off app.programa.design) ══ */
.btn,.btn-ghost,.pill,.pcard-btn,.pcard-add-btn,.proj-btn{
  font-family:var(--font);font-size:13px;font-weight:500;letter-spacing:normal;
  text-transform:none;border-radius:9999px;border:none;transition:all .13s;
}
/* Primary — dark fill + soft shadow ring */
.btn{background:var(--dark);color:#FCFBF9;padding:6px 15px;box-shadow:0 1px 2px rgba(0,0,0,.20),0 0 0 1px rgba(0,0,0,.10);}
.btn:hover:not(:disabled){background:#34302a;box-shadow:0 2px 6px rgba(0,0,0,.22),0 0 0 1px rgba(0,0,0,.12);}
/* Secondary — white + Programa's soft double shadow (no hard border) */
.btn-ghost,.pill,.pcard-btn,.proj-btn{background:#fff;color:var(--text);padding:5px 13px;box-shadow:0 1px 2px rgba(0,0,0,.10),0 0 0 1px rgba(0,0,0,.07);}
.btn-ghost:hover,.pill:hover,.pcard-btn:hover,.proj-btn:hover{background:#fff;color:var(--dark);box-shadow:0 2px 5px rgba(0,0,0,.13),0 0 0 1px rgba(0,0,0,.11);}
.pill.active{background:var(--dark);color:#FCFBF9;box-shadow:0 1px 2px rgba(0,0,0,.20),0 0 0 1px rgba(0,0,0,.10);}
.pcard-add-btn{padding:6px 13px;border-radius:9999px;}
.pcard-add-btn.primary{background:var(--dark);color:#FCFBF9;box-shadow:0 1px 2px rgba(0,0,0,.20),0 0 0 1px rgba(0,0,0,.10);}
.pcard-add-btn.primary:hover{background:#34302a;color:#fff;}

/* ══ Programa-matched inputs + status pill (softer controls) ══ */
input,select,textarea{border:1px solid var(--border-strong);border-radius:8px;font-weight:400;}
input:focus,select:focus,textarea:focus{border-color:var(--dark);box-shadow:0 0 0 3px var(--accent-l);background:var(--surface);}
/* Status pill on cards: Inter, sentence case (was mono uppercase) */
.pcard-status{font-family:var(--font);text-transform:none;font-size:11px;font-weight:500;letter-spacing:normal;border-color:rgba(0,0,0,.05);}

/* ══ Programa-style Dashboard / Overview ══ */
.dash2{max-width:1120px;margin:0 auto;padding:6px 4px 44px;}
.dash2-top{display:flex;gap:34px;align-items:flex-start;flex-wrap:wrap;padding:16px 0 30px;border-bottom:1px solid var(--border);}
.dash2-info{flex:1;min-width:280px;}
.dash2-title{font-family:var(--font-display);font-size:36px;font-weight:400;letter-spacing:-.9px;color:var(--dark);line-height:1.08;margin:0;}
.dash2-meta{font-size:12px;color:var(--muted);margin-top:9px;}
.dash2-pills{display:flex;gap:8px;margin-top:18px;flex-wrap:wrap;}
.dpill{font-size:12px;font-weight:500;padding:5px 13px;border-radius:9999px;background:var(--bg-2);color:var(--dark);box-shadow:0 0 0 1px rgba(0,0,0,.05);}
.dpill-ghost{background:transparent;color:var(--muted);box-shadow:0 0 0 1px var(--border);transition:all .12s;}
.dpill-ghost:hover{color:var(--dark);box-shadow:0 0 0 1px var(--border-strong);}
.dash2-hero{width:430px;max-width:100%;height:230px;border-radius:14px;overflow:hidden;cursor:pointer;flex-shrink:0;display:block;}
.dash2-hero-inner{width:100%;height:100%;display:flex;align-items:center;justify-content:center;background:repeating-linear-gradient(135deg,#f3f0ea,#f3f0ea 11px,#efece4 11px,#efece4 22px);box-shadow:0 0 0 1px var(--border) inset;border-radius:14px;transition:box-shadow .15s;}
.dash2-hero:hover .dash2-hero-inner{box-shadow:0 0 0 1px var(--border-strong) inset;}
.dash2-hero-ph{font-size:13px;color:var(--muted);font-weight:500;}
.dash2-hero-img{width:100%;height:100%;object-fit:cover;display:block;}
.dash2-stats{display:flex;flex-wrap:wrap;padding:28px 0;border-bottom:1px solid var(--border);}
.dstat{flex:1;min-width:150px;padding:0 24px;border-left:1px solid var(--border);}
.dstat:first-child{border-left:none;padding-left:0;}
.dstat-n{font-family:var(--font-display);font-size:32px;font-weight:400;color:var(--dark);line-height:1;letter-spacing:-.6px;}
.dstat-l{font-size:13px;color:var(--dark);font-weight:500;margin-top:9px;}
.dstat-sub{font-size:12px;color:var(--muted);margin-top:3px;}
.dash2-sec-hdr{font-family:var(--font-mono);font-size:10px;text-transform:uppercase;letter-spacing:.11em;color:var(--muted);margin:28px 0 12px;}
.dash2-recent{display:flex;flex-direction:column;gap:6px;}
@media(max-width:820px){.dash2-hero{width:100%;height:180px;}.dstat{min-width:44%;padding:12px 16px 0 0;border-left:none;}}

/* ══ Web-clip inbox (browser-extension clips) ══ */
.wc-banner{display:flex;align-items:center;gap:10px;background:var(--accent-l);border:1px solid var(--accent);border-radius:10px;padding:10px 14px;font-size:13px;color:var(--dark);}
.wc-badge{font-weight:600;background:var(--dark);color:#FCFBF9;border-radius:9999px;padding:2px 10px;font-size:12px;}
.wc-panel{margin-top:8px;display:flex;flex-direction:column;gap:8px;}
.wc-card{display:flex;gap:12px;align-items:center;background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:10px 12px;}
.wc-img{width:52px;height:52px;object-fit:cover;border-radius:8px;background:#efece6;border:1px solid var(--border);flex-shrink:0;}
.wc-img-ph{display:flex;align-items:center;justify-content:center;font-size:20px;color:var(--muted);}
.wc-info{flex:1;min-width:0;}
.wc-name{font-family:var(--font-display);font-size:16px;font-weight:400;color:var(--dark);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.wc-sub{font-size:12px;color:var(--muted);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.wc-src{font-family:var(--font-mono);font-size:9px;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;margin-top:2px;}
.wc-act{display:flex;align-items:center;gap:8px;flex-shrink:0;}

/* ── Project information (pinfo modal + dashboard block) ── */
.pi-note{font-size:12px;padding:9px 12px;border-radius:10px;margin-bottom:12px;line-height:1.45;}
.pi-note-lock{background:#F6EEE2;border:1px solid #E8D9BF;color:#6b5223;}
.pi-note-ok{background:#EEF2EC;border:1px solid #D9E2D5;color:#3d5237;}
.pi-hint{font-size:11px;color:var(--muted);margin:0 0 8px;line-height:1.45;}
.pi-subhdr{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);margin:12px 0 6px;}
.pi-row{display:grid;gap:6px;margin-bottom:6px;align-items:center;}
.pi-row input,.pi-row select{width:100%;min-width:0;}
.pi-row-team{grid-template-columns:1.2fr 1fr 1.2fr 28px;}
.pi-row-cons{grid-template-columns:1fr 1.1fr 1fr 1.1fr 28px;}
.pi-row-stage{grid-template-columns:1fr 1fr 1fr 1fr 28px;}
.pi-del{border:none;background:transparent;color:var(--muted);cursor:pointer;font-size:13px;padding:4px;border-radius:6px;line-height:1;}
.pi-del:hover{background:#F1EDE6;color:#8a2f2f;}
.pi-empty{font-size:11px;color:var(--muted);padding:4px 0 8px;}
.pi-edit-link{font-size:10px;font-weight:600;color:var(--muted);cursor:pointer;text-decoration:underline;text-underline-offset:2px;margin-left:8px;text-transform:none;letter-spacing:0;}
.pi-edit-link:hover{color:var(--dark);}
.pi-dash-empty{font-size:12px;color:var(--muted);padding:4px 0 8px;}
.pi-dash-empty a{color:var(--dark);text-decoration:underline;cursor:pointer;text-underline-offset:2px;}
.pi-dash-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:10px 22px;margin:4px 0 10px;}
.pi-dash-k{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);margin-bottom:2px;}
.pi-dash-v{font-size:13px;color:var(--dark);line-height:1.4;}
.pi-stagestrip{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin:2px 0 10px;}
.pi-stagechip{font-size:11px;font-weight:600;padding:4px 12px;border-radius:20px;border:1px solid var(--border);color:var(--muted);background:var(--surface);}
.pi-stagechip.pi-done{background:var(--dark);color:#FCFBF9;border-color:var(--dark);}
.pi-stagechip.pi-now{border-color:var(--dark);color:var(--dark);box-shadow:0 0 0 1px var(--dark) inset;}
.pi-stagearrow{color:var(--muted);font-size:10px;}
.pi-chiprow{display:flex;flex-wrap:wrap;gap:6px;margin:2px 0 8px;}
.pi-chip{font-size:11px;padding:4px 11px;border-radius:20px;background:#F1EDE6;color:var(--dark);border:1px solid var(--border);}
.pi-chip i{font-style:normal;color:var(--muted);font-size:10px;}
.pi-chip-cons{background:var(--surface);}
#dash-pinfo{margin-top:16px;}
#dash-pinfo .pi-dash-grid{grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:10px 18px;}

/* ── Programa-style shell: light left nav rail + slim topbar ── */
.topbar{border-bottom:1px solid var(--border);}
.sidebar{background:var(--bg);border-right:1px solid var(--border);}
.nav{display:flex;flex-direction:column;gap:2px;padding:8px 10px;}
.nav-item{display:flex;align-items:center;gap:10px;padding:9px 12px;border-radius:9px;font-size:13px;font-weight:500;color:var(--dark);cursor:pointer;border:1px solid transparent;transition:background .12s;user-select:none;white-space:nowrap;}
.nav-item:hover{background:#F1EDE6;}
.nav-item.active{background:#fff;border-color:var(--border);box-shadow:0 1px 2px rgba(0,0,0,.06);font-weight:600;}
.nav-ic{width:18px;text-align:center;font-size:12px;opacity:.72;flex-shrink:0;}
.sb-bottom{background:transparent;border-top:1px solid var(--border);}
.sb-btn{color:var(--muted);border:none;background:#fff;border-radius:9999px;box-shadow:0 1px 2px rgba(0,0,0,.08),0 0 0 1px rgba(0,0,0,.06);text-transform:none;letter-spacing:.02em;font-size:11px;}
.sb-btn:hover{background:#F1EDE6;color:var(--dark);}

/* ── Card ⋯ context menu ── */
.cmenu{position:fixed;z-index:400;background:#fff;border:1px solid var(--border);border-radius:12px;box-shadow:0 10px 32px rgba(0,0,0,.14),0 2px 8px rgba(0,0,0,.07);padding:6px;min-width:236px;}
.cmenu-item{display:flex;align-items:center;gap:10px;padding:8px 12px;border-radius:8px;font-size:13px;font-weight:500;color:var(--dark);cursor:pointer;white-space:nowrap;user-select:none;}
.cmenu-item:hover{background:#F5F2EC;}
.cmenu-ic{width:16px;text-align:center;opacity:.7;font-size:12px;flex-shrink:0;}
.cmenu-arr{margin-left:auto;color:var(--muted);font-size:13px;}
.cmenu-div{height:1px;background:var(--border);margin:6px 4px;}
.cmenu-danger{color:#8a2f2f;}
.cmenu-danger:hover{background:#F7ECEA;}
.cmenu-on{font-weight:700;}
.pcard-more{font-weight:700;letter-spacing:1px;}

/* Card side column: one fixed-width stack so the status pill and the
   Details/⋯ row share both edges (Programa-style alignment). */
.pcard-status{width:150px;min-width:0;}
.pcard-actions{width:150px;}
.pcard-actions .pcard-btn{flex:1;}

/* ── Modal polish: no hard outline, soft elevation, quiet rhythm ── */
.modal{border:none;box-shadow:0 24px 64px rgba(26,25,22,.22),0 4px 16px rgba(26,25,22,.10);}
.modal-hdr{border-bottom:none;padding:18px 28px;}
.modal-hdr h2{font-size:19px;font-weight:600;letter-spacing:-.2px;color:var(--dark);}
.modal-close{width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:18px;transition:background .12s;color:var(--dark);opacity:.6;}
.modal-close:hover{background:rgba(0,0,0,.07);opacity:1;}
.modal-body{padding:24px 28px;}
.modal-body .es:not(:last-child){border-bottom:1px solid var(--border);padding-bottom:22px;}
.es-hdr{font-size:10px;letter-spacing:.1em;padding:5px 13px;margin-bottom:14px;}
.modal-footer{padding:14px 28px;background:#FBFAF7;}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--dark);box-shadow:0 0 0 3px rgba(26,25,22,.08);}

/* ── Type refinement: Inter at its natural weight/tracking, lighter serif
   display, compact buttons (Programa: 13px/500, no tracking, no bold). ── */
.btn{font-size:12.5px;font-weight:500;letter-spacing:0;padding:6px 14px;}
.btn-ghost{font-size:12.5px;font-weight:500;letter-spacing:0;padding:5px 12px;}
.btn-edit,.btn-del{font-weight:500;letter-spacing:0;}
.pill,.proj-btn,.pcard-btn{font-weight:500;letter-spacing:0;}
.pcard-btn{font-size:12.5px;}
.sb-btn{font-weight:500;letter-spacing:0;}
.toolbar-title{font-weight:500;font-size:22px;letter-spacing:-.2px;}
.ns-group{font-weight:500;}
.modal-hdr h2{font-weight:500;}
.st-sel{font-weight:500;}
input,select,textarea{font-weight:400;}

/* ── Wordmark: sage pill, deep-forest two-weight type ── */
.logo{background:var(--accent);color:var(--warm-deep);font-family:var(--font);font-size:12.5px;font-weight:700;letter-spacing:.09em;padding:7px 15px;}
.logo span{color:var(--warm-deep);font-weight:400;opacity:.75;}

/* Library material already in the open project + flash highlight on jump */
.pcard-btn-in{background:var(--accent-l);color:var(--accent-dk);}
@keyframes pcardFlash{0%{box-shadow:0 0 0 3px var(--accent);}100%{box-shadow:0 0 0 6px rgba(0,0,0,0);}}
.pcard-flash{animation:pcardFlash 2.2s ease-out;}


/* ═════════════════════════════════════════════════════════════════
   UI REFRESH (2026-08, v165) — append-only override block.
   Topbar declutter, SVG nav icons, Add launcher, edit-modal rail,
   light Natspec/Certs/Keynotes/Sources/table restyle, toasts.
   Fully reversible: delete this block + js/ui-refresh.js to revert.
   ═════════════════════════════════════════════════════════════════ */
.topbar{overflow:visible;gap:10px;}
.save-badge{display:none!important;}
.save-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0;background:#4C9B57;display:inline-block;}
.save-dot-saving{background:#E0A45C;animation:sdPulse 1s infinite;}
.save-dot-error{background:#B5544C;}
@keyframes sdPulse{50%{opacity:.35;}}
.hist-seg{display:inline-flex;background:var(--surface);border-radius:9999px;box-shadow:0 1px 2px rgba(0,0,0,.10),0 0 0 1px rgba(0,0,0,.07);overflow:hidden;}
.hist-seg button{background:none;border:none;padding:6px 13px;font-size:13px;color:var(--text);cursor:pointer;line-height:1;font-family:var(--font);}
.hist-seg button+button{border-left:1px solid var(--border);}
.hist-seg button:hover{background:var(--bg-2);}
.hist-seg button.hidden{display:none;}
.hist-seg:not(:has(button:not(.hidden))){display:none;}
.tb-overflow{margin-left:auto;position:relative;}
.tb-more{width:30px;height:30px;border-radius:50%;border:none;background:var(--surface);box-shadow:0 1px 2px rgba(0,0,0,.10),0 0 0 1px rgba(0,0,0,.07);cursor:pointer;font-size:15px;font-weight:700;color:var(--muted);line-height:1;font-family:var(--font);}
.tb-more:hover{color:var(--text);}
.tb-menu{position:absolute;top:36px;right:0;background:var(--surface);border:1px solid var(--border);border-radius:12px;box-shadow:0 12px 32px rgba(26,25,22,.14);padding:6px;min-width:236px;z-index:400;display:flex;flex-direction:column;}
.tb-menu.hidden{display:none;}
.tb-menu button{display:flex;justify-content:space-between;align-items:center;gap:14px;background:none;border:none;border-radius:8px;padding:8px 11px;font-family:var(--font);font-size:12.5px;font-weight:500;color:var(--text);cursor:pointer;text-align:left;}
.tb-menu button:hover{background:var(--bg-2);}
.tb-kbd{font-family:var(--font-mono);font-size:9px;color:var(--muted);background:var(--bg-2);border-radius:5px;padding:2px 6px;}
.tb-menu-note{font-family:var(--font-mono);font-size:9px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);padding:8px 11px 5px;border-top:1px solid var(--border);margin-top:4px;}
.nav-ic{width:18px;height:16px;display:flex;align-items:center;justify-content:center;font-size:0;}
.nav-ic svg{display:block;}
.nav-item.active .nav-ic{color:var(--accent-dk);opacity:1;}
.card-eyebrow{display:flex;align-items:center;gap:8px;font-family:var(--font-mono);font-size:9.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--accent-dk);margin-bottom:12px;font-weight:500;}
.card-eyebrow svg{flex-shrink:0;}
.admin-pill{margin-left:auto;font-family:var(--font-mono);font-size:9px;letter-spacing:.05em;background:#F6EEE2;color:#8a5a00;border-radius:9999px;padding:2px 9px;text-transform:none;}
/* Add launcher */
.add-wrap{max-width:780px;margin:0 auto;}
.add-launcher{display:grid;grid-template-columns:1fr 1fr;gap:12px;}
.add-card{display:flex;align-items:center;gap:14px;background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:18px 20px;cursor:pointer;transition:border-color .12s,box-shadow .12s;position:relative;}
.add-card:hover{border-color:var(--accent);box-shadow:0 2px 10px rgba(126,139,98,.10);}
.add-card-hero{grid-column:1/-1;border-color:var(--accent);box-shadow:0 2px 8px rgba(126,139,98,.08);}
.add-card-wide{grid-column:1/-1;padding:14px 20px;}
.add-card-ic{width:38px;height:38px;border-radius:10px;background:var(--accent-l);display:flex;align-items:center;justify-content:center;flex-shrink:0;color:var(--accent-dk);}
.add-card-t{font-size:13.5px;font-weight:600;color:var(--text);}
.add-card-d{font-size:11.5px;color:var(--muted);margin-top:2px;line-height:1.45;}
.add-kbd{font-family:var(--font-mono);font-size:10px;color:var(--muted);background:var(--bg-2);border-radius:6px;padding:2px 8px;letter-spacing:.05em;margin-left:auto;flex-shrink:0;}
.add-badge{margin-left:auto;font-family:var(--font-mono);font-size:10.5px;font-weight:500;background:var(--accent-dk);color:#fff;border-radius:9999px;padding:1px 8px;flex-shrink:0;}
.add-badge.hidden{display:none;}
.add-panel.hidden{display:none;}
.add-launcher.hidden{display:none;}
.add-back{background:none;border:none;font-family:var(--font);font-size:12px;font-weight:500;color:var(--accent-dk);cursor:pointer;padding:0 2px;margin-bottom:10px;}
.add-back:hover{text-decoration:underline;}
.add-url-row{display:flex;gap:8px;margin-bottom:14px;}
.add-url-row input{flex:1;}
.add-actions{display:flex;align-items:center;gap:10px;margin-top:14px;flex-wrap:wrap;}
.add-actions-hint{font-size:11px;color:var(--muted);flex-basis:100%;}
.add-import-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;}
.add-import-card{display:block;background:var(--surface);border:1.5px dashed var(--border-strong);border-radius:12px;padding:16px 18px;cursor:pointer;font-family:var(--font);text-align:left;transition:border-color .12s;}
.add-import-card:hover{border-color:var(--accent-dk);}
.add-clips-empty{font-size:12px;color:var(--muted);border:1.5px dashed var(--border-strong);border-radius:12px;padding:26px 20px;text-align:center;line-height:1.6;}
.add-clips-empty.hidden{display:none;}
.det-dot{width:7px;height:7px;border-radius:50%;background:var(--accent-dk);flex-shrink:0;display:inline-block;}
/* Keynotes */
.kn-setup{display:flex;gap:12px;align-items:flex-start;background:var(--accent-l);border-radius:12px;padding:12px 16px;margin-bottom:14px;font-size:11.5px;line-height:1.7;color:var(--warm-deep);}
.kn-setup svg{flex-shrink:0;margin-top:2px;}
.kn-setup code{background:var(--surface);border-radius:5px;padding:1px 6px;font-family:var(--font-mono);font-size:10.5px;}
#kn-pre{background:var(--surface);border:1px solid var(--border);border-radius:12px;font-family:var(--font-mono);}
/* Sources help */
.src-help{margin-bottom:14px;}
.src-help summary{list-style:none;display:flex;align-items:center;gap:10px;background:var(--accent-l);border-radius:12px;padding:11px 16px;font-size:12px;font-weight:600;color:var(--warm-deep);cursor:pointer;}
.src-help summary::-webkit-details-marker{display:none;}
.src-help summary::before{content:'▸';font-size:10px;color:var(--accent-dk);transition:transform .12s;}
.src-help[open] summary::before{transform:rotate(90deg);}
.src-help .card{margin:10px 0 0;}
/* Schedule table */
/* Natspec index */
.ns-group{font-family:var(--font-display);font-size:16px;font-weight:500;letter-spacing:-.2px;color:var(--dark);border-bottom:1px solid var(--border);padding:18px 0 8px;margin-bottom:10px;display:flex;align-items:baseline;gap:10px;}
.ns-group-cnt{font-family:var(--font-mono);font-size:9.5px;letter-spacing:.09em;text-transform:uppercase;color:var(--muted);font-weight:400;}
.ns-row{background:var(--surface);border:1px solid var(--border);border-radius:12px;margin-bottom:8px;overflow:hidden;box-shadow:none;}
.ns-row.used{border-color:var(--accent);}
.ns-row-main{display:flex;gap:14px;padding:13px 16px;cursor:pointer;align-items:flex-start;background:none;}
.ns-row.used .ns-row-main{background:#FBFCF8;}
.ns-code{font-family:var(--font-mono);font-size:11px;color:var(--text);background:var(--bg-2);border:1px solid var(--border);border-radius:6px;padding:3px 9px;letter-spacing:.03em;flex-shrink:0;height:fit-content;font-weight:400;}
.ns-row.used .ns-code{color:var(--warm-deep);background:var(--accent-l);border-color:var(--accent);}
.ns-body{flex:1;min-width:0;}
.ns-t{font-size:13px;font-weight:600;color:var(--text);display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
.ns-tag{font-family:var(--font-mono);font-size:8.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);background:var(--bg-2);border-radius:9999px;padding:2px 8px;font-weight:400;}
.ns-tag-fields{color:var(--accent-dk);background:var(--accent-l);}
.ns-d{font-size:11.5px;color:var(--muted);margin-top:2px;line-height:1.45;}
.ns-meta-line{font-size:10.5px;color:var(--muted);margin-top:4px;display:flex;gap:12px;flex-wrap:wrap;}
.ns-row-stats{display:flex;gap:6px;align-items:center;flex-shrink:0;margin-left:auto;}
.ns-stat-pill{display:flex;flex-direction:column;align-items:center;background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:5px 10px;min-width:38px;}
.ns-stat-n{font-family:var(--font-display);font-size:15px;line-height:1;color:var(--dark);}
.ns-stat-l{font-family:var(--font-mono);font-size:7.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);margin-top:2px;}
.ns-stat-approved{background:#DFF5E1;border-color:#BCE0C0;}
.ns-stat-approved .ns-stat-n,.ns-stat-approved .ns-stat-l{color:#1B5E20;}
.ns-stat-flagged{background:#F6EEE2;border-color:#E8C68C;}
.ns-stat-flagged .ns-stat-n,.ns-stat-flagged .ns-stat-l{color:#8a5a00;}
.ns-chev{color:var(--muted);font-size:11px;align-self:center;}
.ns-detail{border-top:1px solid var(--border);background:var(--bg);padding:16px;display:flex;flex-direction:column;gap:16px;}
.ns-detail-hdr{font-family:var(--font-mono);font-size:9px;letter-spacing:.14em;text-transform:uppercase;color:var(--accent-dk);border-bottom:1px solid var(--border);padding-bottom:5px;margin-bottom:8px;font-weight:500;}
.ns-detail-cnt{color:var(--muted);letter-spacing:0;}
.ns-std-list{display:flex;flex-wrap:wrap;gap:6px;}
.ns-std{font-family:var(--font-mono);font-size:10.5px;background:var(--surface);border:1px solid var(--border);border-radius:6px;padding:4px 10px;color:var(--text);}
.ns-items{display:flex;flex-direction:column;gap:6px;}
.ns-item{display:flex;gap:12px;align-items:center;background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:9px 13px;font-size:12px;cursor:pointer;transition:border-color .12s;}
.ns-item:hover{border-color:var(--accent);}
.ns-item-id{font-family:var(--font-mono);font-size:10px;color:var(--accent-dk);flex-shrink:0;}
.ns-item-name{font-weight:500;color:var(--text);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.ns-item-loc{color:var(--muted);font-size:10.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:180px;}
.ns-item-st{font-size:10px;font-weight:500;border-radius:9999px;padding:3px 10px;flex-shrink:0;}
.ns-clauses{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px;}
.ns-clause-hdr{font-size:11px;font-weight:600;margin-bottom:4px;color:var(--text);}
.ns-clause-list{margin:0;padding-left:16px;font-size:11px;color:var(--muted);line-height:1.7;}
.ns-notes{font-size:11.5px;color:var(--muted);line-height:1.6;}
.ns-related{display:flex;flex-direction:column;gap:4px;}
.ns-related-row{font-size:11.5px;color:var(--muted);cursor:pointer;}
.ns-related-row:hover{color:var(--accent-dk);}
.ns-detail-actions{display:flex;gap:8px;flex-wrap:wrap;}
/* Certificates */
.cert-row{display:flex;gap:12px;align-items:center;padding:9px 0;border-bottom:1px solid #F0EDE6;}
.cert-row:last-child{border-bottom:none;}
.cert-row-off{opacity:.55;}
.cert-status{font-size:11px;font-weight:500;border:none;border-radius:9999px;padding:4px 26px 4px 12px;cursor:pointer;font-family:var(--font);background:var(--bg-2);color:var(--muted);width:auto;}
.cert-status-required{background:#F6EEE2;color:#8a5a00;}
.cert-status-received{background:#DFF5E1;color:#1B5E20;}
.cert-status-na{background:var(--bg-2);color:var(--muted);}
.cert-info{flex:1;min-width:0;}
.cert-label{font-size:12.5px;font-weight:500;color:var(--text);}
.cert-hint{font-size:10.5px;color:var(--muted);margin-top:1px;}
.cert-ref{width:170px;font-size:11px;}
.cert-file{font-size:10.5px;white-space:nowrap;}
.cert-attach{cursor:pointer;font-size:13px;opacity:.7;}
.cert-attach:hover{opacity:1;}
.cert-item-row{display:flex;gap:12px;align-items:center;background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:12px 16px;margin-bottom:8px;cursor:pointer;transition:border-color .12s;}
.cert-item-row:hover{border-color:var(--accent);}
.cert-chip{font-size:10px;border-radius:9999px;padding:2px 9px;background:var(--bg-2);color:var(--muted);display:inline-block;margin:1px 2px 1px 0;}
.cert-chip-ok{background:#DFF5E1;color:#1B5E20;}
.cert-chip-req{background:#F6EEE2;color:#8a5a00;}
/* Edit modal: eyebrow section headers + sticky rail */
.es-hdr{background:none;padding:0 0 6px;border-radius:0;border-bottom:1px solid var(--border);font-family:var(--font-mono);font-size:9.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--accent-dk);font-weight:500;}
#edit-modal .modal.has-rail{display:grid;grid-template-columns:180px minmax(0,1fr);grid-template-rows:auto minmax(0,1fr) auto;width:900px;}
#edit-modal .modal.has-rail .modal-hdr{grid-column:1/-1;grid-row:1;}
#edit-modal .modal.has-rail .modal-footer{grid-column:1/-1;grid-row:3;}
#edit-modal .modal.has-rail .ed-rail{grid-row:2;grid-column:1;border-right:1px solid var(--border);background:var(--bg);padding:14px 10px;display:flex;flex-direction:column;gap:2px;overflow-y:auto;}
#edit-modal .modal.has-rail .modal-body{grid-row:2;grid-column:2;position:relative;}
.ed-rail-item{background:none;border:1px solid transparent;border-radius:8px;padding:7px 11px;font-family:var(--font);font-size:12px;font-weight:500;color:var(--muted);cursor:pointer;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;}
.ed-rail-item:hover{color:var(--text);}
.ed-rail-item.active{background:var(--surface);border-color:var(--border);box-shadow:0 1px 2px rgba(0,0,0,.05);color:var(--text);font-weight:600;}
/* Toast */
.toast{border-radius:12px;padding:11px 16px;font-size:12.5px;box-shadow:0 8px 24px rgba(26,25,22,.25);transform:translateY(8px);transition:opacity .2s,transform .2s;}
.toast.show{transform:translateY(0);}
/* Focus */
:focus-visible{outline:2px solid var(--accent-dk);outline-offset:1px;}

/* Sidebar footer utilities — quiet text buttons, not pills (v165.1) */
.sb-bottom{padding:10px 10px 12px;display:flex;flex-direction:column;gap:1px;}
.sb-util-hd{font-family:var(--font-mono);font-size:8.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);padding:0 8px 6px;}
.sb-util{display:flex;align-items:center;gap:8px;background:none;border:none;box-shadow:none;border-radius:8px;padding:6px 8px;font-family:var(--font);font-size:11.5px;font-weight:500;color:var(--muted);cursor:pointer;text-align:left;letter-spacing:0;text-transform:none;line-height:1;}
.sb-util:hover{background:#F1EDE6;color:var(--text);}
.sb-util svg{flex-shrink:0;opacity:.75;}
.sb-util-row{display:flex;gap:1px;}
.sb-util-row .sb-util{flex:1;}
.sb-note{font-size:9px;color:var(--muted);opacity:.6;text-align:center;margin-top:5px;line-height:1.5;}

/* Sidebar footer option B — one hairline cloud card + text links (v165.2) */
.sb-cloud-card{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:10px 12px;display:flex;flex-direction:column;gap:8px;}
.sb-cc-hd{display:flex;align-items:center;gap:7px;font-family:var(--font-mono);font-size:8.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);}
.sb-cc-dot{width:6px;height:6px;border-radius:50%;background:#4C9B57;flex-shrink:0;}
.sb-cc-status{margin-left:auto;font-size:8.5px;letter-spacing:0;text-transform:none;}
.sb-cc-row{display:flex;gap:6px;}
.sb-cc-btn{flex:1;background:var(--bg-2);border:none;border-radius:9999px;padding:6px 0;font-family:var(--font);font-size:11.5px;font-weight:500;color:var(--text);cursor:pointer;letter-spacing:0;text-transform:none;}
.sb-cc-btn:hover{background:var(--accent-l);color:var(--warm-deep);}
.sb-links{display:flex;align-items:center;justify-content:center;gap:8px;margin-top:9px;}
.sb-link{background:none;border:none;padding:0;font-family:var(--font);font-size:10.5px;font-weight:500;color:var(--muted);cursor:pointer;letter-spacing:0;text-transform:none;}
.sb-link:hover{color:var(--text);text-decoration:underline;text-underline-offset:2px;}
.sb-link-sep{color:var(--border-strong);font-size:10px;}
.sb-note{margin-top:6px;}

/* ── Type unification (v165.3) — one family set, one size scale ──
   Families: Inter (all UI), Roboto Mono (codes, eyebrows, labels),
   Fraunces (view/modal display headings only). DM Sans retired.
   Scale: 19 display · 13 body · 11.5 secondary · 10.5 chips · 9.5 eyebrows */
:root{
  --font-strong:'Inter',system-ui,sans-serif;
  --fs-display:19px; --fs-body:13px; --fs-small:11.5px; --fs-meta:10.5px; --fs-eyebrow:9.5px;
}
html,body{font-size:var(--fs-body);}
button,input,select,textarea,label{font-family:var(--font);}
input,select,textarea{font-size:var(--fs-body);}
.logo{font-family:var(--font-strong);}
.btn,.btn-ghost,.sb-btn{font-size:12.5px;font-weight:500;letter-spacing:0;}
.nav-item{font-size:var(--fs-body);}
.toolbar-title{font-family:var(--font-display);font-size:var(--fs-display);font-weight:500;letter-spacing:-.2px;color:var(--dark);}
.modal-hdr h2{font-size:var(--fs-display);font-weight:600;}
.lbl{font-family:var(--font-mono);font-size:var(--fs-eyebrow);letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-weight:500;}
.es-hdr,.card-eyebrow,.ns-detail-hdr,.sb-cc-hd,.tb-menu-note{font-size:var(--fs-eyebrow);}
.sch-hint,.tbl-bar,.ns-group-cnt{font-size:var(--fs-eyebrow);}
.chip,.st-sel,.ns-item-st,.cert-chip,.dpill{font-size:var(--fs-meta);font-weight:500;}
.ns-code,.ns-item-id,.ns-std,.add-kbd,.tb-kbd,.add-badge{font-size:var(--fs-meta);}
.ns-d,.cert-hint,.add-card-d,.ns-item-loc,.add-actions-hint,.kn-setup,.add-clips-empty{font-size:var(--fs-small);}
.ns-t,.cert-label,.add-card-t,.ns-item-name,.cert-item-row,.ns-item{font-size:var(--fs-body);}
.ed-rail-item,.tb-menu button,.sb-cc-btn,.sb-util{font-size:12px;}
.sb-link,.sb-note{font-size:var(--fs-meta);}
.sb-note{font-size:9px;}

/* Wrap guards (v165.4) — labels never break mid-word or mid-code */
.btn,.btn-ghost,.sb-btn,.sb-cc-btn,.tb-menu button,.add-back,.hist-seg button,.sb-link,.sb-util{white-space:nowrap;}
.chip,.dpill,.st-sel,.ns-item-st,.cert-chip,.cert-status,.add-kbd,.tb-kbd,.add-badge,.ns-code,.admin-pill,.cert-file{white-space:nowrap;}
.ns-tag{white-space:nowrap;line-height:1;}
.es-hdr{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.card-eyebrow,.ns-detail-hdr{white-space:nowrap;}
.card-eyebrow .admin-pill{overflow:visible;}
.ns-group{flex-wrap:wrap;}
.ns-group-cnt,.sb-cc-hd,.sb-cc-status,.tb-menu-note{white-space:nowrap;}
.ed-rail-item{line-height:1.4;}

/* Hierarchy layer (v165.5) — three clear levels everywhere:
   kicker (9px mono sage) > title (15.5px Fraunces) > body (13px Inter).
   View titles up to 21px so each screen has one unmistakable anchor. */
.toolbar-title{font-size:21px;}
.card-kicker{font-family:var(--font-mono);font-size:9px;letter-spacing:.14em;text-transform:uppercase;color:var(--accent-dk);font-weight:500;margin-bottom:3px;white-space:nowrap;}
.card-title{font-family:var(--font-display);font-size:15.5px;font-weight:500;letter-spacing:-.1px;color:var(--dark);margin-bottom:10px;display:flex;align-items:center;gap:10px;}
.card-title svg{flex-shrink:0;color:var(--accent-dk);}
.card-title .admin-pill{margin-left:auto;}
.dash2-sec-hdr{font-family:var(--font-display);font-size:15.5px;font-weight:500;letter-spacing:-.1px;color:var(--dark);}
.add-card-hero .add-card-t{font-size:14.5px;}
.ns-group{font-size:17px;}
.modal-hdr h2{font-size:21px;}

/* Card-view ID chip wrap guard (v165.6) */
.pc-code{white-space:nowrap;}
.pc-idrow{flex-wrap:nowrap;}

/* ── Type scale = hierarchy (v165.7) ─────────────────────────────
   Every text level has exactly one size step. Change a step here
   and the whole level moves together.
   T1 21px  Fraunces 500  view / modal titles — one anchor per screen
   T2 15.5  Fraunces 500  card & section titles (incl. Natspec groups)
   T3 13.5  Inter 600     item names, primary row text
   T4 13    Inter 400/500 body, forms, buttons, nav
   T5 11.5  Inter 400     secondary prose, hints, row meta
   T6 10.5  Inter 500     chips, status pills, code chips
   T7 9.5   Mono 500      eyebrows, field labels, table headers
   T8 9     Mono 500      kickers, footnotes                        */
:root{
  --t1:21px;--t2:15.5px;--t3:13.5px;--t4:13px;--t5:11.5px;--t6:10.5px;--t7:9.5px;--t8:9px;
  --fs-display:var(--t1);--fs-body:var(--t4);--fs-small:var(--t5);--fs-meta:var(--t6);--fs-eyebrow:var(--t7);
}
.toolbar-title,.modal-hdr h2{font-size:var(--t1);}
.card-title,.dash2-sec-hdr,.ns-group{font-size:var(--t2);}
.ns-t,.cert-label,.add-card-t,.ns-item-name{font-size:var(--t3);font-weight:600;}
.add-card-hero .add-card-t{font-size:var(--t3);}
.btn,.btn-ghost,.sb-btn,.nav-item,input,select,textarea{font-size:var(--t4);}
.ns-d,.cert-hint,.add-card-d,.ns-item-loc,.add-actions-hint,.kn-setup,.add-clips-empty,.cfg-bar{font-size:var(--t5);}
.chip,.dpill,.st-sel,.ns-item-st,.cert-chip,.cert-status,.ns-code,.ns-item-id,.ns-std,.add-kbd,.tb-kbd,.add-badge{font-size:var(--t6);}
.lbl,.es-hdr,.card-eyebrow,.ns-detail-hdr,.sb-cc-hd,.ns-group-cnt{font-size:var(--t7);}
.card-kicker,.tb-menu-note,.sb-note{font-size:var(--t8);}

/* Scale escapees (v165.8): match specificity of older rules */
label.lbl,.lbl{font-size:var(--t7);}

/* Brand mark (v165.9) — dark pill, schedule glyph, two-tone wordmark */
.logo{display:inline-flex;align-items:center;gap:7px;background:var(--dark);color:#FCFBF9;font-family:var(--font-strong);font-size:10.5px;font-weight:700;letter-spacing:.11em;text-transform:uppercase;padding:7px 14px;border-radius:9999px;line-height:1;white-space:nowrap;}
.logo svg{color:var(--accent);flex-shrink:0;}
.logo span{font-weight:400;color:var(--accent);letter-spacing:.11em;}

/* Brand mark option C (v165.10) — no pill: quiet serif wordmark */
.logo{display:inline-flex;align-items:baseline;gap:0;background:none;color:var(--dark);font-family:var(--font-display);font-size:16.5px;font-weight:600;letter-spacing:-.2px;text-transform:none;padding:0 2px;border-radius:0;line-height:1;white-space:nowrap;}
.logo span{font-weight:400;color:var(--accent-dk);letter-spacing:-.2px;}

/* Brand mark option D (v165.11) — serif wordmark + googly blob buddy */
.logo{gap:7px;align-items:center;}
.logo-blob{flex-shrink:0;transition:transform .25s cubic-bezier(.34,1.56,.64,1);}
.logo:hover .logo-blob{transform:rotate(-10deg) scale(1.08);}
.logo .logo-eye{transition:transform .2s;}
.logo:hover .logo-eye{transform:translateX(.8px);}

/* Schedule view exempt from the refresh (v165.14) — original look kept */
#view-schedule .toolbar-title{font-size:24px;font-weight:800;letter-spacing:-.5px;}

/* ── Add → New product: plain-language shortcut + grouped form (v166) ── */
.add-shortcut{background:var(--bg-2);border-radius:12px;padding:14px 16px;margin:4px 0 22px;}
.add-shortcut-t{font-size:13px;font-weight:600;color:var(--text);margin-bottom:9px;}
.add-shortcut .add-url-row{margin:0;}
.add-shortcut-d{font-size:11.5px;color:var(--muted);line-height:1.55;margin-top:8px;}
.add-grp{font-family:var(--font-mono);font-size:9.5px;letter-spacing:.11em;text-transform:uppercase;color:var(--muted);
  padding-bottom:7px;border-bottom:1px solid var(--border);margin:24px 0 14px;display:flex;align-items:baseline;gap:9px;}
.add-grp:first-of-type{margin-top:4px;}
.add-grp-opt{font-family:var(--font);font-size:10.5px;letter-spacing:0;text-transform:none;color:var(--muted);opacity:.85;font-weight:400;}
.lbl .req{font-family:var(--font);font-size:9.5px;letter-spacing:0;text-transform:none;color:var(--accent-dk);
  font-weight:500;background:var(--accent-l);padding:1px 7px;border-radius:9px;margin-left:5px;}

/* ── NATSPEC field block: paste-to-sort, live completion, extra notes (v167) ── */
.ns-paste{background:var(--bg-2);border-radius:12px;padding:13px 15px;margin-bottom:16px;}
.ns-paste-t{font-size:12.5px;font-weight:600;color:var(--text);margin-bottom:8px;}
.ns-paste textarea{width:100%;font-size:12.5px;line-height:1.5;resize:vertical;}
.ns-paste-row{display:flex;align-items:center;gap:12px;margin-top:9px;flex-wrap:wrap;}
.ns-paste-msg{font-size:11px;color:var(--muted);line-height:1.5;flex:1;min-width:180px;}
.nsf{margin-bottom:8px;}
.nsf-flag{font-family:var(--font);font-size:9px;letter-spacing:0;text-transform:none;font-weight:500;
  color:#8a5a00;background:#F6EEE2;padding:1px 7px;border-radius:9px;margin-left:5px;white-space:nowrap;}
.nsf-done .nsf-flag{color:#1B5E20;background:#DFF5E1;}
.nsf-done input,.nsf-done select,.nsf-done .cb-input{border-color:#BFDCC4;}
.ns-ext-badge#ns-fill-badge{background:#F6EEE2;color:#8a5a00;}
.ns-ext-badge#ns-fill-badge.ns-fill-ok{background:#DFF5E1;color:#1B5E20;}
.ns-extra{margin-top:16px;padding-top:14px;border-top:1px solid var(--border);}
.ns-extra textarea{width:100%;font-size:12.5px;line-height:1.55;resize:vertical;}
.ns-extra-opt{font-family:var(--font);font-size:10.5px;letter-spacing:0;text-transform:none;color:var(--muted);font-weight:400;}

/* ── Deploy watcher banner ── */
.vc-bar{position:fixed;right:18px;bottom:18px;z-index:600;display:flex;align-items:center;gap:11px;
  background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:11px 13px;
  box-shadow:0 12px 32px rgba(26,25,22,.16),0 2px 8px rgba(26,25,22,.08);
  font-size:12.5px;color:var(--text);max-width:440px;line-height:1.45;}
.vc-dot{width:8px;height:8px;border-radius:50%;background:var(--accent-dk);flex-shrink:0;}
.vc-btn{border:none;background:var(--dark);color:#FCFBF9;border-radius:9999px;padding:6px 14px;
  font-family:var(--font);font-size:12.5px;font-weight:500;cursor:pointer;white-space:nowrap;flex-shrink:0;}
.vc-x{border:none;background:none;color:var(--muted);cursor:pointer;font-size:13px;line-height:1;padding:4px;flex-shrink:0;}
.vc-x:hover{color:var(--text);}

/* ── Stages (start date only) + revision/issue system (v173) ── */
.pi-row-stage{grid-template-columns:1fr 1fr auto 28px;}
.pi-row-stage .pi-stagechip{justify-self:start;font-size:10px;}
.rev-label-box{background:var(--accent-l);border-radius:12px;padding:14px 16px;text-align:center;}
.rev-label-cap{font-family:var(--font-mono);font-size:9px;letter-spacing:.11em;text-transform:uppercase;color:var(--accent-dk);margin-bottom:5px;}
.rev-label{font-family:var(--font-display);font-size:24px;font-weight:500;color:var(--warm-deep);letter-spacing:-.2px;}
.rev-hist{margin-top:16px;padding-top:13px;border-top:1px solid var(--border);}
.rev-hist-t{font-family:var(--font-mono);font-size:9px;letter-spacing:.11em;text-transform:uppercase;color:var(--muted);margin-bottom:7px;}
.rev-hist-row{display:flex;justify-content:space-between;gap:12px;align-items:baseline;font-size:12px;padding:5px 0;border-bottom:1px solid var(--border);}
.rev-hist-row:last-child{border-bottom:none;}
.rev-hist-row b{font-weight:600;color:var(--text);white-space:nowrap;}
.rev-hist-row span{color:var(--muted);font-size:11px;text-align:right;}

/* Editable issue history rows (Project Information) */
.pi-row-rev{grid-template-columns:70px 1fr 96px 80px 28px;align-items:center;}
.pi-rev-head{font-family:var(--font-mono);font-size:9px;letter-spacing:.09em;text-transform:uppercase;color:var(--muted);margin-bottom:2px;}
.pi-rev-head span{padding-left:2px;}
.pi-rev-sub{font-size:10px;color:var(--muted);margin:-2px 0 8px 2px;}

/* ── v194: collapsible Abbreviations section on the Keynotes page ── */
.abv-hdr{display:flex;align-items:center;justify-content:space-between;cursor:pointer;user-select:none;}
.abv-hdr:hover .abv-chev{color:var(--accent-dk);}
.abv-chev{font-size:13px;color:var(--muted);padding:2px 6px;transition:color .15s;}
.abv-count{display:inline-block;font-size:10.5px;font-weight:700;background:var(--accent-l);color:var(--accent-dk);border-radius:9px;padding:1px 8px;margin-left:6px;vertical-align:2px;}

/* ── v204: schedule cards — Ratings cell replaced by a full Description cell ── */
.pcard-cell-desc{flex:2.4;justify-content:flex-start;}
.pc-desc{white-space:normal;text-overflow:clip;font-size:11px;font-weight:400;line-height:1.4;max-height:108px;overflow-y:auto;padding-right:4px;scrollbar-width:thin;}
@media(max-width:1160px){
  .pcard-cell-desc{flex:1 1 100%;}
  .pc-desc{max-height:150px;}
}

/* ── v219: schedule compact rows — bigger photo, one header row, worksection
   bands. Everything here is scoped to #sch-cards: the Material Library grid
   reuses .pcard and must keep its own captions and proportions. ── */
#sch-cards .pcard{border-left:3px solid var(--border);}
#sch-cards .pcard.row-status-not-started{border-left-color:#ECC5C6;}
#sch-cards .pcard.row-status-drafted    {border-left-color:#E8C98A;}
#sch-cards .pcard.row-status-reviewed   {border-left-color:#93C29B;}
#sch-cards .pcard.row-status-approved   {border-left-color:#5CA36A;}
#sch-cards .pcard.row-status-issued     {border-left-color:#3D4854;}
#sch-cards .pcard.row-status-on-hold    {border-left-color:#D9A7A8;}
/* The photo is the point of a card view — 88px, up from 66px. */
#sch-cards .pcard-thumb{width:112px;padding:12px;}
#sch-cards .pcard-img{width:88px;height:88px;border-radius:11px;}
#sch-cards .pcard-img-ph{font-size:26px;}
/* Tighter cells claw back the height the bigger photo costs. */
#sch-cards .pcard-cell{padding:11px 14px;}
#sch-cards .pcard-side{padding:11px 16px;gap:9px;}
/* Column proportions and the shorter description belong to the WIDE layout
   only. Below 1160px the card wraps to a stack, where an id-scoped flex ratio
   would out-specify .pcard-cell{flex:1 1 33%} and squeeze NATSPEC to a sliver,
   and the 84px description would undercut v204's roomier 150px. */
@media(min-width:1160.02px){
  #sch-cards .pcard-cell-ns{flex:.9;}
  #sch-cards .pc-desc{max-height:84px;}
}

/* Column labels, shown once. Sticky over the list; the negative margin pulls it
   into .sch-cards' own 16px top padding so nothing scrolls through the gap. */
.sch-colhdr{position:sticky;top:-16px;z-index:4;display:flex;align-items:flex-end;
  background:var(--bg);margin:-16px 0 0;padding:16px 0 7px;
  border-left:3px solid transparent;border-right:1px solid transparent;flex-shrink:0;}
.sch-colhdr>span{font-family:var(--font-mono);font-size:9px;letter-spacing:.09em;
  text-transform:uppercase;color:var(--muted);min-width:0;white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis;}
.sch-colhdr .ch-thumb{width:112px;flex-shrink:0;}
.sch-colhdr .ch-cell{flex:1;padding:0 14px;border-left:1px solid transparent;}
.sch-colhdr .ch-id{flex:1.7;border-left:none;}
.sch-colhdr .ch-ns{flex:.9;}
.sch-colhdr .ch-desc{flex:2.4;}
.sch-colhdr .ch-side{width:196px;flex-shrink:0;padding:0 16px;text-align:right;}
/* With the header row present, the per-cell captions are duplication — except
   the one under the product name, which carries the WORKSECTION. That is data
   the "Product" header does not repeat, and losing it silently would hide a
   "No worksection assigned" warning. It stays unless a band is showing it. */
@media(min-width:1160.02px){
  #sch-cards .pcard .pc-cap{display:none;}
  #sch-cards:not(.has-bands) .pcard-cell-id .pc-cap{display:block;}
}
/* Below 1160px the card wraps into a stack — captions come back, header goes. */
@media(max-width:1160px){
  .sch-colhdr{display:none;}
  #sch-cards .pcard-body{flex-basis:calc(100% - 112px);}
}

/* Worksection bands */
.pws{display:flex;flex-direction:column;gap:8px;flex-shrink:0;}
.pws-hdr{display:flex;align-items:center;gap:10px;padding:7px 13px;border-radius:9px;
  cursor:pointer;user-select:none;transition:filter .12s;}
.pws-hdr:hover{filter:brightness(.97);}
.pws-caret{font-size:9px;color:var(--slate-d);opacity:.55;width:9px;flex-shrink:0;}
.pws-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0;}
.pws-code{font-family:var(--font-mono);font-size:11px;font-weight:500;color:var(--dark);letter-spacing:.02em;flex-shrink:0;}
.pws-title{font-size:12.5px;font-weight:600;color:var(--dark);flex:1;min-width:0;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.pws-count{font-size:11px;color:var(--slate-d);opacity:.75;white-space:nowrap;flex-shrink:0;}
.pws-bar{width:76px;height:5px;border-radius:3px;background:rgba(255,255,255,.72);overflow:hidden;flex-shrink:0;}
.pws-bar>span{display:block;height:100%;border-radius:3px;}
.pws-pct{font-family:var(--font-mono);font-size:10px;color:var(--slate-d);opacity:.8;width:34px;text-align:right;flex-shrink:0;}
.pws-items{display:flex;flex-direction:column;gap:8px;}
/* .psec .pcard carries an 8px margin that the band's own gap replaces. Dropping
   it leaves the NEXT band's header touching the previous band's last card —
   .sch-cards' gap only separates top-level children, not bands within a section. */
.pws-items .pcard{margin-bottom:0;}
.psec .pws + .pws{margin-top:10px;}
.pws.collapsed .pws-items{display:none;}
@media(max-width:900px){ .pws-bar,.pws-pct{display:none;} }

/* ── v219: Add launcher — two equal doors (build one / bring many) ── */
/* The 780px wrap suits the full form; two side-by-side cards want more room.
   Widen only while the launcher is up. Browsers without :has() simply keep
   780px — tighter, still correct. */
.add-wrap:has(> #add-launcher:not(.hidden)){max-width:940px;}
.add-launcher{grid-template-columns:repeat(2,minmax(0,1fr));gap:18px;align-items:stretch;}
.addb-card{display:flex;flex-direction:column;background:var(--surface);border:1px solid var(--border);
  border-radius:16px;padding:24px 26px;box-shadow:0 1px 3px rgba(42,50,58,.04),0 4px 14px rgba(42,50,58,.05);}
.addb-card-alt{background:var(--blush-bg);border-color:rgba(0,0,0,.04);}
.addb-kicker{font-family:var(--font-mono);font-size:9px;letter-spacing:.14em;text-transform:uppercase;color:var(--slate);margin-bottom:4px;}
.addb-kicker.alt{color:#A08183;}
.addb-title{font-family:var(--font-display);font-size:19px;font-weight:500;letter-spacing:-.3px;color:var(--dark);margin-bottom:16px;}
.addb-card .lbl{margin-bottom:5px;}
.addb-card input[type=text]{width:100%;margin-bottom:12px;}
.addb-opt{font-weight:400;text-transform:none;letter-spacing:0;color:var(--muted);}
.addb-detect{font-size:11px;font-style:italic;color:var(--accent-dk);font-weight:600;min-height:0;margin:-8px 0 12px;}
.addb-detect:not(.on){display:none;}
.addb-detect.dim{color:var(--muted);font-weight:500;}
.addb-pills{display:flex;gap:6px;margin-bottom:6px;}
.addb-pill{flex:1;padding:9px 0;border:1px solid var(--border);border-radius:9999px;background:var(--surface);
  color:var(--text);font-family:var(--font);font-size:12px;font-weight:600;cursor:pointer;transition:all .12s;}
.addb-pill:hover{border-color:var(--dark);}
.addb-pill.on{background:var(--dark);color:#FCFBF9;border-color:var(--dark);}
.addb-spacer{flex:1;min-height:14px;}
.addb-go{width:100%;justify-content:center;}
.addb-note{font-size:11px;color:var(--muted);text-align:center;margin-top:9px;line-height:1.5;}
.addb-link{background:none;border:none;padding:0;font:inherit;color:var(--accent-dk);font-weight:600;cursor:pointer;text-decoration:underline;}
#addb-err:empty{display:none;}
#addb-err{margin-bottom:9px;}
/* Drop zone */
.addb-drop{display:block;text-align:center;border:1.5px dashed var(--blush-rose);border-radius:12px;
  background:rgba(255,255,255,.6);padding:24px 20px;margin-bottom:15px;cursor:pointer;color:#B8797B;
  transition:background .12s,border-color .12s;}
.addb-drop:hover,.addb-drop.over{background:rgba(255,255,255,.95);border-color:#B8797B;}
.addb-drop svg{margin-bottom:8px;}
.addb-drop-t{font-size:13.5px;font-weight:600;color:var(--text);margin-bottom:4px;}
.addb-drop-d{font-size:11.5px;color:var(--muted);line-height:1.55;}
/* Secondary routes */
.addb-rows{display:flex;flex-direction:column;gap:9px;}
.addb-row{display:flex;align-items:center;gap:12px;width:100%;text-align:left;background:var(--surface);
  border:1px solid transparent;border-radius:11px;padding:12px 15px;cursor:pointer;color:var(--text);
  font-family:var(--font);transition:border-color .12s;}
.addb-row:hover{border-color:var(--border-strong);}
.addb-row>svg{flex-shrink:0;color:var(--slate-d);}
.addb-row-tx{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px;}
.addb-row-t{font-size:12.5px;font-weight:600;}
.addb-row-d{font-size:11px;color:var(--muted);line-height:1.4;}
.addb-row-go{color:var(--muted);font-size:13px;}
@media(max-width:900px){ .add-launcher{grid-template-columns:1fr;} }

/* ── v206: accounts — welcome gate, share modal, invites banner ── */
.auth-card{max-width:400px;padding:28px 30px;display:flex;flex-direction:column;gap:10px;}
.auth-brand{display:flex;align-items:center;gap:8px;font-family:var(--font-display);font-size:20px;font-weight:800;letter-spacing:-.4px;}
.auth-brand span{color:var(--accent-dk);}
.auth-title{font-size:19px;font-weight:800;letter-spacing:-.3px;margin-top:6px;}
.auth-sub{font-size:12px;color:var(--muted);line-height:1.55;margin-bottom:6px;}
.auth-error{font-size:12px;color:var(--coral);font-weight:600;background:rgba(224,90,70,.08);border-radius:8px;padding:8px 10px;}
.auth-go{width:100%;padding:11px;font-size:13px;margin-top:2px;}
.auth-switch{font-size:12px;color:var(--muted);text-align:center;}
.auth-switch a{color:var(--accent-dk);font-weight:700;text-decoration:none;}
.auth-skip{font-size:11px;text-align:center;margin-top:2px;}
.auth-skip a{color:var(--muted);text-decoration:underline;}
/* Top-bar Share button — matches the other top-bar pills (light surface,
   dark text, subtle shadow, accent hover). The old white-on-transparent style
   was invisible against the light top bar. */
.share-btn{border:none;background:var(--surface);color:var(--dark);border-radius:9999px;padding:6px 15px;font-size:12px;font-weight:600;cursor:pointer;font-family:var(--font);box-shadow:0 1px 2px rgba(0,0,0,.10),0 0 0 1px rgba(0,0,0,.07);transition:all .12s;}
.share-btn:hover{background:var(--accent);color:var(--dark);}
.invites-banner{display:flex;flex-direction:column;gap:8px;padding:10px 16px 0;}
.inv-row{display:flex;align-items:center;gap:12px;flex-wrap:wrap;background:var(--accent-l);border:1px solid var(--accent);border-radius:10px;padding:10px 14px;font-size:12.5px;}
.inv-row>span:first-child{flex:1;min-width:200px;}
.inv-actions{display:flex;gap:6px;}
.shr-list{display:flex;flex-direction:column;gap:6px;margin-bottom:12px;}
.shr-row{display:flex;align-items:center;gap:10px;border:1px solid var(--border);border-radius:9px;padding:8px 12px;font-size:12.5px;}
.shr-who{flex:1;font-weight:600;display:flex;flex-direction:column;}
.shr-mail{font-weight:400;font-size:11px;color:var(--muted);}
.shr-role{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--accent-dk);background:var(--accent-l);border-radius:8px;padding:2px 8px;}
.shr-pending{opacity:.75;border-style:dashed;}
.shr-invite{display:flex;gap:8px;}
.shr-invite input{flex:1;}
.acct-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:13px;}

/* ── v208: email verification banner ── */
.verify-banner{display:flex;align-items:center;gap:12px;flex-wrap:wrap;background:var(--amber-l,#fdf1d6);color:var(--amber,#8a5a12);border:1px solid var(--amber,#d8b877);border-radius:10px;padding:10px 14px;margin:10px 16px 0;font-size:12.5px;}
.verify-banner>span:first-child{flex:1;min-width:200px;}

/* ── v211: profile button, avatars, role chips ── */
.profile-btn{display:inline-flex;align-items:center;gap:7px;border:none;background:var(--surface);color:var(--dark);border-radius:9999px;padding:4px 12px 4px 4px;cursor:pointer;font-family:var(--font);font-size:12px;font-weight:600;box-shadow:0 1px 2px rgba(0,0,0,.10),0 0 0 1px rgba(0,0,0,.07);transition:all .12s;max-width:190px;}
.profile-btn:hover{background:var(--accent);}
.profile-btn-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.avatar{display:inline-flex;align-items:center;justify-content:center;border-radius:50%;background-size:cover;background-position:center;font-weight:700;flex-shrink:0;overflow:hidden;line-height:1;}
.avatar-sm{width:26px;height:26px;font-size:10.5px;}
.avatar-lg{width:84px;height:84px;font-size:30px;box-shadow:0 0 0 1px var(--border);}
.avatar-lg-inner{width:84px;height:84px;font-size:30px;}
.shr-row .avatar{margin-right:2px;}
.shr-btn{border:1px solid var(--border);background:var(--surface);color:var(--dark);border-radius:8px;padding:3px 9px;font-size:10.5px;font-weight:600;cursor:pointer;font-family:var(--font);transition:all .12s;}
.shr-btn:hover{background:var(--bg-2);border-color:var(--dark);}
.shr-role-owner{background:var(--dark);color:var(--surface);}
.shr-role-admin{background:var(--accent);color:var(--dark);}
.shr-role-editor{background:var(--bg-2);color:var(--muted);}

/* ── v215: password rule checklist ── */
.pw-rules{display:flex;flex-wrap:wrap;gap:4px 12px;font-size:11px;color:var(--muted);margin:-2px 0 2px;}
.pw-rule{white-space:nowrap;}
.pw-rule-ok{color:var(--green);font-weight:600;}

/* ── v217: first-run "Getting started" welcome (dashboard) ── */
.dash-gs-link{margin-bottom:14px;}
.dash-gs-link a{font-size:12px;color:var(--accent-3);font-weight:600;text-decoration:none;font-family:var(--font);}
.dash-gs-link a:hover{color:var(--olive-taupe-d);text-decoration:underline;}
.gs-hero{position:relative;background:var(--blush-bg);border-radius:14px;padding:32px 36px;overflow:hidden;margin-bottom:20px;}
.gs-hero-blob{position:absolute;right:-30px;top:-40px;width:220px;height:220px;border-radius:50%;background:var(--blush-rose-l);opacity:.6;}
.gs-hero-in{position:relative;max-width:600px;}
.gs-eyebrow{font-family:var(--font-mono);font-size:9px;letter-spacing:.14em;text-transform:uppercase;color:#A08183;margin-bottom:10px;}
.gs-title{font-family:var(--font-display);font-size:30px;font-weight:400;letter-spacing:-.6px;line-height:1.12;margin:0 0 8px;text-wrap:balance;}
.gs-sub{font-size:13.5px;color:var(--muted);margin:0 0 16px;line-height:1.6;}
.gs-progress{height:6px;border-radius:3px;background:rgba(255,255,255,.7);overflow:hidden;max-width:360px;}
.gs-progress span{display:block;height:100%;background:var(--olive-taupe);border-radius:3px;transition:width .3s;}
.gs-dismiss{position:absolute;top:14px;right:14px;width:28px;height:28px;border-radius:50%;border:none;background:rgba(255,255,255,.6);color:var(--muted);font-size:12px;cursor:pointer;line-height:1;transition:all .12s;}
.gs-dismiss:hover{background:#fff;color:var(--dark);}
.gs-cards{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px;}
.gs-card{background:var(--surface);border:1px solid rgba(0,0,0,.04);border-radius:14px;padding:20px;box-shadow:0 1px 3px rgba(42,50,58,.04),0 4px 14px rgba(42,50,58,.06);display:flex;flex-direction:column;}
.gs-card-now{border:1.5px solid var(--dark);box-shadow:0 2px 6px rgba(42,50,58,.08),0 6px 18px rgba(42,50,58,.08);}
.gs-card-done{opacity:.62;}
.gs-badge{width:28px;height:28px;border-radius:50%;border:1.5px solid var(--border-strong);color:var(--muted);display:inline-flex;align-items:center;justify-content:center;margin-bottom:12px;font-size:12.5px;font-weight:600;font-family:var(--font);}
.gs-badge-now{border:none;background:var(--blush-rose-l);color:var(--dark);}
.gs-badge-done{border:none;background:var(--olive-taupe-l);}
.gs-card-t{font-family:var(--font-display);font-size:15px;font-weight:500;letter-spacing:-.1px;margin-bottom:4px;}
.gs-card-done .gs-card-t{text-decoration:line-through;color:var(--muted);}
.gs-card-s{font-size:11.5px;color:var(--muted);line-height:1.5;flex:1;}
.gs-card-act{margin-top:14px;}
.gs-card-act .btn,.gs-card-act .btn-ghost{width:100%;justify-content:center;padding:8px 0;font-size:12px;}
.gs-acts{display:flex;gap:7px;}
.gs-acts .btn,.gs-acts .btn-ghost{flex:1;padding:8px 0;font-size:11.5px;}
@media(max-width:1100px){ .gs-cards{grid-template-columns:repeat(2,minmax(0,1fr));} .gs-title{font-size:25px;} }

/* ── v218: full-screen onboarding (split pitch + form) ── */
.auth-screen{position:fixed;inset:0;z-index:9000;display:flex;background:var(--surface);}
.auth-screen.hidden{display:none;}
.auth-pitch{width:420px;flex-shrink:0;background:var(--blush-bg);padding:44px 40px;display:flex;flex-direction:column;justify-content:space-between;position:relative;overflow:hidden;}
.auth-pitch-brand{display:flex;align-items:center;gap:9px;font-family:var(--font-display);font-size:19px;font-weight:500;letter-spacing:-.3px;color:var(--dark);}
.auth-pitch-brand span{color:var(--accent-3);}
.auth-pitch-mid{position:relative;}
.auth-pitch-eyebrow{font-family:var(--font-mono);font-size:9px;letter-spacing:.14em;text-transform:uppercase;color:#A08183;margin-bottom:14px;}
.auth-pitch-h1{font-family:var(--font-display);font-size:38px;font-weight:400;line-height:1.14;letter-spacing:-.8px;margin:0 0 18px;text-wrap:balance;color:var(--dark);}
.auth-pitch-p{font-size:14px;line-height:1.65;color:var(--muted);margin:0 0 30px;max-width:320px;}
.auth-pitch-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:13px;}
.auth-pitch-list li{display:flex;align-items:flex-start;gap:11px;font-size:13.5px;line-height:1.5;color:#4A5560;}
.auth-pitch-list svg{flex-shrink:0;margin-top:1px;color:var(--accent-3);}
.auth-pitch-foot{font-size:11.5px;color:#9BA3AC;line-height:1.6;max-width:300px;}
.auth-main{flex:1;display:flex;align-items:center;justify-content:center;padding:40px 56px;position:relative;overflow-y:auto;}
.auth-panel{width:100%;max-width:372px;}
.auth-close{position:absolute;top:20px;right:24px;width:30px;height:30px;border-radius:50%;border:none;background:var(--bg-2);color:var(--muted);font-size:13px;cursor:pointer;line-height:1;transition:all .12s;}
.auth-close:hover{background:var(--border);color:var(--dark);}
/* the form itself */
#auth-form > div{margin-bottom:12px;}
#auth-form .auth-title{font-family:var(--font-display);font-size:25px;font-weight:500;letter-spacing:-.3px;margin-bottom:6px;}
#auth-form .auth-sub{font-size:13px;color:var(--muted);margin-bottom:24px;line-height:1.55;}
#auth-form .lbl{display:block;margin-bottom:6px;}
#auth-forgot a{color:var(--muted);text-decoration:underline;}
.auth-go{width:100%;justify-content:center;padding:12px;font-size:13.5px;font-weight:600;margin-top:4px;}
.auth-switch{font-size:12.5px;color:var(--muted);text-align:center;margin-top:14px;}
.auth-switch a{color:var(--accent-3);font-weight:600;text-decoration:none;}
.auth-skip{font-size:11px;text-align:center;margin-top:18px;padding-top:16px;border-top:1px solid var(--border);}
.auth-skip a{color:#9BA3AC;text-decoration:underline;}
/* flow screens (check email / verify / reset) rendered in the same panel */
.auth-flow{text-align:center;}
.auth-flow-icon{width:60px;height:60px;border-radius:50%;display:flex;align-items:center;justify-content:center;margin:0 auto 20px;}
.auth-flow-icon-mail{background:var(--blush-rose-l);color:#B8797B;}
.auth-flow-icon-ok{background:var(--olive-taupe-l);color:#5C6B45;}
.auth-flow h3{font-family:var(--font-display);font-size:25px;font-weight:500;letter-spacing:-.3px;margin:0 0 8px;}
.auth-flow p{font-size:13.5px;color:var(--muted);line-height:1.6;margin:0 0 14px;}
.auth-flow .auth-flow-addr{font-size:14px;font-weight:600;color:var(--text);margin:0 0 16px;word-break:break-all;}
.auth-flow .btn,.auth-flow .btn-ghost{width:100%;justify-content:center;padding:11px;font-size:13px;margin-bottom:9px;}
.auth-flow-msg{font-size:12px;min-height:17px;margin-top:6px;}
.auth-flow-alt{margin-top:12px;font-size:11.5px;}
.auth-flow-alt a{color:#9BA3AC;text-decoration:underline;}
@media(max-width:900px){
  .auth-pitch{display:none;}
  .auth-main{padding:28px 22px;}
}

/* ══ v220 — prototype UI: blush tooltips + Dashboard option A ══════════════ */

/* Hover tooltips. The explanations live here, not on the page. Put class "tip"
   and data-tip="…" on any element. Blush, with the border doing the separating:
   the fill is only 1.08 contrast against the blush surfaces used on Add. */
.tip{position:relative;}
.tip::after{
  content:attr(data-tip);
  position:absolute;left:50%;top:calc(100% + 9px);transform:translateX(-50%);
  background:#F5DEDE;color:#7A4245;border:1px solid #D9A0A2;
  font-family:var(--font);font-size:11.5px;font-weight:400;line-height:1.45;
  letter-spacing:0;text-transform:none;text-align:left;
  padding:7px 11px;border-radius:8px;
  width:max-content;max-width:232px;white-space:normal;
  pointer-events:none;opacity:0;transition:opacity .12s;z-index:1200;
  box-shadow:0 3px 14px rgba(122,66,69,.18);
}
.tip::before{
  content:'';position:absolute;left:50%;top:calc(100% + 4px);
  transform:translateX(-50%);border:5px solid transparent;border-bottom-color:#D9A0A2;
  pointer-events:none;opacity:0;transition:opacity .12s;z-index:1200;
}
.tip:hover::after,.tip:hover::before{opacity:1;}
.tip.up::after{top:auto;bottom:calc(100% + 9px);}
.tip.up::before{top:auto;bottom:calc(100% + 4px);border-bottom-color:transparent;border-top-color:#D9A0A2;}
.tip.left::after{left:auto;right:0;transform:none;}
.tip.left::before{left:auto;right:14px;transform:none;}
/* Anchored to the LEFT edge instead of centred. A 232px bubble centred on a
   control sitting at the left edge of the pane overhangs it by ~24px, and
   .view / .main / .modal are all overflow:hidden — the overhang is cut off,
   not scrolled to. Measured at 1440: #sch-tab-arch's bubble ran to x=196
   inside a pane that clips at x=220. */
.tip.right::after{left:0;right:auto;transform:none;}
.tip.right::before{left:14px;right:auto;transform:none;}
/* Touch devices have no hover — never leave a bubble stuck open. */
@media (hover:none){ .tip::after,.tip::before{display:none;} }
/* Auto-fit (ui-refresh.js): on hover the bubble is measured against the
   nearest overflow box (.view, .scroll, modal body…) and nudged sideways via
   --tip-dx, or flipped, so the blush bubble is never cut off. Pure opt-in:
   with no hover handler the values below are 0 / absent and nothing moves. */
.tip::after{translate:var(--tip-dx,0px) 0;}
.tip.tip-autoup::after{top:auto;bottom:calc(100% + 9px);}
.tip.tip-autoup::before{top:auto;bottom:calc(100% + 4px);border-bottom-color:transparent;border-top-color:#D9A0A2;}
.tip.up.tip-autodown::after{bottom:auto;top:calc(100% + 9px);}
.tip.up.tip-autodown::before{bottom:auto;top:calc(100% + 4px);border-top-color:transparent;border-bottom-color:#D9A0A2;}

/* ── Dashboard, option A: cap and centre ── */
.dash2-head{display:flex;align-items:center;gap:11px;flex-wrap:wrap;padding:14px 0 0;}
.dash2-head .dash2-title{margin:0;font-size:30px;letter-spacing:-.6px;}
.dash2-head .dash2-pills{margin-top:0;}
.dash2-head-sp{flex:1;}
.dash2-acts{display:flex;align-items:center;gap:8px;flex-shrink:0;}
.dash2-top{gap:16px;padding:16px 0 0;border-bottom:none;align-items:stretch;}
.dash2-hero{width:342px;height:206px;border-radius:13px;overflow:visible;}
.dash2-hero-inner{border-radius:13px;overflow:hidden;background:var(--bg-2);
  box-shadow:0 0 0 1px var(--border) inset;}
.dash2-infocard{flex:1;min-width:280px;background:var(--surface);border:1px solid #E8EDF2;
  border-radius:13px;padding:15px 20px;box-shadow:0 1px 3px rgba(42,50,58,.04),0 4px 14px rgba(42,50,58,.06);
  display:flex;flex-direction:column;}
.dash2-infocard-hd{display:flex;align-items:center;gap:10px;margin-bottom:11px;
  font-family:var(--font-display);font-size:16px;font-weight:500;letter-spacing:-.25px;color:var(--dark);}
.dash2-infocard-hd button{margin-left:auto;padding:4px 12px;font-size:11.5px;}
.dash2-infocard #dash-pinfo .pi-dash-grid{grid-template-columns:1fr 1fr;column-gap:26px;row-gap:10px;}
.dash2-infocard .pi-dash-k{font-family:var(--font-mono);font-size:8.5px;letter-spacing:.12em;
  text-transform:uppercase;color:var(--faint,#A8AEB6);}
.dash2-infocard .pi-dash-v{font-size:12.5px;color:var(--text);margin-top:2px;}

/* Three numbers as one divided band. */
.dash2-stats{margin-top:16px;padding:0;border-bottom:none;background:var(--surface);
  border:1px solid #E8EDF2;border-radius:13px;overflow:hidden;flex-wrap:nowrap;
  box-shadow:0 1px 3px rgba(42,50,58,.04),0 4px 14px rgba(42,50,58,.06);}
.dash2-stats .dstat{flex:1;min-width:0;padding:15px 22px;border-left:1px solid #E8EDF2;border-top:none;display:flex;flex-direction:column;}
.dash2-stats .dstat:first-child{border-left:none;}
.dash2-stats .dstat-l{font-family:var(--font-mono);font-size:9px;letter-spacing:.13em;
  text-transform:uppercase;color:var(--faint,#A8AEB6);margin-top:0;}
.dash2-stats .dstat-n{font-family:var(--font-display);font-size:34px;font-weight:400;
  letter-spacing:-.9px;line-height:1.1;margin-top:3px;}
.dash2-stats .dstat-sub{font-size:12px;color:var(--muted);margin-top:4px;}

.dash2-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:16px;}
.dash2-card{background:var(--surface);border:1px solid #E8EDF2;border-radius:13px;padding:16px 20px;
  box-shadow:0 1px 3px rgba(42,50,58,.04),0 4px 14px rgba(42,50,58,.06);
  display:flex;flex-direction:column;min-width:0;}
.dash2-card-hd{display:flex;align-items:center;gap:8px;margin-bottom:12px;
  font-family:var(--font-display);font-size:16px;font-weight:500;letter-spacing:-.25px;color:var(--dark);}
.dash2-help{width:15px;height:15px;border-radius:50%;background:var(--warm,#F1EDE6);color:var(--olive-taupe,#837D68);
  font-size:10px;font-weight:700;display:inline-flex;align-items:center;justify-content:center;cursor:help;
  font-family:var(--font);margin-left:auto;}
.dash2-card-hd .dash2-help:first-of-type{margin-left:0;}

/* Separated donut + legend. Blush-to-sage: the statuses are an ordered
   sequence, so the ramp itself reads as progress. */
.dash2-donutwrap{display:flex;align-items:center;gap:24px;flex:1;min-height:0;}
.dash2-donut{width:146px;height:146px;border-radius:50%;flex-shrink:0;
  display:flex;align-items:center;justify-content:center;}
.dash2-donut-hole{width:98px;height:98px;border-radius:50%;background:var(--surface);
  display:flex;flex-direction:column;align-items:center;justify-content:center;}
.dash2-donut-n{font-family:var(--font-display);font-size:27px;font-weight:400;line-height:1;letter-spacing:-.5px;}
.dash2-donut-l{font-family:var(--font-mono);font-size:8px;letter-spacing:.1em;text-transform:uppercase;
  color:var(--muted);margin-top:3px;}
.dash2-legend{flex:1;min-width:0;display:flex;flex-direction:column;gap:9px;}
.dash2-lg{display:flex;align-items:center;gap:9px;}
.dash2-lg-sw{width:9px;height:9px;border-radius:2px;flex-shrink:0;box-shadow:inset 0 0 0 1px rgba(42,50,58,.10);}
.dash2-lg-l{flex:1;font-size:12.5px;color:var(--slate-d,#3D4854);white-space:nowrap;}
.dash2-lg-n{font-family:var(--font-mono);font-size:11.5px;color:var(--text);}

.dash2-recent{gap:13px;}
.dash2-card .dash-recent-item{padding:4px 6px;border:none;background:none;border-radius:7px;}
.dash2-card .dash-recent-item:hover{background:var(--bg-2);}

@media(max-width:1000px){
  .dash2-grid{grid-template-columns:1fr;}
  .dash2-top{flex-wrap:wrap;}
  .dash2-hero{width:100%;}
  .dash2-stats{flex-wrap:wrap;}
  .dash2-stats .dstat{flex:1 1 100%;border-left:none;border-top:1px solid #E8EDF2;}
  .dash2-stats .dstat:first-child{border-top:none;}
}

/* ══ ADD — two doors, live worksection read-out, Just added strip ══════════
   Ported from design/ui/Add.dc.html. Reconciles the v219 .addb-* launcher
   with the board: the pair is capped at 980 and centred on both axes, the
   detect line becomes a read-out with its own Change control, and what has
   just gone in sits on one strip underneath.
   Cascade notes (checked against the rules above this block):
   · .view h1 sets font-family !important + font-weight 300 + letter-spacing
     -1px at (0,1,1). #view-add .addb-h1 (1,1,0) is what actually wins here.
   · label.lbl (0,1,1) outranks .lbl (0,1,0); .addb-card .lbl (0,2,0) beats
     both, and beats the earlier .addb-card .lbl margin rule on source order.
   · .addb-detect:not(.on){display:none} still exists above — the read-out is
     always on screen, so it is overridden explicitly, not by adding a class.
   · input:focus{background:var(--accent-l)} is (0,1,1); the scoped
     .addb-card input[type=text]:focus (0,2,2) keeps the field white.
   · Board hexes are used literally (as the v220 Dashboard block does) so the
     two ported screens agree. #3D4854 / #6E7F5C are NOT bulk-replaced. */

/* Cap and centre. Vertical centring degrades to top-aligned the moment the
   content is taller than the pane — never clip the title off the top. */
#view-add .scroll{display:flex;flex-direction:column;justify-content:center;padding:26px 32px;}
@supports (justify-content:safe center){ #view-add .scroll{justify-content:safe center;} }
/* margin:0 auto on .add-wrap makes both cross-axis margins auto, which switches
   OFF the flex stretch — without width:100% the column collapses to fit-content
   (measured 685px) and the 980 cap never binds. */
#view-add .add-wrap{width:100%;}
.add-wrap:has(> #add-launcher:not(.hidden)){max-width:980px;}

/* Page title row */
.addb-head{display:flex;align-items:flex-start;gap:16px;margin-bottom:26px;}
.addb-head-tx{flex:1;min-width:0;}
#view-add .addb-h1{font-size:27px;font-weight:400;letter-spacing:-.5px;line-height:1.15;margin:0 0 3px;color:var(--dark);}
.addb-sub{font-size:12.5px;color:#6B7480;margin:0;}
.addb-sub-b.hidden{display:none;}
.addb-sep{margin:0 6px;color:#C7CDD4;}
.addb-switch{flex-shrink:0;background:#fff;border:none;border-radius:9999px;padding:8px 15px;font-size:12.5px;font-weight:500;color:var(--dark);letter-spacing:0;box-shadow:0 1px 2px rgba(0,0,0,.1),0 0 0 1px rgba(0,0,0,.07);}
.addb-switch:hover{background:#F7F7F7;}

/* The pair */
.add-launcher{column-gap:24px;row-gap:22px;}
.addb-card{border-color:#E8EDF2;border-radius:14px;padding:26px 28px;box-shadow:0 1px 3px rgba(42,50,58,.04),0 4px 14px rgba(42,50,58,.06);}
.addb-card-alt{background:#F5E9E7;border-color:rgba(0,0,0,.035);}
.addb-title{font-size:21px;font-weight:500;letter-spacing:-.35px;margin-bottom:22px;}
.addb-card .lbl{font-family:var(--font-mono);font-size:10px;font-weight:400;letter-spacing:.09em;text-transform:uppercase;color:#6B7480;margin:24px 0 7px;}
.addb-card .addb-title + .lbl{margin-top:0;}
.addb-fw{display:block;}
.addb-card input[type=text]{width:100%;margin-bottom:0;padding:11px 13px;border:1px solid #D2DAE3;border-radius:9px;font-size:13.5px;font-weight:400;background:#fff;}
.addb-card input[type=text]:hover:not(:focus){border-color:#8A9DB1;}
.addb-card input[type=text]:focus{border-color:#8A9DB1;background:#fff;box-shadow:0 0 0 3px rgba(138,157,177,.13);}

/* Live worksection read-out — advisory until the user picks one, and then
   their pick is authoritative. Nothing here writes to the item. */
.addb-detect,.addb-detect:not(.on){display:flex;align-items:center;gap:9px;
  background:#F7F7F7;border:1px solid #E8EDF2;border-radius:10px;
  padding:9px 10px 9px 12px;margin:10px 0 0;font-size:12.5px;font-style:normal;
  font-weight:400;color:var(--text);min-height:40px;}
.addb-det-ic{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:14px;height:14px;}
.addb-det-dot{width:8px;height:8px;border-radius:50%;background:#C7CDD4;}
.addb-det-code{font-family:var(--font-mono);font-size:11px;color:#2A323A;background:#fff;border:1px solid #E8EDF2;border-radius:6px;padding:1px 8px;flex-shrink:0;cursor:help;}
.addb-det-t{flex:1;min-width:0;font-size:12.5px;font-weight:600;color:#2A323A;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.addb-detect.dim .addb-det-t{font-weight:500;color:#6B7480;}
.addb-chg{flex-shrink:0;background:#fff;border:none;border-radius:9999px;padding:5px 12px;font-family:var(--font);font-size:10.5px;font-weight:600;color:#4D4936;cursor:pointer;box-shadow:0 1px 2px rgba(0,0,0,.1),0 0 0 1px rgba(0,0,0,.07);}
.addb-chg:hover{background:#F7F7F7;}
.addb-nssel{margin-top:8px;padding:9px 11px;border:1px solid #8A9DB1;border-radius:9px;font-size:12.5px;background:#fff;}
.addb-nssel.hidden{display:none;}

/* Locations already used on this job — one tap instead of retyping. */
.addb-chips{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:9px;}
.addb-chips.hidden{display:none;}
.addb-chip-l{font-family:var(--font-mono);font-size:9px;letter-spacing:.12em;text-transform:uppercase;color:#A8AEB6;margin-right:2px;}
.addb-chip{max-width:170px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;background:#F7F7F7;border:1px solid #E8EDF2;border-radius:8px;padding:4px 10px;font-family:var(--font);font-size:11.5px;color:#3D4854;cursor:pointer;}
.addb-chip:hover{background:#fff;border-color:#8A9DB1;}

/* Destination tabs */
.addb-pills{gap:6px;margin-bottom:0;}
.addb-pill{padding:10px 0;border:none;border-radius:9999px;background:#fff;color:#2A323A;font-size:11.5px;font-weight:600;box-shadow:0 1px 2px rgba(0,0,0,.1),0 0 0 1px rgba(0,0,0,.07);}
.addb-pill:hover{background:#F7F7F7;}
.addb-pill.on{background:#2A323A;color:#FCFBF9;box-shadow:0 1px 2px rgba(0,0,0,.2),0 0 0 1px rgba(0,0,0,.1);}
.addb-pill.on:hover{background:#2A323A;}

.addb-spacer{flex:1;min-height:28px;}
.addb-go{width:100%;justify-content:center;padding:13px;border-radius:9999px;background:#2A323A;border-color:#2A323A;color:#FCFBF9;font-size:13.5px;font-weight:600;letter-spacing:0;box-shadow:0 1px 2px rgba(0,0,0,.2),0 0 0 1px rgba(0,0,0,.1);}
.addb-note{margin-top:13px;font-size:11.5px;}
.addb-link{font-size:11.5px;font-weight:600;color:#4D4936;}

/* Drop zone — grows so the blush card never shows dead space. */
.addb-drop{flex:1;min-height:150px;display:flex;flex-direction:column;align-items:center;justify-content:center;
  border:1.5px dashed #C9A9AA;border-radius:12px;background:rgba(255,255,255,.62);padding:20px;margin-bottom:16px;color:#B8797B;}
.addb-drop:hover,.addb-drop.over{background:rgba(255,255,255,.95);border-color:#B8797B;}
.addb-drop svg{margin-bottom:0;}
.addb-drop-t{font-size:14px;font-weight:600;color:#2A323A;margin:13px 0 0;}
.addb-drop-d{font-family:var(--font-mono);font-size:9px;letter-spacing:.12em;text-transform:uppercase;color:#A8896F;margin-top:7px;line-height:1.4;}
.addb-drop-btn{display:inline-block;background:#fff;border-radius:9999px;padding:7px 15px;font-size:12px;font-weight:600;color:#2A323A;margin-top:17px;box-shadow:0 1px 2px rgba(0,0,0,.1),0 0 0 1px rgba(0,0,0,.07);}

/* The two secondary routes */
.addb-rows{gap:12px;}
.addb-row{padding:18px 16px;border-radius:11px;gap:12px;}
.addb-row-ic{width:32px;height:32px;border-radius:8px;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;}
.addb-row-ic-lib{background:#EDF1F6;color:#5A7290;}
.addb-row-ic-clip{background:#F1EDE6;color:#4D4936;}
.addb-row .addb-row-t{flex:1;min-width:0;font-size:13px;font-weight:600;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.addb-row-n{font-family:var(--font-mono);font-size:11.5px;color:#6B7480;flex-shrink:0;}
.addb-row .add-badge{margin-left:0;font-family:var(--font);font-size:10px;font-weight:700;background:#ECC5C6;color:#2A323A;padding:2px 8px;}
.addb-row-go{color:#9BA3AC;font-size:13px;flex-shrink:0;}

/* #last-result (showResult) is the full form's confirmation card. On the
   launcher the Just added strip IS that confirmation, and two of them is the
   "panel that restates what another panel already showed" — so the card is
   suppressed only while the launcher is up. showResult still writes it, and
   the full form and url-import still show it. */
.add-wrap > #add-launcher:not(.hidden) ~ #last-result{display:none;}

/* Just added — one line, three items, straight into the editor. */
.addb-just{grid-column:1/-1;display:flex;align-items:center;gap:14px;background:#fff;border:1px solid #E8EDF2;border-radius:14px;padding:16px 20px;box-shadow:0 1px 3px rgba(42,50,58,.04),0 4px 14px rgba(42,50,58,.06);}
.addb-just.hidden{display:none;}
.addb-just-l{font-family:var(--font-mono);font-size:9px;letter-spacing:.13em;text-transform:uppercase;color:#A8AEB6;flex-shrink:0;}
.addb-just-row{flex:1;min-width:0;display:flex;gap:14px;}
.addb-jc{flex:1;min-width:0;display:flex;align-items:center;gap:9px;height:52px;background:#F7F7F7;border:1px solid #E8EDF2;border-radius:9px;padding:0 12px;cursor:pointer;font-family:var(--font);text-align:left;}
.addb-jc:hover{background:#fff;border-color:#8A9DB1;}
.addb-jc-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0;box-shadow:inset 0 0 0 1px rgba(42,50,58,.10);}
.addb-jc-id{font-family:var(--font-mono);font-size:10px;color:#6B7480;flex-shrink:0;}
.addb-jc-n{flex:1;min-width:0;font-size:12px;color:#2A323A;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.addb-just-all{background:none;border:none;padding:0;font-family:var(--font);font-size:11.5px;font-weight:600;color:#4D4936;white-space:nowrap;cursor:pointer;flex-shrink:0;}
.addb-just-all:hover{text-decoration:underline;}

@media(max-width:900px){
  #view-add .scroll{padding:20px;}
  .addb-head{flex-wrap:wrap;}
  .addb-just{flex-wrap:wrap;}
  .addb-just-row{flex-wrap:wrap;}
  .addb-jc{flex:1 1 160px;}
}

/* ══ SCHEDULE — card view ══════════════════════════════════════════════════
   Ported from design/ui/ScheduleCards.dc.html. Keeps the v219 machinery
   (sticky column header, worksection bands, per-project collapse keys) and
   brings the surface to the board: a title row instead of a stuffed toolbar,
   underline discipline tabs, six fixed columns, a tighter row and the board's
   status-pill pairs.
   Cascade notes (each selector below was grepped before this block was added):
   · The inline <style> that defined .sch-tabs / .sch-tab lived inside
     #view-schedule and went with the markup, so those names are defined here
     and nowhere else.
   · .pcard, .pcard-cell, .pcard-side, .pc-name, .pc-cap, .pc-code and
     .pcard-status are SHARED with the Material Library grid (#lib-grid also
     carries class="sch-cards"). Every rule here is therefore scoped to
     #sch-cards or #view-schedule — never to the bare class.
   · v219's #sch-cards .pcard-thumb / .pcard-img / .pcard-cell-ns rules have the
     same (1,1,0) specificity as the ones here; these win on source order only,
     which is why they restate every property they change.
   · Fixed column widths live inside @media(min-width:1160.02px). Below that the
     card wraps into a stack via .pcard-cell{flex:1 1 33%} (0,1,0) — an
     id-scoped width would out-specify it and squeeze the stack into slivers.
   · .view h1 sets font-family !important + font-weight 300 + letter-spacing
     -1px at (0,1,1); #view-schedule .sch-h1 (1,1,0) is what actually wins for
     size/weight/tracking, and Fraunces is what we wanted from the !important.
   · input:focus{background:var(--accent-l)} is (0,1,1) — the search field is
     restated at (1,2,1) so it stays white on focus.
   · .tbl-bar is gone from the markup; its .stat-dot / .mini-progress children
     were scoped to it, so the bottom bar redefines them under .sch-foot.
   · Board hexes are literal here (as the v220 Dashboard and Add blocks are).
     #3D4854 and #6E7F5C are general ink/accent elsewhere — not bulk-replaced. */

/* ── Title row ── */
#view-schedule .sch-head{flex-shrink:0;display:flex;align-items:flex-start;gap:14px;padding:22px 32px 0;}
#view-schedule .sch-head-tx{flex:1;min-width:0;}
#view-schedule .sch-h1{font-size:27px;font-weight:400;letter-spacing:-.5px;line-height:1.1;margin:0 0 3px;color:#2A323A;}
#view-schedule .sch-sub{font-size:12.5px;color:#6B7480;margin:0;line-height:1.25;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
#view-schedule .sch-hbtn{flex-shrink:0;display:inline-flex;align-items:center;gap:7px;background:#fff;border:none;border-radius:9999px;
  padding:8px 15px;font-family:var(--font);font-size:12.5px;font-weight:500;color:#2A323A;cursor:pointer;
  box-shadow:0 1px 2px rgba(0,0,0,.1),0 0 0 1px rgba(0,0,0,.07);}
#view-schedule .sch-hbtn:hover{background:#F7F7F7;}
#view-schedule .sch-hbtn-dark{background:#2A323A;color:#FCFBF9;padding:8px 16px;font-weight:600;box-shadow:0 1px 2px rgba(0,0,0,.2),0 0 0 1px rgba(0,0,0,.1);}
#view-schedule .sch-hbtn-dark:hover{background:#3D4854;}
#view-schedule .sch-caret{opacity:.55;font-size:9px;}
#view-schedule .sch-hbtn-dark .sch-caret{opacity:.55;}
#view-schedule .sch-auditn{font-family:var(--font-mono);font-size:9.5px;color:#8A1C1C;background:#FDE7E7;border-radius:9999px;padding:1px 6px;}

/* ── Discipline tabs + list controls ── */
#view-schedule .sch-bar{position:relative;flex-shrink:0;margin-top:18px;padding:0 32px;display:flex;align-items:flex-end;gap:10px;
  border-bottom:1px solid #D2DAE3;flex-wrap:nowrap;}
#view-schedule .sch-tab{border:none;background:transparent;padding:7px 13px 10px;font-family:var(--font);font-size:13px;font-weight:500;
  color:#6B7480;border-bottom:2px solid transparent;margin-bottom:-1px;white-space:nowrap;cursor:pointer;letter-spacing:0;}
#view-schedule .sch-tab:hover{color:#2A323A;}
#view-schedule .sch-tab-n{font-family:var(--font-mono);font-size:10px;color:#B4BAC2;}
#view-schedule .sch-tab.sch-tab-active{color:#2A323A;font-weight:600;border-bottom-color:#2A323A;background:transparent;}
#view-schedule .sch-tab.sch-tab-active .sch-tab-n{color:#6B7480;}
#view-schedule .sch-bar-sp{flex:1;min-width:8px;}

#view-schedule .sch-search{position:relative;width:196px;flex-shrink:1;min-width:110px;margin-bottom:6px;}
#view-schedule .sch-search svg{position:absolute;left:11px;top:50%;transform:translateY(-50%);pointer-events:none;}
#view-schedule .sch-search input{width:100%;box-sizing:border-box;padding:6px 12px 6px 32px;border:1px solid #D2DAE3;border-radius:9999px;
  font-family:var(--font);font-size:12px;background:#F7F7F7;color:#2A323A;}
#view-schedule .sch-search input:focus{background:#fff;border-color:#8A9DB1;box-shadow:0 0 0 3px rgba(138,157,177,.13);}

#view-schedule .sch-ic{position:relative;width:30px;height:30px;border-radius:50%;border:none;background:#fff;padding:0;flex-shrink:0;
  margin-bottom:6px;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;
  box-shadow:0 1px 2px rgba(0,0,0,.1),0 0 0 1px rgba(0,0,0,.07);}
#view-schedule .sch-ic:hover{background:#F7F7F7;}
#view-schedule .sch-ic.on{background:#2A323A;}
#view-schedule .sch-ic.on svg{stroke:#FCFBF9;}
#view-schedule .sch-ic-dot{position:absolute;top:-1px;right:-1px;width:9px;height:9px;border-radius:50%;background:#B8797B;
  box-shadow:0 0 0 2px #fff;}

#view-schedule .sch-seg{display:inline-flex;background:#F1EDE6;border-radius:9999px;padding:3px;margin-bottom:6px;flex-shrink:0;}
#view-schedule .sch-seg button{border:none;background:transparent;border-radius:9999px;padding:5px 13px;font-family:var(--font);
  font-size:12px;font-weight:500;color:#6B7480;cursor:pointer;letter-spacing:0;}
#view-schedule .sch-seg button.on{background:#fff;color:#2A323A;font-weight:600;box-shadow:0 1px 2px rgba(0,0,0,.08);}

/* Filter / sort panels. No global .hidden rule exists — each component
   defines its own, so this one does too. */
#view-schedule .sch-pop{position:absolute;top:calc(100% + 7px);right:32px;z-index:30;display:flex;flex-direction:column;gap:4px;
  min-width:236px;background:#fff;border:1px solid #E8EDF2;border-radius:12px;padding:12px 14px 13px;
  box-shadow:0 10px 32px rgba(42,50,58,.14),0 2px 8px rgba(42,50,58,.07);}
#view-schedule .sch-pop.hidden{display:none;}
#view-schedule .sch-pop-l{font-family:var(--font-mono);font-size:9px;letter-spacing:.09em;text-transform:uppercase;color:#6B7480;
  margin-top:7px;}
#view-schedule .sch-pop-l:first-child{margin-top:0;}
#view-schedule .sch-pop select{width:100%;padding:7px 10px;border:1px solid #D2DAE3;border-radius:9px;background:#fff;
  font-family:var(--font);font-size:12.5px;color:#2A323A;}
#view-schedule .sch-pop-btn{margin-top:12px;background:#fff;border:none;border-radius:9999px;padding:7px 14px;font-family:var(--font);
  font-size:12px;font-weight:500;color:#2A323A;cursor:pointer;box-shadow:0 1px 2px rgba(0,0,0,.1),0 0 0 1px rgba(0,0,0,.07);}
#view-schedule .sch-pop-btn:hover{background:#F7F7F7;}

/* ── The list ── */
#sch-cards{padding:0 32px 6px;gap:8px;background:#fff;}
#sch-cards .sch-colhdr{top:0;margin:0;padding:11px 0 6px;background:#fff;}
#sch-cards .sch-colhdr>span{font-size:9px;color:#9BA3AC;}
#sch-cards .sch-colhdr .ch-thumb{width:88px;}
#sch-cards .sch-colhdr .ch-cell{flex:1;padding:0 14px;}
#sch-cards .sch-colhdr .ch-side{width:200px;padding:0 16px;text-align:right;}

/* Rows. The photo cell governs the height: 54px thumbnail in an 88px column,
   which is the board's rhythm — eight rows on a 900px screen. */
#sch-cards .pcard{border:1px solid #E8EDF2;border-radius:12px;border-left-width:3px;border-left-style:solid;}
#sch-cards .pcard:hover{border-color:#D2DAE3;box-shadow:0 6px 20px -14px rgba(42,50,58,.45);}
#sch-cards .pcard.row-status-not-started{border-left-color:#ECC5C6;}
#sch-cards .pcard.row-status-drafted    {border-left-color:#E8C98A;}
#sch-cards .pcard.row-status-reviewed   {border-left-color:#93C29B;}
#sch-cards .pcard.row-status-approved   {border-left-color:#5CA36A;}
#sch-cards .pcard.row-status-issued     {border-left-color:#3D4854;}
#sch-cards .pcard.row-status-on-hold    {border-left-color:#D9A7A8;}
#sch-cards .pcard-thumb{width:88px;padding:8px 0;}
#sch-cards .pcard-img{width:54px;height:54px;border-radius:10px;background:#F7F7F7;border:1px solid #EFEFF1;}
#sch-cards .pcard-img-ph{font-size:19px;color:#C1C0C2;}
#sch-cards .pcard-cell{padding:0 14px;border-left:none;gap:6px;justify-content:center;}
#sch-cards .pcard-body{align-items:stretch;}
/* .pc-name also carries .pc-val — same (1,1,0) specificity, so the value rule
   must come FIRST or it silently un-styles every product name. */
#sch-cards .pc-val{font-size:12.5px;font-weight:400;color:#2A323A;}
#sch-cards .pc-name{font-family:var(--font);font-size:14px;font-weight:600;letter-spacing:-.1px;line-height:1.2;color:#2A323A;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
#sch-cards .pc-dim{color:#A8AEB6;opacity:1;}
#sch-cards .pc-cap{font-size:9px;color:#9BA3AC;}
#sch-cards .pc-idrow{gap:8px;margin-top:0;}
#sch-cards .pc-code{font-family:var(--font-mono);font-size:10px;letter-spacing:.06em;color:#6B7480;background:none;border:none;padding:0;}
#sch-cards .pc-flag{width:6px;height:6px;border-radius:50%;background:#E0A32E;clip-path:none;}
/* Field-completeness chip — the one number the removed Description cell carried. */
#sch-cards .pc-fill{font-family:var(--font-mono);font-size:9.5px;letter-spacing:.04em;border-radius:9999px;padding:2px 8px;
  background:#F5DEDE;color:#8A5A5C;cursor:help;white-space:nowrap;}
#sch-cards .pc-fill.ok{background:#DFF5E1;color:#1B5E20;}
#sch-cards .pc-fill.rev{background:#FFF4D6;color:#7A4A00;}
#sch-cards .pc-fill.zero{background:#F7F7F7;color:#9BA3AC;}
#sch-cards .pc-fill.none{background:#F7F7F7;color:#A8AEB6;}
/* NATSPEC code reads as a chip, and stops looking like one when it is empty. */
#sch-cards .pc-code-edit{font-family:var(--font-mono);font-size:11.5px;font-weight:500;color:#2A323A;background:#F7F7F7;
  border:1px solid #E8EDF2;border-radius:6px;padding:2px 0;margin:0;text-align:center;letter-spacing:.02em;}
#sch-cards .pc-code-edit:hover{background:#fff;border-color:#8A9DB1;}
#sch-cards .pc-code-edit:empty{background:transparent;border-color:transparent;}
#sch-cards .pc-code-edit:empty:hover{background:#F7F7F7;border-color:#E8EDF2;}
#sch-cards .pcard-cell-f-location .pc-val{color:#4A5560;}

/* Status + ⋯ sit on one right-aligned line (board), and the pill wears the
   status pair from §2 rather than the app-wide ST map. */
#sch-cards .pcard-side{flex-direction:row;align-items:center;justify-content:flex-end;gap:10px;padding:0 16px;border-left:none;}
#sch-cards .pc-stwrap{position:relative;display:inline-flex;align-items:center;}
#sch-cards .pc-stwrap::after{content:'▼';position:absolute;right:11px;top:50%;transform:translateY(-50%);font-size:8px;opacity:.45;
  pointer-events:none;color:inherit;}
#sch-cards .pcard-status{width:auto;min-width:0;padding:4px 26px 4px 11px;border:none;border-radius:9999px;font-family:var(--font);
  font-size:11.5px;font-weight:500;letter-spacing:0;text-transform:none;text-align:left;background:#EFEFF1;color:#5A6169;}
#sch-cards .pcard.row-status-not-started .pcard-status{background:#FDE7E7;color:#8A1C1C;}
#sch-cards .pcard.row-status-drafted     .pcard-status{background:#FFF4D6;color:#7A4A00;}
#sch-cards .pcard.row-status-reviewed    .pcard-status{background:#E8F0FE;color:#0D3B8A;}
#sch-cards .pcard.row-status-approved    .pcard-status{background:#DFF5E1;color:#1B5E20;}
#sch-cards .pcard.row-status-issued      .pcard-status{background:#D4E7FB;color:#0B2A66;}
#sch-cards .pcard.row-status-on-hold     .pcard-status{background:#EFEFF1;color:#5A6169;}
#sch-cards .pcard-status:focus{box-shadow:0 0 0 3px rgba(138,157,177,.25);}
#sch-cards .pcard-more{width:26px;height:26px;border:none;background:#fff;color:#9BA3AC;font-size:12px;
  box-shadow:0 1px 2px rgba(0,0,0,.1),0 0 0 1px rgba(0,0,0,.07);}
#sch-cards .pcard-more:hover{color:#2A323A;background:#F7F7F7;}

/* Six fixed columns, so every row lines up under the header. Wide layout only:
   below 1160 the card wraps into a stack (.pcard-cell{flex:1 1 33%}). */
@media(min-width:1160.02px){
  #sch-cards .pcard-cell-id{flex:1 1 auto;min-width:0;}
  #sch-cards .pcard-cell-ns{flex:0 0 96px;width:96px;}
  #sch-cards .pcard-cell-f-manufacturer{flex:0 0 140px;width:140px;}
  #sch-cards .pcard-cell-f-colour_finish{flex:0 0 150px;width:150px;}
  #sch-cards .pcard-cell-f-location{flex:0 0 176px;width:176px;}
  #sch-cards .pcard-side{width:200px;flex:0 0 200px;}
  #sch-cards .sch-colhdr .ch-id{flex:1 1 auto;}
  #sch-cards .sch-colhdr .ch-ns{flex:0 0 96px;width:96px;}
  #sch-cards .sch-colhdr .ch-brand{flex:0 0 140px;width:140px;}
  #sch-cards .sch-colhdr .ch-colour{flex:0 0 150px;width:150px;}
  #sch-cards .sch-colhdr .ch-loc{flex:0 0 176px;width:176px;}
}
/* Between 1160 and 1360 the pane is ~1060 and the board's fixed widths would
   squeeze Product to ~138px. Everything except Product gives ground first, and
   cells and header give the same ground so the columns stay aligned. */
@media(min-width:1160.02px) and (max-width:1360px){
  #sch-cards .pcard-cell-ns,#sch-cards .sch-colhdr .ch-ns{flex-basis:88px;width:88px;}
  #sch-cards .pcard-cell-f-manufacturer,#sch-cards .sch-colhdr .ch-brand{flex-basis:120px;width:120px;}
  #sch-cards .pcard-cell-f-colour_finish,#sch-cards .sch-colhdr .ch-colour{flex-basis:130px;width:130px;}
  #sch-cards .pcard-cell-f-location,#sch-cards .sch-colhdr .ch-loc{flex-basis:148px;width:148px;}
  #sch-cards .pcard-side,#sch-cards .sch-colhdr .ch-side{flex-basis:176px;width:176px;}
  #sch-cards .pcard-cell{padding:0 11px;}
  #sch-cards .sch-colhdr .ch-cell{padding:0 11px;}
}
@media(max-width:1160px){
  #sch-cards .pcard-body{flex-basis:calc(100% - 88px);}
  #sch-cards .pcard-cell{padding:10px 14px;}
  #sch-cards .pcard-side{width:100%;flex-direction:row;justify-content:space-between;border-top:1px solid #E8EDF2;padding:9px 14px;}
}

/* Worksection bands — one line, no progress bar: the % is the number, the bar
   only repeated it. */
#sch-cards .pws{gap:6px;}
#sch-cards .pws-hdr{padding:6px 14px;border-radius:9px;gap:10px;}
#sch-cards .pws-caret{color:#4A5560;}
#sch-cards .pws-title{font-size:12.5px;font-weight:600;color:#2A323A;}
#sch-cards .pws-title.pws-warn{color:#8A1C1C;}
#sch-cards .pws-count{font-family:var(--font-mono);font-size:10px;color:#4A5560;opacity:.8;}
#sch-cards .pws-pct{font-family:var(--font-mono);font-size:10px;color:#4A5560;opacity:.85;width:40px;}
#sch-cards .pws-items{gap:6px;}
#sch-cards .psec .pws + .pws{margin-top:8px;}

/* Empty tab */
#sch-cards .sch-empty{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:10px;
  padding:40px 20px;}
#sch-cards .sch-empty-t{font-family:var(--font-display);font-size:18px;font-weight:400;letter-spacing:-.3px;color:#2A323A;}
#sch-cards .sch-empty-d{font-size:12.5px;color:#6B7480;max-width:380px;line-height:1.5;}

/* ── Bottom bar: how you add, and where the list stands ── */
.sch-foot{flex-shrink:0;border-top:1px solid #E8EDF2;padding:11px 32px;display:flex;flex-direction:column;gap:9px;background:#fff;}
.sch-foot-row{display:flex;align-items:center;gap:9px;flex-wrap:wrap;}
.sch-foot-sp{flex:1;min-width:12px;}
.sch-add{display:inline-flex;align-items:center;gap:6px;background:#fff;border:none;border-radius:9999px;padding:8px 15px;
  font-family:var(--font);font-size:12.5px;font-weight:500;color:#2A323A;cursor:pointer;
  box-shadow:0 1px 2px rgba(0,0,0,.1),0 0 0 1px rgba(0,0,0,.07);}
.sch-add:hover{background:#F7F7F7;}
.sch-add.primary{background:#2A323A;color:#FCFBF9;padding:8px 16px;font-weight:600;box-shadow:0 1px 2px rgba(0,0,0,.2),0 0 0 1px rgba(0,0,0,.1);}
.sch-add.primary:hover{background:#3D4854;}
.sch-add .sch-caret{opacity:.55;font-size:9px;margin-left:2px;}
.sch-foot .pcard-add-into{margin-left:8px;color:#9BA3AC;}
.sch-foot .pcard-add-sec{padding:6px 10px;border:1px solid #D2DAE3;border-radius:9px;font-size:12px;background:#fff;}
.sch-foot #sb2-items,.sch-foot #sb2-ns,.sch-foot #sb2-fl{font-size:11.5px;color:#6B7480;white-space:nowrap;margin-left:18px;}
.sch-foot .stat-dot{display:inline-block;width:6px;height:6px;border-radius:50%;margin-right:5px;vertical-align:middle;}
.sch-foot .mini-progress{display:inline-flex;align-items:center;gap:6px;margin-left:8px;}
.sch-foot .mini-progress-bar{width:60px;height:5px;background:#EAEAEB;border-radius:3px;overflow:hidden;display:inline-block;}
.sch-foot .mini-progress-fill{height:100%;background:#6E7F5C;border-radius:3px;display:block;}
.sch-foot .mini-progress-text{font-size:10px;color:#9BA3AC;}
.sch-foot .pcard-add-url{display:none;gap:8px;align-items:center;flex-wrap:wrap;padding:0;}
.sch-foot .pcard-add-url input{flex:1;min-width:240px;max-width:560px;padding:9px 13px;border:1px solid #D2DAE3;border-radius:9px;
  font-size:13px;background:#fff;}
@media(max-width:1000px){
  .sch-foot #sb2-items,.sch-foot #sb2-ns,.sch-foot #sb2-fl{margin-left:0;}
}
/* Below ~1120 the tabs plus the four controls no longer fit on one line, and
   .view{overflow:hidden} would clip the Cards/Table toggle off the right edge
   rather than scroll to it. Break the line after the tabs and right-align the
   controls underneath. Measured: at 980 the single line wanted 819px in 760. */
@media(max-width:1120px){
  #view-schedule .sch-bar{flex-wrap:wrap;align-content:flex-end;row-gap:0;}
  #view-schedule .sch-bar-sp{flex:0 0 100%;height:0;min-width:0;}
  #view-schedule .sch-search{margin-left:auto;}
}
@media(max-width:900px){
  #view-schedule .sch-pop{right:12px;}
}

/* ══ SCHEDULE — table view ═════════════════════════════════════════════════
   Ported from design/ui/ScheduleTable.dc.html. The dense alternative behind the
   Cards|Table toggle: six real columns (ID · NS · Product · Brand · Fields ·
   Status) plus a tick column, a 3px status edge and the row ⋯ menu. The chrome
   above it (title row, discipline tabs, toolbar, bottom bar) is the
   ScheduleCards block above and is untouched.

   Cascade notes — every selector below was grepped against the whole file:
   · The <table> keeps class="sch-compact" because col-resize.js
     (querySelector('.sch-compact')), the sortable-header click handler and the
     sort-indicator updater all key off it. `.sch-tbl` is the porting hook, and
     the two v96-era `.sch-compact …` rules are beaten with `.sch-compact.sch-tbl`
     (0,2,x) — `.sch-tbl tbody td` alone would LOSE to `.sch-compact tbody td`
     (0,1,3) on element count.
   · The sticky-left cells are RENAMED sch-fx1 / sch-fx2. The old fcol / fcol-2
     names carry six live rules including `tbody tr:hover td.fcol{…!important}`
     and `.row-complete td.fcol{border-left:…!important}`; renaming retires the
     whole family instead of fighting !important six times.
   · Rows no longer carry row-status-* or row-complete, so the six
     `tbody tr.row-status-* td{background:…!important}` washes and the green
     row-complete wash never match here. Status is the 3px edge, completeness is
     the Fields chip — both survive at 200 rows where a full-row tint does not.
   · `tbody tr.row-clickable:hover` (0,2,2) paints a heavy 3-layer card shadow
     that reads as a bug on a 38px row; restated at (0,3,2).
   · `thead th` is dark with a 2px accent underline and an absolutely-positioned
     .sort-ind; all of that is restated at (0,1,2)/(0,2,3).
   · `.pc-edit` (0,1,0) is REUSED for the Brand cell — same handlers as the card
     view (pcCellFocus/Key/Save → updateItemField). Only the additions are here.
   · `.sch-empty` styling is scoped to #sch-cards, so the table restates it.
   · Header hints are native title=, not .tip: thead th is overflow:hidden inside
     .tbl-wrap's scrollbox and would clip the bubble. The selection strip sits
     OUTSIDE that scrollbox, which is why its buttons can use .tip.
   · Board hexes are literal. #3D4854 / #6E7F5C are general ink and accent
     elsewhere — not bulk-replaced. */

/* ── Grid shell: strip + scrollbox in one bordered card ── */
#view-schedule .sch-grid{flex:1;min-height:0;display:flex;flex-direction:column;margin:14px 32px 0;
  border:1px solid #D2DAE3;border-radius:14px;background:#fff;
  box-shadow:0 1px 3px rgba(42,50,58,.04),0 4px 14px rgba(42,50,58,.06);}
#view-schedule .sch-grid .tbl-wrap{border-radius:0 0 13px 13px;}

/* ── Selection strip ── */
#view-schedule .sch-selbar{flex-shrink:0;min-height:36px;display:flex;align-items:center;gap:7px;padding:0 12px;
  background:#fff;border-bottom:1px solid #E8EDF2;border-radius:13px 13px 0 0;}
#view-schedule .sch-selbar.on{background:#F1EDE6;}
#view-schedule .sch-selc{font-family:var(--font-mono);font-size:10px;letter-spacing:.09em;text-transform:uppercase;font-weight:500;
  color:#9BA3AC;white-space:nowrap;}
#view-schedule .sch-selbar.on .sch-selc{color:#4D4936;}
#view-schedule .sch-bbtn{display:inline-flex;align-items:center;gap:5px;background:#fff;border:none;border-radius:9999px;
  padding:4px 12px;font-family:var(--font);font-size:11.5px;font-weight:500;color:#2A323A;cursor:pointer;white-space:nowrap;
  box-shadow:0 1px 2px rgba(0,0,0,.08),0 0 0 1px rgba(0,0,0,.06);}
#view-schedule .sch-bbtn:hover{background:#FBFAF8;}
#view-schedule .sch-bcar{opacity:.4;font-size:8px;}
#view-schedule .sch-bsp{flex:1;min-width:6px;}
#view-schedule .sch-bclr{background:transparent;border:none;padding:4px 2px;font-family:var(--font);font-size:11.5px;font-weight:500;
  color:#837D68;cursor:pointer;white-space:nowrap;}
#view-schedule .sch-bclr:hover{color:#4D4936;text-decoration:underline;}

/* ── Table box model ── */
.sch-compact.sch-tbl{width:100%;min-width:900px;}
.sch-compact.sch-tbl tbody td{font-size:12.5px;line-height:1.2;height:38px;padding:0 10px;vertical-align:middle;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;word-break:normal;border-bottom:1px solid #F0F3F6;background:#FFFFFF;}
.sch-tbl tbody tr{background:#FFFFFF;}
.sch-tbl tbody tr:nth-child(even) td{background:#FBFCFD;}
.sch-tbl tbody tr.row-clickable:hover{box-shadow:none;}
.sch-tbl tbody tr:hover td{background:#F3F5F8;}
.sch-tbl tbody tr.sel td{background:#F6F2EA;}
.sch-tbl tbody tr.sel:hover td{background:#F1EBE0;}
.sch-tbl tbody tr:last-child td{border-bottom:none;}

/* ── Header ── */
.sch-tbl thead th{background:#F7F7F7;color:#6B7480;padding:0 10px;height:34px;
  font-family:var(--font-mono);font-size:9.5px;font-weight:500;letter-spacing:.09em;text-transform:uppercase;
  border-bottom:1px solid #D2DAE3;box-shadow:none;vertical-align:middle;}
.sch-tbl thead th.sortable:hover{background:#F1EDE6;color:#2A323A;}
.sch-tbl thead th.sort-active{background:#F7F7F7;color:#2A323A;}
.sch-tbl thead th .sort-ind{position:static;transform:none;margin-left:5px;font-size:10px;color:#2A323A;opacity:1;}
.sch-tbl thead th.sort-active .sort-ind{opacity:1;}
/* The idle ↕ glyph was dropped from all eight headers (board); the affordance
   comes back on hover instead of sitting there eight times. */
.sch-tbl thead th.sortable:not(.sort-active):hover .sort-ind::after{content:"\2195";color:#9BA3AC;}
.sch-tbl thead th.resizable .col-resizer:hover,
.sch-tbl thead th.resizable .col-resizer.resizing{background:#8A9DB1;}

/* ── Sticky first two columns (tick + ID) ── */
.sch-tbl th.sch-fx1,.sch-tbl tbody td.sch-fx1{position:sticky;left:0;z-index:2;width:36px;}
.sch-tbl th.sch-fx2,.sch-tbl tbody td.sch-fx2{position:sticky;left:36px;z-index:2;}
.sch-tbl thead th.sch-fx1,.sch-tbl thead th.sch-fx2{z-index:12;}
.sch-tbl th.sch-th-chk{padding:0;text-align:center;}
.sch-tbl th.sch-th-more{width:42px;padding:0;}

/* ── Tick column ── */
.sch-tbl tbody td.sch-td-chk{padding:0;text-align:center;}
.sch-tbl .sch-chk{width:14px;height:14px;border-radius:4px;background:#FFFFFF;border:1px solid #C3C9D0;color:#fff;
  font-size:9px;line-height:1;display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;cursor:pointer;}
.sch-tbl .sch-chk:hover{border-color:#837D68;}
.sch-tbl .sch-chk.on{background:#837D68;border-color:#837D68;}
.sch-tbl .sch-chk:focus-visible{outline:2px solid #8A9DB1;outline-offset:2px;}

/* ── ID ── */
.sch-tbl tbody td.sch-td-id{font-family:var(--font-mono);font-size:10.5px;font-weight:500;letter-spacing:.02em;color:#3D4854;
  padding-right:10px;}

/* ── NS code — still inline-editable, drawn as the board's chip ── */
.sch-tbl tbody td.sch-td-ns{padding:0 9px 0 10px;}
.sch-tbl .sch-nsin{width:46px;height:21px;box-sizing:border-box;padding:0 2px;text-align:center;
  font-family:var(--font-mono);font-size:10.5px;font-weight:500;color:#2A323A;
  background:#FFFFFF;border:1px solid #D2DAE3;border-radius:6px;transition:border-color .12s,box-shadow .12s;}
.sch-tbl .sch-nsin.empty{background:#FDF4F4;border-color:#E0A9AB;color:#B8797B;}
.sch-tbl .sch-nsin::placeholder{color:#B8797B;opacity:1;}
.sch-tbl .sch-nsin:hover:not(:focus){border-color:#8A9DB1;}
.sch-tbl .sch-nsin:focus{outline:none;background:#fff;border-color:#8A9DB1;box-shadow:0 0 0 3px rgba(138,157,177,.18);}

/* ── Product: 24px thumbnail + name ── */
.sch-tbl tbody td.sch-td-name{padding:0 10px;}
.sch-tbl .sch-nmw{display:flex;align-items:center;gap:10px;min-width:0;}
.sch-tbl .sch-thumb{width:24px;height:24px;flex-shrink:0;border-radius:6px;object-fit:cover;background:#F7F7F7;
  border:1px solid rgba(42,50,58,.14);box-sizing:border-box;cursor:pointer;display:inline-flex;align-items:center;
  justify-content:center;font-size:11px;color:#A8AEB6;line-height:1;}
.sch-tbl .sch-thumb-ph{background:#FFFFFF;border:1px dashed #C3C9D0;}
.sch-tbl .sch-thumb-ph:hover{background:#F7F7F7;color:#6B7480;}
.sch-tbl .sch-nm{min-width:0;font-size:12.5px;font-weight:600;color:#2A323A;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}

/* ── Brand: edit-in-place, same handlers as the card view ── */
.sch-tbl tbody td.sch-td-brand{padding:0 6px;}
.sch-tbl .sch-be{display:block;font-size:11.5px;color:#4A5560;padding:3px 5px;margin:0;border:1px solid transparent;border-radius:6px;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.sch-tbl .sch-be.dim{color:#C3C9D0;}
.sch-tbl .sch-be:hover{background:#F7F7F7;}
.sch-tbl .sch-be:focus{background:#FFFFFF;border-color:#B8797B;box-shadow:0 0 0 3px rgba(236,197,198,.35);
  white-space:nowrap;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;}
.sch-tbl .sch-be:focus::-webkit-scrollbar{display:none;}

/* ── Fields chip ── */
.sch-tbl tbody td.sch-td-fld{padding:0 10px;}
.sch-tbl .sch-fchip{display:inline-flex;align-items:center;padding:2px 7px;border-radius:8px;background:#F5DEDE;color:#8A5A5C;
  font-family:var(--font-mono);font-size:9.5px;font-weight:500;letter-spacing:.03em;white-space:nowrap;cursor:help;}
.sch-tbl .sch-fchip.ok{background:#DFF5E1;color:#1B5E20;}
.sch-tbl .sch-fchip.rev{background:#FFF4D6;color:#7A4A00;}
.sch-tbl .sch-fchip.zero{background:#F7F7F7;color:#9BA3AC;}
.sch-tbl .sch-fchip.none{background:transparent;color:#C3C9D0;padding-left:0;}

/* ── Status pill (a real <select> wearing the board's pill) ── */
.sch-tbl tbody td.sch-td-st{padding:0 10px;}
.sch-tbl .sch-stwrap{position:relative;display:inline-flex;align-items:center;border-radius:9999px;padding:0 9px;height:22px;
  max-width:100%;}
.sch-tbl .sch-stwrap::after{content:"\25BC";position:absolute;right:8px;font-size:7px;opacity:.5;pointer-events:none;color:inherit;}
.sch-tbl .sch-stp{width:auto;max-width:100%;padding:0 15px 0 0;border:none;background:transparent;color:inherit;
  font-family:var(--font);font-size:10.5px;font-weight:600;letter-spacing:0;text-transform:none;
  appearance:none;-webkit-appearance:none;cursor:pointer;}
.sch-tbl .sch-stp:focus{outline:none;background:transparent;border:none;box-shadow:none;}
.sch-tbl .sch-stwrap:focus-within{box-shadow:0 0 0 3px rgba(138,157,177,.25);}

/* ── Row ⋯ ── */
.sch-tbl tbody td.sch-td-more{padding:0;text-align:center;overflow:visible;}
.sch-tbl .sch-morebtn{width:26px;height:26px;border:none;border-radius:50%;background:transparent;color:#A8AEB6;
  font-size:13px;line-height:1;letter-spacing:.06em;cursor:pointer;padding:0;}
.sch-tbl .sch-morebtn:hover{background:#F1EDE6;color:#2A323A;}

/* ── Empty tab / no match (same copy as the card view) ── */
.sch-tbl tbody tr.sch-emptyrow td{height:auto;padding:0;background:#fff;white-space:normal;border-bottom:none;}
.sch-tbl .sch-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:10px;
  padding:56px 20px;}
.sch-tbl .sch-empty-t{font-family:var(--font-display);font-size:18px;font-weight:400;letter-spacing:-.3px;color:#2A323A;}
.sch-tbl .sch-empty-d{font-size:12.5px;color:#6B7480;max-width:380px;line-height:1.5;}

/* Non-interactive line in a ⋯ menu (the bulk worksection picker with nothing
   to pick). .cmenu-item's hover and cursor are undone rather than restated. */
.cmenu-item.cmenu-flat{color:#9BA3AC;cursor:default;font-weight:400;white-space:normal;max-width:260px;}
.cmenu-item.cmenu-flat:hover{background:transparent;}
/* No narrow-width margin override: .sch-head, .sch-bar, #sch-cards and .sch-foot
   all keep 32px side padding at every width, so the grid keeps 32px too — a
   relief margin here would leave the card hanging off the tab rule above it.
   Below ~1100 the table hits its 900px min-width and scrolls inside .tbl-wrap
   with the tick and ID columns pinned, which is the intended narrow behaviour. */
