@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&display=swap');/* vt323-latin-400-normal */
@font-face {
  font-family: 'VT323';
  font-style: normal;
  font-display: swap;
  font-weight: 400;
  src: url(/assets/vt323-latin-400-normal-wDgJuOC9.woff2) format('woff2'), url(/assets/vt323-latin-400-normal-Dqn9ZSPj.woff) format('woff');
}
:root{font-family:'DM Sans',Arial,sans-serif;background:#070809;color:#e4e4e7;--bg:#070809;--fg:#e4e4e7;--muted:#92949d;--border:#25282e;--panel:#0e1319;color-scheme:dark;font-synthesis:none}*{box-sizing:border-box}body{margin:0}a{color:inherit;text-decoration:none}button{font:inherit;color:inherit;cursor:pointer}a:focus-visible,button:focus-visible{outline:2px solid #a8b5d7;outline-offset:5px}.sidebar{position:fixed;left:0;top:0;width:250px;height:100dvh;padding:32px;display:flex;flex-direction:column;justify-content:center;align-items:flex-start}.wordmark{font:24px 'VT323',monospace;margin-bottom:36px}nav{display:grid;gap:3px;width:100%}nav a{display:block;font-size:16px;padding:11px 0;color:var(--muted);border-left:2px solid transparent}nav a.active{padding-left:17px;border-color:#a8b5d7;color:var(--fg)}nav a:hover{color:var(--fg)}.theme{margin-top:28px;width:46px;height:46px;border:1px solid var(--border);background:none;font-size:25px;font-family:Arial;color:var(--muted)}main{margin-left:280px;padding:64px 48px 60px 0;min-height:100dvh}.hero{height:190px;border:1px solid var(--border);position:relative;overflow:hidden;background:var(--panel);display:flex;align-items:center;padding:0 32px}.hero canvas{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}.hero h1{position:relative;margin:0;font:64px/1 'VT323',monospace;font-weight:400}.glitch{position:relative}.glitch:after{content:attr(data-text);position:absolute;left:0;top:0;opacity:0;color:#d98982;clip-path:inset(35% 0 42% 0);animation:glitch 8s infinite}.page-header{padding-bottom:28px;margin-bottom:40px;border-bottom:1px solid var(--border)}h1{font-size:32px;letter-spacing:-1px;margin:0;font-weight:600}.project-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:24px}.project-card{border:1px solid var(--border);min-width:0;display:flex;flex-direction:column}.project-cover{aspect-ratio:1.7;display:flex;align-items:center;justify-content:center;border-bottom:1px solid var(--border);background:var(--panel);overflow:hidden}.project-cover img{display:block;width:100%;height:100%;object-fit:cover;filter:grayscale(1);transition:filter .25s}.project-cover:hover img{filter:grayscale(0)}.initials{font:44px 'VT323',monospace;color:#545b67}.project-body{padding:23px;min-height:180px;display:flex;flex-direction:column;flex:1}.project-title{display:flex;align-items:baseline;justify-content:space-between;gap:12px}h2{font-size:19px;letter-spacing:-.4px;margin:0;font-weight:600}.source{font:13px monospace;white-space:nowrap;color:#adb9d5}.project-body p{font-size:16px;line-height:1.7;color:var(--muted);margin:12px 0 26px}.tags{list-style:none;display:flex;flex-wrap:wrap;gap:6px;padding:0;margin:auto 0 0}.tags li{border:1px solid var(--border);padding:5px 8px;font:11px monospace;letter-spacing:1px;text-transform:uppercase;color:var(--muted)}.community h2{margin:0 0 15px;font-size:24px}.community>a{font:16px/1.8 monospace;color:var(--muted)}.community>a:hover{color:var(--fg)}.skip{position:fixed;top:-70px;left:20px;z-index:10;padding:12px;background:var(--fg);color:var(--bg)}.skip:focus{top:10px}.light{--bg:#f6f6f4;--fg:#272a30;--muted:#646971;--border:#d3d6db;--panel:#e8ebee;background:var(--bg);color:var(--fg);color-scheme:light}@keyframes glitch{0%,92%,96%,100%{opacity:0;transform:none}93%{opacity:.7;transform:translate(-3px,1px)}94%{opacity:.5;transform:translate(3px,-1px)}95%{opacity:.6;transform:translate(-2px,0)}}@media(min-width:1650px){main{margin-left:350px;padding-right:70px;padding-top:72px}.sidebar{width:280px;padding-left:40px}.hero{height:180px}}@media(max-width:1150px){.project-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.sidebar{width:210px;padding:26px}main{margin-left:240px;padding-right:30px}}@media(max-width:760px){.sidebar{position:relative;width:100%;height:auto;padding:26px 22px 0;display:grid;grid-template-columns:1fr auto;gap:24px}.wordmark{margin:0;align-self:center}nav{grid-column:1/-1;grid-row:2;display:flex;gap:25px}nav a{padding:9px 0;border-left:0;border-bottom:2px solid transparent;font-size:15px}nav a.active{padding-left:0;border-bottom-color:#a8b5d7}.theme{grid-column:2;grid-row:1;margin:0;width:38px;height:38px;font-size:22px}main{margin:0;padding:32px 22px;min-height:calc(100dvh - 145px)}.hero{height:165px;padding:24px}.hero h1{font-size:56px}.project-grid{gap:20px}.page-header{margin-bottom:28px;padding-bottom:22px}h1{font-size:29px}.project-body{padding:20px}}@media(max-width:540px){.project-grid{grid-template-columns:1fr}.project-body{min-height:165px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important}}

.back-link{display:inline-block;font:13px monospace;color:#adb9d5;margin:0 0 28px}.detail-header{margin-bottom:28px}.detail-header h1{margin-bottom:22px}.detail-meta{display:flex;align-items:center;flex-wrap:wrap;gap:16px 24px;color:var(--muted);font-size:13px}.detail-meta .tags{margin:0}.detail-image{display:block;width:100%;max-width:1050px;height:auto;border:1px solid var(--border)}.detail-placeholder{display:flex;align-items:center;justify-content:center;width:100%;max-width:1050px;height:clamp(180px,30vw,380px);border:1px solid var(--border);background:var(--panel);color:#545b67;font:64px 'VT323',monospace}.detail-description{max-width:1050px;margin-top:26px;padding-bottom:50px}.detail-description p{font-size:16px;line-height:1.85;margin:0 0 18px}.pet{position:fixed;right:22px;bottom:max(15px,env(safe-area-inset-bottom));width:78px;height:136px;padding:0;border:0;background:none;z-index:5;-webkit-tap-highlight-color:transparent;transform-origin:50% 100%}.pet img{display:block;width:100%;height:auto;user-select:none;animation:pet-idle 4s ease-in-out infinite;filter:drop-shadow(0 3px 2px #0003)}.pet-greeting{position:absolute;left:0;right:0;top:-36px;text-align:center;font:34px/1 'VT323',monospace;color:var(--fg);opacity:0;pointer-events:none}.pet.happy img{animation:pet-hop .45s ease-in-out 2}.pet.happy .pet-greeting{animation:pet-greeting 1.6s ease-out}.pet:hover img{filter:drop-shadow(0 0 4px #ffffff30)}@keyframes pet-idle{0%,100%{transform:translateY(0) rotate(-1deg)}50%{transform:translateY(-3px) rotate(1deg)}}@keyframes pet-hop{0%,100%{transform:translateY(0)}45%{transform:translateY(-10px) rotate(-4deg)}70%{transform:translateY(-4px) rotate(3deg)}}@keyframes pet-greeting{0%{opacity:0;transform:translateY(0)}15%,75%{opacity:1}100%{opacity:0;transform:translateY(-12px)}}@media(max-width:760px){.pet{width:60px;height:105px;right:13px;bottom:max(12px,env(safe-area-inset-bottom))}.detail-meta{gap:13px;font-size:12px}.detail-header{padding-bottom:24px}main{padding-bottom:140px}}@media(prefers-reduced-motion:reduce){.pet img,.pet.happy img,.pet.happy .pet-greeting{animation:none!important}.pet.happy .pet-greeting{opacity:1}}

/* Personal layout: restrained blue accents and a cut-corner ASCII banner. */
:root{--accent:#9db7e6}.light{--accent:#385b94}.wordmark{font-size:30px;letter-spacing:.5px}.sidebar nav a{transition:color .18s,padding .18s}.sidebar nav a.active{border-color:var(--accent);color:var(--accent)}.home-page{max-width:1100px}.home-page .hero{height:230px;padding:36px;border:0;background:linear-gradient(110deg,var(--panel),var(--bg));clip-path:polygon(0 0,calc(100% - 20px) 0,100% 20px,100% 100%,20px 100%,0 calc(100% - 20px))}.home-page .hero:before{content:'';position:absolute;top:0;left:0;width:80px;height:2px;background:var(--accent)}.home-page .hero:after{content:'';position:absolute;right:0;bottom:0;width:80px;height:2px;background:var(--accent)}.home-page .hero canvas{opacity:.8}.home-page .hero h1{max-width:100%;font-size:clamp(40px,4.6vw,70px);line-height:1.08;letter-spacing:-.5px}.home-page .glitch:after{color:var(--accent)}.home-bio{max-width:740px;margin:38px 0 0;padding:0 0 0 22px;border-left:1px solid var(--border)}.home-bio p{font-size:16px;line-height:1.9;color:var(--muted);margin:0 0 17px}.home-bio p:first-child{color:var(--fg);font-size:18px}.social-links{display:flex;flex-wrap:wrap;gap:18px;margin-top:5px}.social-links a{font:13px monospace;color:var(--accent);transition:color .18s}.social-links a:hover{color:var(--fg)}.project-card{transition:border-color .2s}.project-card:hover{border-color:var(--accent)}@media(max-width:760px){.wordmark{font-size:28px}.home-page .hero{height:200px;padding:26px}.home-page .hero h1{font-size:clamp(40px,7.5vw,56px)}.home-bio{margin-top:28px;padding-left:17px}.home-bio p:first-child{font-size:17px}.sidebar nav a.active{border-bottom-color:var(--accent)}}

/* Retro desktop details and published books. */
body{background-image:radial-gradient(var(--border) .65px,transparent .65px);background-size:24px 24px;background-attachment:fixed}.sidebar{background:var(--bg)}main>section{position:relative}.desktop-titlebar{display:flex;align-items:center;justify-content:space-between;padding:9px 16px;background:var(--panel);border:1px solid var(--border);font:18px 'VT323',monospace;color:var(--accent)}.home-page .hero{clip-path:none;border:1px solid var(--border);border-top:0;box-shadow:5px 5px 0 var(--border)}.home-page .hero:before,.home-page .hero:after{display:none}.home-bio{background:var(--bg)}.sticker-shelf{display:flex;align-items:flex-end;gap:15px;margin-top:42px;padding-bottom:14px;border-bottom:2px solid var(--border);max-width:500px}.pixel-sticker{display:block;width:70px;height:76px;background-image:url('/pixel-stickers.png');background-size:210px 351.6px;image-rendering:pixelated;border:1px solid #928aa0;box-shadow:3px 3px 0 var(--border)}.sticker-computer{background-position:-70px 0;transform:rotate(-5deg)}.sticker-dino{background-position:-70px -140px;transform:rotate(3deg)}.sticker-arcade{background-position:-140px -211px;transform:rotate(-3deg)}.shelf-dashes{margin:auto 0 auto auto;font:20px 'VT323';color:var(--accent);letter-spacing:4px}.page-header{border-bottom:1px dashed var(--border)}.project-card{box-shadow:4px 4px 0 var(--border);background:var(--bg)}.theme{box-shadow:3px 3px 0 var(--border)}.book-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),380px));gap:36px}.shelf-heading{display:flex;align-items:center;justify-content:space-between}.shelf-heading p{margin:12px 0 0;color:var(--muted);font-size:15px}.shelf-symbol{font:26px 'VT323';color:var(--accent)}.book-card{border:1px solid var(--border);background:var(--bg);box-shadow:5px 5px 0 var(--border)}.book-stage{padding:30px 50px 32px;display:flex;justify-content:center;background:var(--panel);border-bottom:1px solid var(--border);perspective:1000px}.book-object{display:block;position:relative;width:220px;max-width:100%;transform:rotateY(-9deg) rotate(-2deg);transform-origin:left center;box-shadow:8px 9px 0 #0005;transition:transform .25s}.book-object:hover,.book-object:focus-visible{transform:rotateY(0) rotate(0) translateY(-5px)}.book-object:after{content:'';position:absolute;top:2px;bottom:2px;right:-7px;width:7px;background:repeating-linear-gradient(0deg,#c9c5ba 0 1px,#f2eee5 1px 3px);transform:skewY(8deg);z-index:-1}.book-object img{display:block;width:100%;height:auto}.book-spine{position:absolute;inset:0;pointer-events:none;background:linear-gradient(90deg,#0005,transparent 5%,#ffffff38 6%,transparent 9%);border:1px solid #0002}.book-copy{padding:25px}.book-author{font:18px 'VT323';letter-spacing:2px;text-transform:uppercase;color:var(--accent)}.book-copy h2{font-size:22px;line-height:1.4;margin:10px 0}.book-copy p{color:var(--muted);font-size:14px;margin:0 0 25px}.pixel-button{display:flex;justify-content:space-between;align-items:center;gap:18px;padding:12px 15px;border:1px solid var(--accent);box-shadow:3px 3px 0 var(--accent);color:var(--fg);font:21px 'VT323';transition:transform .15s,box-shadow .15s}.pixel-button:hover{transform:translate(2px,2px);box-shadow:1px 1px 0 var(--accent)}@media(max-width:760px){.sidebar nav{gap:clamp(12px,4vw,25px);flex-wrap:wrap}.sidebar nav a{font-size:14px}.sticker-shelf{max-width:100%;margin-top:32px}.book-grid{grid-template-columns:repeat(auto-fill,minmax(min(100%,280px),1fr))}.book-stage{padding:28px 44px}.book-copy{padding:22px}.shelf-dashes{font-size:16px}}@media(prefers-reduced-motion:reduce){.book-object,.pixel-button{transition:none}}
