@font-face{font-family:Pixelify;src:url('assets/pixelify-sans.ttf') format('truetype');font-display:swap}
@font-face{font-family:Geist;src:url('assets/geist.woff2') format('woff2');font-display:swap}
:root{--night:#071321;--ink:#0b1724;--cream:#f5e8cf;--blue:#a4d9ff;--muted:#a7bacc;--wood:#664443;--wood-light:#b48266;--wood-dark:#342b36;--pixel:Pixelify,monospace;--body:Geist,system-ui,sans-serif}
*{box-sizing:border-box}body{margin:0;color:var(--cream);background:var(--night);font-family:var(--body);min-height:100vh}a{color:inherit;text-decoration:none}button{font:inherit;cursor:pointer}canvas{image-rendering:pixelated;image-rendering:crisp-edges}button:focus-visible,a:focus-visible{outline:3px solid #a5e7ff;outline-offset:6px}.night{position:fixed;inset:0;z-index:-1;overflow:hidden;background:radial-gradient(ellipse at 50% 39%,#183747 0,#0b1c2c 48%,#060e1a 100%)}.stars{position:absolute;inset:0;background-image:radial-gradient(#a9cbe966 1px,transparent 1px),radial-gradient(#b7dfff55 1px,transparent 1px);background-size:97px 101px,167px 137px;background-position:20px 18px,73px 61px;opacity:.55}.trees{position:absolute;bottom:0;left:0;width:100%;height:35%;opacity:.35;background:linear-gradient(transparent,#030d17);clip-path:polygon(0 26%,3% 26%,3% 13%,5% 13%,5% 0,7% 0,7% 17%,9% 17%,9% 39%,13% 39%,13% 30%,16% 30%,16% 49%,22% 49%,22% 61%,77% 61%,77% 44%,85% 44%,85% 33%,90% 33%,90% 9%,93% 9%,93% 25%,96% 25%,96% 42%,100% 42%,100% 100%,0 100%)}.wild-jelly{position:absolute;width:130px;opacity:.2;filter:drop-shadow(0 0 18px #4aafff);animation:drift 9s ease-in-out infinite}.jelly-one{left:4%;top:43%;transform:rotate(-18deg)}.jelly-two{right:2%;top:20%;width:100px;animation-delay:-4s;transform:rotate(20deg)}.page-nav{max-width:1250px;margin:auto;padding:26px 38px;display:flex;justify-content:space-between;align-items:center;font-size:13px;color:#c4d3df}.small-button{display:inline-flex;align-items:center;gap:12px;border:1px solid #456177;background:#102334;padding:10px 15px;color:#e0edfa;font-family:var(--pixel);font-size:16px;box-shadow:3px 3px 0 #030c17}.small-button:hover{background:#1c384d}.download-link{padding:8px 0;border-bottom:1px solid #496477}.download-link span{color:var(--blue);margin-left:9px}main{max-width:1000px;margin:0 auto;padding:0 50px 28px}.intro{text-align:center;margin:16px 0 31px}.eyebrow{font:14px var(--pixel);color:#a4b9c9;letter-spacing:2px;margin:0 0 28px}.hanging-sign{position:relative;display:flex;align-items:center;justify-content:center;gap:25px;width:max-content;max-width:100%;margin:auto;padding:17px 27px 19px;background:#142d40;border:4px solid #42617a;box-shadow:inset 0 0 0 3px #0b1a2b,6px 6px 0 #030d19,0 0 50px #65bbff0a}.hanging-sign:before,.hanging-sign:after{content:'';position:absolute;top:-26px;width:4px;height:26px;background:#7a7c74;box-shadow:2px 0 0 #263646}.hanging-sign:before{left:18%}.hanging-sign:after{right:18%}h1{font:32px/1.05 var(--pixel);margin:0;text-transform:uppercase;letter-spacing:1px}h1 span{color:#ade3ff;text-shadow:0 0 18px #6fb7ff70}.sign-star{color:#adddf5;font-size:23px}.tagline{font-size:12px;color:#a4b5c5;letter-spacing:.3px;margin:19px 0 0}.market{position:relative;filter:drop-shadow(8px 10px 0 #030d1880)}.awning{height:54px;background:repeating-linear-gradient(90deg,#80b5c5 0 45px,#224962 45px 90px);border:5px solid #142637;border-bottom:0;position:relative;box-shadow:inset 0 6px 0 #a5d1d055,inset 0 -8px 0 #101c3933;clip-path:polygon(0 0,100% 0,100% 86%,98% 100%,95% 100%,93% 86%,91% 100%,88% 100%,86% 86%,84% 100%,81% 100%,79% 86%,77% 100%,74% 100%,72% 86%,70% 100%,67% 100%,65% 86%,63% 100%,60% 100%,58% 86%,56% 100%,53% 100%,51% 86%,49% 100%,46% 100%,44% 86%,42% 100%,39% 100%,37% 86%,35% 100%,32% 100%,30% 86%,28% 100%,25% 100%,23% 86%,21% 100%,18% 100%,16% 86%,14% 100%,11% 100%,9% 86%,7% 100%,4% 100%,2% 86%,0 86%)}.shop-trim{border:5px solid var(--wood-dark);border-bottom:0;display:flex;justify-content:space-between;align-items:center;padding:12px 20px;background:#684943;color:#e3c4a3;font:11px var(--pixel);letter-spacing:1px}.open-sign{color:#c6e2ce;font-size:12px;letter-spacing:0}.open-sign i{display:inline-block;width:5px;height:5px;background:#a1e6c2;margin-right:6px;box-shadow:0 0 8px #a1e6c2}.shop-interior{border:6px solid var(--wood-dark);border-top:0;border-bottom:0;padding:5px 17px 0;background-color:#183141;background-image:linear-gradient(90deg,#0f253133 2px,transparent 2px),linear-gradient(#7dabb510 2px,transparent 2px);background-size:46px 46px;box-shadow:inset 9px 0 0 #0c2027,inset -9px 0 0 #0c2027}.shelf{display:grid;grid-template-columns:repeat(3,1fr);border-bottom:16px solid #ae7d5e;box-shadow:0 5px 0 #51383c,inset 0 -6px 0 #102331;position:relative;margin:0 0 10px;padding:3px 6px 12px;gap:10px}.shelf:after{content:'';position:absolute;bottom:-14px;left:0;right:0;height:3px;background:#d6a77a;box-shadow:0 11px 0 #3c2c31}.food{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:end;min-width:0;height:179px;color:var(--cream);border:0;background:none;padding:0 5px 0;outline-offset:-4px}.food:before{content:'';width:70%;height:16px;position:absolute;top:118px;background:#030e1866;filter:blur(6px);border-radius:50%}.food canvas{width:116px;height:116px;position:relative;transition:transform .22s ease,filter .22s ease;filter:drop-shadow(3px 4px 0 #08192399)}.food:hover canvas,.food:focus-visible canvas{transform:translateY(-7px) rotate(-3deg);filter:drop-shadow(0 0 15px #82c9ff70)}.food-label{position:relative;z-index:1;font:19px var(--pixel);margin-top:5px;background:#ecdabe;color:#3d2a32;padding:5px 12px 6px;border:2px solid #67464a;box-shadow:2px 2px 0 #080f1c;min-width:100px;white-space:nowrap}.food-category{font:13px var(--pixel);color:#abcbd7;margin-top:9px;white-space:nowrap}.food::after{content:'✦';position:absolute;right:18%;top:22px;color:#b7e5ff;opacity:0;transform:scale(.6);transition:.2s}.food:hover::after{opacity:1;transform:scale(1)}.counter{border:6px solid #322936;border-top:0;background:#6c4744;position:relative}.counter-top{height:43px;background:#b68a66;border-top:5px solid #e4b78a;border-bottom:5px solid #68474a;position:relative;display:flex;align-items:center;justify-content:center}.counter-front{height:57px;display:flex;align-items:center;justify-content:space-between;padding:0 25px;background:repeating-linear-gradient(90deg,transparent 0 100px,#4b343a70 100px 104px);box-shadow:inset 0 7px 0 #4c3335,inset 0 -6px 0 #4b343a;font:10px var(--pixel);letter-spacing:2px;color:#d9b69b}.counter-heart{font-size:23px;letter-spacing:0;color:#edd0b4}.counter-plant{position:absolute;bottom:22px;left:21px}.counter-plant canvas{width:88px;height:88px}.shopkeeper{position:absolute;bottom:22px;left:50%;transform:translateX(-50%);display:flex;flex-direction:column;align-items:center}.shopkeeper canvas{width:104px;height:104px;filter:drop-shadow(3px 4px 0 #16243488)}.shopkeeper span{position:absolute;bottom:-12px;font:12px var(--pixel);background:#ede0c4;color:#523b3e;padding:4px 9px;white-space:nowrap;box-shadow:2px 2px 0 #412d34}.counter-note{font:15px var(--pixel);color:#3e3037;line-height:1.05;position:absolute;left:16%;transform:rotate(-4deg)}.counter-note span{font-size:12px}.counter-book{position:absolute;right:24px;bottom:14px}.counter-book canvas{width:64px;height:64px}.lantern{position:absolute;z-index:2;top:8px;width:83px;filter:drop-shadow(0 0 13px #63ceff70);animation:lantern-glow 4s ease-in-out infinite}.lantern canvas{width:100%}.lantern-left{left:-59px}.lantern-right{right:-59px;animation-delay:-2s}.welcome{margin-top:28px;display:flex;align-items:center;gap:19px;padding:20px 24px;background:#172f40;border:3px solid #47697f;box-shadow:inset 0 0 0 3px #0e1d2b,5px 5px 0 #030e1b;position:relative}.portrait{background:#223e4b;border:2px solid #476a7b;flex-shrink:0;width:68px;height:68px;overflow:hidden}.portrait canvas{width:76px;height:76px;margin-left:-5px;margin-top:-2px}.speaker{position:absolute;top:-13px;font:16px var(--pixel);padding:3px 14px;background:#638c9f;border:2px solid #243c50;color:#eef3df}.welcome p{font:18px/1.3 var(--pixel);margin:0 0 8px}.welcome-hint{font:12px var(--pixel);color:#86b4cb;letter-spacing:.5px}.welcome-hint span{color:#b7e3fa;margin-left:5px}footer{display:flex;justify-content:space-between;margin:26px 0 0;font-size:10px;color:#839dad;letter-spacing:.3px}footer a{color:#b0d0e5}footer a:hover{color:white}.fallback{padding:20px;font-size:15px}.fallback a{text-decoration:underline}
dialog{color:var(--cream);padding:0;border:4px solid #7d9ba9;max-width:min(750px,calc(100vw - 32px));width:750px;max-height:calc(100dvh - 48px);background:#122c3d;box-shadow:inset 0 0 0 4px #0a192b,8px 8px 0 #030c17;overflow:auto}dialog::backdrop{background:#020a15cf;backdrop-filter:blur(5px)}.detail-header{display:flex;justify-content:space-between;align-items:center;background:#213f52;border-bottom:3px solid #4c6579;padding:10px 18px;font:14px var(--pixel);letter-spacing:1px;color:#b4d5e3;position:sticky;top:0;z-index:3}.close-button{font:30px/1 var(--pixel);background:#102434;border:2px solid #607887;color:#e9e2d1;min-width:34px;height:34px}.close-button:hover{background:#345366}.detail-body{padding:24px 30px}.detail-heading{display:flex;align-items:center;gap:22px;margin-bottom:22px;border-bottom:1px solid #426077;padding-bottom:20px}.detail-sprite{flex-shrink:0;background:#173748;border:2px solid #38566b;width:114px;height:114px}.detail-sprite canvas{width:110px;height:110px}.detail-heading p{margin:0;font-size:12px;color:#a9bdcc}.detail-heading #detail-food{font:16px var(--pixel);color:#b8dcf2;margin-bottom:6px}h2{font:28px/1.1 var(--pixel);margin:0 0 10px}#detail-content{font-size:14px;line-height:1.75;color:#d2dee5}#detail-content p{margin:0 0 16px}#detail-content ul{padding-left:19px;margin:10px 0 25px}#detail-content li{padding-left:4px;margin-bottom:12px}#detail-content li::marker{color:#92c9df}.detail-block{padding:17px 0;border-bottom:1px solid #324c60}.detail-block:last-child{border:0}.detail-block h3{font:20px var(--pixel);color:#f0e3c9;margin:0 0 8px}.detail-block .meta{color:#97b5c9;font-size:12px}.skill-group{margin-bottom:19px}.skill-group h3{font:20px var(--pixel);color:#b5ddf2;margin:0 0 9px}.chips{display:flex;flex-wrap:wrap;gap:6px}.chip{font-size:12px;line-height:1.4;padding:5px 9px;background:#213e4f;border:1px solid #4e6b7a;color:#e0e8e7}.profile-links{display:flex;flex-wrap:wrap;gap:10px;margin:24px 0 10px}.profile-links a{font:17px var(--pixel);padding:10px 14px;border:2px solid #5b7b91;background:#27495b}.profile-links a:hover{background:#365f72}.projects-list{display:grid;gap:8px}.projects-list details{border:1px solid #405d72;background:#183344}.projects-list summary{padding:13px 16px;cursor:pointer;font:19px/1.25 var(--pixel);color:#eaddc5}.projects-list details[open] summary{border-bottom:1px solid #405d72;background:#264659}.projects-list details>div{padding:17px 20px 0}.projects-list details summary:focus-visible{outline:3px solid #a5e7ff;outline-offset:-3px}.detail-footer{border-top:2px solid #405d72;background:#182f40;padding:15px 22px;display:flex;justify-content:space-between;align-items:center;gap:10px;font:13px var(--pixel);color:#9cbbcb}.detail-footer button{font-size:15px}.source-note{font-size:11px;color:#809faf;margin-top:23px!important}
@keyframes drift{50%{translate:0 -20px}}@keyframes lantern-glow{50%{filter:drop-shadow(0 0 22px #63ceff90)}}
@media(min-width:1400px){main{max-width:1080px}.intro{margin:30px 0 35px}.food{height:194px}.food canvas{width:130px;height:130px}.food:before{top:133px}.page-nav{padding-top:30px}}
@media(max-width:700px){main{padding:0 26px 25px}.page-nav{padding:19px 22px;font-size:11px}.page-nav .small-button{font-size:13px;padding:9px 11px}.intro{margin:18px 0 25px}.eyebrow{font-size:11px;letter-spacing:1px;margin-bottom:25px}.hanging-sign{gap:12px;padding:15px 18px;border-width:3px}h1{font-size:24px}h1 span{display:block;margin-top:4px}.sign-star{font-size:17px}.tagline{font-size:10px}.awning{height:40px;background-size:70px 100%;background-image:repeating-linear-gradient(90deg,#80b5c5 0 35px,#224962 35px 70px)}.shop-trim{padding:10px 11px;justify-content:center}.shop-trim>span:first-child{display:none}.shop-interior{padding:5px 10px 0}.shelf{gap:3px;padding:2px 0 12px}.food{height:150px;padding:0}.food canvas{width:95px;height:95px}.food:before{top:98px}.food-label{font-size:16px;min-width:0;padding:5px 7px}.food-category{font-size:11px;margin-top:7px}.lantern{width:51px;top:16px}.lantern-left{left:-32px}.lantern-right{right:-32px}.counter-front{padding:0 12px;font-size:9px;letter-spacing:1px;height:50px}.counter-plant{left:3px}.counter-plant canvas{width:65px;height:65px}.counter-note{display:none}.counter-book{right:4px}.counter-book canvas{width:51px;height:51px}.shopkeeper canvas{width:90px;height:90px}.shopkeeper span{font-size:10px}.welcome{margin-top:24px;padding:19px 17px;gap:13px}.welcome p{font-size:16px}.welcome-hint{font-size:10px}.portrait{width:54px;height:58px}.portrait canvas{width:64px;height:64px}.speaker{font-size:14px}.wild-jelly{width:90px}.jelly-one{left:-20px}.jelly-two{right:-30px}footer{font-size:9px;gap:18px;line-height:1.6}.detail-body{padding:20px}.detail-heading{gap:14px}.detail-sprite{width:84px;height:84px}.detail-sprite canvas{width:80px;height:80px}h2{font-size:24px}.detail-heading #detail-food{font-size:14px}.detail-heading #detail-subtitle{font-size:11px}#detail-content{font-size:13px}.detail-footer{padding:13px 16px}.detail-footer>span{font-size:11px;max-width:140px}}
@media(max-width:390px){main{padding-left:21px;padding-right:21px}.food canvas{width:82px;height:82px}.food-label{font-size:14px}.food-category{font-size:10px}.food{height:140px}.food:before{top:86px}.welcome p{font-size:15px}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important}.food:hover canvas,.food:focus-visible canvas{transform:none}}

body.dialog-open{overflow:hidden}.food.discovered .food-category:after{content:" ✦";color:#e9ce8b}
/* Leave a little counter space for the shopkeeper, below the shelf labels. */
.shop-interior{padding-bottom:24px}.shopkeeper canvas{width:86px;height:86px}.shopkeeper{bottom:15px}
@media(min-width:701px){.page-nav{padding-top:20px;padding-bottom:20px}.intro{margin:12px 0 27px}.eyebrow{margin-bottom:23px}.hanging-sign{padding-top:14px;padding-bottom:15px}.food{height:160px}.food canvas{width:110px;height:110px}.food:before{top:111px}.lantern-left{left:-45px}.lantern-right{right:-45px}}
@media(max-width:700px){.food{height:165px}.food canvas{flex-shrink:0}.food-label{display:flex;align-items:center;justify-content:center;max-width:100%;height:38px;flex-shrink:0;font-size:15px;padding:3px 5px;white-space:normal;line-height:1.05;text-align:center}.food-category{font-size:10px}.lantern{width:48px}.lantern-left{left:-25px}.lantern-right{right:-25px}.shopkeeper canvas{width:78px;height:78px}.shopkeeper{bottom:15px}.shop-interior{padding-bottom:20px}}
@media(max-width:390px){.food{height:154px}.food-label{font-size:14px}.food-category{font-size:9px}.lantern-left{left:-20px}.lantern-right{right:-20px}}

/* Fruit crates sit in front of the counter, with Nora’s pond cat between them. */
.foreground{position:relative;z-index:1;display:grid;grid-template-columns:minmax(0,1fr) 180px minmax(0,1fr);align-items:end;gap:16px;margin:-20px 8px 0;padding:0 9px 16px}
.foreground:before{content:'';position:absolute;inset:45% -8px 0;z-index:-1;border-bottom:4px solid #142734;background:linear-gradient(transparent,#142b36)}
.fruit-basket{position:relative;text-align:center;min-width:0}.fruit-basket canvas{display:block;width:100%;height:auto;filter:drop-shadow(4px 5px 0 #07142177)}
.fruit-basket>span{position:absolute;bottom:7%;left:50%;transform:translateX(-50%);padding:2px 6px;background:#eee0bc;color:#523c40;font:12px var(--pixel);white-space:nowrap;box-shadow:2px 2px 0 #805d50}
.pond-shopkeeper{position:relative;display:flex;flex-direction:column;align-items:center;padding-bottom:3px}
.pond-shopkeeper:before{content:'';position:absolute;bottom:39px;width:110px;height:13px;border-radius:50%;background:#030e1a70;filter:blur(4px)}
#pet-shop-cat{position:relative;width:170px;height:180px;border:0;background:none;padding:0;cursor:pointer}
#pet-shop-cat:disabled{cursor:default}#shop-cat{display:block;width:100%;height:100%;image-rendering:auto;filter:drop-shadow(3px 4px 0 #07142155)}
.manager-label{position:relative;z-index:2;background:#ecddbf;color:#4b353c;padding:4px 10px;font:14px var(--pixel);box-shadow:2px 2px 0 #60454a}.pet-hint{font:11px var(--pixel);color:#99bccb;margin-top:7px}
.portrait #cat-portrait{width:100%;height:100%;margin:0;image-rendering:auto}
.cat-hearts{pointer-events:none;position:absolute;inset:0;z-index:3}.cat-hearts i{position:absolute;left:35%;top:13%;font:24px var(--pixel);font-style:normal;color:#a8e6ff;text-shadow:0 0 14px #61c8ff;animation:shop-pet-heart 2.1s ease-out both}.cat-hearts i:nth-child(2){left:65%;top:20%;animation-delay:.13s;font-size:18px}.cat-hearts i:nth-child(3){left:50%;top:7%;animation-delay:.25s;font-size:21px}
@keyframes shop-pet-heart{0%{opacity:0;transform:translateY(12px) scale(.5)}20%{opacity:1;transform:translateY(0) scale(1)}100%{opacity:0;transform:translateY(-50px) scale(1.1)}}
@media(max-width:700px){.foreground{grid-template-columns:minmax(0,1fr) 104px minmax(0,1fr);gap:0;margin:-9px -2px 0;padding:0 0 12px}.fruit-basket>span{font-size:8px;padding:2px 3px;bottom:6%}#pet-shop-cat{width:108px;height:120px}.manager-label{font-size:11px;padding:3px 7px}.pet-hint{font-size:9px;white-space:nowrap}.pond-shopkeeper:before{width:65px;bottom:31px}.cat-hearts i{font-size:18px}.cat-hearts i:nth-child(2){font-size:15px}.cat-hearts i:nth-child(3){font-size:17px}}
@media(prefers-reduced-motion:reduce){.cat-hearts i{animation:none;opacity:1}}
.cat-poster{position:absolute;inset:0;width:100%;height:100%;object-fit:contain}.portrait{position:relative}.cat-ready .cat-poster{display:none}#shop-cat,#cat-portrait{opacity:0}.cat-ready #shop-cat,.cat-ready #cat-portrait{opacity:1}
.food canvas{touch-action:none}.being-dragged canvas{opacity:.25}.drag-treat{position:fixed;top:0;left:0;z-index:100;pointer-events:none;width:92px;height:92px;will-change:transform;filter:drop-shadow(0 0 14px #8bd5ff90)}.drag-treat canvas{width:100%;height:100%}.eating-treat{transition:transform .45s ease-in,opacity .4s ease-in}
.feed-target #shop-cat{filter:drop-shadow(0 0 10px #8bddff66)}.feed-target .manager-label{background:#bbdeed}.feed-hover #shop-cat{filter:drop-shadow(0 0 19px #8bddffcc)}.feed-hover .manager-label{background:#d6f1e6;box-shadow:0 0 13px #90d8e6}
.cat-opinion{display:flex;align-items:start;gap:16px;margin:0 0 23px;padding:18px;background:#234758;border:2px solid #688999}.cat-opinion img{width:65px;height:65px;flex-shrink:0;background:#183545;border:1px solid #6d929e}.cat-opinion span{font:20px var(--pixel);color:#c1e7f4}.cat-opinion p{margin:8px 0 0!important;font-size:14px;line-height:1.7;color:#f0e8d6}.detail-footer{flex-wrap:wrap}.feed-detail[hidden]{display:none}
.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}
@media(max-width:700px){.detail-footer>span{flex-basis:100%;max-width:none;order:-1}.detail-footer button{flex:1;justify-content:center;font-size:13px;padding:8px 9px}.cat-opinion{padding:12px;gap:11px}.cat-opinion img{width:45px;height:45px}.cat-opinion span{font-size:18px}.cat-opinion p{font-size:13px}.drag-treat{width:72px;height:72px}}
