:root{--bg:#f5f6f8;--card:#fff;--ink:#16181d;--muted:#6a7180;--line:#e3e6eb;--primary:#2450d6;--primary-ink:#fff;--danger:#c62828;--good:#137a3f;--warn:#a15c00;--radius:10px;--side:236px;color-scheme:light}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--ink);font:14px/1.5 ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,sans-serif}
a{color:var(--primary)}
code,.mono{font-family:ui-monospace,"SF Mono",Menlo,Consolas,monospace;font-size:12.5px}
h1{font-size:22px;margin:0}
h2{font-size:16px;margin:0 0 12px}
h3{font-size:14px;margin:0}
hr{border:0;border-top:1px solid var(--line);margin:8px 0}
pre{background:var(--bg);border:1px solid var(--line);padding:12px;border-radius:8px;white-space:pre-wrap;word-break:break-all}

/* layout */
.side{position:fixed;inset:0 auto 0 0;width:var(--side);background:var(--card);border-right:1px solid var(--line);display:flex;flex-direction:column;z-index:20}
.side-brand{display:block;padding:18px 18px 12px;color:var(--ink);text-decoration:none;overflow:hidden}
.brand-mark{display:flex;align-items:center;gap:8px;font-weight:700;font-size:16px;letter-spacing:-.01em}
.brand-mark b{display:grid;place-items:center;width:24px;height:24px;border-radius:7px;background:var(--primary);color:var(--primary-ink);font-size:13px}
.brand-mark em{font-style:normal;color:var(--primary)}
.brand-site{display:block;margin-top:3px;padding-left:32px;font-size:12px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.auth-brand{margin-bottom:18px}
.side nav{flex:1;overflow:auto;padding:4px 10px}
.side nav a{display:flex;align-items:center;gap:10px;padding:7px 10px;border-radius:7px;color:var(--ink);text-decoration:none;margin:1px 0}
.side nav a:hover{background:var(--bg)}
.side nav a.active{background:color-mix(in srgb,var(--primary) 12%,transparent);color:var(--primary);font-weight:600}
.ic{width:6px;height:6px;border-radius:50%;background:currentColor;opacity:.35;flex:none}
.side-foot{padding:12px 18px;border-top:1px solid var(--line);display:grid;gap:6px;font-size:13px}
.side-toggle{display:none}
.main{margin-left:var(--side);padding:24px 32px 80px;max-width:1500px}
body.bare .main{margin:0 auto;max-width:none}
.page-top{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:18px;flex-wrap:wrap}
@media (max-width:900px){
  .side{transform:translateX(-100%);transition:.2s}
  .side-open .side{transform:none;box-shadow:0 0 40px rgba(0,0,0,.3)}
  .side-toggle{display:block;position:fixed;top:10px;left:10px;z-index:30;border:1px solid var(--line);background:var(--card);color:var(--ink);border-radius:8px;width:38px;height:38px;font-size:18px}
  .main{margin-left:0;padding:60px 14px 80px}
}

/* components */
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:18px;margin-bottom:16px}
.card.flush{padding:0;overflow:hidden}
.card.highlight{border-color:var(--primary);box-shadow:0 0 0 3px color-mix(in srgb,var(--primary) 15%,transparent)}
details.card>summary{cursor:pointer;font-weight:600;list-style:none;margin:-2px 0}
details.card>summary::-webkit-details-marker{display:none}
details.card>summary::before{content:"▸ ";color:var(--muted)}
details.card[open]>summary{margin-bottom:12px}
details.card[open]>summary::before{content:"▾ "}
.btn{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line);background:var(--card);color:var(--ink);padding:7px 13px;border-radius:8px;font:inherit;font-weight:500;cursor:pointer;text-decoration:none;white-space:nowrap;position:relative}
.btn:hover{border-color:var(--muted)}
.btn.primary{background:var(--primary);border-color:var(--primary);color:var(--primary-ink)}
.btn.danger{color:var(--danger)}
.btn.danger:not(.ghost){border-color:var(--danger)}
.btn.ghost{background:transparent;border-color:transparent}
.btn.small{padding:4px 9px;font-size:12.5px}
.btn[disabled]{opacity:.55;cursor:wait}
.btn input[type=file]{position:absolute;inset:0;opacity:0;cursor:pointer}
.linkish{background:none;border:0;padding:0;color:var(--muted);font:inherit;cursor:pointer;text-align:left}
.badge{display:inline-block;font-size:11px;font-weight:600;padding:1px 7px;border-radius:99px;background:var(--bg);border:1px solid var(--line);color:var(--muted);vertical-align:middle}
.badge.info{color:var(--primary);border-color:color-mix(in srgb,var(--primary) 40%,transparent)}
.badge.warn{color:var(--warn)}
.lang{display:inline-block;font-size:11px;font-weight:700;text-transform:uppercase;padding:1px 6px;border-radius:5px;background:var(--bg);border:1px solid var(--line)}
.lang-link{margin-right:8px;font-size:12px}
.muted{color:var(--muted)}
.nowrap{white-space:nowrap}
.strong{font-weight:600}
.empty{color:var(--muted);padding:20px;text-align:center}
.loading{color:var(--muted);padding:30px}
.alert{padding:10px 14px;border-radius:8px;margin:0 0 14px}
.alert.bad{background:color-mix(in srgb,var(--danger) 12%,transparent);color:var(--danger)}
.alert.good{background:color-mix(in srgb,var(--good) 12%,transparent);color:var(--good)}
.row{display:flex;align-items:center;flex-wrap:wrap}
.row.gap{gap:8px}
.row.between{justify-content:space-between}
.toolbar{margin-bottom:14px}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:16px}
@media (max-width:800px){.grid2{grid-template-columns:1fr}}
.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px}
.theme-card.active{border-color:var(--primary)}
.scroll{overflow:auto}

/* forms */
input:not([type=checkbox]):not([type=radio]):not([type=color]):not([type=file]),select,textarea{width:100%;font:inherit;color:var(--ink);background:var(--card);border:1px solid var(--line);border-radius:7px;padding:7px 9px}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px color-mix(in srgb,var(--primary) 18%,transparent)}
textarea{resize:vertical}
textarea.md{font-family:ui-monospace,Menlo,monospace;font-size:13px}
textarea.invalid{border-color:var(--danger)}
input.short{max-width:140px}
input[type=color]{width:42px;height:34px;padding:2px;border:1px solid var(--line);border-radius:7px;background:var(--card)}
.stack{display:grid;gap:12px}
.stack.tight{gap:6px}
.stack.narrow{max-width:520px}
.stack label{display:grid;gap:4px;font-weight:500}
fieldset{border:0;padding:0;margin:0}
legend{font-weight:600;margin-bottom:6px}
.check{display:flex!important;align-items:center;gap:8px;font-weight:400!important;cursor:pointer}
.fields{display:grid;gap:12px}
.field{display:grid;gap:4px}
.field-label{font-weight:600;font-size:12.5px;color:var(--ink)}
.help{color:var(--muted);font-size:12px}
.count{font-size:11.5px;color:var(--muted);justify-self:end}
.count.warn{color:var(--warn)}
fieldset.group{border:1px solid var(--line);border-radius:8px;padding:12px}
fieldset.group legend{padding:0 6px;font-size:12.5px}
.i18n{display:grid;gap:6px}
.i18n-row{display:flex;gap:8px;align-items:flex-start}
.i18n-row .lang{margin-top:8px}
.thumb{display:inline-flex;width:72px;height:54px;border-radius:6px;overflow:hidden;background:var(--bg);border:1px solid var(--line);align-items:center;justify-content:center;font-size:11px;color:var(--muted)}
.thumb img{width:100%;height:100%;object-fit:cover}
.media-field{display:flex;gap:8px;align-items:center}
.gallery-field{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.gal-item{display:grid;gap:2px}
.gal-tools{display:flex;justify-content:center;gap:2px}
.gal-tools button{border:0;background:none;color:var(--muted);cursor:pointer;padding:0 4px}

/* repeater and blocks */
.repeater{display:grid;gap:8px}
.rep-items{display:grid;gap:6px}
.rep-item,.block{border:1px solid var(--line);border-radius:8px;background:var(--card)}
.rep-head,.block-head{display:flex;align-items:center;gap:10px;padding:7px 10px;cursor:pointer;user-select:none}
.rep-title{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted)}
.rep-body,.block-body{display:none;padding:4px 12px 14px;border-top:1px solid var(--line)}
.rep-item.open>.rep-body,.block.open>.block-body{display:block}
.rep-tools{display:flex;gap:2px;margin-left:auto}
.rep-tools button{border:0;background:none;color:var(--muted);cursor:pointer;width:26px;height:26px;border-radius:5px;font-size:14px}
.rep-tools button:hover{background:var(--bg);color:var(--ink)}
.rep-tools button.danger:hover{color:var(--danger)}
.block{background:var(--card)}
.block-head{padding:10px 12px}
.block-type{font-weight:700;font-size:12.5px;background:color-mix(in srgb,var(--primary) 12%,transparent);color:var(--primary);padding:2px 8px;border-radius:5px;white-space:nowrap}
.block-sum{flex:1;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.block.is-hidden{opacity:.55}
.block-list{display:grid;gap:8px;margin-bottom:10px}
.add-block select{max-width:260px}
.blocks-wrap h2{margin-top:8px}

/* entry editing */
.edit{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:22px;align-items:start}
@media (max-width:1100px){.edit{grid-template-columns:1fr}}
.edit-main{display:grid;gap:14px}
.edit-side{position:sticky;top:16px;display:grid;gap:0;max-height:calc(100vh - 32px);overflow:auto;padding-bottom:20px}
.crumbs{color:var(--muted);font-size:13px}
.crumbs a{color:inherit}
.title-input{font-size:24px!important;font-weight:700;padding:10px 12px!important}
.slug-row{display:flex;align-items:center;gap:6px;flex-wrap:wrap;font-size:13px}
.slug-row input{width:auto;flex:1;min-width:180px;max-width:360px}
.revs{list-style:none;margin:0;padding:0;display:grid;gap:6px;font-size:12.5px}
.revs li{display:flex;justify-content:space-between;gap:8px;align-items:center}
.sticky-save{position:sticky;bottom:0;padding:12px 0;background:linear-gradient(transparent,var(--bg) 40%)}

/* table */
.table{width:100%;border-collapse:collapse}
.table th,.table td{text-align:left;padding:9px 14px;border-bottom:1px solid var(--line);vertical-align:middle}
.table th{font-size:12px;color:var(--muted);font-weight:600}
.table tr:last-child td{border-bottom:0}
.table.rows tr:hover td{background:var(--bg)}
.table.inputs td{padding:4px 6px}
.table tr.dim{opacity:.5}
.table a{text-decoration:none}
.indent{color:var(--line);margin-right:4px}
.filters{display:flex;gap:8px;margin-bottom:12px;flex-wrap:wrap}
.filters input{max-width:260px}
.filters select{max-width:180px}

/* dashboard */
.stats{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:12px;margin-bottom:16px}
.stat{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:16px;text-decoration:none;color:var(--ink);display:grid}
.stat b{font-size:26px}
.stat span{color:var(--muted)}

/* media */
.media-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:10px;max-height:60vh;overflow:auto;padding:2px}
.media-grid.big{max-height:none;grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}
.media-tile{border:1px solid var(--line);background:var(--card);border-radius:8px;padding:0;overflow:hidden;cursor:pointer;display:grid;text-align:left;color:var(--ink)}
.media-tile img{width:100%;aspect-ratio:4/3;object-fit:cover;background:var(--bg)}
.media-tile .file{aspect-ratio:4/3;display:grid;place-items:center;background:var(--bg);color:var(--muted);text-transform:uppercase;font-weight:700}
.media-tile small{padding:5px 7px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:11.5px;color:var(--muted)}
.media-tile.sel{outline:3px solid var(--primary)}
.preview{max-width:100%;max-height:300px;border-radius:8px;display:block;margin:0 auto 10px}

/* modal */
.modal{position:fixed;inset:0;background:rgba(10,12,18,.5);display:grid;place-items:center;z-index:100;padding:20px}
.modal-box{background:var(--card);border-radius:12px;padding:18px;width:min(560px,100%);max-height:90vh;overflow:auto;display:grid;gap:12px}
.modal-box.wide{width:min(980px,100%)}
.modal-head{display:flex;justify-content:space-between;align-items:center}
.modal-head h2{margin:0;overflow:hidden;text-overflow:ellipsis}
.modal-foot{display:flex;justify-content:flex-end;gap:8px}
.x{border:0;background:none;font-size:24px;cursor:pointer;color:var(--muted);line-height:1}

/* theme editor */
.theme-files{display:grid;grid-template-columns:260px 1fr;min-height:70vh}
@media (max-width:900px){.theme-files{grid-template-columns:1fr}}
.file-list{list-style:none;margin:0;padding:8px;border-right:1px solid var(--line);overflow:auto;max-height:80vh}
.file-list button{display:block;width:100%;text-align:left;border:0;background:none;padding:5px 8px;border-radius:6px;cursor:pointer;color:var(--ink);font:12.5px ui-monospace,Menlo,monospace}
.file-list button:hover{background:var(--bg)}
.file-list button.on{background:color-mix(in srgb,var(--primary) 14%,transparent);color:var(--primary)}
.code-editor{padding:14px;display:grid;gap:10px;align-content:start}
textarea.code{min-height:65vh;font-size:12.5px;line-height:1.55;tab-size:2;white-space:pre}

/* login */
.auth{max-width:400px;margin:10vh auto;background:var(--card);border:1px solid var(--line);border-radius:14px;padding:28px}
.auth.wide{max-width:520px;margin-top:5vh}
.auth h1{margin-bottom:18px}
.checks{list-style:none;padding:0;margin:0 0 16px;display:grid;grid-template-columns:1fr 1fr;gap:4px;font-size:13px}
.checks .ok{color:var(--good)}
.checks .bad{color:var(--danger);font-weight:600}

#toast{position:fixed;bottom:20px;left:50%;transform:translate(-50%,20px);background:var(--ink);color:var(--bg);padding:10px 16px;border-radius:9px;opacity:0;pointer-events:none;transition:.2s;z-index:200;max-width:min(680px,90vw);white-space:pre-line}
#toast.show{opacity:1;transform:translate(-50%,0)}
#toast.bad{background:var(--danger);color:#fff}

.edit-main>*,.block,.rep-item,.fields>*{min-width:0}
.block-sum,.rep-title{min-width:0}
.card h3{margin:18px 0 6px}
.steps{margin:12px 0 4px;padding-left:18px;display:grid;gap:6px;font-size:13px}
.steps code{word-break:break-all}
.page-top + .help{margin:-8px 0 16px;font-size:13px}
