:root{color:#292c27;background:#f8f5ee;font-family:Inter,Noto Sans SC,PingFang SC,Microsoft YaHei,system-ui,sans-serif;font-synthesis:none;text-rendering:optimizeLegibility;--paper: #f2eee5;--paper-light: #f8f5ee;--paper-deep: #e8e2d6;--ink: #292c27;--muted: #6c716a;--soft: #91978f;--sage: #839c84;--sage-dark: #586f5b;--amber: #b58e5a;--line: rgba(42, 47, 41, .16);--line-strong: rgba(42, 47, 41, .3);--shadow: 0 18px 60px rgba(67, 60, 46, .08)}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:88px}body{margin:0;min-width:320px;min-height:100vh;background:var(--paper-light);color:var(--ink);-webkit-font-smoothing:antialiased}body.overlay-open{overflow:hidden}button,input,textarea{font:inherit}button,a{-webkit-tap-highlight-color:transparent}a{color:inherit;text-decoration:none}button{color:inherit}::selection{color:#fff;background:var(--sage-dark)}.page-width{width:min(1160px,calc(100% - 48px));margin-inline:auto}.site-header{position:sticky;z-index:40;top:0;background:#f8f5eef5;border-bottom:1px solid var(--line)}.header-inner{width:min(1320px,calc(100% - 48px));min-height:68px;margin-inline:auto;display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:24px}.wordmark{display:inline-flex;align-items:center;gap:10px;width:fit-content;font-size:15px;font-weight:700;letter-spacing:-.02em}.wordmark-dot,.status-dot{width:8px;height:8px;flex:0 0 auto;border-radius:50%;background:var(--sage);box-shadow:0 0 0 4px #839c841f}.desktop-nav{display:flex;align-items:center;gap:34px;font-size:14px}.desktop-nav a{position:relative;padding:8px 0;color:#4d524c}.desktop-nav a:after{position:absolute;right:0;bottom:0;left:0;height:1px;content:"";background:var(--sage);transform:scaleX(0);transform-origin:right;transition:transform .18s ease}.desktop-nav a:hover:after,.desktop-nav a:focus-visible:after{transform:scaleX(1);transform-origin:left}.header-actions{display:flex;justify-content:flex-end;align-items:center;gap:12px}.github-link,.effect-toggle{display:inline-flex;align-items:center;gap:7px;min-height:36px;padding:0 12px;border:1px solid var(--line);border-radius:999px;background:transparent;font-size:13px;cursor:pointer;transition:border-color .16s ease,background .16s ease,color .16s ease}.github-link svg,.effect-toggle svg{font-size:17px}.github-link:hover,.effect-toggle:hover,.effect-toggle.is-active{color:var(--sage-dark);border-color:#586f5b75;background:#839c8417}.icon-button{display:inline-grid;place-items:center;width:38px;height:38px;padding:0;border:1px solid var(--line);border-radius:50%;background:var(--paper-light);cursor:pointer}.mobile-menu-button,.mobile-nav{display:none}.hero-shell{position:relative;overflow:hidden;padding:72px 0 104px;background:var(--paper)}.hero-shell:after{position:absolute;z-index:0;right:-10%;bottom:-2px;left:-10%;height:130px;content:"";background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1200 130' preserveAspectRatio='none'%3E%3Cpath d='M0 68 C 92 68, 134 43, 250 43 C 364 43, 386 80, 508 80 C 628 80, 650 55, 762 55 C 884 55, 912 96, 1022 96 C 1080 96, 1108 68, 1200 68 L1200 130 L0 130 Z' fill='%23f8f5ee'/%3E%3C/svg%3E"),url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1200 130' preserveAspectRatio='none'%3E%3Cpath d='M0 92 C 86 92, 128 75, 260 75 C 382 75, 410 106, 536 106 C 668 106, 684 82, 812 82 C 918 82, 950 116, 1058 116 C 1086 116, 1114 92, 1200 92 L1200 130 L0 130 Z' fill='%23f2eee5'/%3E%3C/svg%3E");background-repeat:repeat-x;background-position:0 100%,0 100%;background-size:1200px 130px,1200px 130px;animation:wave-drift 26s linear infinite}@keyframes wave-drift{0%{background-position:0 100%,0 100%}to{background-position:-1200px 100%,1200px 100%}}@media(prefers-reduced-motion:reduce){.hero-shell:after{animation:none}}.hero{position:relative;z-index:1;display:grid;grid-template-columns:minmax(0,.86fr) minmax(460px,1.14fr);align-items:center;gap:72px}.eyebrow{margin:0 0 14px;color:var(--sage-dark);font-family:SFMono-Regular,Consolas,Liberation Mono,monospace;font-size:12px;font-weight:700;letter-spacing:.09em;text-transform:uppercase}.hero-copy h1{margin:0;font-size:clamp(34px,3.2vw,42px);font-weight:650;letter-spacing:-.045em;line-height:1.18}.hero-copy h1 span{color:var(--sage-dark)}.hero-lead{margin:24px 0 0;color:#4d594e;font-size:20px;line-height:1.55}.hero-description{margin:14px 0 0;color:var(--muted);font-size:15px;line-height:1.85}.hero-actions{display:flex;gap:12px;margin-top:30px}.button{display:inline-flex;align-items:center;justify-content:center;gap:10px;min-height:44px;padding:0 18px;border:1px solid transparent;border-radius:6px;font-size:14px;font-weight:650;cursor:pointer;transition:transform .16s ease,background .16s ease,border-color .16s ease}.button:hover{transform:translateY(-2px)}.button-primary{color:#fff;background:var(--sage-dark)}.button-primary:hover{background:#48604c}.button-secondary{border-color:var(--line-strong);background:#ffffff52}.button-secondary:hover{border-color:var(--sage)}.particle-stage{position:relative;min-height:405px;overflow:hidden;border:1px solid var(--line);border-radius:10px;background:#fff3;box-shadow:inset 0 0 0 1px #ffffff38}.particle-canvas{display:block;width:100%;height:405px;touch-action:none;cursor:crosshair}.particle-hint{position:absolute;bottom:21px;left:18px;margin:0;color:var(--soft);font-size:11px}.particle-hint a{color:inherit;text-underline-offset:3px}.status-strip{display:flex;align-items:center;gap:12px;min-height:50px;margin-top:34px;padding:0 18px;border:1px solid var(--line);background:#f2eee575;color:var(--muted);font-family:SFMono-Regular,Consolas,monospace;font-size:11px;letter-spacing:.035em}.status-divider{width:1px;height:14px;background:var(--line-strong)}.index-section,.content-section{padding:92px 0 24px}.section-heading{display:grid;grid-template-columns:minmax(220px,.7fr) minmax(320px,1fr);align-items:end;gap:48px;padding-bottom:24px;border-bottom:1px solid var(--line-strong)}.section-heading h2{margin:0;font-size:28px;font-weight:650;letter-spacing:-.035em}.section-heading>p{max-width:560px;margin:0;color:var(--muted);font-size:14px;line-height:1.75}.section-heading code{padding:2px 5px;background:var(--paper);font-size:12px}.index-heading{padding-bottom:28px}.index-grid{display:grid;grid-template-columns:minmax(0,1.45fr) minmax(320px,.75fr);gap:58px}.project-row{display:grid;grid-template-columns:42px minmax(0,1fr) auto;gap:18px;padding:30px 0;border-bottom:1px solid var(--line);transition:padding .18s ease}.project-row:hover{padding-right:8px;padding-left:8px}.project-number,.blog-number{padding-top:4px;color:var(--sage-dark);font-family:SFMono-Regular,Consolas,monospace;font-size:12px}.project-copy,.project-title-line{display:flex}.project-copy{flex-direction:column;gap:11px}.project-title-line{align-items:baseline;gap:12px}.project-title-line strong{font-size:20px;letter-spacing:-.025em}.project-title-line>span{color:var(--muted);font-size:14px}.project-description{color:var(--muted);font-size:13px;line-height:1.7}.tag-list{display:flex;flex-wrap:wrap;gap:7px}.tag-list>span{color:var(--sage-dark);font-family:SFMono-Regular,Consolas,monospace;font-size:10px}.tag-list>span:before{content:"# ";opacity:.58}.project-action{display:inline-flex;align-items:center;gap:6px;color:var(--sage-dark);font-size:12px}.project-action svg{font-size:17px;transition:transform .16s ease}.project-row:hover .project-action svg{transform:translate(2px,-2px)}.side-index{border-left:1px solid var(--line);padding-left:34px}.mini-heading{display:flex;align-items:center;justify-content:space-between;min-height:59px;border-bottom:1px solid var(--line)}.mini-heading h3{margin:0;font-size:16px}.mini-heading a{color:var(--sage-dark);font-size:12px}.post-index-row{display:grid;grid-template-columns:42px 1fr auto;gap:12px;align-items:center;width:100%;min-height:52px;padding:0;border:0;border-bottom:1px solid var(--line);background:transparent;text-align:left;cursor:pointer}.post-index-row time{color:var(--soft);font-family:SFMono-Regular,Consolas,monospace;font-size:10px}.post-index-row span{overflow:hidden;font-size:12px;white-space:nowrap;text-overflow:ellipsis}.post-index-row svg{color:var(--sage-dark)}.guestbook-compact{display:flex;align-items:end;justify-content:space-between;gap:20px;padding-top:42px}.guestbook-compact p:not(.eyebrow){margin:0;color:var(--muted);font-size:13px}.text-link,.about-links a{display:inline-flex;align-items:center;gap:6px;color:var(--sage-dark);font-size:12px}.blog-list{border-bottom:1px solid var(--line)}.blog-row{display:grid;grid-template-columns:46px minmax(0,1fr) 110px 24px;align-items:center;gap:18px;width:100%;padding:25px 0;border:0;border-bottom:1px solid var(--line);background:transparent;text-align:left;cursor:pointer}.blog-row:hover .blog-main strong{color:var(--sage-dark)}.blog-main{display:flex;flex-direction:column;gap:6px}.blog-main strong{font-size:17px;transition:color .16s ease}.blog-main span{color:var(--muted);font-size:13px;line-height:1.6}.blog-row time{color:var(--soft);font-family:SFMono-Regular,Consolas,monospace;font-size:11px}.blog-row>svg{color:var(--sage-dark)}.guestbook-layout{display:grid;grid-template-columns:minmax(0,.8fr) minmax(0,1.2fr);gap:72px;padding:38px 0 18px}.guestbook-form{display:flex;flex-direction:column;gap:18px}.guestbook-form label{display:flex;flex-direction:column;gap:8px;color:var(--muted);font-size:12px}.guestbook-form input,.guestbook-form textarea{width:100%;border:1px solid var(--line-strong);border-radius:6px;outline:none;color:var(--ink);background:#ffffff70;transition:border-color .16s ease,box-shadow .16s ease}.guestbook-form input{height:44px;padding:0 13px}.guestbook-form textarea{padding:12px 13px;resize:vertical}.guestbook-form input:focus,.guestbook-form textarea:focus{border-color:var(--sage);box-shadow:0 0 0 3px #839c841f}.honeypot{position:absolute;left:-9999px}.form-footer{display:flex;align-items:center;justify-content:space-between;gap:16px}.form-footer>span,.form-notice{color:var(--soft);font-family:SFMono-Regular,Consolas,monospace;font-size:10px}.form-notice{margin:-4px 0 0;color:var(--sage-dark);line-height:1.5}.message-list{border-top:1px solid var(--line)}.message-row{position:relative;padding:19px 0;border-bottom:1px solid var(--line)}.message-row header{display:flex;align-items:center;justify-content:space-between;gap:20px}.message-row strong{font-size:13px}.message-row time,.message-state{color:var(--soft);font-family:SFMono-Regular,Consolas,monospace;font-size:9px}.message-row p{margin:10px 0 0;color:var(--muted);font-size:13px;line-height:1.7}.message-state{position:absolute;right:0;bottom:6px;opacity:.65}.game-subsection{padding-top:28px}.game-subsection+.game-subsection{margin-top:12px;border-top:1px solid var(--line)}.game-subsection-label{margin:0;font-size:12px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--soft)}.game-feature{display:grid;grid-template-columns:190px minmax(0,1fr) 160px;gap:40px;padding:24px 0 10px}.play-notes{display:grid;gap:18px;margin:18px 0 10px;padding:0;list-style:none}.play-note{padding-left:18px;border-left:2px solid var(--line)}.play-note strong{display:block;margin-bottom:4px;font-size:15px}.play-note p{margin:0;color:var(--muted);font-size:14px;line-height:1.7}.game-meta{display:flex;align-items:center;gap:10px;align-self:start;color:var(--sage-dark);font-family:SFMono-Regular,Consolas,monospace;font-size:10px}.game-copy h3{margin:0 0 14px;font-size:24px}.game-copy>p{max-width:680px;margin:0;color:var(--muted);font-size:14px;line-height:1.8}.game-copy ul{display:grid;gap:9px;margin:22px 0 0;padding:0;list-style:none}.game-copy li{position:relative;padding-left:18px;color:var(--muted);font-size:13px;line-height:1.65}.game-copy li:before{position:absolute;top:.7em;left:0;width:5px;height:5px;content:"";border-radius:50%;background:var(--sage)}.game-stack{display:flex;flex-direction:column;gap:9px;align-items:flex-start}.game-stack span{padding-bottom:5px;border-bottom:1px solid var(--line);color:var(--soft);font-family:SFMono-Regular,Consolas,monospace;font-size:10px}.about-section{margin-top:110px;padding:78px 0;background:var(--paper);border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.about-grid{display:grid;grid-template-columns:minmax(220px,.7fr) minmax(0,1fr);gap:80px}.about-grid h2{margin:0;font-size:28px}.about-copy{max-width:650px}.about-copy p{margin:0 0 16px;color:var(--muted);font-size:14px;line-height:1.85}.about-links{display:flex;flex-wrap:wrap;gap:26px;margin-top:26px}.about-links .placeholder-link{color:var(--soft);font-size:12px}.site-footer{display:flex;align-items:center;justify-content:space-between;min-height:100px;color:var(--soft);font-family:SFMono-Regular,Consolas,monospace;font-size:10px}.article-overlay{position:fixed;z-index:100;top:0;right:0;bottom:0;left:0;display:flex;justify-content:flex-end}.article-backdrop{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;padding:0;border:0;background:#2b2a2557;cursor:default}.article-sheet{position:relative;z-index:1;width:min(740px,92vw);height:100%;overflow-y:auto;padding:70px clamp(28px,6vw,78px);background:var(--paper-light);box-shadow:-24px 0 70px #2c2a2224;animation:slide-in .24s ease-out}@keyframes slide-in{0%{transform:translate(30px);opacity:0}}.article-close{position:absolute;top:22px;right:24px}.article-header{padding-bottom:34px;border-bottom:1px solid var(--line)}.article-header h1{margin:0;font-size:clamp(28px,4vw,38px);line-height:1.3;letter-spacing:-.035em}.article-header>p:not(.eyebrow){margin:16px 0 18px;color:var(--muted);font-size:14px;line-height:1.75}.markdown-body{padding-top:24px;color:#3f443e;font-size:15px;line-height:1.9}.markdown-body h2,.markdown-body h3{margin:36px 0 12px;color:var(--ink)}.markdown-body p,.markdown-body ul,.markdown-body ol{margin:0 0 18px}.markdown-body li{margin:6px 0}.markdown-body a{color:var(--sage-dark);text-decoration:underline;text-underline-offset:3px}.markdown-body code{padding:2px 5px;border-radius:3px;background:var(--paper-deep);font-family:SFMono-Regular,Consolas,monospace;font-size:.88em}:focus-visible{outline:2px solid var(--sage-dark);outline-offset:3px}@media(max-width:920px){.header-inner{grid-template-columns:1fr auto}.desktop-nav{display:none}.mobile-menu-button{display:inline-grid}.mobile-nav{display:grid;grid-template-columns:repeat(5,1fr);gap:1px;padding:0 24px 14px}.mobile-nav a{padding:10px 6px;border:1px solid var(--line);text-align:center;font-size:12px}.hero{grid-template-columns:1fr;gap:46px}.hero-copy{max-width:620px}.particle-stage,.particle-canvas{min-height:360px;height:360px}.index-grid,.guestbook-layout{grid-template-columns:1fr;gap:42px}.side-index{border-top:1px solid var(--line);border-left:0;padding-top:10px;padding-left:0}.game-feature{grid-template-columns:150px minmax(0,1fr)}.game-stack{grid-column:2;flex-flow:row wrap}}@media(max-width:640px){.page-width,.header-inner{width:min(100% - 32px,1160px)}.site-header{position:relative}.header-inner{min-height:62px}.wordmark{font-size:13px}.github-link span,.effect-toggle{font-size:0}.github-link,.effect-toggle{width:36px;min-height:36px;justify-content:center;padding:0}.mobile-nav{grid-template-columns:repeat(3,1fr);padding-inline:16px}.hero-shell{padding:52px 0 88px}.hero{gap:34px}.hero-copy h1{font-size:32px}.hero-lead{font-size:18px}.hero-description br{display:none}.hero-actions{width:100%}.hero-actions .button{flex:1}.particle-stage,.particle-canvas{min-height:300px;height:300px}.particle-hint{display:none}.status-strip{flex-wrap:wrap;padding-block:13px}.section-heading,.about-grid{grid-template-columns:1fr;gap:16px}.index-section,.content-section{padding-top:72px}.project-row{grid-template-columns:32px 1fr}.project-action{grid-column:2;justify-self:start}.project-title-line{flex-direction:column;gap:4px}.blog-row{grid-template-columns:32px minmax(0,1fr) 20px;gap:10px}.blog-row time{display:none}.blog-main span{display:-webkit-box;overflow:hidden;-webkit-line-clamp:2;-webkit-box-orient:vertical}.guestbook-layout{gap:54px}.game-feature{grid-template-columns:1fr;gap:24px}.game-stack{grid-column:1}.about-section{margin-top:82px;padding:62px 0}.site-footer{flex-direction:column;justify-content:center;gap:10px}.article-sheet{width:100%;padding:68px 24px 50px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}
