/* Publishing layer: extends the existing ALCE CV stylesheet without replacing its palette. */
.nav a[aria-current="page"]{color:var(--accent)}
.page-intro{padding:80px 0 48px;border-bottom:1px solid var(--line)}
.page-intro h1,.article-head h1{font-size:clamp(3.1rem,7vw,5.3rem)}
.page-intro .hero-intro{margin-bottom:5px}.content-list{display:grid;gap:0;margin:20px 0 70px}
.content-item{padding:27px 0 30px;border-bottom:1px solid var(--line)}
.content-item h2,.content-item h3{font-size:clamp(1.24rem,2.5vw,1.55rem);margin:9px 0;line-height:1.35;letter-spacing:-.025em}
.content-item h2 a:hover,.content-item h3 a:hover,.back-link:hover{color:var(--accent)}
.content-item p{color:var(--muted);font-size:.9rem;max-width:720px;margin:0 0 13px}
.item-meta{display:flex;flex-wrap:wrap;gap:16px;color:var(--subtle);font-size:.71rem;letter-spacing:.06em;text-transform:uppercase}
.filters{display:flex;gap:8px;flex-wrap:wrap;padding:25px 0 6px}
.filter-button{border:1px solid var(--line);background:transparent;border-radius:4px;color:var(--muted);padding:6px 13px;cursor:pointer;font-size:.78rem}
.filter-button.active,.filter-button:hover{border-color:var(--accent);color:var(--accent)}
.content-item[hidden]{display:none}.empty-state{color:var(--muted);padding:20px 0}
.article-page{max-width:810px;margin:auto;padding:48px 0 90px}.back-link{font-size:.78rem;color:var(--accent);font-weight:650}
.article-head{padding:40px 0 25px;border-bottom:1px solid var(--line);margin-bottom:28px}.article-head h1{margin-top:16px;overflow-wrap:anywhere}
.article-head .hero-intro{margin:10px 0 15px}.source-line,.related-block{border:1px solid var(--line);padding:16px 20px;border-radius:5px;background:var(--panel)}
.source-line a,.related-block a{color:var(--accent);font-weight:650}.related-block{margin-top:35px}.related-block h2{font-size:1.1rem;margin:0 0 8px}.related-block a{display:block;padding:5px 0}
.prose{font-size:1rem;line-height:1.9;color:var(--muted);overflow-wrap:anywhere}.prose h2,.prose h3,.prose h4{color:var(--text);line-height:1.3;letter-spacing:-.03em;margin:2em 0 .7em}
.prose h2{font-size:1.75rem}.prose h3{font-size:1.25rem}.prose p,.prose ul,.prose ol{margin:0 0 1.35em}.prose li{margin-bottom:.4em}
.prose a{color:var(--accent);text-decoration:underline;text-underline-offset:3px}.prose blockquote{border-left:3px solid var(--accent);margin:2em 0;padding:7px 20px;color:var(--text);background:var(--panel)}
.prose pre{background:var(--panel);border:1px solid var(--line);padding:18px 20px;overflow-x:auto;border-radius:5px;font-size:.86rem;line-height:1.6}
.prose code{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:.88em}.prose :not(pre)>code{background:var(--chip);padding:2px 5px;border-radius:3px;color:var(--text)}
.prose img{max-width:100%;height:auto;border-radius:5px}.prose table{display:block;overflow-x:auto;border-collapse:collapse;max-width:100%;font-size:.89rem}.prose td,.prose th{padding:10px 12px;border:1px solid var(--line)}.prose th{color:var(--text);background:var(--panel)}
.prose hr{border:0;border-top:1px solid var(--line);margin:38px 0}.katex-display{max-width:100%;overflow-x:auto;overflow-y:hidden;padding:10px 0}
.photo-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px;margin:40px 0 80px}.photo-tile{border:1px solid var(--line);background:var(--panel);border-radius:6px;overflow:hidden}
.photo-tile img{width:100%;aspect-ratio:4/3;object-fit:cover;display:block;transition:transform .25s}.photo-tile:hover img{transform:scale(1.03)}
.photo-caption{display:flex;justify-content:space-between;gap:10px;padding:13px 16px;font-size:.85rem}.photo-caption span{color:var(--subtle)}
.photo-placeholder{aspect-ratio:4/3;display:grid;place-items:center;color:var(--subtle);background:var(--chip)}
.photo-gallery{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin:30px 0 45px}.photo-gallery figure{margin:0}.photo-gallery img{width:100%;height:auto;display:block;border-radius:4px}
@media(max-width:680px){.page-intro{padding:50px 0 30px}.article-page{padding:30px 0 65px}.photo-grid,.photo-gallery{grid-template-columns:1fr}.filters{padding-top:18px}}
@media print{.filters,.back-link{display:none}.article-page{max-width:none;padding:0}.prose{font-size:10pt}.page-intro{padding:18px 0}.content-item{break-inside:avoid}}

/* ALCE terminal publishing overrides — writing, code, photos and CV */
.page-intro,.article-head,.content-item,.related-block,.source-line{border-color:var(--line)}
.page-intro,.article-head,.content-item{border-bottom-style:dashed}
.page-intro h1,.article-head h1{letter-spacing:-.07em}
.page-intro h1::before{content:'~/ ';font-size:.45em;color:var(--accent);vertical-align:middle;letter-spacing:0}
.article-head h1::after{content:'_';color:var(--accent);animation:blink 1.2s steps(1,end) infinite}
.content-item h2 a::before,.content-item h3 a::before{content:'> ';color:var(--accent)}
.item-meta{letter-spacing:.04em;text-transform:lowercase}
.item-meta::before{content:'//';color:var(--accent)}
.filter-button{border-radius:0;font-family:inherit;text-transform:lowercase}
.filter-button::before{content:'--';color:var(--accent)}
.filter-button.active{background:var(--chip)}
.back-link::before{content:'../ ';color:var(--subtle)}
.article-head{padding-bottom:32px}
.source-line,.related-block{border-style:dashed;border-radius:0;background:var(--panel)}
.related-block h2::before{content:'$ ';color:var(--accent)}
.prose h2::before{content:'# ';color:var(--accent)}
.prose h3::before{content:'## ';color:var(--accent)}
.prose a{text-decoration-style:dotted}
.prose pre{border-style:dashed;border-radius:0;tab-size:2}
.prose pre code{color:var(--text)}
.prose :not(pre)>code{border-radius:0;border:1px solid var(--line)}
.prose blockquote{border-left-width:2px;background:var(--chip)}
.prose img{border-radius:0;border:1px solid var(--line)}
.prose table th{color:var(--accent)}
.photo-tile{border-radius:0;border-style:dashed}
.photo-tile img{filter:saturate(.78);transition:filter .2s,transform .2s}
.photo-tile:hover img{filter:saturate(1);transform:scale(1.01)}
.photo-caption{font-size:.8rem}
.photo-caption::before{content:'~/photos/';color:var(--accent)}
.photo-placeholder{background:repeating-linear-gradient(0deg,var(--panel),var(--panel) 3px,var(--chip) 4px)}
.photo-gallery img{border-radius:0;border:1px solid var(--line)}
.katex,.katex-display{color:var(--text)}
@media(prefers-reduced-motion:reduce){.article-head h1::after{animation:none}}
@media print{.article-head h1::after{display:none}.photo-tile img{filter:none}}
