/* SoloPilot — project dashboard. Builds on styles.css tokens (dark only). */

.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0;}
body.dash{height:100vh;overflow:hidden;font-size:15px;}
/* styles.css styles bare <section>/<h1> for the landing page — neutralise inside the app. */
body.dash section{padding:0;border-top:0;position:static;background:none;}
body.dash section::after,body.dash section::before{content:none;}
body.dash section.card{background:var(--surface);border:1px solid var(--border-soft);padding:20px;}
.dash-shell{display:grid;grid-template-columns:264px minmax(0,1fr);height:100vh;transition:grid-template-columns .18s ease;}

/* ---------- Sidebar ---------- */
.dash-side{display:flex;flex-direction:column;gap:14px;padding:14px 12px;background:var(--surface);border-right:1px solid var(--border-soft);min-height:0;}
.side-head{display:flex;align-items:center;justify-content:space-between;padding:2px 4px;}
.side-head .logo{text-decoration:none;}
.side-new{justify-content:center;}
.side-search .field-input{width:100%;padding:9px 12px;font-size:14px;}
.side-list{flex:1;min-height:0;overflow-y:auto;margin:0 -6px;padding:0 6px;}
.project-items{list-style:none;margin:0;padding:0 0 4px;display:flex;flex-direction:column;gap:2px;}
.list-empty{font-size:12.5px;color:var(--text-faint);padding:8px 10px;}
.project-link{display:flex;flex-direction:column;gap:2px;padding:8px 10px 8px 24px;border-radius:7px;text-decoration:none;color:var(--text-dim);position:relative;border:1px solid transparent;}
.project-link:hover{background:var(--surface-2);color:var(--text);}
.project-link:focus-visible{outline:2px solid var(--slate);outline-offset:-2px;}
.project-link[aria-current="page"]{background:var(--surface-2);border-color:var(--border);color:var(--text);}
.project-link[aria-current="page"]::before{content:'';position:absolute;left:10px;top:13px;width:6px;height:6px;border-radius:50%;background:linear-gradient(135deg,var(--sage),var(--slate));}
.project-name{font-size:13.5px;font-weight:500;line-height:1.35;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
.project-meta{font-size:11.5px;color:var(--text-faint);display:flex;gap:6px;align-items:center;flex-wrap:wrap;}
.side-foot{border-top:1px solid var(--border-soft);padding-top:12px;font-size:12.5px;color:var(--text-faint);display:flex;flex-direction:column;gap:8px;}
.side-foot .btn{justify-content:center;}
.account-row{display:flex;align-items:center;gap:8px;}
.plan-badge{font:600 10.5px var(--font-sans);letter-spacing:.06em;text-transform:uppercase;padding:2px 8px;border-radius:999px;border:1px solid var(--border);color:var(--text-dim);}
.plan-badge.pro{border-color:rgba(22,163,74,.45);color:var(--sage);background:rgba(22,163,74,.08);}

.icon-btn{background:none;border:1px solid var(--border-soft);color:var(--text-dim);border-radius:7px;width:34px;height:34px;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;font-size:15px;}
.icon-btn:hover{color:var(--text);border-color:var(--border);}
.side-close,.side-open{display:none;}

/* Collapsed sidebar → rail of project avatars (desktop only) */
@media (min-width:861px){
  body.side-collapsed .dash-shell{grid-template-columns:60px minmax(0,1fr);}
  body.side-collapsed .dash-side{padding:12px 8px;gap:10px;align-items:center;overflow-y:auto;}
  body.side-collapsed .dash-side > :not(.side-head):not(.side-rail){display:none;}
  body.side-collapsed .side-head .logo-text{display:none;}
  body.side-collapsed .side-rail{display:flex;flex-direction:column;align-items:center;gap:10px;}
}
.side-rail{display:none;}
.rail-group{display:flex;flex-direction:column;gap:6px;align-items:center;padding-top:10px;border-top:1px solid var(--border-soft);}
.rail-item{width:36px;height:36px;border-radius:9px;display:flex;align-items:center;justify-content:center;text-decoration:none;font:600 12px var(--font-sans);color:var(--text-dim);background:var(--surface-2);border:1px solid var(--border-soft);}
.rail-item:hover{color:var(--text);border-color:var(--border);}
.rail-item[aria-current="page"]{color:var(--text);border-color:var(--text-dim);background:var(--surface-3);}
.rail-item:focus-visible{outline:2px solid var(--slate);outline-offset:1px;}
.rail-new{font-size:18px;color:var(--bg);background:linear-gradient(135deg,var(--sage),var(--slate));border:0;box-shadow:none;}
.side-scrim{position:fixed;inset:0;background:rgba(28,28,28,.35);z-index:19;}

/* ---------- Main ---------- */
.dash-main{display:flex;flex-direction:column;min-width:0;min-height:0;}
.dash-top{display:flex;align-items:center;gap:12px;padding:8px 20px 0;border-bottom:1px solid var(--border-soft);min-height:56px;background:rgba(252,251,248,.85);}
.dash-top > .icon-btn{margin-bottom:8px;flex-shrink:0;}
.top-main{flex:1;min-width:0;display:flex;align-items:flex-end;gap:20px;}
.top-main > .dash-crumb{padding-bottom:16px;}
.top-title{flex:1;min-width:0;display:flex;flex-direction:column;gap:6px;padding-bottom:10px;}
.top-title .proj-title{font-size:18px;line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.top-meta{display:flex;align-items:center;gap:8px;flex-wrap:nowrap;overflow:hidden;min-width:0;}
.top-meta .pill{font-size:11px;padding:2px 8px;}
.top-dates{font-size:11px;color:var(--text-faint);white-space:nowrap;margin-left:4px;}
.dash-crumb{font-size:12px;color:var(--text-faint);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.dash-view{flex:1;overflow-y:auto;padding:20px 20px 48px;min-height:0;}
.dash-view > *{max-width:1680px;margin-left:auto;margin-right:auto;}
/* Build workspace fills the viewport; panes scroll on their own. */
.dash-view.fill{overflow:hidden;display:flex;flex-direction:column;padding:12px 16px 16px;}
.fill-panel{flex:1;min-height:0;width:100%;display:flex;flex-direction:column;}
.dash-kit{display:flex;flex-direction:column;align-items:center;gap:4px;color:var(--text-dim);font-size:13px;padding:24px 0;}
.dash-loading{display:flex;align-items:center;gap:10px;color:var(--text-dim);font-size:13px;padding:40px 0;}

/* ---------- Project header ---------- */
.proj-head{display:flex;flex-direction:column;gap:14px;margin-bottom:20px;}
.proj-eyebrow{display:flex;align-items:center;gap:10px;flex-wrap:wrap;}
.proj-title{font-size:28px;font-weight:600;line-height:1.25;max-width:880px;overflow-wrap:anywhere;margin:0;}
.proj-meta{display:flex;gap:16px;flex-wrap:wrap;font-size:12px;color:var(--text-faint);}
.pipeline{display:flex;gap:6px;flex-wrap:wrap;}
.top-meta .pipeline{flex-wrap:nowrap;gap:4px;margin-left:6px;}
.top-meta .pipe-step{padding:2px 8px;font-size:11px;gap:5px;}
.top-meta .pipe-step.soon{display:none;}
.top-meta .pipe-arrow{font-size:10px;}
.pipe-step{display:flex;align-items:center;gap:8px;padding:6px 12px;border-radius:999px;border:1px solid var(--border-soft);font-size:12.5px;color:var(--text-faint);background:var(--surface);}
.pipe-step .n{font:500 11px var(--font-sans);}
.pipe-step.done{color:var(--text-dim);border-color:var(--border);}
.pipe-step.done .n::before{content:'✓ ';color:var(--sage);}
.pipe-step.current{color:var(--text);border-color:rgba(22,163,74,.5);background:rgba(22,163,74,.07);}
.pipe-step.soon{opacity:.6;}
.pipe-arrow{color:var(--text-faint);align-self:center;font-size:12px;}

.pill{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:600;padding:3px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-dim);white-space:nowrap;}
.pill.ok{color:var(--sage);border-color:rgba(22,163,74,.4);background:rgba(22,163,74,.08);}
.pill.bad{color:var(--rust);border-color:rgba(220,38,38,.4);background:rgba(220,38,38,.08);}
.pill.warn{color:var(--amber);border-color:rgba(217,119,6,.4);background:rgba(217,119,6,.08);}
.pill.info{color:var(--slate);border-color:rgba(79,70,229,.4);background:rgba(79,70,229,.08);}
.pill.live::before{content:'';width:6px;height:6px;border-radius:50%;background:currentColor;animation:pulse 1.2s ease-in-out infinite;}
@keyframes pulse{50%{opacity:.3}}
@media (prefers-reduced-motion:reduce){.pill.live::before{animation:none}}

/* ---------- Tabs ---------- */
.tabs{display:flex;gap:4px;border-bottom:1px solid var(--border-soft);margin-bottom:22px;overflow-x:auto;}
.top-main .tabs{border-bottom:0;margin:0;flex-shrink:0;}
.tab{background:none;border:0;border-bottom:2px solid transparent;color:var(--text-faint);font:600 14px var(--font-sans);padding:10px 14px;cursor:pointer;white-space:nowrap;margin-bottom:-1px;}
.tab:hover{color:var(--text-dim);}
.tab[aria-selected="true"]{color:var(--text);border-bottom-color:var(--sage);}
.tab:focus-visible{outline:2px solid var(--slate);outline-offset:-2px;border-radius:6px 6px 0 0;}
.tab .count{font:500 11px var(--font-sans);color:var(--text-faint);margin-left:6px;}

/* ---------- Cards & grids ---------- */
.card{background:var(--surface);border:1px solid var(--border-soft);border-radius:12px;padding:20px;min-width:0;}
.card + .card{margin-top:16px;}
.stack > .card + .card,.build-grid > .card + .card{margin-top:0;}
.card-title{font:500 11.5px var(--font-sans);color:var(--text-faint);text-transform:uppercase;letter-spacing:.08em;margin-bottom:14px;display:flex;align-items:center;gap:8px;}
.card-title .spacer{flex:1;}
.grid-2{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);gap:16px;align-items:start;}
.stack{display:flex;flex-direction:column;gap:16px;min-width:0;}
.muted{color:var(--text-dim);}
.faint{color:var(--text-faint);}
.small{font-size:12.5px;}
.row{display:flex;gap:10px;align-items:center;flex-wrap:wrap;}
.row.end{justify-content:flex-end;}

.icp-list{display:flex;flex-direction:column;}
.icp-row{display:grid;grid-template-columns:128px minmax(0,1fr) auto;gap:14px;padding:12px 0;border-top:1px solid var(--border-soft);align-items:start;}
.icp-row:first-child{border-top:0;padding-top:0;}
.icp-label{font:500 11px var(--font-sans);color:var(--text-faint);text-transform:uppercase;letter-spacing:.06em;padding-top:3px;}
.icp-text{font-size:14.5px;line-height:1.55;overflow-wrap:anywhere;}

.verdict-block{display:flex;gap:16px;align-items:center;}
.verdict-block .stamp{font-size:12px;}
.bullets{margin:0;padding-left:18px;display:flex;flex-direction:column;gap:6px;font-size:14px;color:var(--text-dim);}
.kv{display:grid;grid-template-columns:auto minmax(0,1fr);gap:8px 16px;font-size:13.5px;}
.kv dt{color:var(--text-faint);}
.kv dd{margin:0;overflow-wrap:anywhere;}
.kv a{color:var(--slate);}

/* Validation */
.clauses-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(440px,1fr));gap:16px;align-items:start;}
.clauses-grid > .card + .card{margin-top:0;}
.clause-card{display:flex;flex-direction:column;gap:12px;}
.clause-top{display:flex;align-items:center;gap:10px;flex-wrap:wrap;}
.clause-q{font-size:13px;color:var(--text-faint);}
.clause-statement{font-size:16px;line-height:1.55;overflow-wrap:anywhere;}
.kill-quote{border-left:3px solid var(--border);padding:4px 0 4px 12px;font-size:13.5px;color:var(--text-dim);font-style:italic;}
.kill-quote.tripped{border-left-color:var(--rust);color:var(--text);}
.sources{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px;}
.sources a{color:var(--text);text-decoration:none;font-size:13.5px;font-weight:500;}
.sources a:hover{color:var(--slate);text-decoration:underline;}
.sources .src-meta{font-size:12px;color:var(--text-faint);}
details.more > summary{cursor:pointer;font-size:13px;color:var(--slate);font-weight:600;list-style:none;}
details.more > summary::-webkit-details-marker{display:none;}
details.more > summary::before{content:'▸ ';}
details.more[open] > summary::before{content:'▾ ';}
details.more > *:not(summary){margin-top:10px;}

/* Build workspace: header (title + Publish) then Changes | splitter | Preview · Code · Release */
.workspace-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:0 2px 12px;flex-shrink:0;}
.workspace-head-title{display:flex;align-items:center;gap:10px;font-size:14px;}
#publish-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap;}
.workspace{flex:1;min-height:0;display:grid;grid-template-columns:minmax(300px,var(--split,36%)) 10px minmax(0,1fr);}
.workspace.dragging{cursor:col-resize;user-select:none;}
.workspace.dragging iframe{pointer-events:none;}
.pane{display:flex;flex-direction:column;min-height:0;min-width:0;padding:14px 16px;}
body.dash section.card.pane{padding:14px 16px;}
.pane .card-title{margin-bottom:10px;}
.pane .timeline{flex:1;min-height:0;max-height:none;}
.pane .empty.grow{flex:1;}
.pane .composer{margin-top:10px;}
.pane .composer textarea{min-height:64px;}
.pane .live-log{max-height:160px;flex-shrink:0;}
.pane-head{display:flex;align-items:center;gap:10px;margin-bottom:12px;}
.pane-head .subtabs{margin:0;}
.pane-body{flex:1;min-height:0;overflow:auto;display:flex;flex-direction:column;}
.pane-body > .preview-frame{flex:1;height:auto;min-height:320px;}
.pane-body > .code-wrap{flex:1;min-height:0;}
.pane-body .file-list,.pane-body .code-view{max-height:none;height:100%;}
.splitter{cursor:col-resize;position:relative;}
.splitter::after{content:'';position:absolute;top:50%;left:3px;width:4px;height:40px;margin-top:-20px;border-radius:2px;background:var(--border);opacity:.6;}
.splitter:hover::after,.splitter:focus-visible::after,.workspace.dragging .splitter::after{background:var(--slate);opacity:1;}
.splitter:focus-visible{outline:none;}
.build-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.15fr);gap:16px;align-items:start;}
.timeline{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px;max-height:520px;overflow-y:auto;}
.iter{border:1px solid var(--border-soft);border-radius:10px;padding:12px 14px;background:var(--surface-2);display:flex;flex-direction:column;gap:6px;}
.iter-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
.iter-seq{font:500 11px var(--font-sans);color:var(--text-faint);}
.iter-request{font-size:14px;overflow-wrap:anywhere;}
.iter-summary{font-size:13px;color:var(--text-dim);white-space:pre-wrap;overflow-wrap:anywhere;max-height:8.5em;overflow:hidden;}
.iter-foot{display:flex;gap:12px;flex-wrap:wrap;font-size:12px;color:var(--text-faint);align-items:center;}
.link-btn{background:none;border:0;padding:0;color:var(--slate);font:600 12px var(--font-sans);cursor:pointer;}
.link-btn:hover{text-decoration:underline;}
.checks{display:flex;gap:6px;flex-wrap:wrap;}
.check{font:500 11px var(--font-sans);padding:1px 7px;border-radius:5px;border:1px solid var(--border-soft);color:var(--text-faint);}
.check.ok{color:var(--sage);border-color:rgba(22,163,74,.3);}
.check.bad{color:var(--rust);border-color:rgba(220,38,38,.4);}

.live-log{font:12px/1.55 var(--font-mono);background:var(--bg);border:1px solid var(--border-soft);border-radius:8px;padding:10px 12px;max-height:200px;overflow-y:auto;color:var(--text-dim);white-space:pre-wrap;overflow-wrap:anywhere;margin-top:12px;}
.live-log .ev-tool{color:var(--slate);}
.live-log .ev-denied{color:var(--rust);}
.live-log .ev-check-ok{color:var(--sage);}
.live-log .ev-check-bad{color:var(--rust);}

.composer{display:flex;flex-direction:column;gap:10px;margin-top:14px;}
.composer textarea{width:100%;min-height:84px;resize:vertical;font:inherit;font-size:14.5px;line-height:1.5;}
.composer select{background:var(--surface-2);border:1px solid var(--border);border-radius:8px;color:var(--text);padding:8px 10px;font:inherit;font-size:13px;}

.subtabs{display:flex;gap:4px;margin-bottom:14px;background:var(--surface-2);padding:3px;border-radius:9px;width:fit-content;}
.subtab{background:none;border:0;color:var(--text-faint);font:600 13px var(--font-sans);padding:6px 12px;border-radius:7px;cursor:pointer;}
.subtab[aria-selected="true"]{background:var(--surface-3);color:var(--text);}
.subtab:focus-visible{outline:2px solid var(--slate);}

.preview-frame{width:100%;height:520px;border:1px solid var(--border);border-radius:10px;background:#fff;}
.preview-shot{width:100%;border:1px solid var(--border);border-radius:10px;display:block;}
.empty{border:1px dashed var(--border);border-radius:10px;padding:28px 20px;text-align:center;color:var(--text-dim);font-size:14px;display:flex;flex-direction:column;gap:12px;align-items:center;}

.code-wrap{display:grid;grid-template-columns:220px minmax(0,1fr);gap:12px;min-height:420px;}
.file-list{list-style:none;margin:0;padding:6px;border:1px solid var(--border-soft);border-radius:10px;overflow:auto;max-height:520px;background:var(--surface-2);}
.file-list button{display:block;width:100%;text-align:left;background:none;border:0;color:var(--text-dim);font:12.5px var(--font-mono);padding:5px 8px;border-radius:6px;cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.file-list button:hover{background:var(--surface-3);color:var(--text);}
.file-list button[aria-current="true"]{background:var(--surface-3);color:var(--text);}
.pane-body > .code-wrap .data-main{min-width:0;display:flex;flex-direction:column;}
.data-grid{overflow:auto;border:1px solid var(--border-soft);border-radius:10px;background:var(--surface-2);flex:1;min-height:0;}
.data-table{border-collapse:collapse;font:12.5px var(--font-mono);width:max-content;min-width:100%;}
.data-table th,.data-table td{padding:6px 10px;border-bottom:1px solid var(--border-soft);text-align:left;white-space:nowrap;max-width:280px;overflow:hidden;text-overflow:ellipsis;color:var(--text-dim);}
.data-table th{position:sticky;top:0;background:var(--surface-3);color:var(--text);font-weight:600;}
.data-table .data-type{display:block;font-weight:400;font-size:11px;color:var(--text-faint);}
.data-table .data-null{color:var(--text-faint);font-style:italic;}
.data-main .link-btn:disabled{opacity:.4;cursor:default;}
.code-view{margin:0;font:12.5px/1.55 var(--font-mono);background:var(--bg);border:1px solid var(--border-soft);border-radius:10px;padding:12px 14px;overflow:auto;max-height:520px;color:var(--text-dim);white-space:pre;tab-size:2;}
.code-view.code-hl{counter-reset:ln;}
.code-hl .cl::before{counter-increment:ln;content:counter(ln);display:inline-block;min-width:3ch;margin-right:14px;text-align:right;color:var(--text-faint);opacity:.6;user-select:none;}
.code-hl .tk-t{color:var(--slate);}
.code-hl .tk-s{color:var(--sage);}
.code-hl .tk-n{color:var(--amber);}
.code-hl .tk-k{color:var(--text);}
.code-hl .tk-c{color:var(--text-faint);font-style:italic;}
.code-view .add{color:var(--sage);}
.code-view .del{color:var(--rust);}
.code-view .hunk{color:var(--slate);}
/* A file rendered by apps/web/public/render (markdown/html/image/video) isn't plain code. */
.code-view.code-view-rendered{white-space:normal;font:14px/1.6 var(--font-sans);}
.code-view.code-view-rendered iframe{width:100%;height:480px;border:0;border-radius:8px;background:#fff;}
.render-fallback{display:flex;flex-direction:column;gap:8px;}
.render-fallback-note{color:var(--text-faint);font-size:12.5px;margin:0;}
.render-fallback-content{margin:0;font:12.5px/1.55 var(--font-mono);white-space:pre;color:var(--text-dim);}

.plan-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;}
.plan-headline{font:600 20px var(--font-sans);margin-bottom:4px;}


/* Empty / welcome */
.welcome{max-width:560px !important;margin:10vh auto 0 !important;text-align:center;display:flex;flex-direction:column;gap:14px;align-items:center;}
.welcome h1{font-size:30px;margin:0;}

.toast{position:fixed;right:20px;bottom:20px;background:var(--surface-3);border:1px solid var(--border);color:var(--text);padding:10px 14px;border-radius:9px;font-size:13.5px;z-index:40;box-shadow:0 8px 30px rgba(28,28,28,.12);max-width:min(420px,calc(100vw - 40px));}
.toast.error{border-color:rgba(220,38,38,.5);}

/* ---------- Responsive ---------- */
@media (max-width:1280px){ .top-dates{display:none;} }
@media (max-width:1080px){
  .grid-2,.build-grid{grid-template-columns:minmax(0,1fr);}
  .top-meta .pipeline{display:none;}
}
@media (max-width:860px){
  .dash-shell{grid-template-columns:minmax(0,1fr);}
  .dash-side{position:fixed;inset:0 auto 0 0;width:min(300px,86vw);z-index:20;transform:translateX(-100%);transition:transform .2s ease;box-shadow:0 0 40px rgba(28,28,28,.15);}
  .dash-side.open{transform:none;}
  .side-close,.side-open{display:inline-flex;}
  .dash-top{padding:8px 12px 0;flex-wrap:wrap;}
  .side-toggle{display:none;}
  .top-main{flex-wrap:wrap;gap:4px;}
  .top-title{flex-basis:100%;padding-bottom:4px;}
  .top-main .tabs{width:100%;}
  .dash-view{padding:16px 16px 56px;}
  .dash-view.fill{overflow-y:auto;display:block;padding:16px;}
  .workspace{display:flex;flex-direction:column;gap:16px;}
  .splitter{display:none;}
  .pane .timeline{max-height:420px;}
  .pane-body{overflow:visible;}
  .pane-body > .preview-frame{height:420px;flex:none;}
  .clauses-grid{grid-template-columns:minmax(0,1fr);}
  .proj-title{font-size:22px;}
  .icp-row{grid-template-columns:minmax(0,1fr) auto;}
  .icp-label{grid-column:1 / -1;padding:0;}
  .code-wrap{grid-template-columns:minmax(0,1fr);}
  .file-list{max-height:180px;}
  .plan-grid{grid-template-columns:minmax(0,1fr);}
  .preview-frame{height:420px;}
}
@media (prefers-reduced-motion:reduce){.dash-side{transition:none;}}
.top-meta .pipe-arrow:has(+ .pipe-step.soon){display:none;}
.user-button{display:inline-flex;min-width:28px;min-height:28px;align-items:center;}
.side-foot .btn-primary{justify-content:center;}

/* ── Sign-in gate: the dashboard needs an authenticated user ─────────────── */
body.auth-pending .dash-side,body.auth-pending .dash-top,body.auth-pending .side-scrim,
body.gated .dash-side,body.gated .dash-top,body.gated .side-scrim{display:none !important;}
body.auth-pending .dash-shell,body.gated .dash-shell{grid-template-columns:minmax(0,1fr) !important;}
body.gated .dash-view{display:flex;align-items:flex-start;justify-content:center;padding:8vh 16px 48px;}
.gate{max-width:440px !important;width:100%;display:flex;flex-direction:column;align-items:center;gap:14px;text-align:center;}
.gate .logo{margin-bottom:6px;text-decoration:none;}
.gate h1{font-size:26px;margin:0;}
.gate .gate-mount{width:100%;display:flex;justify-content:center;min-height:40px;}
.gate .gate-note{border:1px solid var(--border-soft);background:var(--surface);border-radius:10px;padding:14px 16px;text-align:left;font-size:13px;width:100%;}
.gate .gate-note code{font-family:var(--font-mono);font-size:12px;}

.auth-form{width:100%;display:flex;flex-direction:column;gap:12px;text-align:left;}
.auth-field{display:flex;flex-direction:column;gap:6px;font-size:13px;color:var(--text-dim);}
.auth-field .field-input{width:100%;}
.auth-form .btn{width:100%;justify-content:center;}
.auth-forgot{align-self:flex-end;}
.auth-or{text-align:center;color:var(--text-faint);font-size:12px;}
.auth-error{border:1px solid var(--border-soft);background:var(--surface);border-radius:10px;padding:10px 12px;font-size:13px;color:var(--red,#e5484d);}
.auth-form p{margin:0;text-align:center;}

/* ── Legacy Polar-token → Clerk account linking banner ────────────────────── */
.legacy-link-banner{display:flex;flex-direction:column;gap:6px;border:1px solid var(--border-soft);background:var(--surface-2);border-radius:8px;padding:8px 10px;font-size:12px;color:var(--text-dim);}
.legacy-link-banner[hidden]{display:none;}
.legacy-link-banner .link-btn{align-self:flex-start;}

/* ── Publish confirm dialog (native <dialog>) ──────────────────────────────── */
dialog.modal{border:1px solid var(--border);border-radius:12px;background:var(--surface);color:var(--text);padding:20px;max-width:min(440px,calc(100vw - 32px));box-shadow:0 20px 60px rgba(28,28,28,.18);}
dialog.modal::backdrop{background:rgba(28,28,28,.4);}
dialog.modal .modal-body{display:flex;flex-direction:column;gap:4px;}
dialog.modal p{margin:0 0 4px;}

/* ── New idea: the Validate flow inside the dashboard (dashboard/validate-form.js) ── */
.vf{max-width:760px;margin:0 auto;display:flex;flex-direction:column;gap:16px;}
.vf-steps{list-style:none;margin:0;padding:0;display:flex;gap:6px;flex-wrap:wrap;}
.vf-step{display:inline-flex;align-items:center;gap:8px;font-size:12.5px;color:var(--text-faint);padding:6px 12px 6px 6px;border:1px solid var(--border-soft);border-radius:999px;background:var(--surface);}
.vf-step .n{width:20px;height:20px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-size:11px;background:var(--surface-2);color:var(--text-faint);}
.vf-step.done{color:var(--text-dim);}
.vf-step.done .n{background:rgba(22,163,74,.14);color:var(--sage);}
.vf-step.current{color:var(--text);border-color:var(--text-dim);}
.vf-step.current .n{background:linear-gradient(135deg,var(--sage),var(--slate));color:var(--bg);}
.vf-card{display:flex;flex-direction:column;gap:14px;}
.vf-title{font:600 22px var(--font-sans);margin:0;}
.vf-desc{margin:-6px 0 0;font-size:14px;line-height:1.5;}
.vf-form{display:flex;flex-direction:column;gap:12px;}
.vf-form .field-label{margin-bottom:0;}
.vf .field-input{width:100%;}
.vf textarea.field-input{resize:vertical;font-family:inherit;line-height:1.45;font-size:15px;}
.vf-idea{min-height:84px;}
.vf-chips{display:flex;flex-wrap:wrap;gap:8px;align-items:center;}
.vf-fields{display:flex;flex-direction:column;gap:14px;}
.vf-fields .clause-item{display:flex;flex-direction:column;gap:6px;}
.vf-fields .field-label{margin-bottom:0;text-transform:none;letter-spacing:0;font-size:12.5px;color:var(--text-dim);}
.vf-error{border:1px solid rgba(220,38,38,.4);background:rgba(220,38,38,.08);color:var(--rust);border-radius:8px;padding:10px 12px;font-size:13.5px;}
.vf-rank,.vf-research,.vf-verdict-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px;}
.vf-rank-item{display:flex;gap:12px;align-items:center;border:1px solid var(--border-soft);background:var(--surface-2);border-radius:10px;padding:10px 12px;}
.vf-rank-n{width:24px;height:24px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-size:12px;background:var(--surface-3,var(--surface));color:var(--text-dim);flex-shrink:0;}
.vf-rank-body{flex:1;min-width:0;font-size:14px;}
.vf-rank-body .field-label{margin-bottom:2px;}
.vf-rank-actions{display:flex;gap:6px;flex-shrink:0;}
.vf-rank-actions .icon-btn{width:30px;height:30px;font-size:11px;}
.vf-rank-actions .icon-btn:disabled{opacity:.35;cursor:default;}
.vf-research-item,.vf-verdict-clause{border:1px solid var(--border-soft);border-radius:10px;padding:10px 12px;display:flex;flex-direction:column;gap:6px;background:var(--surface-2);}
.vf-research-item.active{border-color:rgba(79,70,229,.5);}
.vf-research-item:not(.done):not(.active){opacity:.6;}
.vf-research-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;}
.vf-research-head .field-label{margin:0;}
.vf-research-status{margin-left:auto;display:inline-flex;gap:8px;align-items:center;flex-wrap:wrap;}
.vf-research-text{font-size:14px;color:var(--text-dim);line-height:1.45;}
.vf-progress{margin:0;}
.vf-verdict{padding:6px 0 4px;}
.vf-subtract{display:flex;flex-direction:column;gap:8px;}
.vf-pivot{display:flex;flex-direction:column;gap:8px;}
.vf-exits{padding-top:4px;}
.top-main .vf-reset{margin-left:auto;margin-bottom:10px;padding:6px 12px;font-size:12.5px;}
@media (max-width:720px){
  .vf-step{padding:4px 10px 4px 4px;font-size:11.5px;}
  .vf-title{font-size:19px;}
  .vf-exits{justify-content:stretch;}
  .vf-exits .btn{flex:1;justify-content:center;}
}

/* ── Plans popup (dashboard/upgrade-modal.js) ──────────────────────────────── */
dialog.modal-plans{max-width:min(680px,calc(100vw - 32px));width:100%;}
.plans{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px;margin-top:14px;}

/* ── Factory loop: spec approval, incidents, evidence, design (dashboard/render-build.js) ── */
.spec-approval{display:flex;flex-direction:column;gap:8px;border:1px solid rgba(217,119,6,.4);background:rgba(217,119,6,.06);border-radius:8px;padding:10px 12px;}
.spec-approval textarea{width:100%;min-height:56px;resize:vertical;font:inherit;font-size:13.5px;}
.spec-contract{max-height:16em;overflow:auto;margin:0;white-space:pre-wrap;}
.incidents{border:1px solid rgba(220,38,38,.4);background:rgba(220,38,38,.06);border-radius:10px;padding:10px 12px;margin-bottom:10px;}
.incident{display:flex;flex-direction:column;gap:4px;overflow-wrap:anywhere;}
.incident + .incident{margin-top:8px;}
.evidence-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:14px;}
.evidence-grid figure{margin:0;display:flex;flex-direction:column;gap:4px;}
.swatches{display:flex;flex-wrap:wrap;gap:10px;margin:6px 0;}
.swatch{display:inline-flex;align-items:center;gap:6px;}
.swatch-chip{width:18px;height:18px;border-radius:5px;border:1px solid var(--border);display:inline-block;}

/* ── Lovable look (dashboard) ─────────────────────────────────────── */
.dash-side{background:var(--surface-2);border-right:1px solid var(--border-soft);}
.rail-new,.vf-step.current .n{background:var(--text);color:#fcfbf8;}
.rail-item,.icon-btn{background:var(--surface);}
.tab{font-weight:500;}
.tab[aria-selected="true"],.tab.active{color:var(--text);border-bottom-color:var(--text);}
.card-title,.icp-label{text-transform:none;letter-spacing:0;font-size:12.5px;font-weight:500;}
.plan-badge{text-transform:none;letter-spacing:0;font-weight:500;font-size:11.5px;}
.pill{font-weight:500;}
.toast{background:var(--text);color:#fcfbf8;border-color:var(--text);}
dialog.modal{border-radius:20px;border-color:var(--border-soft);}
.project-item.active,.project-item[aria-current]{background:var(--surface);box-shadow:var(--shadow-xs);}
