/* Hanken Grotesk — self-hosted (OFL). latin + latin-ext, weights 400/500/600/700.
   Used for the "furniture" (masthead, nav, meta, captions, admin UI); long-form
   reading stays in a serif. Served from the shared /assets/fonts/ (deduplicated site-wide). */
@font-face{font-family:'Hanken Grotesk';font-style:normal;font-weight:400;font-display:swap;src:url('/assets/fonts/hanken-grotesk-latin-400-normal.woff2') format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;}
@font-face{font-family:'Hanken Grotesk';font-style:normal;font-weight:400;font-display:swap;src:url('/assets/fonts/hanken-grotesk-latin-ext-400-normal.woff2') format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;}
@font-face{font-family:'Hanken Grotesk';font-style:normal;font-weight:500;font-display:swap;src:url('/assets/fonts/hanken-grotesk-latin-500-normal.woff2') format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;}
@font-face{font-family:'Hanken Grotesk';font-style:normal;font-weight:500;font-display:swap;src:url('/assets/fonts/hanken-grotesk-latin-ext-500-normal.woff2') format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;}
@font-face{font-family:'Hanken Grotesk';font-style:normal;font-weight:600;font-display:swap;src:url('/assets/fonts/hanken-grotesk-latin-600-normal.woff2') format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;}
@font-face{font-family:'Hanken Grotesk';font-style:normal;font-weight:600;font-display:swap;src:url('/assets/fonts/hanken-grotesk-latin-ext-600-normal.woff2') format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;}
@font-face{font-family:'Hanken Grotesk';font-style:normal;font-weight:700;font-display:swap;src:url('/assets/fonts/hanken-grotesk-latin-700-normal.woff2') format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;}
@font-face{font-family:'Hanken Grotesk';font-style:normal;font-weight:700;font-display:swap;src:url('/assets/fonts/hanken-grotesk-latin-ext-700-normal.woff2') format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;}

:root{
  /* warm-paper design tokens — shared with the tools */
  --paper:#F4F1EA; --panel:#FCFBF7; --panel-2:#EFEAE0; --ink:#2C2A24; --muted:#8B857A;
  --line:#E6E0D4; --accent:#7B9E84; --accent-soft:#7B9E8422; --danger:#B4502A;
  --shadow:0 6px 28px rgba(70,58,35,.05);
  --sans:"Hanken Grotesk",system-ui,-apple-system,sans-serif;
  --serif:"Iowan Old Style","Palatino Linotype",Palatino,Georgia,Cambria,"Times New Roman",Times,serif;
  --mono:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  --maxw:40rem;
  /* semantic aliases used throughout the sheet */
  --bg:var(--paper); --fg:var(--ink); --rule:var(--line); --link:var(--accent);
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{
  margin:0; background:var(--bg); color:var(--fg);
  font:18px/1.65 var(--serif);
  padding:3.5rem 1.25rem 6rem;
}
main,.site-head{max-width:var(--maxw);margin:0 auto}
a{color:var(--link);text-decoration:none;border-bottom:1px solid var(--accent-soft)}
a:hover{border-bottom-color:var(--accent)}

.site-head{margin-bottom:2.5rem}
.home-link{display:block;margin-bottom:.9rem;border:0;
  font-family:var(--sans);font-size:.78rem;letter-spacing:.03em;color:var(--muted)}
.home-link:hover{color:var(--accent)}
.site-title{font-family:var(--sans);font-size:1.4rem;font-weight:600;color:var(--fg);border:0;letter-spacing:-.01em}
.tagline{color:var(--muted);margin:.25rem 0 0;font-size:.95rem;font-family:var(--sans)}

/* index list */
.post-list{list-style:none;margin:0;padding:0}
.post-list li{display:flex;justify-content:space-between;gap:1rem;align-items:baseline;
  padding:.55rem 0;border-bottom:1px solid var(--rule)}
.post-list a{font-size:1.05rem;border:0}
.post-list a:hover{color:var(--accent)}
.post-list time,.pager,.back,.post .meta{font-family:var(--sans)}
.post-list time{color:var(--muted);font-size:.85rem;white-space:nowrap}
.empty{color:var(--muted)}

/* single post */
.post h1{font-size:1.95rem;line-height:1.2;margin:0 0 .4rem;letter-spacing:-.01em}
.post .meta{color:var(--muted);margin:0 0 2rem;font-size:.85rem}
.preview-note{background:#fbf3e2;border:1px solid #f0dcae;color:#7a5512;
  padding:.55rem .8rem;border-radius:8px;font-size:.85rem;margin:0 0 1.5rem;
  font-family:var(--sans)}
.post .body{font-size:1.06rem}
.post .body h1{font-size:1.5rem}
.post .body h2{font-size:1.3rem}
.post .body h3{font-size:1.12rem}
.post .body img{display:block;width:100%;height:auto;border-radius:8px;margin:1.9rem 0;cursor:zoom-in}
.post .body figure.ph,.post-photos figure.ph{margin:1.9rem 0}
.post .body figure.ph img,.post-photos figure.ph img{margin:0}
.post figcaption{margin-top:.55rem;font-family:var(--sans);
  font-size:.85rem;color:var(--muted);line-height:1.5}
.post .body blockquote{margin:1.4rem 0;padding-left:1rem;border-left:3px solid var(--accent);color:var(--muted)}
.post .body pre{background:var(--panel-2);padding:1rem;overflow:auto;border-radius:10px;font-size:.9rem}
.post .body code{font-family:var(--mono);font-size:.92em;background:var(--panel-2);border-radius:4px;padding:.06em .32em}
.post .body pre code{font-size:inherit;background:none;padding:0}
hr{border:0;border-top:1px solid var(--rule);margin:2rem 0}
.back{margin-top:2.5rem;font-size:.9rem}
.postnav{display:flex;justify-content:space-between;gap:1.5rem;margin-top:2.5rem;
  padding-top:1.2rem;border-top:1px solid var(--rule);
  font-family:var(--sans);font-size:.92rem}
.postnav span{flex:1}
.postnav span:last-child{text-align:right}
.settings-extra{display:flex;gap:.75rem;flex-wrap:wrap;margin:2rem 0 .5rem}

/* stacked, full-width photos (those not placed inline) */
.post-photos{margin:1.9rem 0 0}
.post-photos img{display:block;width:100%;height:auto;border-radius:8px;margin:1.9rem 0;cursor:zoom-in}

/* lightbox */
.lb{position:fixed;inset:0;background:rgba(20,16,10,.95);display:none;align-items:center;justify-content:center;z-index:1000}
.lb.on{display:flex}
.lb-img{max-width:92vw;max-height:88vh;width:auto;height:auto;border-radius:4px;cursor:zoom-in;
  touch-action:none;transform-origin:center center;will-change:transform}
.lb-btn{position:absolute;background:none;border:0;color:#efeadf;cursor:pointer;
  font-family:var(--sans);line-height:1;padding:.4rem .8rem}
.lb-btn:hover{color:#fff}
.lb-close{top:.6rem;right:1rem;font-size:2rem}
.lb-prev,.lb-next{top:50%;transform:translateY(-50%);font-size:2.8rem}
.lb-prev{left:.3rem}.lb-next{right:.3rem}
.lb-count{position:absolute;bottom:1.1rem;left:0;right:0;text-align:center;color:#cfcabf;
  font-family:var(--sans);font-size:.85rem}
.lb-cap{position:absolute;bottom:2.6rem;left:0;right:0;text-align:center;color:#ddd8cd;
  font-family:var(--sans);font-size:.92rem;line-height:1.5;padding:0 1.2rem}
body.lb-lock{overflow:hidden}

.pager{display:flex;justify-content:space-between;margin-top:2.5rem;font-size:.9rem}
.site-foot{max-width:var(--maxw);margin:3.5rem auto 0;font-family:var(--sans);font-size:.8rem}
.site-foot a{color:var(--muted);border:0;letter-spacing:.04em}
.site-foot a:hover{color:var(--accent)}

/* ---------- admin ---------- */
body.admin{font-family:var(--sans);font-size:16px;
  --maxw:46rem;padding-top:2.5rem;line-height:1.55}
.admin h1{font-size:1.4rem;margin:0}
.admin p{color:var(--fg)}
.bar{display:flex;justify-content:space-between;align-items:center;gap:1rem;margin-bottom:1.5rem;flex-wrap:wrap}
.bar>div{display:flex;gap:.75rem;align-items:center}
.btn{display:inline-block;border:1px solid var(--rule);border-radius:8px;padding:.4rem .7rem;
  color:var(--fg);background:var(--panel);font-size:.9rem}
.btn:hover{border-color:var(--accent)}
button{font:inherit;cursor:pointer;border:1px solid var(--ink);background:var(--ink);color:var(--paper);
  border-radius:8px;padding:.55rem 1rem}
button:hover{opacity:.9}
button.link{background:none;border:0;color:var(--link);padding:0;text-decoration:underline}
button.danger{background:var(--danger);border-color:var(--danger);color:#fff}
.link.danger,button.link.danger{color:var(--danger);border:0;background:none}
button.link:hover{opacity:.75}
form.inline{display:inline}

.editor{display:flex;flex-direction:column;gap:1.1rem}
.editor label,.auth label{display:flex;flex-direction:column;gap:.35rem;font-size:.9rem;color:var(--muted)}
.editor input[type=text],.editor textarea,.editor select,.editor input[type="datetime-local"],.auth input{
  font:inherit;color:var(--fg);background:var(--panel);border:1px solid var(--rule);border-radius:8px;
  padding:.6rem .7rem;width:100%;box-sizing:border-box}
.editor input:focus,.editor textarea:focus,.editor select:focus,.auth input:focus{outline:none;border-color:var(--accent)}
.frow{display:flex;gap:1rem;flex-wrap:wrap}
.frow>label{flex:1;min-width:12rem}
.editor textarea{resize:vertical;line-height:1.5;
  font-family:var(--mono);font-size:.95rem}
.editor .hint{font-weight:400;color:var(--muted);font-size:.8rem}
.photos{border:1px solid var(--rule);border-radius:10px;padding:.4rem .9rem;margin:0 0 1rem;display:block}
.photos legend{padding:0 .4rem;color:var(--muted);font-size:.85rem}
.pitem{display:flex;gap:.8rem;align-items:flex-start;padding:.7rem 0;border-bottom:1px solid var(--line)}
.pitem:last-child{border-bottom:0}
.pitem img{width:60px;height:60px;object-fit:cover;border-radius:6px;flex:0 0 auto}
.prow{display:flex;gap:.9rem;align-items:center;flex-wrap:wrap;font-size:.85rem;color:var(--muted)}
.prow-main,.prow-confirm{display:flex;gap:.5rem;align-items:center}
.prow-main[hidden],.prow-confirm[hidden]{display:none}
.secondary{margin-top:.5rem;background:var(--panel);color:var(--fg);border:1px solid var(--rule)}
.secondary:hover{border-color:var(--accent);opacity:1}
.pmeta{flex:1;min-width:0;display:flex;flex-direction:column;gap:.45rem}
.cap-input{font:inherit;color:var(--fg);background:var(--panel);border:1px solid var(--rule);border-radius:8px;
  padding:.4rem .6rem;width:100%;font-size:.85rem;box-sizing:border-box}
.mini{background:var(--panel);color:var(--fg);border:1px solid var(--rule);border-radius:8px;padding:.3rem .65rem;font-size:.8rem}
.mini:hover{border-color:var(--accent)}
.rm{display:flex;align-items:center;gap:.3rem}

.upbar{display:none}
.upbar.on{display:block}
.upbar-track{height:8px;background:var(--rule);border-radius:999px;overflow:hidden}
.upbar-fill{height:100%;width:0;background:var(--ink);transition:width .15s linear}
.upbar-fill.working{background:linear-gradient(90deg,var(--ink),var(--muted),var(--ink));background-size:200% 100%;animation:upmove 1s linear infinite}
@keyframes upmove{from{background-position:200% 0}to{background-position:0 0}}
.upbar-text{display:inline-block;margin-top:.4rem;font-size:.82rem;color:var(--muted)}

.posts{width:100%;border-collapse:collapse;font-size:.95rem}
.posts td{padding:.6rem 0;border-bottom:1px solid var(--rule);vertical-align:baseline}
.posts td.right{text-align:right}
.posts td.dim{color:var(--muted);font-size:.85rem}
.tag-pill{display:inline-block;margin-left:.5rem;padding:.05rem .45rem;border-radius:999px;font-size:.7rem;
  font-weight:500;vertical-align:.08em;letter-spacing:.02em}
.tag-pill.draft{background:var(--panel-2);color:var(--muted)}
.tag-pill.sched{background:#fbf3e2;color:#7a5512}

.auth{max-width:22rem}
.auth form{display:flex;flex-direction:column;gap:1rem;margin-top:1rem}
.notice{background:#eef6ee;border:1px solid #cfe4cf;color:#2f5d34;padding:.6rem .8rem;border-radius:8px;font-size:.9rem}
.warn{background:#fbf3e2;border:1px solid #f0dcae;color:#7a5512;padding:.6rem .8rem;border-radius:8px;font-size:.9rem}
.error{background:#fbecea;border:1px solid #f0cfca;color:#9a3a2c;padding:.6rem .8rem;border-radius:8px;font-size:.9rem}

/* live preview (admin) */
.preview-wrap{margin:.4rem 0 1rem;border:1px solid var(--rule);border-radius:10px;overflow:hidden}
.preview-head{font-family:var(--sans);font-size:.75rem;
  letter-spacing:.04em;text-transform:uppercase;color:var(--muted);background:var(--panel-2);
  padding:.45rem .8rem;border-bottom:1px solid var(--rule)}
.preview{padding:1rem 1.1rem;font:18px/1.65 var(--serif);color:var(--fg)}
.preview :first-child{margin-top:0}
.preview img,.preview figure.ph img{display:block;width:100%;height:auto;border-radius:8px;margin:1.2rem 0}
.preview figure.ph{margin:1.2rem 0}
.preview figcaption{margin-top:.5rem;font-family:var(--sans);
  font-size:.85rem;color:var(--muted)}
.preview blockquote{margin:1rem 0;padding-left:1rem;border-left:3px solid var(--accent);color:var(--muted)}
.preview pre{background:var(--panel-2);padding:1rem;overflow:auto;border-radius:10px;font-size:.9rem}
.preview code{font-family:var(--mono);font-size:.92em}
.preview .empty-hint{color:var(--muted);font-style:italic}

/* unsaved-changes restore bar (admin) */
.restorebar{display:flex;flex-wrap:wrap;gap:.7rem;align-items:center;
  background:#fbf3e2;border:1px solid #f0dcae;color:#7a5512;border-radius:8px;
  padding:.6rem .8rem;margin:0 0 1.2rem;font-size:.9rem;
  font-family:var(--sans)}
.restorebar .grow{flex:1 1 auto}

/* dark mode — public reader pages only, follows the system setting.
   Redefining the base tokens cascades to the --bg/--fg/--rule/--link aliases. */
@media (prefers-color-scheme: dark){
  .reader{--paper:#19160F;--panel:#221E16;--panel-2:#14110B;--ink:#EFEADF;--muted:#9C9486;
    --line:#322D23;--accent:#86A98E;--accent-soft:#86A98E26;--danger:#E0875D;
    --shadow:0 6px 28px rgba(0,0,0,.26)}
  .reader .preview-note{background:#37301d;border-color:#574a29;color:#e6cf95}
}

/* status dot + health page (admin) */
.dot{display:inline-block;width:.7rem;height:.7rem;border-radius:50%;vertical-align:baseline;margin-right:.15rem}
.dot.ok{background:#3fa35b}
.dot.warn{background:#d99a2b}
.dot.bad{background:#c0392b}
.status-line{font-size:1.05rem;margin:.5rem 0 1.3rem}
ul.health{list-style:none;margin:0 0 1.2rem;padding:0;
  font-family:var(--sans);font-size:.9rem}
ul.health li{padding:.5rem 0;border-bottom:1px solid var(--rule);line-height:1.5}
ul.health li:last-child{border-bottom:0}
.health-all{font-family:var(--sans);font-size:.9rem}
.health-all summary{cursor:pointer;color:var(--muted)}

/* stats (admin) */
.stat-total{font-size:1.1rem;margin:.3rem 0 1.5rem}
.stat-h{font-size:1rem;margin:1.8rem 0 .6rem;
  font-family:var(--sans)}
.stats-bars{width:100%;border-collapse:collapse;
  font-family:var(--sans);font-size:.85rem}
.stats-bars td{padding:.2rem 0;vertical-align:middle}
.stats-bars .d{white-space:nowrap;color:var(--muted);width:6.5rem}
.stats-bars .b{width:100%;padding:0 .6rem}
.stats-bars .b span{display:inline-block;height:.7rem;background:var(--accent);border-radius:3px;min-width:2px}
.stats-bars .n{text-align:right;white-space:nowrap;width:3.5rem}

/* visual editor: toolbar + side-by-side preview */
.body-block{margin:0 0 1rem}
.body-head{display:flex;align-items:baseline;gap:.6rem;margin:0 0 .35rem}
.body-head .lbl{font-weight:600}
.editor-toolbar{display:flex;flex-wrap:wrap;gap:.3rem;align-items:center;margin:0 0 .5rem}
.editor-toolbar button{font-family:var(--sans);font-size:.85rem;
  line-height:1;padding:.35rem .55rem;min-width:2rem;background:var(--panel);color:var(--fg);
  border:1px solid var(--rule);border-radius:8px;cursor:pointer;width:auto}
.editor-toolbar button:hover{border-color:var(--accent)}
.editor-toolbar #preview-toggle{color:var(--link)}
.tb-sep{flex:1 1 auto}
.editor-split{display:flex;gap:1rem;align-items:stretch}
.editor-split>textarea{flex:1 1 50%;width:auto;min-width:0;height:32rem}
.editor-split>.preview-wrap{flex:1 1 50%;min-width:0;margin:0;height:32rem;overflow:auto;
  position:relative;background:var(--panel)}
.editor-split>.preview-wrap .preview-head{position:sticky;top:0}
@media (max-width:820px){
  .editor-split{flex-direction:column}
  .editor-split>textarea{flex:none;height:20rem}
  .editor-split>.preview-wrap{flex:none;height:auto;max-height:26rem}
}
