:root { --forest:#24472f; --forest-deep:#183d29; --paper:#faf9f1; --ink:#263329; --sage:#cfe0ad; --muted:#5f6c61; --line:#d7d9ca; }
* { box-sizing:border-box; }
html { min-height:100%; }
body { display:grid; grid-template-rows:auto 1fr auto; min-height:100vh; margin:0; background:radial-gradient(circle at 80% 10%,#e9edd9 0,transparent 35%),var(--paper); color:var(--ink); font:16px/1.65 Inter,ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif; }
a { color:inherit; }
a:focus-visible { outline:3px solid #80a447; outline-offset:4px; }
.sr-only { position:absolute; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden; clip:rect(0,0,0,0); white-space:nowrap; border:0; }
::selection { background:var(--sage); color:var(--forest-deep); }
.site-header { display:flex; justify-content:flex-end; width:min(1180px,calc(100% - 2rem)); margin:0 auto; padding-top:1.5rem; }
.login-link { display:inline-flex; align-items:center; justify-content:center; min-width:88px; min-height:42px; padding:.55rem 1.3rem; border:1px solid var(--forest); border-radius:999px; color:var(--forest); font-size:.86rem; font-weight:700; text-decoration:none; transition:background .2s ease,color .2s ease; }
.login-link:hover { background:var(--forest); color:#fff; }
main { width:min(760px,calc(100% - 2rem)); margin:auto; padding:3rem 0 5rem; }
.mark { display:grid; place-items:center; width:54px; height:54px; margin-bottom:2.5rem; border-radius:50%; background:var(--forest); color:var(--sage); font:600 1.55rem Georgia,serif; }
.kicker { margin:0 0 .8rem; color:#526b3e; font-size:.78rem; font-weight:850; letter-spacing:.12em; }
h1 { margin:0; color:var(--forest); font:500 clamp(4rem,14vw,8rem)/.95 Georgia,serif; letter-spacing:-.04em; }
.lede { max-width:680px; margin:1.5rem 0 0; color:var(--muted); font-size:clamp(1.1rem,3vw,1.4rem); }
.line { width:86px; height:2px; margin:2.5rem 0; background:var(--sage); }
.status { margin:0; color:var(--forest); font-size:.82rem; font-weight:750; text-transform:uppercase; letter-spacing:.09em; }
footer { display:flex; flex-wrap:wrap; justify-content:space-between; gap:.8rem 2rem; padding:1.2rem max(1rem,calc((100% - 1180px)/2)); border-top:1px solid var(--line); color:#626d64; font-size:.76rem; }
footer a { color:var(--forest); text-underline-offset:.2rem; }

/* Private directory: the palette and typography belong to the public home. */
.portal-body { display:block; background:var(--paper); }
.portal-wrap { width:min(1120px,calc(100% - 2.5rem)); margin:0 auto; }
.portal-header { display:flex; align-items:center; justify-content:space-between; gap:1rem; padding:1.55rem 0; }
.portal-brand { display:inline-flex; align-items:center; gap:.75rem; color:var(--forest); font:600 1.55rem Georgia,serif; text-decoration:none; letter-spacing:-.025em; }
.portal-brand-mark { display:grid; place-items:center; width:38px; height:38px; border-radius:50%; background:var(--forest); color:var(--sage); font:600 1.1rem Georgia,serif; }
.portal-actions { display:flex; align-items:center; gap:1.3rem; }
.portal-private { color:var(--muted); font-size:.78rem; font-weight:700; }
.portal-logout { color:var(--forest); font-size:.86rem; font-weight:700; text-underline-offset:.25rem; }
.portal-main { width:auto; margin:0; padding:0 0 5rem; }
.portal-hero { padding:clamp(2.1rem,5vw,4rem); border-radius:18px; background:var(--forest-deep); color:#f7f8ed; }
.portal-hero h1 { max-width:700px; margin:0; color:inherit; font:500 clamp(2.9rem,6vw,5.6rem)/1.02 Georgia,serif; letter-spacing:-.035em; text-wrap:balance; }
.portal-hero p { max-width:62ch; margin:1.35rem 0 0; color:#e3ebd9; font-size:1.02rem; }
.portal-count { display:inline-block; margin-bottom:1.15rem; color:var(--sage); font-size:.8rem; font-weight:800; letter-spacing:.045em; }
.portal-section { margin-top:3.25rem; }
.portal-section-header { display:flex; align-items:baseline; justify-content:space-between; gap:1rem; margin-bottom:.85rem; }
.portal-section h2 { margin:0; color:var(--forest); font:500 clamp(1.8rem,3vw,2.35rem)/1.1 Georgia,serif; letter-spacing:-.02em; }
.portal-section-header span { color:var(--muted); font-size:.8rem; }
.portal-list { margin:0; padding:0; border-top:1px solid var(--line); list-style:none; }
.portal-list li { border-bottom:1px solid var(--line); }
.portal-link { display:grid; grid-template-columns:minmax(0,1fr) auto; align-items:center; gap:1.5rem; min-height:92px; padding:1rem 1.1rem; text-decoration:none; transition:background .2s ease; }
.portal-link:hover,.portal-link:focus-visible { background:#edf0e3; }
.portal-link strong { display:block; color:var(--forest-deep); font-size:1.03rem; line-height:1.35; }
.portal-link small { display:block; margin-top:.25rem; color:var(--muted); font-size:.82rem; overflow-wrap:anywhere; }
.portal-arrow { display:grid; place-items:center; width:36px; height:36px; border:1px solid #9ab79c; border-radius:50%; color:var(--forest); font-size:1.25rem; line-height:1; }
.portal-note { margin:2.4rem 0 0; color:var(--muted); font-size:.84rem; }
.portal-denied { max-width:720px; margin:10vh auto; padding:0 1.25rem; }
.portal-denied h1 { color:var(--forest); font-size:clamp(2.5rem,8vw,4rem); }
.portal-denied p { color:var(--muted); }
body.login { display:block; min-height:100vh; background:radial-gradient(circle at 80% 10%,#e9edd9 0,transparent 35%),var(--paper); }
body.login #login { width:min(390px,calc(100% - 2rem)); padding:clamp(4rem,9vh,6.5rem) 0 2rem; }
body.login #login h1 a { width:auto; height:auto; margin:0 auto 1.2rem; background:none; color:var(--forest); font:500 2.7rem/1.1 Georgia,serif; letter-spacing:-.03em; text-indent:0; overflow:visible; }
body.login .zv-login-intro { margin:0 0 1rem; color:var(--forest); font-size:.9rem; font-weight:700; text-align:center; }
body.login #loginform,body.login #lostpasswordform,body.login #resetpassform { padding:1.7rem; border:1px solid var(--line); border-radius:14px; background:#fff; box-shadow:none; }
body.login label { color:var(--forest-deep); font-size:.9rem; }
body.login form .input,body.login input[type=text] { border:1px solid #a7b4a5; border-radius:8px; background:#fff; color:var(--ink); font-size:1rem; }
body.login .button-primary { border-color:var(--forest); border-radius:8px; background:var(--forest); font-size:.9rem; font-weight:700; }
body.login .button-primary:hover,body.login .button-primary:focus { border-color:var(--forest-deep); background:var(--forest-deep); }
body.login #nav,body.login #backtoblog { margin:1rem 0 0; padding:0 .4rem; }
body.login #nav a,body.login #backtoblog a { color:var(--forest); font-size:.86rem; }
body.login .notice,body.login .message { border-radius:8px; }
@media(max-width:600px) { .site-header { padding-top:1rem; } footer { display:grid; text-align:center; } .portal-wrap { width:min(100% - 1.5rem,1120px); } .portal-header { padding:1rem 0; } .portal-brand { font-size:1.3rem; } .portal-private { display:none; } .portal-hero { border-radius:13px; } .portal-section { margin-top:2.5rem; } .portal-link { min-height:84px; padding:.9rem .4rem; } .portal-arrow { width:32px; height:32px; } }
@media(prefers-reduced-motion:reduce) { .login-link,.portal-link { transition:none; } }
