*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:#f7f7f2;color:#20251f;font:16px/1.65 -apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}body.dark{background:#171b17;color:#e6e9df}a{color:inherit;text-decoration-thickness:1px;text-underline-offset:5px}a:hover{color:#637649}button,input{font:inherit}button{cursor:pointer}::selection{background:#d6e2bc}main,header,footer{max-width:850px;margin:auto;padding:0 36px}header{display:flex;justify-content:space-between;align-items:center;padding-top:38px;gap:20px}.brand{text-decoration:none;font-weight:650}nav{display:flex;gap:23px;align-items:center}nav a{text-decoration:none;font-size:13px}.theme{border:1px solid #9ca391;background:transparent;color:inherit;width:34px;height:34px;border-radius:50%}main{padding-top:95px}h1{font-size:clamp(42px,7vw,68px);line-height:1.08;letter-spacing:-3px;font-weight:550;margin:18px 0 26px}h2{font-size:24px;font-weight:550;letter-spacing:-.5px}h3{font-size:21px;font-weight:550;margin:0 0 8px}.eyebrow,.label{font:11px/1.5 ui-monospace,SFMono-Regular,monospace;letter-spacing:1.6px;text-transform:uppercase;color:#68725f}.dark .eyebrow,.dark .label,.dark .muted{color:#aab69f}.intro{font-size:21px;line-height:1.6;max-width:625px}.muted{color:#606b59}.links{display:flex;gap:23px;font-size:13px;margin-top:27px}.hero{padding-bottom:70px}section{border-top:1px solid #ccd1c4;padding:34px 0 44px}.section-head{display:flex;justify-content:space-between;align-items:baseline;gap:20px}.section-head h2{margin:0 0 24px}.row{display:grid;grid-template-columns:55px 1fr 22px;gap:20px;padding:25px 0;border-top:1px solid #dce0d5;text-decoration:none}.row:first-of-type{border-top:0}.number{font:12px ui-monospace,monospace;color:#68725f;padding-top:6px}.row p{margin:0;max-width:570px;color:#606b59;font-size:15px}.dark .row p{color:#adb6a4}.arrow{font-size:21px}.writing-row{display:grid;grid-template-columns:90px 1fr;gap:25px;padding:20px 0;border-top:1px solid #dce0d5;text-decoration:none}.writing-row time{font:12px ui-monospace,monospace;color:#68725f}.writing-row h3{font-size:18px}.writing-row p{margin:0;font-size:14px}.about-grid{display:grid;grid-template-columns:1fr 1fr;gap:45px}.about-grid p{margin-top:0}footer{padding-top:25px;padding-bottom:35px;display:flex;justify-content:space-between;font-size:12px;border-top:1px solid #ccd1c4;margin-top:25px}.article{max-width:650px}.article h1{font-size:48px}.article p,.article li{font-size:18px}.article h2{margin-top:40px}.back{font-size:13px}.callout{background:#e8eddf;padding:25px;border-radius:3px}.dark .callout{background:#293026}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px}label{display:flex;flex-direction:column;font-size:14px;gap:6px}input{width:100%;padding:10px;background:transparent;color:inherit;border:1px solid #88947b;border-radius:3px}.result{font-size:40px;letter-spacing:-1px}.resource{display:inline-block;padding:11px 18px;background:#344c2a;color:#fff;text-decoration:none;border-radius:3px}.resource:hover{color:#fff;background:#4b653f}:focus-visible{outline:3px solid #6c8551;outline-offset:5px}.skip{position:absolute;left:10px;top:-100px}.skip:focus{top:10px}.provenance{font-size:13px!important;color:#606b59}@media(max-width:600px){main,header,footer{padding-left:23px;padding-right:23px}header{padding-top:23px}nav{gap:14px}nav a{font-size:12px}.brand{font-size:14px}main{padding-top:65px}h1{letter-spacing:-2px}.intro{font-size:19px}.hero{padding-bottom:48px}.row{grid-template-columns:25px 1fr 16px;gap:12px}.writing-row{grid-template-columns:1fr;gap:5px}.about-grid,.form-grid{grid-template-columns:1fr;gap:20px}.article h1{font-size:38px}footer{gap:15px;flex-wrap:wrap}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}
/* Personal website: charcoal-first palette, legible warm text, restrained coral. */
body.dark{background:#19191b;color:#f0eee9}body.dark .eyebrow,body.dark .label,body.dark .number{color:#d0a99a}body.dark .muted,body.dark .row p,body.dark .writing-row time,body.dark .provenance{color:#b8b5b1}body.dark section,body.dark footer{border-color:#444247}body.dark .row,body.dark .writing-row{border-color:#343338}body.dark .theme{border-color:#858087}body.dark a:hover{color:#efb39c}body.dark .resource{background:#ecc0ac;color:#242024}body.dark .resource:hover{background:#f4d0bf;color:#242024}body.dark .callout{background:#29272c}body.dark input{border-color:#817880}body.dark ::selection{background:#765046;color:#fff}body.dark :focus-visible{outline-color:#efb39c}

/* Pixel café home and cool editorial palette */
body.dark{background:#171e29;color:#f1efe8}body.dark .muted,body.dark .row p,body.dark .writing-row time,body.dark .provenance{color:#bcc6d1}body.dark .eyebrow,body.dark .label,body.dark .number{color:#bac7d6}body.dark section,body.dark footer{border-color:#3e4b5c}body.dark .row,body.dark .writing-row{border-color:#303d4e}body.dark a:hover{color:#e9b68a}body.dark .callout{background:#253243}body.dark .resource{background:#d8b594}body.dark :focus-visible{outline-color:#e9b68a}
.cafe-home header,.cafe-home main,.cafe-home footer{max-width:1200px}.cafe-home main{padding-top:38px}.cafe-scene{position:relative;isolation:isolate;aspect-ratio:16/9;background:#233142;overflow:hidden}.cafe-scene video{width:100%;height:100%;display:block;object-fit:cover}.wall-copy{position:absolute;left:11%;top:6%;width:25%;color:#e7e5de;text-shadow:2px 2px #233142}.wall-copy span{font:9px/1.5 ui-monospace,monospace;letter-spacing:1px}.wall-copy h1{font:600 clamp(20px,3.5vw,43px)/1.05 ui-monospace,monospace;letter-spacing:-2px;margin:12px 0}.wall-copy p{font:clamp(10px,1.2vw,14px)/1.5 ui-monospace,monospace;margin:0}.motion-control{position:absolute;right:14px;bottom:14px;background:#17212de8;color:#eee;border:1px solid #9aabbd;padding:6px 12px;font:11px ui-monospace,monospace}.cafe-intro{display:grid;grid-template-columns:1fr 1.2fr;gap:55px;padding:52px 0}.cafe-intro h2{font-size:36px;line-height:1.15;max-width:320px;margin-top:14px}.cafe-intro .intro{font-size:19px;margin-top:0}.cafe-home section,.cafe-home footer{max-width:950px}.cafe-home section{margin:auto}.cafe-home .links a:first-child{font-weight:650}.cafe-home a,.cafe-home button{transition:color .15s,background .15s}
@media(max-width:600px){.cafe-home main{padding:25px 0 0}.cafe-scene{aspect-ratio:16/10}.cafe-scene video{object-fit:cover}.wall-copy{left:11%;top:6%;width:27%}.wall-copy span{display:none}.wall-copy h1{font-size:21px;letter-spacing:-1px;margin:7px 0}.wall-copy p{font-size:8px}.motion-control{right:8px;bottom:8px;font-size:9px;padding:5px 7px}.cafe-intro{grid-template-columns:1fr;gap:15px;padding:32px 23px}.cafe-intro h2{font-size:31px;max-width:none}.cafe-home section{padding-left:23px;padding-right:23px}.cafe-home .about-grid{gap:15px}.cafe-home .hero{padding-bottom:36px}}
.wall-copy h1{font-size:clamp(20px,3vw,35px);margin:8px 0}.wall-copy p{font-size:clamp(8px,1.1vw,12px)}
@media(max-width:600px){.wall-copy h1{font-size:18px;margin:5px 0}.wall-copy p{font-size:8px}}
@media(max-width:600px){.wall-copy p{display:none}}

.wall-copy{width:30%;top:7%}.wall-copy h1{white-space:nowrap;font-size:clamp(16px,2.15vw,27px);letter-spacing:-1px;margin:10px 0 12px}.wall-copy p{font-size:clamp(9px,1.15vw,13px)}
@media(max-width:600px){.wall-copy{width:33%;top:8%;left:11%}.wall-copy h1{font-size:clamp(10px,2.8vw,16px);margin:5px 0 7px;letter-spacing:-.5px}.wall-copy p{display:block;font-size:clamp(7px,1.8vw,9px)}}

/* Compact homepage index */
.cafe-home .compact-intro,.cafe-home section{max-width:850px;margin-left:auto;margin-right:auto}.cafe-home .compact-intro{display:block;padding:38px 0 36px}.compact-intro p{font-size:20px;line-height:1.65;margin:0}.cafe-home section{padding-top:28px;padding-bottom:30px}.cafe-home .section-head a{font-size:12px;white-space:nowrap}.cafe-home .section-head h2{font-size:22px;margin-bottom:14px}.compact-writing .writing-row{grid-template-columns:80px 1fr 18px;gap:20px;align-items:baseline;padding:18px 0}.compact-writing .writing-row h3{font-size:17px;line-height:1.5;margin:0}.compact-work .row{grid-template-columns:1fr 18px;gap:20px;padding:17px 0}.compact-work h3{font-size:18px;margin-bottom:3px}.compact-work .row p{font-size:14px}.compact-about{display:grid;grid-template-columns:90px 1fr auto;gap:25px;align-items:baseline}.compact-about h2{font-size:20px;margin:0}.compact-about p{font-size:15px;margin:0}.compact-about>a{font-size:12px;white-space:nowrap}
@media(max-width:600px){.cafe-home .compact-intro{padding:28px 23px}.compact-intro p{font-size:17px}.compact-writing .writing-row{grid-template-columns:1fr 18px;gap:5px 12px}.compact-writing time{grid-column:1/-1}.compact-writing .writing-row h3{font-size:16px}.compact-about{grid-template-columns:1fr;gap:10px}.compact-about h2{margin-bottom:0}.cafe-home .section-head h2{font-size:21px}}


@font-face{font-family:CafeMono;src:url('/fonts/IBMPlexMono-Bold.ttf') format('truetype');font-weight:700;font-display:swap}
/* Café navigation: one framed board and four tactile links. */
body.cafe-landing{background:#233142;overflow-x:hidden}
.cafe-landing main{width:100%;max-width:none;min-height:100svh;padding:0;margin:0;overflow:hidden}
.cafe-landing .cafe-scene{container-type:inline-size;width:max(100vw,177.78svh);height:max(100svh,56.25vw);aspect-ratio:16/9}
.cafe-board{position:absolute;left:10.5%;top:6%;width:26%;padding:.9cqw 1.2cqw;background:#202d37;border:.45cqw solid #a18d76;box-shadow:inset 0 0 0 .18cqw #151d20,.25cqw .35cqw 0 #18232d;color:#eee9df;font-family:CafeMono,monospace}
.cafe-board h1{text-shadow:1px 1px 0 #0f1c27;font:700 clamp(20px,1.65cqw,32px)/1.2 CafeMono,monospace;letter-spacing:-.03em;white-space:nowrap;margin:0}
.cafe-board p{font:12px/1.5 CafeMono,monospace;margin:.4cqw 0 .8cqw;color:#c3c8c4}
.cafe-board nav{display:grid;grid-template-columns:1fr 1fr;gap:.65cqw;margin-top:.8cqw}
.cafe-board nav a{display:flex;justify-content:center;align-items:center;font:700 clamp(14px,1.1cqw,20px)/1.2 CafeMono,monospace;min-height:44px;padding:.6cqw .4cqw;text-decoration:none;color:#eee9df;background:#a9becd;border:2px solid #d2dfe6;box-shadow:3px 3px 0 #101e29;color:#172936;transition:background .12s,transform .12s}
.cafe-board nav a:hover{color:#11222f;background:#c4d6e1;transform:translateY(-2px)}
.cafe-board nav a:active{transform:translate(1px,1px);box-shadow:none}
.cafe-board nav a:focus-visible{outline:3px solid #eee9df;outline-offset:3px}
.cafe-landing ::selection{background:#eee9df;color:#252c2c}
@media(max-width:600px){
.cafe-landing .cafe-scene{width:100%;height:100svh;min-height:580px;aspect-ratio:auto;background:#344656}
.cafe-landing .cafe-scene video{object-fit:cover;object-position:52% center}
.cafe-board{left:6%;top:6%;width:88%;padding:18px;border-width:5px}
.cafe-board h1{font-size:clamp(20px,6vw,28px)}
.cafe-board p{font-size:11px;margin:8px 0 18px}
.cafe-board nav{gap:12px;margin-top:12px}
.cafe-board nav a{font-size:14px;min-height:48px;padding:10px 4px}
}
@media(prefers-reduced-motion:reduce){.cafe-board nav a{transition:none}.cafe-board nav a:hover{transform:none}.cafe-landing video{visibility:hidden}.cafe-landing .cafe-scene{background:#344656 url('/media/cafe.jpg') center/cover}}
@media(max-width:600px) and (prefers-reduced-motion:reduce){.cafe-landing .cafe-scene{background-position:52% center;background-size:cover;background-repeat:no-repeat}}

.cafe-board nav .portfolio-entry{grid-column:1/-1}

.portfolio-page main{max-width:1120px;padding-top:80px}.portfolio-page header,.portfolio-page footer{max-width:1120px}.portfolio-opening{padding-bottom:64px}.portfolio-opening h1{font-size:clamp(38px,6vw,68px);max-width:800px}.portfolio-opening p{color:#bcc6d1}.featured-projects{display:grid;grid-template-columns:1fr 1fr;gap:32px;margin-bottom:60px}.project-feature{text-decoration:none;display:block}.project-feature img{display:block;width:100%;height:290px;object-fit:cover;background:#253243}.project-feature div{padding-top:20px}.project-feature small{font-size:12px;color:#bcc6d1}.project-feature h2{margin:8px 0;font-size:28px}.project-feature p{margin:0;line-height:1.6;color:#bcc6d1;max-width:420px}.project-feature:hover h2{text-decoration:underline;text-underline-offset:6px}.project-image{width:100%;height:auto;margin:30px 0}.portfolio-page .article{margin:auto}.portfolio-page .row{grid-template-columns:0 1fr 22px;gap:12px}@media(max-width:600px){.featured-projects{grid-template-columns:1fr;gap:42px}.project-feature img{height:240px}.portfolio-page main{padding-top:45px}.portfolio-opening{padding-bottom:36px}}

@media(min-width:601px){.cafe-board{top:1.5%}}
.article p{max-width:68ch}.article{padding-bottom:48px}

.project-feature img{height:auto;aspect-ratio:16/9;object-fit:contain;background:#1c272e}.portfolio-opening h1{letter-spacing:-.035em}@media(max-width:600px){.project-feature img{height:auto}}

.private-project-art{height:auto!important;aspect-ratio:16/9;background:#293b4b;display:flex;flex-direction:column;justify-content:center;align-items:center;font-size:36px;font-weight:600;letter-spacing:-1px;padding:20px!important}.private-project-art span{font:10px/1.4 CafeMono,monospace;letter-spacing:1px;margin-top:18px;color:#b6c9d8}.capability-list{display:grid;gap:24px}.capability-list h3{font-size:18px;margin:0 0 6px}.capability-list p{margin:0;color:#bcc6d1;font-size:15px}

.calculator-results{margin-top:30px}

.theme{width:44px;height:44px}

.cafe-board nav .coffee-chat-entry{grid-column:1/-1;background:#d4d7c9;border-color:#e8ebdc;color:#253846;font-size:clamp(12px,1.05cqw,18px)}
@media(max-width:600px){.cafe-board nav .coffee-chat-entry{font-size:13px}}

.creator-prompt{margin:36px 0}.creator-prompt label{display:block;margin-bottom:12px;font-size:13px}.creator-prompt textarea{display:block;width:100%;box-sizing:border-box;resize:vertical;min-height:300px;background:#172735;color:#edf2f5;border:1px solid #617c90;padding:18px;font:13px/1.7 monospace}.prompt-actions{display:flex;align-items:center;gap:20px;margin-top:16px;flex-wrap:wrap}.prompt-actions button{background:#243b4d;border:1px solid #8199aa;color:#eff4f7;padding:12px 20px;min-height:44px;cursor:pointer}.prompt-actions button:focus-visible,.creator-prompt textarea:focus-visible{outline:2px solid #97c8e8;outline-offset:3px}#prompt-copy-status{font-size:13px;min-height:20px}

.cafe-music{position:fixed;left:12px;top:12px;z-index:20;color:#eef1ee;background:#172735ed;border:1px solid #8296a7;border-radius:4px;font:12px/1.4 system-ui,sans-serif;max-width:calc(100vw - 24px)}.cafe-music summary{padding:12px 14px;cursor:pointer;min-height:44px;box-sizing:border-box}.cafe-music iframe{display:block;width:330px;max-width:calc(100vw - 26px);height:175px;border:0}.cafe-music summary:focus-visible{outline:2px solid white;outline-offset:2px}

@media(max-width:600px){header{gap:10px;flex-wrap:wrap;padding-top:20px}header nav{gap:14px}header nav a{display:inline-flex;align-items:center;min-height:44px}.article .eyebrow{font-size:11px;letter-spacing:1px}.article .intro{font-size:19px}.article h1{overflow-wrap:anywhere}footer{gap:16px;flex-wrap:wrap}.cafe-landing .cafe-scene{min-height:100svh}.cafe-board{top:72px}.cafe-board nav a{font-size:13px}.cafe-music summary{padding:10px 12px}}

.cafe-music{left:auto;top:auto;right:16px;bottom:66px;background:transparent;border:0;max-width:calc(100vw - 32px)}.cafe-music summary{width:58px;height:58px;padding:0;min-height:58px;list-style:none;position:relative;margin-left:auto}.cafe-music summary::-webkit-details-marker{display:none}.record-disc{display:block;width:58px;height:58px;border-radius:50%;background:repeating-radial-gradient(circle,#19212a 0 2px,#374451 3px,#19212a 4px);border:2px solid #abb8bf;box-shadow:0 2px 12px #0008;position:relative;animation:record-spin 7s linear infinite}.record-disc:before{content:'';position:absolute;inset:18px;background:#d5b99b;border-radius:50%;border:1px solid #f0dfc9}.record-disc:after{content:'';position:absolute;width:5px;height:5px;top:24.5px;left:24.5px;border-radius:50%;background:#19212a}.record-label{position:absolute;right:68px;top:17px;white-space:nowrap;font-size:11px;padding:3px 7px;background:#172735e6;border-radius:3px;opacity:0;pointer-events:none}.cafe-music summary:hover .record-label,.cafe-music summary:focus-visible .record-label{opacity:1}.cafe-music iframe{position:absolute;right:0;bottom:70px;width:330px;background:#172735;border-radius:8px;box-shadow:0 5px 25px #0007}@keyframes record-spin{to{transform:rotate(360deg)}}@media(max-width:600px){.cafe-music{right:12px;bottom:64px}.cafe-music summary{padding:0}}@media(prefers-reduced-motion:reduce){.record-disc{animation:none}}

.cafe-music iframe{height:352px;max-height:calc(100svh - 155px)}

.cafe-music .record-disc{animation-play-state:paused}.cafe-music.is-playing .record-disc{animation-play-state:running}.music-status{position:absolute;right:0;bottom:425px;width:300px;background:#172735;color:#edf2f5;padding:8px 12px;font:12px/1.5 system-ui,sans-serif}.cafe-music:not([open]) .music-status{display:none}

.record-toggle{display:block;position:relative;margin-left:auto;width:58px;height:58px;border:0;padding:0;background:transparent;cursor:pointer}.cafe-music:not(.player-open) iframe{opacity:0;pointer-events:none}.cafe-music.player-open iframe{opacity:1;pointer-events:auto}.cafe-music:not(.player-open) .music-status{display:none}.cafe-music.player-open .music-status{display:block}.record-toggle:focus-visible{outline:2px solid white;outline-offset:4px}

.jams-toggle{position:absolute;right:70px;bottom:7px;white-space:nowrap;min-height:44px;padding:9px 13px;border:1px solid #91a4b3;border-radius:4px;background:#172735eb;color:#edf2f5;font:12px/1.4 system-ui,sans-serif;cursor:pointer}.jams-toggle:focus-visible{outline:2px solid white;outline-offset:3px}@media(max-width:360px){.jams-toggle{font-size:11px;padding:9px 10px;right:65px}}
