@font-face{font-family:'Inter';font-weight:100 900;font-display:swap;src:url(fonts/inter-var.woff2) format('woff2')}
@font-face{font-family:'Playfair Display';font-weight:400 900;font-display:swap;src:url(fonts/playfair-var.woff2) format('woff2')}

:root{
  --ink:#08080a; --ink-2:#0c0c10; --panel:#101015; --panel-2:#15151b; --rail:#050507;
  --bone:#f6f2e9; --cream:#ded9cf; --muted:#918d85; --muted-2:#6b6862;
  --gold:#d4a441; --gold-lite:#f2d391; --gold-pale:#f8e7bd; --gold-deep:#8c6118;
  --late:#e0574a; --urgent:#e59a3c; --soon:#d9c46a; --ok:#5fa87d; --done:#4a8f68;
  --line:rgba(255,255,255,.08); --line-gold:rgba(212,164,65,.24);
  --serif:'Playfair Display',Georgia,serif;
  --sans:'Inter',system-ui,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;
  --r:6px;
}
*,*::before,*::after{box-sizing:border-box}
html,body{height:100%}
body{
  margin:0;background:var(--ink);color:var(--cream);font-family:var(--sans);font-size:14px;line-height:1.55;
  -webkit-font-smoothing:antialiased;
}
h1,h2,h3,h4,p,ul,ol,figure{margin:0}
ul{padding:0;list-style:none}
a{color:var(--gold-lite);text-decoration:none}
button,input,select,textarea{font:inherit;color:inherit}
:focus-visible{outline:2px solid var(--gold-lite);outline-offset:2px;border-radius:3px}
img,svg{display:block;max-width:100%}

/* ---------------- shell ---------------- */
.app{display:grid;grid-template-columns:236px 1fr;min-height:100vh}
.rail{background:var(--rail);border-right:1px solid var(--line);padding:22px 16px;display:flex;flex-direction:column;gap:26px;position:sticky;top:0;height:100vh}
.mark{font-family:var(--serif);font-size:19px;font-weight:800;letter-spacing:.04em;color:var(--bone);line-height:1.1}
.mark span{display:block;font-family:var(--sans);font-size:8px;letter-spacing:.34em;text-transform:uppercase;color:var(--gold);margin-top:7px;font-weight:600}
.railnav{display:grid;gap:3px}
.railnav button{
  display:flex;align-items:center;gap:11px;width:100%;text-align:left;background:none;border:0;cursor:pointer;
  padding:10px 12px;border-radius:var(--r);color:var(--muted);font-size:13px;font-weight:500;transition:.18s;
}
.railnav button:hover{background:var(--panel);color:var(--bone)}
.railnav button.on{background:linear-gradient(90deg,rgba(212,164,65,.16),rgba(212,164,65,.02));color:var(--gold-lite);box-shadow:inset 2px 0 0 var(--gold)}
.railnav .badge{margin-left:auto;background:var(--late);color:#fff;border-radius:99px;font-size:10px;font-weight:700;padding:1px 7px}
.rail .foot{margin-top:auto;font-size:10.5px;color:var(--muted-2);line-height:1.6}
.rail .foot b{color:var(--gold);font-weight:600}

.main{padding:26px 30px 70px;min-width:0}
.page-head{display:flex;flex-wrap:wrap;gap:16px;align-items:flex-start;justify-content:space-between;margin-bottom:22px}
.page-head h1{font-family:var(--serif);font-size:27px;font-weight:700;color:var(--bone);line-height:1.15}
.page-head .sub{color:var(--muted);font-size:13px;margin-top:5px}
.eyebrow{font-size:10px;letter-spacing:.28em;text-transform:uppercase;color:var(--gold);font-weight:600}

/* ---------------- primitives ---------------- */
.btn{
  display:inline-flex;align-items:center;gap:8px;border:1px solid var(--line);background:var(--panel);
  padding:9px 15px;border-radius:var(--r);cursor:pointer;font-size:12.5px;font-weight:600;transition:.18s;color:var(--cream);
}
.btn:hover{border-color:var(--line-gold);background:var(--panel-2);color:var(--bone)}
.btn.gold{background:linear-gradient(100deg,#a1741f,#f0cd7c 55%,#c99a37);color:#150f02;border-color:transparent}
.btn.gold:hover{filter:brightness(1.08)}
.btn.ghost{background:transparent}
.btn.danger:hover{border-color:rgba(224,87,74,.6);color:#f0a49b}
.btn.sm{padding:6px 11px;font-size:11.5px}
.btn[disabled]{opacity:.45;cursor:not-allowed}

.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);padding:18px}
.card h3{font-size:13px;font-weight:600;color:var(--bone);letter-spacing:.02em}
.grid{display:grid;gap:14px}
.g2{grid-template-columns:repeat(2,1fr)}
.g3{grid-template-columns:repeat(3,1fr)}
.g4{grid-template-columns:repeat(4,1fr)}

label.f{display:block;margin-bottom:12px}
label.f > span{display:block;font-size:9.5px;letter-spacing:.2em;text-transform:uppercase;color:var(--muted-2);margin-bottom:6px}
input,select,textarea{
  width:100%;background:var(--ink-2);border:1px solid var(--line);border-radius:4px;padding:9px 11px;font-size:13.5px;
  transition:.18s;
}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--gold);background:#0a0a0e}
textarea{min-height:78px;resize:vertical}
select{appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='11' height='7' fill='none' stroke='%23d4a441' stroke-width='1.6'%3E%3Cpath d='M1 1.2 5.5 5.8 10 1.2'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 11px center;padding-right:32px}

.pill{display:inline-flex;align-items:center;gap:6px;font-size:10px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;padding:3px 9px;border-radius:99px;border:1px solid}
.pill.late{color:#f0a49b;border-color:rgba(224,87,74,.5);background:rgba(224,87,74,.12)}
.pill.urgent{color:#f0c288;border-color:rgba(229,154,60,.5);background:rgba(229,154,60,.12)}
.pill.soon{color:#e6dda4;border-color:rgba(217,196,106,.42);background:rgba(217,196,106,.1)}
.pill.ok{color:#a5d4bb;border-color:rgba(95,168,125,.42);background:rgba(95,168,125,.1)}
.pill.done{color:#a5d4bb;border-color:rgba(74,143,104,.5);background:rgba(74,143,104,.14)}
.pill.past,.pill.nodate{color:var(--muted);border-color:var(--line);background:var(--panel-2)}

.empty{border:1px dashed var(--line);border-radius:var(--r);padding:26px;text-align:center;color:var(--muted);font-size:13px}
.note{font-size:12px;color:var(--muted-2);line-height:1.6}
.warn{background:rgba(229,154,60,.1);border:1px solid rgba(229,154,60,.35);color:#f0c288;padding:11px 14px;border-radius:var(--r);font-size:12.5px}

.kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
.kpi{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);padding:15px 16px}
.kpi .k{font-size:9.5px;letter-spacing:.22em;text-transform:uppercase;color:var(--muted-2)}
.kpi .v{font-family:var(--serif);font-size:29px;font-weight:700;color:var(--bone);line-height:1.1;margin-top:7px}
.kpi .n{font-size:11.5px;color:var(--muted);margin-top:5px}

/* ---------------- flags ---------------- */
.flag{display:flex;gap:14px;align-items:flex-start;padding:13px 15px;border:1px solid var(--line);border-radius:var(--r);background:var(--panel);margin-bottom:9px}
.flag .bar{width:3px;align-self:stretch;border-radius:99px;background:var(--muted-2)}
.flag.late .bar{background:var(--late)}
.flag.urgent .bar{background:var(--urgent)}
.flag .who{font-size:13.5px;color:var(--bone);font-weight:600}
.flag .what{font-size:12.5px;color:var(--muted);margin-top:3px}
.flag .go{margin-left:auto}

/* ---------------- city board ---------------- */
.board{display:grid;gap:10px}
.city{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);overflow:hidden}
.city.late{border-color:rgba(224,87,74,.4)}
.city.urgent{border-color:rgba(229,154,60,.35)}
.city__top{display:flex;flex-wrap:wrap;gap:12px;align-items:center;padding:13px 16px;cursor:pointer}
.city__name{font-family:var(--serif);font-size:17px;font-weight:700;color:var(--bone)}
.city__date{font-size:11.5px;color:var(--muted);margin-top:2px}
.city__head{min-width:200px;flex:1}
.city__risk{font-size:12px;color:var(--muted);flex:2;min-width:240px}
.city__meter{width:104px;flex:none}
.meter{height:5px;background:var(--ink-2);border-radius:99px;overflow:hidden;border:1px solid var(--line)}
.meter i{display:block;height:100%;background:linear-gradient(90deg,var(--gold-deep),var(--gold-lite))}
.meter-l{font-size:10px;color:var(--muted-2);margin-top:5px;text-align:right}

.stages{display:flex;flex-wrap:wrap;gap:6px;padding:0 16px 13px}
.stage{
  display:inline-flex;align-items:center;gap:7px;border:1px solid var(--line);background:var(--ink-2);
  border-radius:99px;padding:5px 11px 5px 8px;font-size:11.5px;cursor:pointer;transition:.16s;color:var(--muted);
}
.stage:hover{border-color:var(--line-gold);color:var(--bone)}
.stage i{width:13px;height:13px;border-radius:3px;border:1px solid var(--muted-2);display:inline-block;flex:none}
.stage.on{color:#a5d4bb;border-color:rgba(74,143,104,.45);background:rgba(74,143,104,.12)}
.stage.on i{background:var(--done);border-color:var(--done)}
.stage.late{border-color:rgba(224,87,74,.45);color:#f0a49b}
.stage.urgent{border-color:rgba(229,154,60,.4);color:#f0c288}
.stage small{opacity:.65;font-size:10px}

.city__body{border-top:1px solid var(--line);padding:16px;background:var(--ink-2);display:none}
.city.open .city__body{display:block}

/* ---------------- tables ---------------- */
table{width:100%;border-collapse:collapse;font-size:12.5px}
th{text-align:left;font-size:9.5px;letter-spacing:.18em;text-transform:uppercase;color:var(--muted-2);font-weight:600;padding:0 10px 9px;border-bottom:1px solid var(--line)}
td{padding:10px;border-bottom:1px solid var(--line);vertical-align:top}
tr:last-child td{border-bottom:0}
td.num,th.num{text-align:right;font-variant-numeric:tabular-nums}

/* ---------------- tasks ---------------- */
.task{display:flex;gap:12px;align-items:center;padding:10px 13px;border:1px solid var(--line);border-radius:var(--r);background:var(--panel);margin-bottom:7px}
.task.overdue{border-color:rgba(224,87,74,.4)}
.task .t{flex:1;min-width:0}
.task .t b{display:block;font-weight:600;color:var(--bone);font-size:13px}
.task .t span{font-size:11.5px;color:var(--muted)}
.task.done .t b{text-decoration:line-through;color:var(--muted-2)}
.tick{width:19px;height:19px;border-radius:4px;border:1px solid var(--muted-2);background:var(--ink-2);cursor:pointer;flex:none}
.task.done .tick{background:var(--done);border-color:var(--done)}

/* ---------------- creative ---------------- */
.creative{display:grid;grid-template-columns:330px 1fr;gap:20px;align-items:start}
.variants{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:14px}
.chip{border:1px solid var(--line);background:var(--panel);border-radius:99px;padding:7px 14px;font-size:12px;cursor:pointer;transition:.16s}
.chip:hover{border-color:var(--line-gold)}
.chip.on{background:linear-gradient(100deg,#a1741f,#f0cd7c 55%,#c99a37);color:#150f02;border-color:transparent;font-weight:600}
.previews{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:16px}
.preview{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);overflow:hidden}
.preview .frame{background:#000;display:grid;place-items:center;padding:10px}
.preview .frame svg{width:100%;height:auto;box-shadow:0 8px 26px -12px rgba(0,0,0,.9)}
.preview .bar{display:flex;align-items:center;gap:8px;padding:10px 12px;border-top:1px solid var(--line)}
.preview .bar b{font-size:12px;color:var(--bone);font-weight:600}
.preview .bar small{font-size:10.5px;color:var(--muted-2)}
.preview .bar .btn{margin-left:auto}

.caption{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);padding:14px;margin-bottom:10px}
.caption .h{display:flex;align-items:center;gap:9px;margin-bottom:9px}
.caption .h b{font-size:12px;color:var(--bone)}
.caption .h small{font-size:10.5px;color:var(--muted-2);margin-left:auto;font-variant-numeric:tabular-nums}
.caption .h small.over{color:#f0a49b}
.caption pre{margin:0;white-space:pre-wrap;word-break:break-word;font-family:var(--sans);font-size:12.5px;color:var(--cream);line-height:1.6}

.toast{position:fixed;right:20px;bottom:20px;background:var(--panel-2);border:1px solid var(--line-gold);color:var(--gold-pale);padding:12px 17px;border-radius:var(--r);font-size:13px;box-shadow:0 18px 40px -18px #000;z-index:60;max-width:380px}

.gate{min-height:100vh;display:grid;place-items:center;padding:24px}
.gate form{width:min(360px,100%);background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:26px}

.sec{margin-top:28px}
.sec > h2{font-family:var(--serif);font-size:19px;color:var(--bone);font-weight:700;margin-bottom:12px}
.row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.spacer{flex:1}

@media (max-width:1100px){
  .kpis{grid-template-columns:repeat(2,1fr)}
  .creative{grid-template-columns:1fr}
  .g4{grid-template-columns:repeat(2,1fr)}
  .g3{grid-template-columns:repeat(2,1fr)}
}
@media (max-width:820px){
  .app{grid-template-columns:1fr}
  .rail{position:static;height:auto;flex-direction:row;flex-wrap:wrap;align-items:center;gap:14px}
  .railnav{display:flex;flex-wrap:wrap;gap:4px}
  .rail .foot{display:none}
  .main{padding:20px 16px 60px}
  .g2,.g3,.g4,.kpis{grid-template-columns:1fr}
}

/* ---------------- phase 2 + 3 ---------------- */
.card.is-bad{border-color:rgba(224,87,74,.4)}
.comp{display:grid;grid-template-columns:150px 1fr 110px 90px;gap:8px;margin-bottom:8px}
.comp input,.comp select{padding:7px 9px;font-size:12.5px}
details summary::-webkit-details-marker{color:var(--gold)}
details summary{outline:none}
.kpi .k.note{font-size:9.5px;letter-spacing:.22em;text-transform:uppercase;color:var(--muted-2)}
@media (max-width:900px){
  .comp{grid-template-columns:1fr 1fr}
}

/* A table must scroll inside its own card, never stretch the page. */
.tw{overflow-x:auto;-webkit-overflow-scrolling:touch}
.tw table{min-width:100%}
.tw th,.tw td{padding-inline:7px;white-space:nowrap}
@media (max-width:900px){.tw table{min-width:480px}}

/* Grid and flex children default to min-width:auto, which means they refuse to
   shrink below their content — a wide table then stretches the whole page
   instead of scrolling inside its own card. */
.grid > *,.kpis > *,.app > *{min-width:0}
.card{min-width:0}

/* The campaign table earns more room than a straight half-and-half split. */
.g-wide{grid-template-columns:1.55fr 1fr}
@media (max-width:1100px){.g-wide{grid-template-columns:1fr}}
