/* Studio Platform — shared styles.
   IMPORTANT: brand colours (--ink/--primary/--accent) are for the CANVAS.
   The app's own furniture uses fixed --ui-* neutrals so a dark brand
   (EXIT CODE, Metis) doesn't render an unreadable interface. */
:root{
  --ui-bg:#F4F6FA;
  --ui-panel:#FFFFFF;
  --ui-line:#E3E7EE;
  --ui-chip:#EEF1F6;
  --ui-text:#212734;
  --ui-muted:#6B7385;
}
*{box-sizing:border-box;min-width:0}
html,body{margin:0;height:100%;overflow:hidden}
body{
  font-family:var(--font-body),system-ui,-apple-system,sans-serif;
  color:var(--ui-text);background:var(--ui-bg);-webkit-font-smoothing:antialiased;
}
button{font:inherit;cursor:pointer;border:none;background:none;color:inherit}
input,textarea,select{font:inherit;color:var(--ui-text)}

/* ---------- gate (this one DOES use brand colour, it's a brand moment) ---------- */
.gate{position:fixed;inset:0;background:var(--ink);display:grid;place-items:center;z-index:1000;padding:24px}
.gate-card{width:100%;max-width:400px;background:#fff;border-radius:18px;padding:38px 30px 30px;text-align:center;
  box-shadow:0 24px 60px rgba(0,0,0,.3)}
.gate-card h1{font-family:var(--font-display),sans-serif;font-weight:800;font-size:25px;margin:0 0 6px;color:var(--ink)}
.gate-card p{color:var(--ui-muted);font-size:14px;margin:0 0 22px}
.gate-card input{width:100%;padding:13px 15px;border:1px solid var(--ui-line);border-radius:10px;font-size:16px;text-align:center;letter-spacing:.18em}
.gate-card input:focus{outline:none;border-color:var(--primary)}
.gate-card button{width:100%;margin-top:12px;background:var(--primary);color:var(--on-primary,#fff);
  padding:13px;border-radius:10px;font-weight:700}
.gate-err{color:#d33;font-size:13px;margin-top:10px;min-height:18px}

/* ---------- layout ---------- */
.app{display:grid;grid-template-columns:290px 1fr 330px;height:100vh}
.panel{background:var(--ui-panel);border-right:1px solid var(--ui-line);display:flex;flex-direction:column;overflow:hidden}
.panel.right{border-right:none;border-left:1px solid var(--ui-line)}
.panel-head{padding:16px 18px;border-bottom:1px solid var(--ui-line);display:flex;align-items:center;justify-content:space-between;gap:10px}
.panel-head h2{font-family:var(--font-display),sans-serif;font-size:14px;margin:0;font-weight:700;letter-spacing:.02em;color:var(--ui-text)}
.panel-body{overflow-y:auto;padding:14px 16px;flex:1}

.topbar{display:flex;align-items:center;justify-content:space-between;padding:12px 18px;
  border-bottom:1px solid var(--ui-line);background:var(--ui-panel);gap:12px}
.topbar .name{font-family:var(--font-display),sans-serif;font-weight:800;font-size:15px;color:var(--ui-text)}
.topbar .right{display:flex;gap:8px;align-items:center}
.mini{font-size:12.5px;padding:7px 12px;border-radius:8px;background:var(--ui-chip);font-weight:600;color:var(--ui-text)}
.mini:hover{background:var(--ui-line)}
.autosave{font-size:11.5px;color:var(--ui-muted);opacity:0;transition:opacity .3s}
.autosave.on{opacity:1}

/* ---------- stage ---------- */
.stage{display:flex;flex-direction:column;overflow:hidden;background:var(--ui-bg)}
.stage-inner{flex:1;display:grid;place-items:center;padding:22px;overflow:auto}
#post-canvas{max-width:100%;max-height:100%;box-shadow:0 18px 44px rgba(0,0,0,.16);border-radius:6px;background:#fff}
.stage-foot{padding:9px 18px;border-top:1px solid var(--ui-line);font-size:12px;color:var(--ui-muted);background:var(--ui-panel);text-align:center}

/* ---------- templates ---------- */
.search{width:100%;padding:9px 12px;border:1px solid var(--ui-line);border-radius:9px;font-size:13.5px;margin-bottom:12px;background:#fff}
.search:focus{outline:none;border-color:var(--primary)}
/* season / year filters */
.filters{display:flex;flex-direction:column;gap:6px;margin-bottom:12px}
.filters label{display:flex;align-items:center;gap:7px;font-size:12px;font-weight:600;color:var(--ui-muted);cursor:pointer}
.filters input{accent-color:var(--primary);margin:0}
#season-banner{background:var(--ui-chip);border-radius:9px;padding:9px 11px;margin-bottom:10px;
  font-size:12px;color:var(--ui-text);display:flex;align-items:center;justify-content:space-between;gap:8px}
#season-banner strong{color:var(--primary)}
#season-banner button{font-size:11.5px;font-weight:700;color:var(--primary);white-space:nowrap}
.tag-live{display:inline-block;font-style:normal;font-size:9.5px;font-weight:800;background:#DCF5E4;color:#1B7A3D;
  padding:1px 5px;border-radius:4px;margin-left:5px;vertical-align:middle}
.tag-soon{display:inline-block;font-style:normal;font-size:9.5px;font-weight:800;background:#FFF0D4;color:#8A6100;
  padding:1px 5px;border-radius:4px;margin-left:5px;vertical-align:middle}
.tag-arch{display:inline-block;font-style:normal;font-size:9.5px;font-weight:800;background:#ECEEF2;color:#7A8494;
  padding:1px 5px;border-radius:4px;margin-left:5px;vertical-align:middle}
.tpl.arch{opacity:.55}

#cat-list{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:14px}
.cat{font-size:12px;font-weight:600;padding:5px 11px;border-radius:999px;background:var(--ui-chip);color:var(--ui-muted);text-transform:capitalize}
.cat.on{background:var(--primary);color:var(--on-primary,#fff)}
#tpl-list{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.tpl{border:2px solid transparent;border-radius:11px;overflow:hidden;background:var(--ui-chip);text-align:left;padding:0;transition:border-color .15s}
.tpl img{width:100%;display:block;aspect-ratio:4/5;object-fit:cover}
.tpl span{display:block;padding:7px 9px;font-size:11.5px;font-weight:600;line-height:1.3;color:var(--ui-text)}
.tpl.on{border-color:var(--primary)}
.empty{font-size:13px;color:var(--ui-muted);text-align:center;padding:20px 0}

/* ---------- fields ---------- */
.field{margin-bottom:14px}
.field label{display:block;font-size:12px;font-weight:700;color:var(--ui-muted);margin-bottom:5px;letter-spacing:.02em}
.field input[type=text],.field textarea{width:100%;padding:9px 11px;border:1px solid var(--ui-line);border-radius:9px;
  font-size:13.5px;resize:vertical;background:#fff}
.field input:focus,.field textarea:focus{outline:none;border-color:var(--primary)}
.field textarea{min-height:74px;line-height:1.5}
.file-btn{display:block;padding:11px;border:1.5px dashed var(--ui-line);border-radius:10px;text-align:center;
  font-size:12.5px;font-weight:600;color:var(--ui-muted);cursor:pointer}
.file-btn:hover{border-color:var(--primary);color:var(--primary)}
.file-btn input{display:none}
.ba-row{display:grid;grid-template-columns:1fr 1fr;gap:9px}

#fmt-row{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:14px}
.fmt{font-size:12px;font-weight:600;padding:6px 11px;border-radius:8px;background:var(--ui-chip);color:var(--ui-muted)}
.fmt.on{background:var(--ui-text);color:#fff}

/* photo library */
#photo-library{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin-top:8px;max-height:190px;overflow-y:auto}
.libimg{border-radius:8px;overflow:hidden;padding:0;border:2px solid transparent}
.libimg img{width:100%;aspect-ratio:1;object-fit:cover;display:block}
.libimg:hover{border-color:var(--primary)}

/* lint */
.lint{font-size:11.5px;margin-top:6px;line-height:1.8;min-height:16px}
.lint.ok{color:#2e8b57}
.lint-tag{display:inline-block;padding:2px 7px;border-radius:5px;font-weight:700;margin-right:4px}
.lint-tag.warn{background:#FFF4D6;color:#8A6100}
.lint-tag.block{background:#FFE0E0;color:#A11}

/* export */
.export-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:6px}
.xbtn{padding:11px 8px;border-radius:9px;background:var(--ui-chip);font-size:12.5px;font-weight:600;text-align:center;color:var(--ui-text)}
.xbtn:hover{background:var(--ui-line)}
.xbtn.primary{background:var(--primary);color:var(--on-primary,#fff);grid-column:1/-1}
.xbtn.recording{background:#d33;color:#fff}

/* toast */
#toast{position:fixed;left:50%;bottom:26px;transform:translateX(-50%) translateY(14px);opacity:0;pointer-events:none;
  background:#212734;color:#fff;padding:11px 20px;border-radius:10px;font-size:13.5px;font-weight:600;
  transition:opacity .2s,transform .2s;z-index:900}
#toast.show{opacity:1;transform:translateX(-50%)}
#toast.err{background:#c22}

/* mobile */
.mtabs{display:none}
@media (max-width:1000px){
  .app{grid-template-columns:1fr;grid-template-rows:1fr}
  .mtabs{display:flex;border-bottom:1px solid var(--ui-line);background:var(--ui-panel)}
  .mtab{flex:1;padding:11px;font-size:12.5px;font-weight:700;color:var(--ui-muted)}
  .mtab.on{color:var(--primary);box-shadow:inset 0 -2px 0 var(--primary)}
  .panel{display:none;border:none}
  .stage{display:none}
  body[data-mobile="templates"] .panel.left{display:flex}
  body[data-mobile="edit"] .panel.right{display:flex}
  body[data-mobile="preview"] .stage{display:flex}
  body:not([data-mobile]) .panel.left{display:flex}
}

/* ---------- scheduler ---------- */
.stabs{display:flex;gap:4px;width:100%}
.stab{flex:1;padding:10px 8px;font-size:12.5px;font-weight:700;color:var(--ui-muted);border-radius:8px 8px 0 0}
.stab.on{color:var(--primary);background:var(--ui-chip)}
.stab .badge{font-style:normal;background:var(--primary);color:var(--on-primary,#fff);font-size:10px;
  padding:1px 5px;border-radius:99px;margin-left:4px}
.xbtn.sched{background:var(--ui-text);color:#fff}
.xbtn.sched:hover{opacity:.9}

.due-banner{background:#FFF0D4;color:#8A6100;border-radius:9px;padding:9px 11px;font-size:12px;
  display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:12px;font-weight:600}
.due-banner button{font-size:11.5px;font-weight:800;color:#8A6100;text-decoration:underline}

.cal-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}
.cal-head span{font-size:13px;font-weight:700;color:var(--ui-text)}
.cal-head button{font-size:18px;color:var(--ui-muted);padding:2px 9px;border-radius:6px}
.cal-head button:hover{background:var(--ui-chip)}
.cal-dow{display:grid;grid-template-columns:repeat(7,1fr);gap:2px;margin-bottom:3px}
.cal-dow span{text-align:center;font-size:9.5px;font-weight:800;color:var(--ui-muted)}
.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px;margin-bottom:16px}
.cal-cell{aspect-ratio:1;border-radius:6px;background:var(--ui-chip);display:flex;flex-direction:column;
  align-items:center;justify-content:center;gap:2px;position:relative;font-size:10.5px}
.cal-cell.empty{background:transparent}
.cal-cell.today{outline:2px solid var(--primary)}
.cal-cell.has{cursor:pointer;background:#fff;border:1px solid var(--ui-line)}
.cal-cell.has:hover{border-color:var(--primary)}
.cal-cell .dnum{font-weight:600;color:var(--ui-text);line-height:1}
.cal-cell .dot{width:5px;height:5px;border-radius:50%;background:var(--primary);display:inline-block;margin:0 1px}
.cal-cell .dot.posted{background:#1B7A3D}
.cal-cell .more{font-size:8px;color:var(--ui-muted)}

.sched-list h4{font-size:11.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--ui-muted);margin:0 0 8px}
.sched-item{background:#fff;border:1px solid var(--ui-line);border-radius:9px;padding:9px 10px;margin-bottom:7px;
  display:flex;align-items:flex-start;justify-content:space-between;gap:8px}
.sched-item.posted{opacity:.6}
.si-main{display:flex;flex-direction:column;gap:2px;min-width:0}
.si-main strong{font-size:12.5px;color:var(--ui-text)}
.si-meta{font-size:10.5px;color:var(--ui-muted)}
.si-note{font-size:10.5px;color:var(--primary);font-style:italic}
.si-actions{display:flex;align-items:center;gap:4px;flex:none}
.si-actions button{font-size:10.5px;font-weight:700;padding:4px 7px;border-radius:6px;background:var(--ui-chip);color:var(--ui-text)}
.si-actions button.ok{background:#DCF5E4;color:#1B7A3D}
.si-actions button.del{background:transparent;color:var(--ui-muted);font-size:15px;padding:2px 5px}
.si-done{font-size:10.5px;color:#1B7A3D;font-weight:700}

#sched-dialog{border:none;border-radius:16px;padding:0;box-shadow:0 30px 70px rgba(0,0,0,.28);max-width:380px;width:92%}
#sched-dialog::backdrop{background:rgba(20,24,32,.45)}
.sd{padding:24px 26px 20px}
.sd h3{font-family:var(--font-display),sans-serif;margin:0 0 16px;font-size:18px;color:var(--ui-text)}
.sd-l{display:block;font-size:11.5px;font-weight:700;color:var(--ui-muted);margin:12px 0 5px}
.sd input[type=date],.sd input[type=text]{width:100%;padding:9px 11px;border:1px solid var(--ui-line);
  border-radius:8px;font-size:13.5px}
.sd-plats{display:grid;grid-template-columns:1fr 1fr;gap:5px}
.sd-plats label{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--ui-text);cursor:pointer}
.sd-plats input{accent-color:var(--primary);margin:0}
.sd-hint{font-size:11px;color:var(--ui-muted);line-height:1.5;margin:14px 0 0}
.sd-actions{display:flex;gap:8px;justify-content:flex-end;margin-top:18px}
.sd-ghost{padding:9px 16px;border-radius:8px;background:var(--ui-chip);font-weight:600;font-size:13px}
.sd-primary{padding:9px 18px;border-radius:8px;background:var(--primary);color:var(--on-primary,#fff);font-weight:700;font-size:13px}

/* ---- custom templates (made in-page) ---- */
.tpl-tools { margin-top: 14px; padding-top: 12px; border-top: 1px solid var(--ui-line); }
.mini.wide { width: 100%; }
.tpl-tools .hint { margin: 6px 0 8px; font-size: 11px; line-height: 1.45; color: var(--ui-muted); }
.tpl-tools-row { display: flex; gap: 6px; }
.tpl-tools-row .mini { flex: 1; text-align: center; }
.mini.as-btn { display: inline-block; cursor: pointer; padding: 6px 10px;
  border: 1px solid var(--ui-line); border-radius: 6px; background: var(--ui-surface);
  font-size: 12px; color: var(--ui-text); }
.mini.as-btn:hover { background: var(--ui-hover); }
.tag-mine { margin-right: 4px; padding: 1px 5px; border-radius: 4px;
  background: var(--ui-hover); color: var(--ui-muted); font-style: normal; font-size: 10px; }
.tpl { position: relative; }
.tpl-del { position: absolute; top: 4px; right: 4px; width: 18px; height: 18px;
  display: none; align-items: center; justify-content: center; border-radius: 50%;
  background: rgba(0,0,0,.6); color: #fff; font-style: normal; font-size: 13px; line-height: 1; }
.tpl:hover .tpl-del { display: flex; }
.tpl-del:hover { background: #c0392b; }

/* ---- layout / format on-off panel ---- */
.switches { margin-top: 12px; border-top: 1px solid var(--ui-line); padding-top: 10px; }
.switches summary { cursor: pointer; font-size: 12px; font-weight: 600; color: var(--ui-text); }
.switches h4 { margin: 12px 0 6px; font-size: 11px; text-transform: uppercase;
  letter-spacing: .06em; color: var(--ui-muted); }
.sw { display: flex; align-items: center; gap: 8px; padding: 4px 0; font-size: 12px; cursor: pointer; }
.sw input { margin: 0; }
.sw span { flex: 1; color: var(--ui-text); }
.sw em { font-style: normal; font-size: 10px; color: var(--ui-muted); }

/* ---- publish sync state on a scheduled post ---- */
.si-sync{display:inline-block;margin-top:3px;font-size:11px;color:var(--ui-muted)}
.si-sync.ok{color:#2a8a55}
.si-sync.err{color:#b3402f;cursor:help;text-decoration:underline dotted}

/* ---- drag and drop media ---- */
.stage-inner{position:relative}
.drop-hint{position:absolute;inset:10px;display:none;place-items:center;pointer-events:none;
  border:2px dashed var(--ui-line);border-radius:14px;background:rgba(0,0,0,.42);
  backdrop-filter:blur(2px);z-index:5}
.stage-inner.dropping .drop-hint{display:grid}
.drop-hint span{font-size:15px;font-weight:600;color:#fff;background:rgba(0,0,0,.55);
  padding:10px 20px;border-radius:999px}

/* ============================================================
   Connections panel

   Colour carries the meaning here, so it is used sparingly and
   consistently: green only for an account that can genuinely
   receive a post, amber only for waiting on someone else, red
   only for something broken that will cost posts if ignored.
   A platform's own brand colour appears only on its Connect
   button and its dot, so it never competes with status.
   ============================================================ */
.conn-summary{display:flex;align-items:center;gap:10px;font-size:12px;color:var(--ui-muted);
  padding:2px 0 10px;border-bottom:1px solid var(--ui-line);margin-bottom:12px;flex-wrap:wrap}
.conn-summary strong{color:var(--ui-text)}
.conn-summary .mini{margin-left:auto}

.conn-alert{background:#FEF2F2;border:1px solid #FCA5A5;border-radius:10px;padding:10px 12px;
  margin-bottom:12px;display:grid;gap:4px}
.conn-alert strong{font-size:12.5px;color:#991B1B}
.conn-alert span{font-size:11.5px;line-height:1.45;color:#7F1D1D}

.conn-stale{background:var(--ui-chip);border-radius:8px;padding:8px 10px;margin-bottom:10px;
  font-size:11.5px;color:var(--ui-muted)}

.conn-grid{display:grid;gap:10px}

.conn-tile{border:1px solid var(--ui-line);border-radius:12px;padding:10px 11px;background:var(--ui-panel)}
.conn-head{display:flex;align-items:center;gap:8px;margin-bottom:8px}
.conn-dot{width:20px;height:20px;border-radius:6px;display:grid;place-items:center;
  color:#fff;font-size:10px;font-weight:700;line-height:1;flex:none}
.conn-label{font-size:13px;font-weight:650;color:var(--ui-text)}
.conn-badge.live{margin-left:auto;font-size:9.5px;font-weight:700;letter-spacing:.04em;
  text-transform:uppercase;color:#166534;background:#DCFCE7;border-radius:20px;padding:2px 7px}

/* Connect uses the platform's own colour, passed in as --pc. Reconnect keeps
   the shape but drops the brand colour for red: it is a fault, not an offer. */
.conn-btn{width:100%;border:0;border-radius:9px;padding:9px 12px;cursor:pointer;
  background:var(--pc,#444);color:#fff;font-size:12.5px;font-weight:650;text-align:left}
.conn-btn:hover{filter:brightness(1.1)}
.conn-btn:disabled{opacity:.6;cursor:default}
.conn-btn.reconnect{background:#DC2626;margin-top:6px}

.conn-add{width:100%;margin-top:6px;border:1px dashed var(--ui-line);background:none;
  border-radius:9px;padding:7px;font-size:11.5px;color:var(--ui-muted);cursor:pointer}
.conn-add:hover{border-color:var(--ui-muted);color:var(--ui-text)}

.conn-empty{font-size:11.5px;line-height:1.45;color:var(--ui-muted)}

.conn-acct{display:flex;align-items:center;gap:9px;padding:7px 0}
.conn-acct + .conn-acct{border-top:1px solid var(--ui-line)}
.conn-av{width:28px;height:28px;border-radius:50%;object-fit:cover;flex:none}
.conn-av.ph{display:grid;place-items:center;color:#fff;font-size:11px;font-weight:700}
.conn-who{min-width:0;flex:1}
.conn-who strong{display:block;font-size:12.5px;color:var(--ui-text);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.conn-status{font-size:11px;color:var(--ui-muted)}
.conn-status.ok{color:#166534}
.conn-status.wait{color:#92400E}
.conn-status.bad{color:#B91C1C;font-weight:650}
.conn-x{border:0;background:none;color:var(--ui-muted);font-size:17px;line-height:1;
  cursor:pointer;padding:2px 4px;flex:none}
.conn-x:hover{color:#DC2626}

.conn-warn{background:#FEF2F2;border-radius:8px;padding:8px 9px;margin-top:4px;
  font-size:11.5px;line-height:1.45;color:#7F1D1D}
.conn-gate{background:#FFFBEB;border-radius:8px;padding:8px 9px;margin-top:8px;
  font-size:11px;line-height:1.45;color:#78350F}
.conn-note{font-size:11px;color:var(--ui-muted);padding:2px 0 4px}

.conn-foot{margin-top:12px;padding-top:10px;border-top:1px solid var(--ui-line)}
.stab .badge.bad{background:#DC2626;color:#fff}

/* Schedule dialog platform list, once it knows what each one will actually do. */
.sd-plats{grid-template-columns:1fr}
.sd-plat{display:flex;align-items:center;gap:6px}
.sd-plat em{font-style:normal;font-size:10.5px;color:var(--ui-muted);margin-left:auto}
.sd-plat.auto em{color:#166534;font-weight:650}

/* Three tabs in a narrow panel: keep each on one line so a notification count
   does not push its own tab taller than the two beside it. */
.stab{white-space:nowrap}
.stabs{gap:2px}

/* ---- ad copy ---- */
.ad-toggle{display:flex;gap:9px;align-items:flex-start;font-size:13.5px;color:var(--ui-text);
  cursor:pointer;padding:10px 0;border-top:1px solid var(--ui-line);margin-top:6px}
.ad-toggle input{margin-top:3px;accent-color:var(--primary)}
#ad-copy-block .hint{font-size:11px;color:var(--ui-muted);font-weight:400;display:block;margin-top:2px}
#ad-copy-block label .hint{display:inline}
#ad-primary-count,#ad-headline-count{font-size:11px;color:var(--ui-muted);text-align:right;margin-top:3px}
#ad-primary-count.warn,#ad-headline-count.warn{color:#B3261E;font-weight:600}
