@font-face{font-family:"Instrument Serif";src:url(fonts/instrument-serif-400.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:"Instrument Serif";src:url(fonts/instrument-serif-400i.woff2) format("woff2");font-weight:400;font-style:italic;font-display:swap}
@font-face{font-family:"JetBrains Mono";src:url(fonts/jetbrains-mono-400.woff2) format("woff2");font-weight:400;font-display:swap}
@font-face{font-family:"Inter";src:url(fonts/inter-var.woff2) format("woff2");font-weight:100 900;font-display:swap}

:root{
  --bg:#091016; --bg2:#0e1820; --fg:#e7f0f6; --mute:#8099a8; --line:#192631; --line-2:#26384a;
  --accent:#58cdfb; --accent-ink:#04141d; --danger:#ff6b6b; --ok:#6be3a4; --warn:#ffcf5c;
  --serif:"Instrument Serif",Georgia,serif; --sans:"Inter",system-ui,sans-serif; --mono:"JetBrains Mono",ui-monospace,monospace;
  --gut:clamp(20px,5vw,64px);
}
@media (prefers-color-scheme:light){
  :root{--bg:#f1f6f9;--bg2:#e6eef3;--fg:#0d1a22;--mute:#587080;--line:#d6e2ea;--line-2:#bccddb;--accent:#0873a6;--accent-ink:#fff;--danger:#c2362f;--ok:#17794a;--warn:#8a6100}
}
*{box-sizing:border-box;margin:0}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
body{background:var(--bg);color:var(--fg);font:400 16px/1.6 var(--sans);-webkit-font-smoothing:antialiased;min-height:100vh;display:flex;flex-direction:column;overflow-x:hidden}
main{flex:1}
::selection{background:var(--accent);color:var(--accent-ink)}
a{color:inherit}
:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:4px}
.wrap{max-width:1200px;margin:0 auto;padding:0 var(--gut)}
.narrow{max-width:560px}
.mono{font:400 12px var(--mono);letter-spacing:.04em;text-transform:uppercase;color:var(--mute)}
.muted{color:var(--mute)}

/* glow */
.glow{position:fixed;inset:0;pointer-events:none;overflow:hidden;z-index:-1}
.glow::before{content:"";position:absolute;width:760px;height:760px;left:var(--gx,70%);top:var(--gy,15%);translate:-50% -50%;background:radial-gradient(circle,color-mix(in srgb,var(--accent) 15%,transparent),transparent 65%);transition:left .6s cubic-bezier(.2,.8,.2,1),top .6s cubic-bezier(.2,.8,.2,1)}

/* bar */
.bar{position:sticky;top:0;z-index:5;background:color-mix(in srgb,var(--bg) 86%,transparent);backdrop-filter:blur(10px);border-bottom:1px solid var(--line)}
.bar .wrap{display:flex;justify-content:space-between;align-items:center;min-height:64px;gap:16px;flex-wrap:wrap}
.brand{display:flex;align-items:center;gap:12px;text-decoration:none;font:400 26px/1 var(--serif)}
.brand img{height:34px;width:auto;transition:transform .35s cubic-bezier(.2,.8,.2,1)}
.brand:hover img{transform:rotate(-6deg) scale(1.08)}
.brand em{color:var(--accent)}
.bar nav{display:flex;gap:22px;align-items:center;flex-wrap:wrap}
.bar nav a,.linkbtn{font:400 12px var(--mono);letter-spacing:.04em;text-transform:uppercase;text-decoration:none;color:var(--mute);transition:color .2s;background:none;border:0;cursor:pointer;padding:0}
.bar nav a:hover,.linkbtn:hover{color:var(--fg)}
form.inline{display:inline;margin:0}

/* hero */
.hero{padding:clamp(56px,10vw,120px) 0 clamp(28px,5vw,56px)}
.hero.small{padding:clamp(40px,6vw,72px) 0 24px}
.hero .mono{display:flex;align-items:center;gap:10px;margin-bottom:22px}
.dot{width:7px;height:7px;border-radius:50%;background:var(--accent);animation:ping 2.4s infinite}
@keyframes ping{0%{box-shadow:0 0 0 0 color-mix(in srgb,var(--accent) 60%,transparent)}70%,100%{box-shadow:0 0 0 9px transparent}}
h1{font:400 clamp(44px,8.5vw,112px)/.95 var(--serif);letter-spacing:-.02em}
.hero.small h1{font-size:clamp(40px,6vw,76px)}
h1 em,h2 em{font-style:italic;color:var(--accent)}
.lede{max-width:52ch;margin-top:22px;font:400 clamp(20px,2.2vw,26px)/1.3 var(--serif);color:var(--mute)}
h2{font:400 clamp(30px,4vw,48px)/1.05 var(--serif);letter-spacing:-.01em}
h2.sub{margin:48px 0 18px}

.js .fade{opacity:0;transform:translateY(14px);animation:fade .8s cubic-bezier(.2,.8,.2,1) forwards;animation-delay:var(--d,0ms)}
@keyframes fade{to{opacity:1;transform:none}}
.js .reveal{opacity:0;transform:translateY(22px);transition:opacity .7s cubic-bezier(.2,.8,.2,1),transform .7s cubic-bezier(.2,.8,.2,1);transition-delay:var(--d,0ms)}
.js .reveal.in-view{opacity:1;transform:none}

/* tools */
.tools{display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;align-items:center;padding:18px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line);margin-bottom:32px}
.chips{display:flex;gap:6px;flex-wrap:wrap}
.chip{font:400 12px var(--mono);letter-spacing:.03em;text-transform:uppercase;text-decoration:none;color:var(--mute);border:1px solid var(--line-2);border-radius:99px;padding:7px 13px;transition:all .18s}
.chip small{opacity:.6;margin-left:6px;font-size:10px}
.chip:hover{color:var(--fg);border-color:var(--mute)}
.chip.on{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}
.search input{background:var(--bg2);border:1px solid var(--line-2);border-radius:99px;color:var(--fg);padding:9px 16px;font:400 14px var(--sans);width:240px;max-width:100%;transition:border-color .2s,width .3s}
.search input:focus{outline:none;border-color:var(--accent);width:300px}

/* cards */
.grid{display:grid;grid-template-columns:repeat(3,1fr);gap:28px 24px}
.grid.three{margin-top:28px}
.card{display:flex;flex-direction:column;text-decoration:none;border:1px solid var(--line);background:var(--bg2);border-radius:14px;overflow:hidden;padding-bottom:20px;transition:transform .3s cubic-bezier(.2,.8,.2,1),border-color .3s,box-shadow .3s}
.card:hover{transform:translateY(-5px);border-color:var(--accent);box-shadow:0 18px 40px -18px color-mix(in srgb,var(--accent) 45%,transparent)}
.card .meta,.card h3,.card p,.card .more{padding:0 20px}
.card h3{font:400 28px/1.1 var(--serif);margin:10px 0 8px;letter-spacing:-.01em}
.card p{color:var(--mute);font-size:15px;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.card .more{margin-top:auto;padding-top:16px;color:var(--accent);transition:letter-spacing .25s}
.card:hover .more{letter-spacing:.1em}
.card.big{grid-column:1/-1;display:grid;grid-template-columns:1.25fr 1fr;grid-template-rows:auto auto 1fr auto;column-gap:0;padding:0}
.card.big .cover{grid-row:1/-1;aspect-ratio:auto;min-height:340px;border-radius:0}
.card.big .meta{padding-top:32px}
.card.big h3{font-size:clamp(34px,4vw,54px);margin-top:14px}
.card.big p{font-size:17px;-webkit-line-clamp:5}
.card.big .meta,.card.big h3,.card.big p,.card.big .more{padding-left:36px;padding-right:36px}
.card.big .more{padding-bottom:32px}
.cover{aspect-ratio:16/9;overflow:hidden;background:var(--bg2);position:relative}
.cover img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .7s cubic-bezier(.2,.8,.2,1)}
.card:hover .cover img{transform:scale(1.05)}
.cover.ph{display:grid;place-items:center;background:
  linear-gradient(135deg,color-mix(in srgb,var(--accent) 14%,var(--bg2)),var(--bg2)),
  repeating-conic-gradient(color-mix(in srgb,var(--accent) 7%,transparent) 0 25%,transparent 0 50%) 0 0/28px 28px}
.cover.ph img{width:42%;height:auto;max-height:70%;object-fit:contain;opacity:.9}
.card:hover .cover.ph img{transform:scale(1.08) rotate(-3deg)}
.meta{display:flex;gap:14px;align-items:center;flex-wrap:wrap;font:400 12px var(--mono);letter-spacing:.03em;text-transform:uppercase;color:var(--mute);padding-top:18px}
.tag{color:var(--accent)}
.pin{border:1px solid var(--line-2);border-radius:99px;padding:1px 8px;font-size:10px}
.empty{padding:64px 0;text-align:center;color:var(--mute);font:400 26px var(--serif)}
.pager{display:flex;gap:6px;justify-content:center;margin:48px 0 0}
.pager a{width:38px;height:38px;display:grid;place-items:center;border:1px solid var(--line-2);border-radius:10px;text-decoration:none;font:400 13px var(--mono);color:var(--mute);transition:all .18s}
.pager a:hover{color:var(--fg);border-color:var(--mute)}
.pager a.on{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}

/* article */
.post{max-width:820px;padding-top:40px}
.post .back{text-decoration:none;display:inline-block;transition:color .2s}
.post .back:hover{color:var(--accent)}
.post .meta{padding-top:32px}
.post h1{font-size:clamp(40px,6vw,76px);margin-top:14px}
.post .lede{color:var(--fg);opacity:.8}
.hero-cover{margin:36px 0 0;border-radius:14px;border:1px solid var(--line);aspect-ratio:16/8}
.prose{margin:40px 0;font-size:18px;line-height:1.75}
.prose>*+*{margin-top:1.2em}
.prose h2,.prose h3,.prose h4{font:400 clamp(28px,3.4vw,40px)/1.1 var(--serif);margin-top:1.8em;letter-spacing:-.01em}
.prose h3{font-size:clamp(24px,2.8vw,32px)}.prose h4{font-size:24px}
.prose a{color:var(--accent);text-underline-offset:3px}
.prose ul,.prose ol{padding-left:1.4em}.prose li+li{margin-top:.4em}
.prose li::marker{color:var(--accent)}
.prose blockquote{border-left:3px solid var(--accent);padding:4px 0 4px 22px;font:italic 400 1.35em/1.35 var(--serif);color:var(--fg)}
.prose code{font:400 .86em var(--mono);background:var(--bg2);border:1px solid var(--line);padding:2px 6px;border-radius:5px}
.prose pre{background:var(--bg2);border:1px solid var(--line);border-radius:10px;padding:16px 18px;overflow-x:auto}
.prose pre code{background:none;border:0;padding:0;font-size:14px}
.prose img{max-width:100%;height:auto;border-radius:12px;border:1px solid var(--line);display:block}
.prose hr{border:0;border-top:1px solid var(--line-2)}
.more-news{padding-top:24px;padding-bottom:24px}

/* buttons / forms */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;background:var(--accent);color:var(--accent-ink);border:1px solid var(--accent);border-radius:10px;padding:11px 20px;font:500 14px var(--sans);cursor:pointer;text-decoration:none;transition:transform .2s,filter .2s,background .2s}
.btn:hover{transform:translateY(-1px);filter:brightness(1.1)}
.btn:active{transform:none}
.btn.ghost{background:none;color:var(--fg);border-color:var(--line-2)}
.btn.ghost:hover{border-color:var(--accent);color:var(--accent)}
.btn.danger{background:none;color:var(--danger);border-color:color-mix(in srgb,var(--danger) 40%,transparent)}
.btn.danger:hover{background:var(--danger);color:#fff}
.btn.sm{padding:6px 12px;font-size:13px}
.btn.wide{width:100%}
.panel{background:var(--bg2);border:1px solid var(--line);border-radius:14px;padding:22px}
.stack{display:flex;flex-direction:column;gap:18px}
label{display:flex;flex-direction:column;gap:7px;font:500 13px var(--sans);color:var(--mute)}
label small{font-weight:400;opacity:.8}
label.check{flex-direction:row;align-items:center;gap:10px;color:var(--fg);font-weight:400;font-size:14px}
input,textarea,select{font:400 15px var(--sans);color:var(--fg);background:var(--bg);border:1px solid var(--line-2);border-radius:10px;padding:11px 14px;width:100%;transition:border-color .2s,box-shadow .2s}
input[type=checkbox]{width:auto;accent-color:var(--accent)}
input[type=file]{padding:9px;font-size:13px}
input:focus,textarea:focus,select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 20%,transparent)}
textarea{resize:vertical;line-height:1.55}
#body{font:400 14.5px/1.65 var(--mono);min-height:420px;border-radius:0 0 10px 10px}
.form-row{flex-direction:row;align-items:flex-end;flex-wrap:wrap}
.form-row label{flex:1;min-width:180px}
.flash{padding:12px 16px;border-radius:10px;border:1px solid;font-size:14px;margin-bottom:6px}
.flash.ok{color:var(--ok);border-color:color-mix(in srgb,var(--ok) 40%,transparent);background:color-mix(in srgb,var(--ok) 8%,transparent)}
.flash.err{color:var(--danger);border-color:color-mix(in srgb,var(--danger) 40%,transparent);background:color-mix(in srgb,var(--danger) 8%,transparent)}
.flash.warn{color:var(--warn);border-color:color-mix(in srgb,var(--warn) 40%,transparent);background:color-mix(in srgb,var(--warn) 8%,transparent);margin-top:20px}

/* admin */
.table{border-top:1px solid var(--line);margin-top:24px}
.trow{display:grid;grid-template-columns:1fr auto auto;gap:20px;align-items:center;padding:16px 0;border-bottom:1px solid var(--line)}
.trow .t a{text-decoration:none}.trow .t a:hover{color:var(--accent)}
.trow .t small{display:block;color:var(--mute);font-size:13px}
.acts{display:flex;gap:8px;align-items:center;flex-wrap:wrap;justify-content:flex-end}
.acts .pw input{width:150px;padding:6px 10px;font-size:13px}
.badge{font:400 11px var(--mono);letter-spacing:.04em;text-transform:uppercase;padding:4px 10px;border-radius:99px;border:1px solid var(--line-2);color:var(--mute);white-space:nowrap}
.badge.published,.badge.admin{color:var(--ok);border-color:color-mix(in srgb,var(--ok) 40%,transparent)}
.editor{display:grid;grid-template-columns:1fr 300px;gap:28px;align-items:start;margin-bottom:24px}
.side{position:sticky;top:84px}
.field .tabs{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;background:var(--bg2);border:1px solid var(--line-2);border-bottom:0;border-radius:10px 10px 0 0;padding:8px 10px 8px 14px;font:500 13px var(--sans);color:var(--mute)}
.toolbar{display:flex;gap:4px;flex-wrap:wrap}
.toolbar button{background:none;border:1px solid transparent;color:var(--fg);font:500 13px var(--sans);min-width:34px;height:30px;padding:0 9px;border-radius:7px;cursor:pointer;transition:all .15s}
.toolbar button:hover{border-color:var(--line-2);background:var(--bg)}
.toolbar button.active{background:var(--accent);color:var(--accent-ink)}
.preview{margin:0;padding:22px;border:1px solid var(--line-2);border-radius:0 0 10px 10px;min-height:420px;background:var(--bg);font-size:17px}
.thumb{width:100%;border-radius:10px;border:1px solid var(--line)}

footer{margin-top:clamp(56px,9vw,112px);border-top:1px solid var(--line);padding:26px 0 36px}
footer .wrap{display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap}
footer a{text-decoration:none}footer a:hover{color:var(--accent)}

@media (max-width:900px){
  .grid{grid-template-columns:repeat(2,1fr)}
  .card.big{grid-template-columns:1fr;grid-template-rows:auto}
  .card.big .cover{grid-row:auto;min-height:0;aspect-ratio:16/9}
  .card.big .meta,.card.big h3,.card.big p,.card.big .more{padding-left:22px;padding-right:22px}
  .editor{grid-template-columns:1fr}.side{position:static}
}
@media (max-width:620px){
  .grid{grid-template-columns:1fr}
  .trow{grid-template-columns:1fr auto}.trow .acts{grid-column:1/-1;justify-content:flex-start}
  .search,.search input,.search input:focus{width:100%}
  .bar nav{gap:14px}
}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}html{scroll-behavior:auto}.js .fade,.js .reveal{opacity:1;transform:none}}
