@font-face{font-family:Federo;src:url('/assets/fonts/federo-400.bc4a25863f.woff2') format('woff2');font-display:swap}
@font-face{font-family:Source;src:url('/assets/fonts/source-serif-4-var.c8b85db50b.woff2') format('woff2');font-weight:200 900;font-display:swap}
@font-face{font-family:Plex;src:url('/assets/fonts/ibm-plex-mono-400.4c6168f2f7.woff2') format('woff2');font-display:swap}
:root{color-scheme:light dark;--paper:#f8f1dd;--panel:#fff9e9;--inset:#eee8d2;--ink:#233d36;--muted:#52604e;--teal:#145957;--gold:#806023;--line:#b5a46e;--shine:#fffce9;--wall:url('/assets/ornament/wallpaper-light.4f6786fc69.svg');--shadow:#344b3630}
@media(prefers-color-scheme:dark){:root{--paper:#102c2e;--panel:#143537;--inset:#10292d;--ink:#f0e6c9;--muted:#becab3;--teal:#9edbc9;--gold:#d4b875;--line:#667b61;--shine:#42605a;--wall:url('/assets/ornament/wallpaper-dark.e87ecfb0d6.svg');--shadow:#0008}}
*{box-sizing:border-box}html{scroll-padding-top:16px}body{margin:0;background:var(--wall) repeat;color:var(--ink);font:16px/1.55 Source,Georgia,serif;overflow-wrap:anywhere}h1,h2,p,figure{margin:0}p+p{margin-top:.8em}h1,h2{font-family:Federo,Georgia,serif;font-weight:400}a{color:var(--teal);text-underline-offset:3px}a:hover{color:var(--gold)}a:focus-visible{outline:3px solid var(--gold);outline-offset:3px}img{display:block;width:100%;height:auto}svg{max-width:100%}main:focus{outline:none}.skip{position:absolute;left:12px;top:-100px;z-index:5;padding:12px;background:var(--panel)}.skip:focus{top:12px}.folio{width:calc(100% - 16px);max-width:960px;margin:12px auto;background:var(--paper);border:1px solid var(--gold);box-shadow:0 0 0 3px var(--paper),0 0 0 4px var(--line),0 15px 55px var(--shadow)}
.masthead{position:relative;display:flex;flex-direction:column;background:var(--inset);isolation:isolate}.masthead-art{height:142px;order:0;overflow:hidden}.mh{display:block;width:100%;height:100%;}.masthead-copy{padding:18px 18px 24px;text-align:center;order:1}.eyebrow{font:12px/1.5 Plex,monospace;letter-spacing:.06em}.masthead h1{font-size:clamp(42px,9vw,64px);line-height:1.2;color:var(--teal);text-shadow:0 1px var(--shine);margin:6px 0}.masthead-copy>p:last-child{font-size:17px;letter-spacing:.08em}.navigation{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;padding:8px;background:var(--inset);border-block:1px solid var(--gold)}.navigation a,.button{display:flex;justify-content:center;align-items:center;min-height:44px;text-align:center;text-decoration:none;border:1px solid var(--gold);background:linear-gradient(180deg,var(--panel),var(--inset));box-shadow:inset 1px 1px var(--shine),inset -1px -1px var(--line);padding:8px 12px;font-family:Federo,Georgia,serif;font-size:18px}.navigation a:hover,.button:hover{background:var(--panel);box-shadow:inset 0 0 0 2px var(--line)}main{padding:18px 12px}.welcome{border-bottom:1px solid var(--line);padding:0 0 20px;margin-bottom:20px}.welcome h2{font-size:25px;margin-bottom:8px}.welcome p{max-width:680px}.columns,.projects,.sidebar{display:grid;gap:20px;align-items:start;min-width:0}.panel{border:1px solid var(--line);background:var(--panel);box-shadow:inset 0 0 0 3px var(--paper),0 2px 3px var(--shadow);min-width:0;scroll-margin-top:16px}.panel>h2{font-size:22px;padding:8px 14px;border-bottom:1px solid var(--line);background:linear-gradient(110deg,var(--inset),var(--paper));box-shadow:inset 0 1px var(--shine)}.panel-body{padding:14px}.project-heading{padding:14px;display:flex;gap:10px;flex-wrap:wrap;align-items:center;justify-content:space-between;border-bottom:3px double var(--line);background:linear-gradient(115deg,var(--inset),var(--panel))}.project-heading .eyebrow{font-size:12px;letter-spacing:0;color:var(--muted);margin-bottom:6px}.project-heading h2{font-size:32px;line-height:1.1;color:var(--teal)}.status{font:12px/1.5 Plex,monospace;color:var(--muted);padding:3px 8px;border:1px solid var(--line);background:var(--paper)}.project-content{padding:12px;container-type:inline-size}.mount{padding:5px;border:1px solid var(--gold);background:var(--inset);box-shadow:inset 0 0 0 2px var(--shine),0 2px 4px var(--shadow)}figcaption{font-size:13px;line-height:1.45;color:var(--muted);padding:8px 2px 0}.project-copy{margin:18px 0}.lead{font-size:18px;line-height:1.5}.project-description p:not(:first-child){font-size:15px}.project-links{display:flex;flex-wrap:wrap;gap:10px;margin-top:16px}.button{font-size:17px}.gallery{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;align-items:start}.thumbnail:last-child:nth-child(odd){grid-column:1/-1;width:calc(50% - 6px)}.rights{font-size:12px;line-height:1.6;color:var(--muted);border-top:1px solid var(--line);padding-top:12px;margin-top:16px}.updates{list-style:none;margin:0;padding:0 14px}.updates li{padding:14px 0;border-bottom:1px dotted var(--line)}.updates li:last-child{border:0}.updates time{font:12px/1.5 Plex,monospace;color:var(--gold)}.updates p{font-size:14px;margin-top:5px}.credit-links{list-style:none;padding:0;margin:12px 0}.credit-links a{display:block;padding:4px 0;font-size:13px}.small{font-size:13px;color:var(--muted)}.social-link{display:block;border:1px solid var(--line);padding:10px 12px;margin-bottom:16px;text-decoration:none;font-size:19px;font-family:Federo,serif;background:var(--inset)}.social-link span{display:block;font:12px/1.6 Plex,monospace;color:var(--muted)}footer{padding:0 18px 20px;font-size:12px;color:var(--muted);text-align:center}.footer-ornament{margin:4px auto 14px;max-width:400px}.o-fleuron{display:block;width:100%;height:auto}.footline{display:flex;justify-content:center;gap:10px 28px;flex-wrap:wrap;margin:14px 0}.hosting{font-size:12px}.error{padding:30px}.error h1{font-size:38px}.error .button{margin-top:24px}
@container(min-width:480px){.gallery{grid-template-columns:repeat(3,minmax(0,1fr))}.thumbnail:last-child:nth-child(odd){grid-column:auto;width:auto}}
/* Tablet: broad project gallery, three compact supporting panels below it. */
@media(min-width:680px){.folio{width:calc(100% - 40px);margin:24px auto}.masthead{min-height:240px;justify-content:center}.masthead-art{position:absolute;inset:0;height:100%;z-index:-1}.masthead-copy{text-align:left;width:53%;padding:28px}.masthead h1{font-size:62px}.masthead-copy .eyebrow{max-width:230px}.navigation{grid-template-columns:repeat(4,minmax(0,1fr));padding:8px 16px}.navigation a{min-height:42px}main{padding:24px 20px}.welcome{display:grid;grid-template-columns:190px 1fr;gap:20px;align-items:center}.welcome h2{font-size:26px;margin:0}.sidebar{grid-template-columns:repeat(2,minmax(0,1fr))}.sidebar #links{grid-column:1/-1}.project-heading{padding:14px 18px}.project-content{padding:16px}.project-heading h2{font-size:36px}.project-description{columns:2;column-gap:22px}.project-description p:first-child,.project-links{column-span:all}.project-description p:first-child{margin-bottom:12px}.project-links{margin-top:18px}.gallery img{aspect-ratio:4/3;object-fit:cover}.sidebar .panel-body{font-size:15px}}
/* Desktop: fixed folio with a permanent journal/about rail. */
@media(min-width:980px){.columns{grid-template-columns:minmax(0,1fr) 224px;gap:18px}.sidebar{grid-template-columns:1fr;gap:18px}.sidebar #links{grid-column:auto}.masthead-copy{padding-left:36px}.masthead h1{font-size:72px}.welcome{grid-template-columns:220px 1fr}.project-description{columns:auto}.project-content{padding:14px}.project-heading h2{font-size:34px}.project-heading .eyebrow{max-width:360px}.panel-body{padding:13px}.project-heading{gap:10px}.gallery{gap:10px}.project-description p:not(:first-child){font-size:16px}}
/* Wide: layered ornamental surround retains the same reading measure. */
@media(min-width:1440px){body{background-image:radial-gradient(ellipse at 50% 5%,transparent 25%,#0a39352b 100%),var(--wall);background-size:auto,240px 240px}.folio{margin-block:40px;box-shadow:0 0 0 6px var(--paper),0 0 0 7px var(--gold),0 0 0 15px var(--inset),0 0 0 16px var(--line),0 25px 100px #0004}}
/* Short landscape: low banner and two-column project figure / introduction. */
@media(min-width:600px) and (max-height:500px) and (min-aspect-ratio:3/2){.folio{margin:8px auto}.masthead{min-height:128px;display:block}.masthead-art{position:absolute;inset:0;height:128px;z-index:-1}.masthead-copy{padding:14px 24px;text-align:left;width:65%}.masthead h1{font-size:44px;margin:0}.masthead-copy>p:last-child{font-size:14px}.navigation{grid-template-columns:repeat(4,minmax(0,1fr))}.welcome{padding-bottom:14px;margin-bottom:14px}.project-content{display:grid;grid-template-columns:1fr 1fr;gap:16px}.project-copy{margin:0}.project-description{columns:auto}.project-description p:not(:first-child){font-size:14px}.project-description p:first-child{font-size:16px}.gallery,.rights{grid-column:1/-1}.rights{margin:0}.sidebar{grid-template-columns:repeat(2,minmax(0,1fr))}.sidebar #links{grid-column:1/-1}}
@media(pointer:coarse),(hover:none){a{min-height:44px;min-width:44px}.credit-links a,.footline a,.hosting a{display:flex;align-items:center;justify-content:center}.credit-links a{justify-content:flex-start}.navigation a{min-height:44px}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}

@media(min-width:680px){.masthead-copy>p:last-child{margin-top:18px}}
@media(min-width:680px){.masthead-art .mh{width:960px;max-width:none}.masthead-copy{width:430px;max-width:60%}}
@media(min-width:600px) and (max-height:500px) and (min-aspect-ratio:3/2){.masthead-art .mh{width:960px;max-width:none}.masthead-copy{max-width:65%}}

.font-credits{margin:12px auto 0;max-width:36rem}.font-credits summary{cursor:pointer;min-height:44px;padding:12px;width:fit-content;margin:auto}.font-credits summary:focus-visible{outline:3px solid var(--gold);outline-offset:2px}.font-credits .credit-links{display:flex;flex-wrap:wrap;justify-content:center;gap:6px 18px}.font-credits .credit-links a{font-size:12px}
/* Separate pages share the crafted frame; each navigation item changes document. */
.navigation a[aria-current="page"]{background:var(--teal);color:var(--paper);box-shadow:inset 0 0 0 2px var(--paper)}
.page-heading{padding:0 0 20px;margin-bottom:20px;border-bottom:1px solid var(--line)}.page-heading h2{font-size:32px;color:var(--teal)}
.prose-panel{padding:clamp(18px,3vw,32px)}.prose-panel p+p{margin-top:1.1em}.contact-panel{max-width:640px;margin-bottom:30px}.contact-panel .button{margin-top:22px;width:fit-content;max-width:100%}
.blog-feed{display:grid;gap:22px;min-width:0}.blog-post{padding:clamp(16px,3vw,26px)}.blog-post header{padding-bottom:16px;margin-bottom:16px;border-bottom:1px solid var(--line)}.blog-post time,.recent-entries time{font:12px/1.5 Plex,monospace;color:var(--gold)}.blog-post h2{font-size:28px;line-height:1.25;margin-top:8px;color:var(--teal)}.blog-post .status{display:inline-block;margin-left:8px}.post-body{overflow-wrap:anywhere}.post-body p+p{margin-top:1em}.post-body h1,.post-body h2,.post-body h3{font-family:Federo,serif;font-size:23px;line-height:1.3;margin:1em 0 .5em}.post-body pre{white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;background:var(--inset);padding:12px}.post-body blockquote{margin:1em 0;padding-left:16px;border-left:3px solid var(--line)}
.recent-entries,.project-directory{list-style:none;padding:0 14px;margin:0}.recent-entries li,.project-directory li{padding:12px 0;border-bottom:1px dotted var(--line)}.recent-entries a,.project-directory a{display:block;padding:6px 0;min-height:44px}.panel-link{display:block;padding:14px;min-height:44px}.page--about .lead{margin-bottom:22px}.page--contact{min-height:320px}
@media(min-width:680px) and (max-width:979px){.page--about .sidebar,.page--blog .sidebar{grid-template-columns:repeat(2,minmax(0,1fr))}}

.project-description{display:block}.project-description p:first-child{font-size:18px;line-height:1.5}.project-description pre{white-space:pre-wrap;overflow-wrap:anywhere}.project-description li{margin-block:.3em}

.about-logo{position:relative;aspect-ratio:3895/2303;overflow:hidden;margin:24px auto 0;max-width:480px}.about-logo img{position:absolute;width:120.077022%;max-width:none;height:auto;left:-12.862644%;top:-20.277898%}

