:root{--bg:#fff;--card:#f0f4f9;--field:#fff;--ink:#1f1f1f;--muted:#444746;--line:#c4c7c5;--accent:#0b57d0;--accent-ink:#fff;--accent-hover:#0a4cb5;--tint:#d3e3fd;--on-tint:#041e49;--hover:#e9eef6;--head-line:#e3e3e3;--off-bg:#e3e3e3;--off-ink:#8a8d8b;--ok:#146c2e;--warn:#8c5a00;--bad:#b3261e;color-scheme:light}
:root[data-theme=dark]{--bg:#131314;--card:#1e1f20;--field:#131314;--ink:#e3e3e3;--muted:#c4c7c5;--line:#444746;--accent:#a8c7fa;--accent-ink:#062e6f;--accent-hover:#c2d7fb;--tint:#0842a0;--on-tint:#d3e3fd;--hover:#282a2c;--head-line:#2a2b2d;--off-bg:#282a2c;--off-ink:#747775;--ok:#6dd58c;--warn:#f2b84b;--bad:#f2b8b5;color-scheme:dark}
@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#131314;--card:#1e1f20;--field:#131314;--ink:#e3e3e3;--muted:#c4c7c5;--line:#444746;--accent:#a8c7fa;--accent-ink:#062e6f;--accent-hover:#c2d7fb;--tint:#0842a0;--on-tint:#d3e3fd;--hover:#282a2c;--head-line:#2a2b2d;--off-bg:#282a2c;--off-ink:#747775;--ok:#6dd58c;--warn:#f2b84b;--bad:#f2b8b5;color-scheme:dark}}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--ink);font:16px/1.5 "Google Sans",Roboto,system-ui,sans-serif}
a{color:inherit;text-decoration:none}
.top{display:flex;align-items:center;justify-content:space-between;gap:1rem;flex-wrap:wrap;padding:.8rem 1.25rem;background:var(--bg);border-bottom:1px solid var(--head-line);position:sticky;top:0;z-index:5}
.brand{font:500 1.25rem "Google Sans",system-ui,sans-serif}.brand small{font:400 .8rem "Google Sans",system-ui;color:var(--muted);margin-left:.4rem}
nav a{padding:.4rem .8rem;border-radius:99px;color:var(--muted)}nav a:hover{background:var(--hover)}nav a.on{background:var(--tint);color:var(--on-tint);font-weight:500}
main{max-width:1100px;margin:0 auto;padding:1.25rem 1rem 4rem}
h1{font:400 2rem "Google Sans",system-ui,sans-serif;margin:0}h2.day{font:500 1rem "Google Sans",system-ui;margin:1.75rem 0 .6rem;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}
.head{display:flex;justify-content:space-between;align-items:flex-start;gap:1rem;margin-bottom:1rem;flex-wrap:wrap}
.muted{color:var(--muted);margin:.2rem 0 0}
.btn{display:inline-block;border:1px solid var(--line);background:var(--bg);color:var(--accent);padding:.55rem 1.2rem;border-radius:99px;font-weight:500;font:inherit;cursor:pointer}
.btn:hover{background:var(--hover)}.btn.primary{background:var(--accent);color:var(--accent-ink);border-color:var(--accent)}.btn.primary:hover{background:var(--accent-hover)}.btn.primary:disabled{background:var(--off-bg);color:var(--off-ink);border-color:var(--off-bg);cursor:not-allowed}
.btn.danger{color:var(--bad)}.btn.sm{padding:.25rem .6rem}
button.link{background:none;border:0;color:var(--bad);cursor:pointer;font:inherit}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:.9rem}
.post{display:flex;gap:.8rem;background:var(--card);border:1px solid transparent;border-radius:16px;padding:.7rem}
.post:hover{background:var(--hover)}
.post img,.ph{width:88px;height:88px;border-radius:12px;object-fit:cover;flex:none}
.ph{display:grid;place-items:center;font-size:2rem;background:linear-gradient(135deg,hsl(var(--h) 60% 80%),hsl(calc(var(--h) + 40) 55% 65%))}
.ph.big{width:260px;height:260px;font-size:5rem}
.post .body{min-width:0}.post p{margin:.2rem 0;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.meta{display:flex;gap:.5rem;align-items:center;font-size:.85rem;color:var(--muted)}
.tags{font-size:.82rem;color:var(--accent);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pill{font-size:.72rem;padding:.1rem .55rem;border-radius:99px;text-transform:uppercase;letter-spacing:.04em;border:1px solid currentColor}
.pill.scheduled{color:var(--warn)}.pill.published{color:var(--ok)}.pill.failed{color:var(--bad)}
.err{color:var(--bad)}
.empty{padding:3rem;text-align:center;color:var(--muted);border:2px dashed var(--line);border-radius:12px}.empty a{color:var(--accent);text-decoration:underline}
.panel{background:var(--card);border:0;border-radius:20px;padding:1rem}
label{display:flex;flex-direction:column;gap:.25rem;font-size:.85rem;color:var(--muted)}
input:focus,textarea:focus,select:focus{outline:2px solid var(--accent);outline-offset:-1px}
input,textarea,select{font:inherit;color:var(--ink);background:var(--field);border:1px solid var(--line);border-radius:12px;padding:.5rem .7rem;width:100%}
textarea{resize:vertical}
.row{display:flex;gap:.7rem;align-items:flex-end;flex-wrap:wrap}.row .grow{flex:1;min-width:200px}
.edit{display:flex;gap:1.25rem;flex-wrap:wrap}.edit img{width:260px;height:260px;object-fit:cover;border-radius:10px}
.edit .fields{flex:1;min-width:260px;display:flex;flex-direction:column;gap:.8rem;align-items:flex-start}.fields label{width:100%}
.actions{display:flex;gap:.5rem;flex-wrap:wrap}
.sets{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:.9rem}
.set{display:flex;flex-direction:column;gap:.6rem}.set .row{justify-content:space-between;align-items:center}.set .tags{white-space:normal}
/* upload */
.steps{display:flex;gap:.5rem;list-style:none;padding:0;margin:0 0 1rem;flex-wrap:wrap}
.steps li{padding:.25rem .8rem;border-radius:99px;border:1px solid var(--line);color:var(--muted);font-size:.85rem}.steps li.on{background:var(--tint);color:var(--on-tint);border-color:var(--tint)}.steps li.done{color:var(--ok);border-color:var(--ok)}
.drop{align-items:center;text-align:center;padding:2.5rem 1rem;border:2px dashed var(--line);border-radius:14px;cursor:pointer;gap:.2rem;font-size:1rem;color:var(--muted);background:var(--card);border-color:var(--line)}
.drop strong{color:var(--ink);font-size:1.15rem}.drop.over{border-color:var(--accent);background:var(--tint)}
.tools{margin:1rem 0;display:grid;gap:1rem}.tools h3{margin:0 0 .5rem;font-size:.95rem}.tools input[type=date],.tools input#times{width:11rem}
.cards{display:grid;gap:.9rem;margin-top:1rem}
.card{display:grid;grid-template-columns:180px 1fr;gap:1rem;background:var(--card);border:1px solid transparent;border-radius:20px;padding:.8rem}
.card.bad{border-color:var(--bad)}
.thumb{position:relative}.thumb img{width:180px;height:180px;object-fit:cover;border-radius:14px}
.thumb .n{position:absolute;top:.4rem;left:.4rem;background:var(--accent);color:var(--accent-ink);border-radius:99px;min-width:1.6rem;text-align:center;font-size:.8rem}
.form{display:flex;flex-direction:column;gap:.4rem}
.count{font-size:.75rem;color:var(--muted);text-align:right;margin-top:-.2rem}.count.over{color:var(--bad)}
.chips{display:flex;flex-wrap:wrap;gap:.3rem;border:1px solid var(--line);border-radius:12px;padding:.3rem;background:var(--field)}.chips input{outline:0!important}
.chips input{border:0;flex:1;min-width:8rem;padding:.15rem .3rem}
.chip{background:var(--tint);color:var(--on-tint);border-radius:99px;padding:.05rem .6rem;font-size:.82rem;cursor:pointer}.chip::before{content:"#"}.chip:hover{opacity:.7}
.mini{display:flex;gap:.3rem}
.mock-note{position:fixed;bottom:.6rem;right:.8rem;font-size:.72rem;color:var(--muted);background:var(--card);padding:.15rem .6rem;border-radius:99px}
@media (max-width:600px){.card{grid-template-columns:1fr}.thumb img{width:100%;height:auto;max-height:260px}}
.theme{border:0;background:none;color:var(--muted);font-size:1.15rem;width:2.4rem;height:2.4rem;border-radius:50%;cursor:pointer;margin-left:.4rem}.theme:hover{background:var(--hover)}
.top .right{display:flex;align-items:center}
/* ---- campaigns ---- */
.center{text-align:center}
button.plain{color:var(--accent);text-decoration:underline}
.camps{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:.9rem}
.camp{display:flex;flex-direction:column;gap:.8rem;padding:.8rem}.camp:hover{background:var(--hover)}
.covers{display:grid;grid-template-columns:repeat(4,1fr);gap:.3rem}.covers img{width:100%;aspect-ratio:1;object-fit:cover;border-radius:10px}
.camp h3{margin:.2rem 0 .5rem;font:500 1.15rem "Google Sans",system-ui,sans-serif}
.bar{height:6px;background:var(--line);border-radius:99px;overflow:hidden}.bar i{display:block;height:100%;background:var(--accent)}
.s1{display:grid;grid-template-columns:1fr 1fr;gap:1.2rem;align-items:start}
@media (max-width:800px){.s1{grid-template-columns:1fr}}
.alert{padding:.7rem 1rem;border-radius:12px;margin-top:.8rem}.alert.bad{background:color-mix(in srgb,var(--bad) 14%,transparent);color:var(--bad)}
.conn{display:flex;gap:.7rem;align-items:center;margin-top:1rem;padding:.8rem 1rem}
.conn .dot{width:.7rem;height:.7rem;border-radius:50%;background:var(--warn)}.conn.ok .dot{background:var(--ok)}
.guide h3{margin:0 0 .5rem}.guide table{border-collapse:collapse;width:100%;font-size:.9rem}
.guide th{text-align:left;font-family:ui-monospace,monospace;font-weight:500;padding:.35rem .8rem .35rem 0;vertical-align:top;color:var(--accent)}.guide td{padding:.35rem 0}
.guide em{font-style:normal;font-size:.72rem;color:var(--bad);margin-left:.3rem}
.sumbar{display:flex;gap:1rem;align-items:flex-end;flex-wrap:wrap;margin-bottom:1rem}
.filters,.chipsrow{display:flex;gap:.4rem;flex-wrap:wrap}
.fchip{border:1px solid var(--line);background:var(--bg);color:var(--ink);padding:.3rem .85rem;border-radius:99px;font:inherit;font-size:.85rem;cursor:pointer;white-space:nowrap}
.fchip:hover{background:var(--hover)}.fchip.on{background:var(--tint);color:var(--on-tint);border-color:var(--tint)}
.crows{display:grid;gap:.8rem}
.crow{display:grid;grid-template-columns:170px 1fr 240px;gap:1rem;background:var(--card);border:1px solid transparent;border-radius:20px;padding:.8rem}
.crow[data-state=error]{border-color:var(--bad)}.crow[data-state=noimg]{border-color:var(--warn)}.crow.skipped{opacity:.5}
@media (max-width:900px){.crow{grid-template-columns:1fr}}
.cimgs{display:flex;flex-direction:column;gap:.4rem;align-items:flex-start}
.cover{position:relative;width:150px;height:150px;border-radius:14px;overflow:hidden;background:var(--hover);display:grid;place-items:center;font-size:2.5rem}
.cover img{width:100%;height:100%;object-fit:cover}.cover.empty{border:2px dashed var(--line)}
.n{position:absolute;top:.4rem;left:.4rem;background:var(--accent);color:var(--accent-ink);border-radius:99px;min-width:1.5rem;text-align:center;font:500 .78rem "Google Sans",system-ui,sans-serif;padding:0 .3rem}
.stack{position:absolute;right:.4rem;bottom:.4rem;background:rgba(0,0,0,.65);color:#fff;border-radius:99px;font-size:.72rem;padding:0 .5rem}
.minis{display:flex;gap:.2rem}.minis img{width:34px;height:34px;object-fit:cover;border-radius:6px}
.cform{display:flex;flex-direction:column;gap:.5rem}.cform .row{gap:.6rem;align-items:flex-start}
.cstat{display:flex;flex-direction:column;gap:.5rem;align-items:flex-start;font-size:.88rem}
.msgs{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.3rem}
.msgs .bad{color:var(--bad)}.msgs .warn,p.warn,.warn{color:var(--warn)}.msgs .ok,p.ok{color:var(--ok)}.msgs a{color:inherit;text-decoration:underline}
.pill.st-ready{color:var(--ok)}.pill.st-noimg{color:var(--warn)}.pill.st-error{color:var(--bad)}.pill.st-skipped{color:var(--muted)}
.review{margin-bottom:1rem}.review h2{margin:0 0 .3rem;font:500 1.4rem "Google Sans",system-ui,sans-serif}.review p{margin:.2rem 0}
.rgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:.8rem}
.rcard{display:flex;gap:.8rem;background:var(--card);border-radius:16px;padding:.7rem}
.rcard .cover{width:96px;height:96px;flex:none;border-radius:12px}.rcard p{margin:.2rem 0;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
/* picker */
.picker{width:min(960px,96vw);max-height:92vh;padding:0;border:0;border-radius:24px;background:var(--bg);color:var(--ink);overflow:hidden}
.picker[open]{display:flex;flex-direction:column}.picker::backdrop{background:rgba(0,0,0,.5)}
.picker header{display:flex;justify-content:space-between;gap:1rem;padding:1rem 1.25rem .5rem}.picker h2{margin:0;font:500 1.35rem "Google Sans",system-ui,sans-serif}
.x{border:0;background:none;color:var(--muted);font-size:1.2rem;cursor:pointer;width:2.2rem;height:2.2rem;border-radius:50%}.x:hover{background:var(--hover)}
.tabs{display:flex;gap:.3rem;padding:0 1.25rem;border-bottom:1px solid var(--head-line)}
.tabs button{border:0;background:none;color:var(--muted);font:inherit;padding:.6rem .9rem;cursor:pointer;border-bottom:3px solid transparent}.tabs .on{color:var(--accent);border-color:var(--accent)}
#pkSite,#pkUp{flex:1;overflow:auto;padding:1rem 1.25rem;min-height:300px}
.pktools{display:flex;gap:.7rem;align-items:center;margin-bottom:.7rem}.pktools input{max-width:320px}
.chipsrow{margin-bottom:.9rem}
.pgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:.6rem}.pgrid.big{grid-template-columns:repeat(auto-fill,minmax(170px,1fr))}
.ptile{position:relative;border:2px solid transparent;background:var(--card);border-radius:14px;padding:0;overflow:hidden;cursor:pointer;color:var(--ink);font:inherit;text-align:left}
.ptile img{width:100%;aspect-ratio:1;object-fit:cover;display:block}.ptile:hover{border-color:var(--line)}.ptile.sel{border-color:var(--accent)}
.ptile .cap{display:block;padding:.4rem .5rem .5rem;font-size:.82rem;line-height:1.25}.ptile small{display:block;color:var(--muted)}
.picker footer{display:flex;justify-content:space-between;gap:1rem;align-items:center;padding:.8rem 1.25rem;border-top:1px solid var(--head-line);background:var(--card);flex-wrap:wrap}
.tray{display:flex;gap:.4rem;flex-wrap:wrap;flex:1;min-width:200px;align-items:center}
.tthumb{position:relative;width:54px;height:54px}.tthumb img{width:100%;height:100%;object-fit:cover;border-radius:10px}.tthumb .n{top:2px;left:2px;min-width:1.2rem;font-size:.7rem}
.tthumb .rm{position:absolute;top:-6px;right:-6px;width:1.3rem;height:1.3rem;border-radius:50%;border:0;background:var(--ink);color:var(--bg);font-size:.65rem;cursor:pointer;line-height:1}
.or{display:flex;align-items:center;gap:.8rem;color:var(--muted);font-size:.85rem;margin:1rem 0 .6rem}.or::before,.or::after{content:"";flex:1;border-top:1px solid var(--line)}
#csvPaste{font:.85rem ui-monospace,monospace;white-space:pre}.pastebar{justify-content:flex-end;margin-top:.5rem}
/* campaign editing */
.pill.draft{color:var(--muted)}
.camptag{font-size:.78rem;color:var(--accent);margin:.15rem 0}
.crow.flash{animation:flash 2.2s ease-out}@keyframes flash{0%,40%{box-shadow:0 0 0 3px var(--accent)}100%{box-shadow:0 0 0 3px transparent}}
label.note{color:var(--muted)}label.note em{font-style:normal;opacity:.8}label.note input{border-style:dashed;background:transparent}
.rnote{font-size:.8rem;color:var(--muted);font-style:italic;margin-top:.2rem}
.tthumb{cursor:grab}.tthumb.over img{outline:3px solid var(--accent);outline-offset:1px}.tthumb:active{cursor:grabbing}
.tthumb .mv{position:absolute;left:0;right:0;bottom:-9px;display:flex;justify-content:center;gap:2px}
.tthumb .mv button{width:1.25rem;height:1.1rem;padding:0;border:0;border-radius:6px;background:var(--ink);color:var(--bg);font-size:.55rem;cursor:pointer}.tthumb .mv button:disabled{opacity:.25;cursor:default}
.tray{padding-bottom:.6rem}.hint{font-size:.78rem;align-self:center;margin-left:.3rem}
.toast{position:fixed;left:50%;bottom:1.5rem;transform:translateX(-50%);background:var(--ink);color:var(--bg);padding:.6rem 1.2rem;border-radius:99px;z-index:50;font-size:.9rem}
/* crop + locking */
.cropbox{position:relative;display:block;overflow:hidden;aspect-ratio:var(--ar,1);background:var(--hover)}
.cropbox.w{width:100%}.cropbox.h{height:100%}
.cropbox img{position:absolute;max-width:none;display:block;border-radius:0;object-fit:fill}
.cropbox img.fill{inset:0;width:100%;height:100%;object-fit:cover}
.tbox{position:relative;width:88px;height:88px;flex:none;display:grid;place-items:center;border-radius:12px;overflow:hidden;background:var(--hover)}
.tbox.big{width:260px;height:260px;border-radius:14px}
.tbox .ph{width:100%;height:100%;border-radius:0}.tbox .stack{right:.25rem;bottom:.25rem;font-size:.65rem}
.cover .cropbox{border-radius:0}.cover .cropbox img{border-radius:0}
.err.small{font-size:.8rem;color:var(--bad)}
.pill.published{display:inline-flex;gap:.2rem}
.crow[data-state=published]{border-color:var(--ok)}.crow[data-state=failed]{border-color:var(--bad)}
.crow .lockmsg{color:var(--muted);font-size:.85rem}
.nocover{grid-column:1/-1;display:grid;place-items:center;height:80px;font-size:2rem;background:var(--hover);border-radius:10px}
.devbtn{font-size:.72rem;color:var(--muted);border:1px dashed var(--line);background:none;border-radius:6px;padding:.1rem .4rem;cursor:pointer}
fieldset{border:0;padding:0;margin:0;min-width:0;display:flex;flex-direction:column;gap:.8rem;align-items:flex-start;width:100%}
fieldset:disabled textarea,fieldset:disabled input{opacity:.65}
.tthumb .rm{right:-6px}.tthumb .cropbtn{position:absolute;left:-6px;top:-6px;width:1.3rem;height:1.3rem;border-radius:50%;border:0;background:var(--accent);color:var(--accent-ink);font-size:.7rem;cursor:pointer;line-height:1;padding:0}
.tthumb .cropbox{border-radius:10px}.tthumb{display:grid;place-items:center;background:var(--hover);border-radius:10px}
.cropper{width:min(820px,96vw)}
.crbody{display:flex;gap:1.5rem;padding:1rem 1.25rem;flex-wrap:wrap;overflow:auto}
.crstage{flex:1;min-width:280px;display:flex;flex-direction:column;align-items:center;gap:.4rem}
.crview{position:relative;overflow:hidden;background:#000;border-radius:10px;cursor:grab;touch-action:none;user-select:none}.crview:active{cursor:grabbing}
.crview img{position:absolute;max-width:none;pointer-events:none;-webkit-user-drag:none}
.crside{flex:0 0 240px;display:flex;flex-direction:column;gap:.6rem}.crside h3{margin:.2rem 0 0;font-size:.95rem}.crside input[type=range]{padding:0}
.small{font-size:.8rem}

.cover,.tbox,.tthumb{display:flex;align-items:center;justify-content:center}
.minis .mini{width:34px;height:34px;border-radius:6px;overflow:hidden;display:flex;align-items:center;justify-content:center;background:var(--hover)}
.minis img{width:auto;height:auto}.minis .cropbox img{width:auto;height:auto}
.devrow{display:flex;gap:.3rem;flex-wrap:wrap;margin-top:.2rem}
.crview img.fill{inset:0;width:100%;height:100%;object-fit:cover;position:absolute}

.testbanner{background:var(--tint);color:var(--on-tint);text-align:center;padding:.35rem 1rem;font-size:.82rem}
.thumb{width:180px;height:180px;display:flex;align-items:center;justify-content:center;background:var(--hover);border-radius:14px;overflow:hidden;position:relative}
.thumb .cropbox{border-radius:0}.thumb .cropbox img{border-radius:0}
.alert.bad{margin:0 0 1rem}

/* settings */
.alert.ok{background:color-mix(in srgb,var(--ok) 14%,transparent);color:var(--ok);margin-bottom:1rem}
.alert.warn{background:color-mix(in srgb,var(--warn) 14%,transparent);color:var(--warn);margin-bottom:1rem}
.setform{display:grid;gap:1rem;max-width:760px}.setform .panel{display:flex;flex-direction:column;gap:.7rem}.setform h2,.setmode h2{margin:0;font:500 1.15rem "Google Sans",system-ui,sans-serif}
.setmode{display:flex;justify-content:space-between;align-items:center;gap:1rem;flex-wrap:wrap;margin-bottom:1rem;max-width:760px}.setmode p{margin:.3rem 0}
label.check{flex-direction:row;align-items:center;gap:.5rem}label.check input{width:auto}
.okmsg{color:var(--ok)}.badmsg{color:var(--bad)}
.help summary,.advanced summary{cursor:pointer;color:var(--accent)}.help ol{margin:.6rem 0;padding-left:1.2rem;display:grid;gap:.3rem;font-size:.9rem}
code{background:var(--hover);padding:.05rem .35rem;border-radius:6px;font-size:.85em}
.testbanner a{color:inherit;text-decoration:underline}

/* login */
.loginbox{max-width:360px;margin:12vh auto 0}.loginhead{text-align:center;font:500 1.6rem "Google Sans",system-ui,sans-serif;margin-bottom:1rem}
.loginform{display:flex;flex-direction:column;gap:.8rem}.loginform h1{font-size:1.4rem}.loginform .alert{margin:0}
.logout{display:inline;margin:0}.logoutbtn{font-size:1.1rem}
.warnbanner{background:color-mix(in srgb,var(--bad) 18%,transparent);color:var(--bad)}
