/* Foundry admin panel. Hand-authored, no build step. */
*,*::before,*::after{box-sizing:border-box}
:root{--ink:#0f172a;--muted:#5b6472;--line:#dfe3ea;--surface:#f6f8fb;
  --brand:#2563eb;--brand-dark:#1d4ed8;--good:#15803d;--warn:#b45309;--bad:#b91c1c}
body{margin:0;font:15px/1.6 system-ui,-apple-system,"Segoe UI",sans-serif;color:var(--ink);
  background:var(--surface);overflow-wrap:break-word}
h1{font-size:1.5rem;margin:0 0 .2rem}
h2{font-size:1.08rem;margin:1.6rem 0 .5rem}
h2:first-child{margin-top:0}
h3.mini-h{font-size:.82rem;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);
  margin:1.3rem 0 .4rem}
p{margin:0 0 .8rem}
a{color:var(--brand-dark)}
code,.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.87em}
.dim{color:var(--muted)}
.sub{color:var(--muted);margin:0}
.note{font-size:.87rem;color:var(--muted);background:#fff;border-left:3px solid var(--line);
  padding:.6rem .8rem;margin:.9rem 0}
.warn-text{color:var(--warn)}

.top{background:#fff;border-bottom:1px solid var(--line);position:sticky;top:0;z-index:20}
.bar{display:flex;align-items:center;gap:1.4rem;flex-wrap:wrap;
  width:min(1180px,100% - 2.5rem);margin-inline:auto;min-height:60px}
.logo{font-weight:700;color:var(--ink);text-decoration:none;font-size:1.05rem}
.top nav{display:flex;gap:1.1rem;flex:1;flex-wrap:wrap}
.top nav a{color:var(--muted);text-decoration:none;font-size:.93rem}
.top nav a:hover{color:var(--brand-dark)}
.right{display:flex;align-items:center;gap:.9rem}
.quiet{color:var(--muted);font-size:.87rem;text-decoration:none}

.page{width:min(1180px,100% - 2.5rem);margin:1.8rem auto 4rem}
.head{display:flex;justify-content:space-between;align-items:flex-end;gap:1rem;
  flex-wrap:wrap;margin-bottom:1.2rem}
.actions{display:flex;gap:.5rem;flex-wrap:wrap}

.card{background:#fff;border:1px solid var(--line);border-radius:12px;padding:1.3rem;
  margin-bottom:1.2rem}
.card.narrow{max-width:26rem}
.center{margin-inline:auto}
.card.empty{text-align:center;padding:2.6rem}
.cols{display:grid;gap:1.2rem}
@media(min-width:900px){.cols{grid-template-columns:1fr 1fr;align-items:start}}

.btn{display:inline-block;background:var(--brand);color:#fff;border:1px solid var(--brand);
  border-radius:8px;padding:.5rem .95rem;font:inherit;font-weight:600;font-size:.92rem;
  cursor:pointer;text-decoration:none;max-width:100%}
.btn:hover{background:var(--brand-dark)}
.btn.ghost{background:#fff;color:var(--ink);border-color:var(--line)}
.btn.ghost:hover{border-color:var(--brand);background:#fff}
.btn.sm{padding:.32rem .7rem;font-size:.85rem}
.btn.full{width:100%;margin-top:.6rem}
.mini{background:#fff;border:1px solid var(--line);border-radius:6px;padding:.22rem .55rem;
  font:inherit;font-size:.8rem;cursor:pointer;text-decoration:none;color:var(--ink);
  display:inline-block}
.mini:hover{border-color:var(--brand);color:var(--brand-dark)}
.mini.danger:hover{border-color:var(--bad);color:var(--bad)}
.inline{display:inline}

label{display:block;margin-bottom:.8rem;font-weight:600;font-size:.88rem}
input,select,textarea{font:inherit;width:100%;padding:.5rem .6rem;border:1px solid var(--line);
  border-radius:8px;background:#fff;margin-top:.25rem;font-weight:400}
textarea{resize:vertical}
.two{display:grid;gap:0 1rem}
@media(min-width:720px){.two{grid-template-columns:1fr 1fr}}
.row-form{display:flex;gap:1rem;flex-wrap:wrap;align-items:end}
.row-form label{margin-bottom:0;min-width:12rem}
.checks{display:flex;flex-wrap:wrap;gap:.4rem .9rem;margin-bottom:1rem}
.chk{display:flex;align-items:flex-start;gap:.4rem;font-weight:400;font-size:.9rem;margin:0}
.chk input{width:auto;margin:.25rem 0 0}
.chk.big{background:var(--surface);border:1px solid var(--line);border-radius:8px;
  padding:.8rem;margin:.6rem 0 1rem;font-size:.9rem}
.foot{display:flex;gap:.6rem;flex-wrap:wrap;margin-top:1.2rem;padding-top:1rem;
  border-top:1px solid var(--line)}

.grid{width:100%;border-collapse:collapse;background:#fff;font-size:.9rem}
.grid th{text-align:left;font-size:.75rem;text-transform:uppercase;letter-spacing:.06em;
  color:var(--muted);border-bottom:1px solid var(--line);padding:.5rem .6rem}
.grid td{border-bottom:1px solid var(--line);padding:.6rem;vertical-align:top;min-width:0}
.grid tr.detail td{border-top:0;padding-top:0}
.row-actions{display:flex;gap:.3rem;flex-wrap:wrap}

.pill{display:inline-block;border-radius:999px;padding:.1rem .5rem;font-size:.76rem;
  font-weight:650;background:var(--surface);border:1px solid var(--line);color:var(--muted)}
.pill.good{background:#eafaef;border-color:#bfe8cd;color:var(--good)}
.pill.warn{background:#fff6e8;border-color:#f3ddb5;color:var(--warn)}
.pill.bad{background:#fdecec;border-color:#f5c6c6;color:var(--bad)}

.flash{border-radius:10px;padding:.75rem 1rem;margin-bottom:1rem;font-size:.92rem;
  background:#fff;border:1px solid var(--line)}
.flash.good{background:#eafaef;border-color:#bfe8cd;color:#14532d}
.flash.warn{background:#fff6e8;border-color:#f3ddb5;color:#7c2d12}
.flash.bad{background:#fdecec;border-color:#f5c6c6;color:#7f1d1d}

.meter{display:flex;align-items:center;gap:.6rem;font-size:.84rem;margin-bottom:.25rem}
.meter .k{flex:0 0 11rem;color:var(--muted);min-width:0;overflow:hidden;text-overflow:ellipsis}
.meter .bar{display:block;flex:1;height:7px;background:var(--surface);border-radius:99px;overflow:hidden;
  border:1px solid var(--line)}
.meter .bar i{display:block;height:100%;background:var(--brand)}
.meter .n{flex:0 0 3.6rem;text-align:right;font-variant-numeric:tabular-nums}

.blocks{max-height:34rem;overflow:auto}
.block{border:1px solid var(--line);border-radius:8px;padding:.7rem .85rem;margin-bottom:.55rem;
  font-size:.88rem}
.kv{display:flex;gap:.6rem;margin-bottom:.2rem}
.kv .k{flex:0 0 5.5rem;color:var(--muted);font-size:.78rem;text-transform:uppercase;
  letter-spacing:.05em;padding-top:.15rem}
.kv .v{flex:1;min-width:0}

.build.ok{border-left:3px solid var(--good)}
.build.fail{border-left:3px solid var(--bad)}
.build-head{display:flex;align-items:center;gap:.7rem;flex-wrap:wrap;margin-bottom:.5rem}
.build-head h2{margin:0}
.finding{border-radius:8px;padding:.7rem .85rem;margin:.5rem 0;font-size:.9rem;
  background:var(--surface);border:1px solid var(--line)}
.finding.blocker{background:#fdecec;border-color:#f5c6c6}
.finding.warning{background:#fff6e8;border-color:#f3ddb5}
.blind{margin-top:.8rem;font-size:.87rem}
.blind summary{cursor:pointer;color:var(--muted)}

.meter .bar i.thin{background:var(--warn)}

/* coverage picker */
.cover{border:1px solid var(--line);border-radius:10px;max-height:26rem;overflow:auto;background:#fff}
.state{border-bottom:1px solid var(--line)}
.state:last-child{border-bottom:0}
.state>summary{display:flex;align-items:center;gap:.8rem;padding:.55rem .8rem;cursor:pointer;
  list-style:none;flex-wrap:wrap}
.state>summary::-webkit-details-marker{display:none}
.state>summary::before{content:"▸";color:var(--muted);flex:0 0 auto}
.state[open]>summary::before{content:"▾"}
.state-meta{font-size:.78rem;margin-left:auto}
.city-box{padding:.2rem .8rem .9rem 2rem;background:var(--surface)}
.city-tools{display:flex;gap:.5rem;align-items:center;margin-bottom:.5rem}
.city-tools input{flex:1;padding:.3rem .5rem;font-size:.85rem;margin:0}
.city-list{display:grid;gap:.15rem;max-height:15rem;overflow:auto;
  grid-template-columns:1fr}
@media(min-width:760px){.city-list{grid-template-columns:1fr 1fr}}
.city{font-size:.85rem;align-items:baseline}
.city em{font-size:.75rem}

.seo-block{border-top:1px solid var(--line);margin-top:1rem;padding-top:1rem}
.seo-block h3{display:flex;align-items:center;gap:.6rem}

/* build progress */
.progress-wrap{height:6px;background:var(--line);border-radius:99px;overflow:hidden;margin:.3rem 0 .7rem}
.progress{height:100%;background:var(--brand);transition:width .4s ease}
.queue{display:flex;flex-wrap:wrap;gap:.3rem .6rem;font-size:.8rem;margin-bottom:1.2rem}
.queue .q{opacity:.45}
.queue .q.done{opacity:1;color:var(--good)}
.queue .q.now{opacity:1;color:var(--brand-dark);font-weight:700}
.spin{display:inline-block;width:.7em;height:.7em;border:2px solid var(--line);
  border-top-color:var(--brand);border-radius:50%;animation:spin .8s linear infinite;
  vertical-align:middle}
@keyframes spin{to{transform:rotate(360deg)}}

/* ---- deploy ------------------------------------------------------------- */
.picklist{display:grid;gap:.15rem;margin:.6rem 0 1rem;max-height:20rem;overflow:auto;
  border:1px solid var(--line);border-radius:10px;padding:.5rem}
.pick{display:flex;align-items:center;gap:.55rem;padding:.3rem .45rem;border-radius:6px;
  font-size:.9rem;margin:0}
.pick:hover{background:var(--surface)}
.pick.off{opacity:.5}
.pick .who{font-weight:600}
.pick input{width:auto;margin:0}
label.inline{display:flex;align-items:center;gap:.5rem;font-weight:500}
label.inline input{width:auto;margin:0}
details.site-deploy{border-top:1px solid var(--line);padding:.6rem 0}
details.site-deploy summary{cursor:pointer;font-weight:600;padding:.3rem 0}
details.site-deploy .sub-form{border-left:3px solid var(--line);padding:.2rem 0 .2rem 1rem;
  margin:.9rem 0}
details.site-deploy h3{margin:.2rem 0 .6rem;font-size:.95rem}
.step{border-left:3px solid var(--line);padding:.35rem 0 .35rem .8rem;margin:.7rem 0}
.step.ok{border-left-color:var(--good)}
.step.bad{border-left-color:var(--bad)}
.step-head{display:flex;gap:.6rem;align-items:baseline}
.cmd{font-size:.8rem;color:var(--muted);word-break:break-all;margin:.2rem 0}
pre.out{background:var(--surface);border:1px solid var(--line);border-radius:6px;
  padding:.6rem .7rem;font-size:.78rem;line-height:1.45;max-height:16rem;overflow:auto;
  white-space:pre-wrap;word-break:break-word;margin:.35rem 0 0}

/* A four-thousand-row city list is the only place in the panel where the
   browser has to lay out more than a screenful. content-visibility lets it
   skip everything scrolled out of view; the intrinsic size keeps the
   scrollbar honest so the list does not jump while you scroll it. */
.city-box .chk.city{content-visibility:auto;contain-intrinsic-size:auto 26px}

/* global service selector */
.global-svc{display:flex;flex-wrap:wrap;align-items:flex-end;gap:.9rem 1.4rem;
  background:var(--surface);border:1px solid var(--line);border-radius:10px;
  padding:.9rem 1rem;margin:.2rem 0 1rem}
.global-svc label{flex:1 1 22rem;margin:0}
.global-svc .svc-actions{display:flex;align-items:center;gap:.6rem;padding-bottom:.15rem}

/* `.chk` sets display:flex, and an explicit display beats what the [hidden]
   attribute is supposed to do — so every trade's services stayed on screen
   while the script believed it had hidden them. The JS was reading .hidden,
   which was true; the browser was reading display:flex, which won. */
.chk[hidden], label[hidden]{display:none !important}

/* prompts page */
.prompt-wrap{position:relative}
.prompt-wrap [data-copy]{position:absolute;top:.5rem;right:.5rem;z-index:2}
pre.prompt{background:var(--surface);border:1px solid var(--line);border-radius:10px;
  padding:1rem 1.1rem;font-size:.8rem;line-height:1.5;white-space:pre-wrap;word-break:break-word;
  max-height:26rem;overflow:auto;margin:.4rem 0 0}
.two-col{display:grid;grid-template-columns:1fr 1fr;gap:1.1rem}
@media (max-width:860px){.two-col{grid-template-columns:1fr}}
ul.fmt{margin:.4rem 0 1rem;padding-left:1.1rem;font-size:.9rem;color:var(--muted)}
ul.fmt li{margin:.2rem 0}
label.upload{display:block;margin:.6rem 0 0;font-size:.9rem}
table.grid{width:100%;border-collapse:collapse;margin-top:.6rem;font-size:.9rem}
table.grid th,table.grid td{text-align:left;padding:.4rem .6rem;border-bottom:1px solid var(--line)}
table.grid th{font-weight:600;color:var(--muted)}
tr.prow td{background:var(--surface);padding:.6rem}
tr.prow pre.prompt{max-height:18rem}
