:root{--bg:#0d0d0f;--panel:#18181c;--border:#ffffff14;--text:#f3f3f5;--muted:#94949e;--accent:#ff5a8a;--ok:#3ecf8e;--card-radius:18px;--ease:cubic-bezier(.22, 1, .36, 1);--hand:"Segoe Script", "Comic Sans MS", "Bradley Hand", "PingFang SC", "Microsoft YaHei", cursive, sans-serif;--sans:-apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth;height:100%}body{min-height:100%;font-family:var(--sans);color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;overflow-x:hidden}body:before{content:"";pointer-events:none;z-index:0;background:radial-gradient(55% 40% at 50% 32%,#ff5a8a0f,#0000 70%);position:fixed;inset:0}#bg-layer{z-index:0;background:var(--bg);pointer-events:none;position:fixed;inset:0}#glow-canvas{pointer-events:none;z-index:1;width:100%;height:100%;position:fixed;inset:0}.site-top{z-index:20;padding:calc(12px + env(safe-area-inset-top,0px)) calc(clamp(14px, 3vw, 28px) + env(safe-area-inset-right,0px)) 12px calc(clamp(14px, 3vw, 28px) + env(safe-area-inset-left,0px));-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-bottom:1px solid var(--border);background:#0d0d0fb8;justify-content:flex-start;align-items:center;gap:12px;display:flex;position:fixed;top:0;left:0;right:0}.brand{color:var(--text);align-items:center;gap:8px;font-size:.95rem;font-weight:700;text-decoration:none;display:inline-flex}.brand-dot{background:var(--accent);border-radius:50%;width:7px;height:7px;box-shadow:0 0 10px #ff5a8ab3}.bgm-toggle:hover{color:var(--text);background:#ffffff0a}.bgm-toggle.is-muted{color:var(--muted)}.bgm-toggle.is-muted:hover{color:var(--accent)}.bgm-toggle .bgm-ico{display:block}.bgm-toggle .bgm-ico-off,.bgm-toggle.is-muted .bgm-ico-on{display:none}.bgm-toggle.is-muted .bgm-ico-off{display:block}.section-dots{flex-wrap:wrap;justify-content:flex-end;gap:4px;margin-left:auto;display:flex}.section-dots a{color:var(--muted);border-bottom:2px solid #0000;border-radius:999px;padding:6px 10px;font-size:.78rem;text-decoration:none;transition:color .2s,border-color .2s,background .2s}.section-dots a:hover,.section-dots a.is-active{color:var(--text);background:#ffffff0a}.section-dots a.is-active,.section-dots a.is-accent.is-active{border-bottom-color:var(--accent);color:var(--accent)}.top-admin{color:var(--muted);border:1px solid var(--border);border-radius:999px;padding:6px 12px;font-size:.8rem;text-decoration:none}.top-admin:hover{color:var(--accent);border-color:#ff5a8a73}.snap-root{scroll-snap-type:y mandatory;scroll-behavior:smooth;-webkit-overflow-scrolling:touch;z-index:2;height:100dvh;position:relative;overflow:hidden auto}.section{scroll-snap-align:start;scroll-snap-stop:always;width:100%;min-height:100dvh;padding:calc(64px + clamp(16px, 3vh, 36px) + env(safe-area-inset-top,0px)) calc(clamp(18px, 4vw, 48px) + env(safe-area-inset-right,0px)) calc(clamp(28px, 4vh, 48px) + env(safe-area-inset-bottom,0px)) calc(clamp(18px, 4vw, 48px) + env(safe-area-inset-left,0px));flex-direction:column;display:flex;position:relative;overflow:hidden}.hand-title{font-family:var(--hand);letter-spacing:.02em;font-weight:700}.accent-underline{background:linear-gradient(90deg, transparent, var(--accent), transparent);border-radius:999px;width:min(180px,40vw);height:3px;margin:10px auto 0;box-shadow:0 0 16px #ff5a8a73}.accent-underline.short{width:min(120px,30vw);margin-left:0}.section-head{margin-bottom:clamp(18px,4vh,36px)}.section-head.center{text-align:center}.section-head.center .accent-underline{margin-left:auto;margin-right:auto}.section-title{color:var(--text);font-size:clamp(1.7rem,4vw,2.4rem)}.section-sub{color:var(--muted);margin-top:10px;font-size:.95rem}.star,.star.mini{background:var(--text);clip-path:polygon(50% 0%,61% 35%,98% 35%,68% 57%,79% 91%,50% 70%,21% 91%,32% 57%,2% 35%,39% 35%);opacity:.85;vertical-align:middle;width:10px;height:10px;margin:0 6px;display:inline-block}.star.pink,.star.mini.pink{background:var(--accent)}.stars{pointer-events:none;position:absolute;inset:0}.stars .s1{background:var(--accent);clip-path:polygon(50% 0%,61% 35%,98% 35%,68% 57%,79% 91%,50% 70%,21% 91%,32% 57%,2% 35%,39% 35%);width:12px;height:12px;position:absolute;top:18%;left:18%}.stars .s2{clip-path:polygon(50% 0%,61% 35%,98% 35%,68% 57%,79% 91%,50% 70%,21% 91%,32% 57%,2% 35%,39% 35%);opacity:.7;background:#fff;width:9px;height:9px;position:absolute;top:22%;right:20%}.stars .s3{background:var(--accent);clip-path:polygon(50% 0%,61% 35%,98% 35%,68% 57%,79% 91%,50% 70%,21% 91%,32% 57%,2% 35%,39% 35%);opacity:.55;width:8px;height:8px;position:absolute;bottom:28%;left:28%}.reveal{opacity:0;filter:blur(5px);transition:opacity .7s var(--ease), transform .7s var(--ease), filter .7s var(--ease);transform:translateY(24px)}.reveal-stagger>*{opacity:0;filter:blur(4px);transition:opacity .65s var(--ease), transform .65s var(--ease), filter .65s var(--ease);transform:translateY(20px)}.section.is-active .reveal,.section.is-active .reveal-stagger>*{opacity:1;filter:blur();transform:translateY(0)}.section.is-active .reveal-stagger>:first-child{transition-delay:50ms}.section.is-active .reveal-stagger>:nth-child(2){transition-delay:.12s}.section.is-active .reveal-stagger>:nth-child(3){transition-delay:.2s}.section.is-active .reveal-stagger>:nth-child(4){transition-delay:.28s}.section-hero .hero-footer.reveal{transform:translate(-50%)translateY(24px)}.section-hero.is-active .hero-footer.reveal{transform:translate(-50%)translateY(0)}html.has-gsap-motion .reveal,html.has-gsap-motion .reveal-stagger>*{opacity:1;filter:none;transition:none;transform:none}html.has-gsap-motion .section-hero .hero-footer.reveal{transform:translate(-50%)}@media (prefers-reduced-motion:reduce){.reveal,.reveal-stagger>*{opacity:1!important;filter:none!important;transition:none!important;transform:none!important}#glow-canvas{display:none!important}}.section-hero{text-align:center;justify-content:center;align-items:center}.kicker{color:var(--accent);letter-spacing:.14em;text-transform:uppercase;margin-bottom:12px;font-size:.8rem}.hero-greeting{color:var(--text);font-size:clamp(2.2rem,7vw,3.8rem);line-height:1.25}.hero-tech-wrap{color:#fff8f0;z-index:2;width:min(96vw,920px);height:min(42vh,280px);margin:0 auto;position:relative}.hero-tech-text{color:#fff8f0;width:100%;height:100%;font-family:var(--hand)}.visually-hidden{clip:rect(0, 0, 0, 0)!important;white-space:nowrap!important;border:0!important;width:1px!important;height:1px!important;margin:-1px!important;padding:0!important;position:absolute!important;overflow:hidden!important}@media (width<=640px){.hero-tech-wrap{height:min(36vh,220px)}}@media (height<=700px){.hero-tech-wrap{height:min(32vh,200px)}}.hero-footer{color:var(--muted);letter-spacing:.06em;font-size:.78rem;position:absolute;bottom:92px;left:50%;transform:translate(-50%)}.hero-critter{opacity:.9;animation:3.8s ease-in-out infinite critter-bob;position:absolute;bottom:18%;right:clamp(18px,6vw,64px)}.section-projects,.section-guestbook,.section-opensource{justify-content:flex-start;align-items:stretch;position:relative;overflow:visible}.section-projects .section-head,.section-guestbook .section-head,.section-opensource .section-head{z-index:2;text-align:left;flex-shrink:0;width:100%;max-width:920px;margin:0;position:relative}.section-projects .cards-row,.section-opensource .cards-row{z-index:1;flex:none;place-content:center;align-items:stretch;width:min(100% - 2*clamp(18px,4vw,48px),920px);max-width:920px;margin:0;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.section-projects .cards-row{flex-wrap:nowrap;gap:16px;width:min(100% - 2*clamp(14px,3vw,40px),1180px);max-width:1180px;overflow:visible}.section-projects .project-card{flex:1 1 0;width:auto;min-width:0;max-width:360px}.section-projects .project-card-wrap{z-index:2;flex-direction:column;flex:0 auto;align-items:stretch;width:min(100%,720px);max-width:720px;display:flex;position:relative;overflow:visible}.section-projects .project-card--primary{flex:none;gap:16px;width:100%;max-width:720px;min-height:300px;padding:36px 34px 30px}.section-projects .project-card--primary .project-thumb{border-radius:18px;width:80px;height:80px}.section-projects .project-card--primary .project-thumb svg{width:40px;height:40px}.section-projects .project-card--primary h3{font-size:clamp(1.35rem,2.2vw,1.7rem)}.section-projects .project-card--primary>p{max-width:36em;font-size:1rem;line-height:1.5}.section-projects .project-card--primary .project-go,.section-projects .project-card--primary .project-invite{font-size:1rem}.project-card.has-children .project-go:after{content:none}.section-opensource .cards-row{flex-wrap:nowrap;gap:16px;width:min(100% - 2*clamp(14px,3vw,40px),1180px);max-width:1180px}.section-opensource .repo-card{flex:1 1 0;width:auto;min-width:0;max-width:360px}.cards-row{flex-wrap:wrap;flex:1;place-content:center;gap:20px;width:100%;max-width:920px;margin:0 auto;display:flex}.project-card,.repo-card{border-radius:var(--card-radius);background:var(--panel);width:min(100%,360px);color:var(--text);border:1px solid var(--border);transition:transform .25s var(--ease), border-color .25s ease, box-shadow .25s ease;flex-direction:column;gap:12px;padding:22px;text-decoration:none;display:flex;position:relative;box-shadow:0 14px 40px #00000059}.project-card:hover,.repo-card:hover,.project-card:focus-visible,.repo-card:focus-visible{border-color:#ff5a8a73;outline:none;transform:translateY(-4px);box-shadow:0 18px 48px #ff5a8a24}.project-thumb{background:#ff5a8a24;border:1px solid #ff5a8a4d;border-radius:14px;place-items:center;width:52px;height:52px;display:grid}.project-thumb svg{fill:none;stroke:#fff;stroke-width:1.6px;stroke-linecap:round;stroke-linejoin:round;width:26px;height:26px}.project-card h3,.repo-card h3{font-size:1.15rem;font-weight:700}.project-card p,.repo-card p{color:var(--muted);font-size:.9rem;line-height:1.45}.project-go,.project-invite,.repo-link-hint{color:var(--accent);font-size:.88rem;font-weight:650;text-decoration:none}.project-actions{justify-content:space-between;align-items:center;gap:12px;width:100%;margin-top:auto;display:flex}.project-go{flex:0 auto}.project-invite{text-align:right;flex:0 auto;margin-left:auto}.project-invite:hover,.project-go:hover{color:#ff7aa3;text-underline-offset:3px;text-decoration:underline}.project-invite.is-empty{visibility:hidden;pointer-events:none}.project-card{cursor:pointer}.project-go:after{content:"";z-index:1;border-radius:inherit;position:absolute;inset:0}.project-invite{z-index:2;position:relative}.section-hero{isolation:isolate;background:0 0}.section-hero:before{content:"";pointer-events:none;z-index:0;background:radial-gradient(55% 48% at 50% 40%,#00000047,#00000014 55%,#0000 78%);position:absolute;inset:0}.section-rabbit{background:#0d0d0fb8}.card-hint,.card-tip{color:var(--muted);font-size:.82rem;line-height:1.4}.card-hint{margin-bottom:12px}.card-tip{margin-top:10px}.meta{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.meta-label{color:var(--muted);font-size:.75rem}.meta-value{color:var(--text);word-break:break-all;font-size:clamp(.92rem,1.6vw,1.05rem);font-weight:650}.contact-footer-line{color:var(--muted);z-index:2;flex-wrap:wrap;justify-content:center;align-items:center;gap:10px;margin-top:auto;padding-top:18px;font-size:.85rem;display:flex;position:relative}.contact-footer-line .heart{color:var(--accent)}.contact-footer-line .dash{border-top:1px dashed #ffffff40;width:36px;height:0}.contact-toast{background:var(--panel);border:1px solid var(--border);color:var(--text);opacity:0;pointer-events:none;z-index:6;border-radius:999px;padding:10px 16px;font-size:.88rem;transition:opacity .25s,transform .25s;position:absolute;bottom:72px;left:50%;transform:translate(-50%)translateY(8px)}.contact-toast.show{opacity:1;transform:translate(-50%)translateY(0)}.star.float-a,.star.float-b,.star.float-c{clip-path:polygon(50% 0%,61% 35%,98% 35%,68% 57%,79% 91%,50% 70%,21% 91%,32% 57%,2% 35%,39% 35%);background:#fff;width:9px;height:9px;position:absolute}.star.float-a{bottom:22%;left:18%}.star.float-b{background:var(--accent);bottom:28%;right:22%}.star.float-c{opacity:.5;bottom:8%;left:42%}@keyframes tail-wag{0%,to{transform:rotate(0)}50%{transform:rotate(12deg)}}@keyframes wing-flap{0%,to{transform:rotate(0)}50%{transform:rotate(-16deg)}}.scroll-hint{opacity:.35;pointer-events:none;z-index:3;width:32px;height:50px;color:var(--muted);border:1.6px solid;border-radius:16px;position:absolute;bottom:24px}.scroll-hint:before{content:"";background:currentColor;border-radius:2px;width:4px;height:9px;margin-left:-2px;position:absolute;left:50%}.scroll-hint.hint-down:before{animation:1.6s ease-in-out infinite mouse-float;top:9px}.scroll-hint.hint-bidirectional:before{margin-top:-4px;animation:1.8s ease-in-out infinite mouse-bidir;top:50%}.scroll-hint.hint-bidirectional:after{content:"";opacity:.7;border-top:1.5px solid;border-left:1.5px solid;width:8px;height:8px;margin:-14px 0 0 -4px;position:absolute;top:50%;left:50%;transform:rotate(45deg)}.scroll-hint.hint-center{left:50%;transform:translate(-50%)}.scroll-hint.hint-br{left:auto;right:22px}@keyframes mouse-float{0%,to{opacity:1;transform:translateY(0)}50%{opacity:.35;transform:translateY(9px)}}@keyframes mouse-bidir{0%,to{opacity:.9;transform:translateY(-5px)}50%{opacity:.35;transform:translateY(5px)}}@media (width<=900px){.section-dots{display:none}.section{padding-left:calc(16px + env(safe-area-inset-left,0px));padding-right:calc(16px + env(safe-area-inset-right,0px))}.section-hero{align-items:center}.site-top{padding-left:calc(16px + env(safe-area-inset-left,0px));padding-right:calc(16px + env(safe-area-inset-right,0px))}.section-projects,.section-opensource{height:auto;min-height:100dvh;padding-bottom:calc(28px + env(safe-area-inset-bottom,0px) + 16px);justify-content:flex-start;align-items:stretch;overflow:visible}.section-projects .section-head,.section-opensource .section-head{z-index:2;flex-shrink:0;width:100%;max-width:none;margin:0 0 16px;position:relative}.section-projects .section-title,.section-opensource .section-title{font-size:clamp(1.45rem,6.2vw,2rem);line-height:1.25}.section-projects .cards-row,.section-opensource .cards-row{z-index:1;box-sizing:border-box;flex-flow:column;flex:none;place-content:flex-start;align-items:stretch;gap:14px;width:100%;max-width:none;margin:0;position:relative;top:auto;left:auto;transform:none}.cards-row{flex-flow:column;align-items:stretch;width:100%;max-width:none;margin:0}.section-projects .project-card,.section-opensource .repo-card,.project-card,.repo-card{box-sizing:border-box;flex:none;width:100%;min-width:0;max-width:none;margin-left:0;margin-right:0;padding:18px 16px}.scroll-hint,.hero-critter{display:none}.hero-footer{bottom:calc(72px + env(safe-area-inset-bottom,0px));box-sizing:border-box;width:min(100% - 32px,420px);max-width:calc(100% - 32px);padding-inline:8px;left:50%;right:auto;transform:translate(-50%)}}@media (width<=720px){.section-projects .section-sub,.section-opensource .section-sub{font-size:.88rem}.project-card h3,.repo-card h3{padding-right:4.5rem;font-size:1.05rem}.project-go,.project-invite,.repo-link-hint{font-size:.84rem}}.project-card{padding-top:28px;position:relative}.repo-card{position:relative}.repo-license{z-index:2;letter-spacing:.04em;color:#ff8fb0;pointer-events:none;background:#ff5a8a1f;border:1px solid #ff5a8a59;border-radius:999px;align-items:center;padding:.22rem .55rem;font-size:.68rem;font-weight:600;display:inline-flex;position:absolute;top:.85rem;right:.9rem}.project-uptime{z-index:2;letter-spacing:.02em;white-space:nowrap;text-overflow:ellipsis;max-width:calc(100% - 84px);color:var(--muted);border:1px solid var(--border);pointer-events:none;background:#ffffff0a;border-radius:999px;padding:3px 9px;font-size:.7rem;font-weight:650;position:absolute;top:12px;right:12px;overflow:hidden}.project-uptime.is-live{color:var(--accent);background:#ff5a8a1a;border-color:#ff5a8a47}.project-uptime.is-offline{color:var(--muted);opacity:.85}.kicker{letter-spacing:.12em;justify-content:center;align-items:center;gap:6px;display:inline-flex;position:relative}.kicker-text{color:var(--muted);font-weight:600}.kicker-heart{color:var(--accent);opacity:.35;-webkit-user-select:none;user-select:none;pointer-events:none;font-size:.75em;transform:translateY(-1px)}.kicker-heart.faint{opacity:.22;font-size:.7em}.kicker-heart.tiny{opacity:.28;font-size:.55em;position:absolute;top:-6px;right:-14px}.section-rabbit{--rabbit-p:0;scroll-snap-align:start;scroll-snap-stop:always;justify-content:flex-start;align-items:stretch;min-height:240dvh;padding:0;overflow:visible}.rabbit-sticky{pointer-events:none;z-index:2;background:radial-gradient(50% 42% at 50% 48%,#ff5a8a24,#0000 68%);flex-direction:column;justify-content:center;align-items:center;gap:18px;width:100%;height:100dvh;display:flex;position:sticky;top:0}.rabbit-reveal{--rabbit-p:0;width:min(520px,78vw);opacity:calc(var(--rabbit-p) * .98);transform:translateY(calc((1 - var(--rabbit-p)) * 42px)) scale(calc(.82 + var(--rabbit-p) * .18));filter:drop-shadow(0 18px 40px rgba(255, 90, 138, calc(var(--rabbit-p) * .28))) blur(calc((1 - var(--rabbit-p)) * 6px));will-change:opacity, transform, filter}.rabbit-reveal svg{width:100%;height:auto;display:block}.rabbit-caption{color:var(--muted);letter-spacing:.08em;opacity:calc(.15 + (1 - var(--rabbit-p)) * .55);-webkit-user-select:none;user-select:none;font-size:.88rem;transition:opacity .2s}.section-rabbit.is-complete .rabbit-caption{opacity:0}@media (width<=720px){.section-rabbit{min-height:220dvh}.rabbit-reveal{width:min(420px,86vw)}}@media (prefers-reduced-motion:reduce){.rabbit-reveal{opacity:1!important;filter:drop-shadow(0 12px 28px #ff5a8a40)!important;transform:none!important}.rabbit-caption{opacity:.5!important}}.snap-root.is-rabbit-slow{scroll-snap-type:none}html.has-micro-slats.micro-slats-on-hero .section-hero .hero-footer,html.has-micro-slats.micro-slats-on-hero .section-hero .kicker{text-shadow:0 1px 18px #000000a6,0 0 2px #000c}.project-modules-hint{letter-spacing:.02em;color:#ff8fb0;background:#ff5a8a1a;border:1px solid #ff5a8a47;border-radius:999px;align-items:center;gap:6px;width:fit-content;margin-top:2px;padding:4px 10px;font-size:.75rem;font-weight:600;display:inline-flex}.project-modules-hint .hint-touch{display:none}@media (hover:none),(pointer:coarse){.project-modules-hint .hint-hover{display:none}.project-modules-hint .hint-touch{display:inline}}.project-children{opacity:0;visibility:hidden;pointer-events:none;width:min(100vw - 32px,760px);transition:opacity .22s var(--ease), transform .22s var(--ease), visibility .22s;z-index:6;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;padding:0 2px;display:grid;position:absolute;top:calc(100% + 10px);left:50%;transform:translate(-50%,8px)scale(.98)}.project-card-wrap:hover .project-children,.project-card-wrap:focus-within .project-children,.project-card-wrap.is-open .project-children{opacity:1;visibility:visible;pointer-events:auto;transform:translate(-50%)scale(1)}.project-card-wrap:hover,.project-card-wrap:focus-within,.project-card-wrap.is-open{z-index:8}@media (width>=901px) and (height<=900px){.project-card-wrap:hover,.project-card-wrap:focus-within,.project-card-wrap.is-open{transition:transform .22s var(--ease);transform:translateY(-36px)}}.project-child{color:var(--text);background:#0a0a0d;border:1px solid #ff5a8a38;border-radius:14px;flex-direction:column;gap:6px;min-width:0;padding:14px 14px 12px;display:flex;position:relative;box-shadow:0 16px 40px #0000008c,inset 0 0 0 1px #ffffff08}.project-child h4{margin:0;padding:0;font-size:.95rem;font-weight:700}.project-child>p{color:var(--muted);margin:0;font-size:.8rem;line-height:1.4}@media (width<=900px){.section-projects .project-card-wrap{width:100%;max-width:none}.section-projects .project-card--primary{width:100%;max-width:none;min-height:0;padding:22px 18px 20px}.section-projects .project-card--primary .project-thumb{width:64px;height:64px}.section-projects .project-card--primary .project-thumb svg{width:32px;height:32px}.project-children{opacity:0;visibility:hidden;pointer-events:none;width:100%;max-height:0;transition:max-height .35s var(--ease), opacity .25s ease, margin-top .25s ease, visibility .25s;grid-template-columns:1fr;gap:10px;margin-top:0;padding:0;position:static;top:auto;left:auto;overflow:hidden;transform:none}.project-card-wrap:hover .project-children,.project-card-wrap:focus-within .project-children,.project-card-wrap.is-open .project-children{opacity:1;visibility:visible;pointer-events:auto;max-height:1200px;margin-top:12px;overflow:visible;transform:none}}.project-repo-row{z-index:2;border-top:1px solid #ffffff0f;margin-top:2px;padding-top:10px;position:relative}.project-repo{color:#ff8fb0;align-items:center;gap:8px;font-size:.82rem;font-weight:650;text-decoration:none;display:inline-flex}.project-repo:hover{color:#ffb0c8;text-underline-offset:3px;text-decoration:underline}.project-repo-mit{letter-spacing:.04em;color:#ffe6ef;background:#ff5a8a38;border:1px solid #ff5a8a66;border-radius:999px;align-items:center;padding:.12rem .42rem;font-size:.68rem;font-weight:700;display:inline-flex}.section-guestbook{justify-content:flex-start;align-items:stretch;position:relative}.guestbook-layout{z-index:1;flex:1;grid-template-columns:minmax(260px,360px) minmax(0,1fr);align-content:center;gap:22px;width:min(100%,1080px);max-height:calc(100dvh - 160px);margin:8px auto 0;display:grid;position:relative}.guestbook-form{border-radius:var(--card-radius);background:var(--panel);border:1px solid var(--border);flex-direction:column;gap:14px;height:fit-content;padding:20px;display:flex;box-shadow:0 14px 40px #00000059}.gb-field{flex-direction:column;gap:6px;display:flex}.gb-label{color:var(--muted);font-size:.82rem}.gb-label em{opacity:.75;font-style:normal}.guestbook-form input,.guestbook-form textarea{width:100%;color:var(--text);font:inherit;resize:vertical;background:#00000059;border:1px solid #ffffff1a;border-radius:12px;outline:none;padding:10px 12px}.guestbook-form input:focus,.guestbook-form textarea:focus{border-color:#ff5a8a8c;box-shadow:0 0 0 3px #ff5a8a26}.gb-actions{flex-wrap:wrap;align-items:center;gap:12px;display:flex}.gb-submit{appearance:none;cursor:pointer;color:#fff;background:linear-gradient(135deg,#ff5a8a,#e11d68);border:none;border-radius:999px;padding:10px 18px;font-size:.92rem;font-weight:700;box-shadow:0 8px 22px #ff5a8a47}.gb-submit:hover{filter:brightness(1.06)}.gb-submit:disabled{opacity:.55;cursor:wait}.gb-status{color:var(--muted);min-height:1.2em;font-size:.82rem}.gb-status.is-ok{color:var(--ok)}.gb-status.is-err{color:#ff8aa8}.gb-note{color:#94949ee6;font-size:.75rem;line-height:1.4}.guestbook-list-wrap{flex-direction:column;min-height:0;padding:4px 2px 4px 0;display:flex}.gb-list-title{color:#ffe6ef;margin-bottom:10px;font-size:.95rem;font-weight:700}.guestbook-list{scrollbar-width:thin;scrollbar-color:#ff5a8a59 transparent;flex-direction:column;flex:1;gap:12px;min-height:0;padding-right:4px;display:flex;overflow:auto}.gb-empty{color:var(--muted);border-radius:var(--card-radius);background:#18181ca6;border:1px dashed #ffffff1f;padding:18px;font-size:.9rem}.gb-item{background:var(--panel);border:1px solid var(--border);border-radius:14px;padding:14px 16px;box-shadow:0 10px 28px #00000047}.gb-item-head{justify-content:space-between;align-items:baseline;gap:10px;margin-bottom:8px;display:flex}.gb-nick{color:#fff;font-size:.95rem}.gb-time{color:var(--muted);white-space:nowrap;font-size:.72rem}.gb-body{color:#e8e8ee;word-break:break-word;font-size:.9rem;line-height:1.5}.gb-ai{background:#ff5a8a14;border:1px solid #ff5a8a38;border-radius:12px;margin-top:12px;padding:12px 12px 10px}.gb-ai-label{letter-spacing:.02em;color:#ff8fb0;margin-bottom:6px;font-size:.72rem;font-weight:700}.gb-ai-body{color:#f0d0dc;white-space:pre-wrap;word-break:break-word;font-size:.84rem;line-height:1.5}.gb-owner{background:#ffffff0a;border:1px solid #ffffff29;border-radius:12px;margin-top:12px;padding:12px 12px 10px}.gb-owner-label{letter-spacing:.02em;color:#ffe6ef;margin-bottom:6px;font-size:.72rem;font-weight:700}.gb-owner-body{color:#f5f5f8;white-space:pre-wrap;word-break:break-word;font-size:.88rem;line-height:1.55}.gb-owner-time{color:var(--muted);margin-top:8px;font-size:.7rem;display:block}@media (width<=900px){.section-guestbook{height:auto;min-height:100dvh;padding-bottom:calc(28px + env(safe-area-inset-bottom,0px) + 16px);justify-content:flex-start;overflow:visible}.guestbook-layout{grid-template-columns:1fr;width:100%;max-height:none;margin-top:4px}.guestbook-list{max-height:none;overflow:visible}}.kicker-text{background:linear-gradient(90deg,#94949e 0%,#ff5a8a 22%,#ffe6ef 45%,#ff8fb0 68%,#94949e 100%) 0 0/220% 100%;-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text;animation:4.5s linear infinite balala-shimmer}@keyframes balala-shimmer{0%{background-position:220% 0}to{background-position:-220% 0}}.kicker-heart{animation:3.2s ease-in-out infinite heart-float;display:inline-block}.kicker-heart.faint{animation-delay:.55s}.kicker-heart.tiny{animation-delay:1.1s}@keyframes heart-float{0%,to{transform:translateY(-1px)scale(1)}50%{transform:translateY(-4px)scale(1.18)}}.kicker-pinwheel{align-items:center;display:inline-flex}.kicker-pinwheel svg{transform-origin:50%;filter:drop-shadow(0 0 5px #ff5a8a8c);animation:2.8s linear infinite pinwheel-spin}@keyframes pinwheel-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){.kicker-text,.kicker-heart,.kicker-pinwheel svg{animation:none}.kicker-text{-webkit-text-fill-color:currentColor;background:0 0}}.section-hero{padding-bottom:10vh}.kicker{z-index:3;margin-bottom:-28px;font-size:.9rem;position:relative}.kicker-text{letter-spacing:.18em;filter:drop-shadow(0 0 8px #ff5a8a73);background:linear-gradient(90deg,#ff5a8a 0%,#ffd7e4 24%,#fff2f7 46%,#ff8fb0 70%,#ff5a8a 100%) 0 0/220% 100%;font-weight:700}.kicker-pinwheel svg{filter:drop-shadow(0 0 6px #ff5a8ab3);width:17px;height:17px}.kicker{text-align:right;width:min(96vw,920px);margin:12px auto 0;padding-right:6px}.kicker-text{-webkit-text-fill-color:currentColor;color:#ff9dbd;letter-spacing:.14em;filter:none;background:0 0;-webkit-background-clip:border-box;background-clip:border-box;font-weight:600;animation:3.6s ease-in-out infinite spell-glow}@keyframes spell-glow{0%,to{text-shadow:0 0 8px #ff5a8a59}50%{text-shadow:0 0 16px #ff5a8ab3}}@media (prefers-reduced-motion:reduce){.kicker-text{animation:none}}.checkin-panel{background:var(--panel);border:1px solid var(--border);border-radius:18px;width:min(640px,92vw);margin:0 auto;padding:18px 16px 12px}.checkin-tabs{justify-content:center;gap:6px;margin-bottom:14px;display:flex}.ck-tab{appearance:none;border:1px solid var(--border);color:var(--muted);cursor:pointer;background:0 0;border-radius:999px;padding:5px 16px;font-size:.82rem;transition:color .18s,border-color .18s,background .18s}.ck-tab:hover{color:var(--text)}.ck-tab.is-active{color:#fff;background:#ff5a8a24;border-color:#ff5a8a8c;box-shadow:0 0 14px #ff5a8a2e}.checkin-list{flex-direction:column;gap:8px;min-height:120px;display:flex}.checkin-empty{color:var(--muted);text-align:center;padding:34px 0;font-size:.9rem}.ck-row{background:#ffffff08;border:1px solid #0000;border-radius:12px;align-items:center;gap:12px;padding:8px 12px;transition:border-color .18s,background .18s;display:flex}.ck-row:hover{background:#ffffff0d;border-color:#ff5a8a40}.ck-rank{text-align:center;width:26px;color:var(--muted);font-variant-numeric:tabular-nums;flex-shrink:0;font-weight:800}.ck-top1 .ck-rank{color:#ffd76a;text-shadow:0 0 10px #ffd76a80}.ck-top2 .ck-rank{color:#d9d9e6;text-shadow:0 0 10px #d9d9e673}.ck-top3 .ck-rank{color:#e8a26b;text-shadow:0 0 10px #e8a26b73}.ck-avatar{object-fit:cover;border:1px solid var(--border);background:#202028;border-radius:50%;flex-shrink:0;width:34px;height:34px}.ck-avatar-fallback{color:var(--accent);justify-content:center;align-items:center;font-size:.85rem;font-weight:700;display:inline-flex}.ck-name{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--text);flex:1;font-size:.92rem;overflow:hidden}.ck-streak{color:var(--accent);background:#ff5a8a1f;border-radius:999px;flex-shrink:0;padding:2px 8px;font-size:.75rem}.ck-points{color:#ffd0de;font-variant-numeric:tabular-nums;flex-shrink:0;font-weight:800}.ck-points em{color:var(--muted);margin-left:2px;font-size:.75rem;font-style:normal;font-weight:400}.checkin-tip{text-align:center;color:var(--muted);opacity:.75;margin-top:12px;font-size:.74rem}.brand-contacts{vertical-align:middle;align-items:center;gap:4px;margin-left:10px;display:inline-flex}.brand-contact{color:#b9b9c2;cursor:pointer;background:#ffffff0a;border:1px solid #ffffff1a;border-radius:50%;justify-content:center;align-items:center;width:26px;height:26px;padding:0;transition:color .25s,border-color .25s,background .25s,transform .25s;display:inline-flex}.brand-contact:hover{color:#ff9dbd;background:#ff5a8a1f;border-color:#ff5a8a8c;transform:translateY(-1px)}.brand-contact svg{display:block}.blog-panel{width:min(94vw,860px);margin:0 auto}.blog-list{flex-direction:column;gap:14px;display:flex}.blog-item{background:#ffffff06;border:1px solid #ffffff17;border-radius:14px;transition:border-color .3s,background .3s}.blog-item:hover,.blog-item.is-open{border-color:#ff5a8a66}.blog-item.is-open{background:#ff5a8a0d}.blog-item-head{width:100%;color:inherit;text-align:left;cursor:pointer;font:inherit;background:0 0;border:0;flex-direction:column;gap:6px;padding:16px 18px 14px;display:flex}.blog-title-line{justify-content:space-between;align-items:center;gap:10px;display:flex}.blog-title{color:#f3f3f5;font-size:1.06rem;font-weight:700}.blog-growth{color:#ffb3c9;white-space:nowrap;background:#ff5a8a14;border:1px solid #ff5a8a59;border-radius:99px;padding:1px 9px;font-size:.72rem}.blog-meta-line{align-items:center;gap:10px;display:flex}.blog-date{color:#94949e;letter-spacing:.06em;font-size:.78rem}.blog-caret{color:#94949e;margin-left:auto;font-size:.8rem;transition:transform .3s}.blog-item.is-open .blog-caret{color:#ff9dbd;transform:rotate(180deg)}.blog-excerpt{color:#b9b9c2;font-size:.85rem;line-height:1.6}.blog-body{color:#d9d9e0;border-top:1px dashed #ffffff14;padding:6px 18px 18px;font-size:.92rem;line-height:1.85}.blog-body .blog-h{color:#ff9dbd;margin:14px 0 6px;font-size:.98rem;font-weight:700}.blog-body p{margin:8px 0}.blog-body .blog-ul{margin:8px 0 8px 18px;padding:0}.blog-body .blog-ul li{margin:4px 0}.gb-toggle{color:#b9b9c2;font:inherit;cursor:pointer;background:0 0;border:1px solid #ffffff29;border-radius:99px;margin:12px auto 0;padding:7px 22px;font-size:.82rem;transition:color .25s,border-color .25s;display:block}.gb-toggle:hover{color:#ff9dbd;border-color:#ff5a8a8c}@media (width<=640px){.brand-contacts{gap:3px;margin-left:6px}.brand-contact{width:23px;height:23px}}.section-projects .project-card--secondary{min-height:300px;padding:30px 24px 24px}.section-projects .project-card--secondary .project-thumb{background:#ffb7c524;border-color:#ffb7c56b;border-radius:16px;width:60px;height:60px}.section-projects .project-card--secondary .project-thumb svg{width:30px;height:30px}.section-projects .project-card--secondary h3{padding-right:7.2rem}.project-badge{z-index:2;letter-spacing:.02em;white-space:nowrap;text-overflow:ellipsis;color:#ffb0c8;pointer-events:none;background:#ff5a8a1f;border:1px solid #ff5a8a61;border-radius:999px;max-width:calc(100% - 48px);padding:3px 9px;font-size:.7rem;font-weight:650;position:absolute;top:12px;right:12px;overflow:hidden}.project-tags{flex-wrap:wrap;gap:6px;margin-top:-2px;display:flex}.project-tag{color:#b9b9c2;background:#ffffff0a;border:1px solid #ffffff14;border-radius:999px;padding:3px 9px;font-size:.72rem;font-weight:600}.project-site-line{letter-spacing:.02em;color:#94949e;align-items:center;gap:8px;margin-top:auto;padding-top:2px;font-size:.74rem;display:inline-flex}.project-site-dot{background:#ff8fb0;border-radius:50%;flex:none;width:5px;height:5px;box-shadow:0 0 0 3px #ff8fb01f}@media (width<=900px){.section-projects .project-card--secondary{min-height:0;padding:22px 18px 20px}.section-projects .project-card--secondary .project-thumb{border-radius:14px;width:52px;height:52px}.section-projects .project-card--secondary .project-thumb svg{width:26px;height:26px}}.tech-text{touch-action:pan-y;-webkit-user-select:none;user-select:none;width:100%;height:100%;position:relative}.tech-text-canvas{width:100%;height:100%;display:block}.micro-slats{width:100%;height:100%;position:relative;overflow:hidden}.micro-slats canvas{width:100%;height:100%;display:block}#micro-slats-bg{pointer-events:none;opacity:1;width:100%;height:100%;transition:opacity .45s;position:absolute;inset:0;-webkit-mask-image:radial-gradient(62% 52% at 50% 40%,#000 0% 28%,#000000e0 42%,#0000008c 58%,#00000038 72%,#0000000f 84%,#0000 96%);mask-image:radial-gradient(62% 52% at 50% 40%,#000 0% 28%,#000000e0 42%,#0000008c 58%,#00000038 72%,#0000000f 84%,#0000 96%);-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}#micro-slats-bg .micro-slats{position:absolute;inset:0}html.micro-slats-off-hero #micro-slats-bg,#micro-slats-bg.is-hidden{opacity:0;visibility:hidden;pointer-events:none}html.micro-slats-on-hero #micro-slats-bg{opacity:1;visibility:visible}.micro-slats--fallback,#micro-slats-bg.micro-slats-bg--fallback,.no-micro-slats #micro-slats-bg{display:none!important}@media (prefers-reduced-motion:reduce){#micro-slats-bg{transition:none}}@media (width<=720px){#micro-slats-bg{-webkit-mask-image:radial-gradient(78% 48% at 50% 38%,#000 0% 30%,#000c 48%,#00000059 66%,#0000 88%);mask-image:radial-gradient(78% 48% at 50% 38%,#000 0% 30%,#000c 48%,#00000059 66%,#0000 88%)}}.border-glow-card{--edge-proximity:0;--cursor-angle:45deg;--edge-sensitivity:30;--color-sensitivity:calc(var(--edge-sensitivity) + 20);--border-radius:28px;--glow-padding:40px;--cone-spread:25;border-radius:var(--border-radius);isolation:isolate;position:relative;overflow:visible;transform:translateZ(.01px)}.border-glow-card--light:after,.border-glow-card--light>.edge-light{mix-blend-mode:normal}.border-glow-card:before,.border-glow-card:after,.border-glow-card>.edge-light{content:"";border-radius:inherit;z-index:-1;transition:opacity .25s ease-out;position:absolute;inset:0}.border-glow-card:not(:hover):not(.sweep-active):before,.border-glow-card:not(:hover):not(.sweep-active):after,.border-glow-card:not(:hover):not(.sweep-active)>.edge-light{opacity:0;transition:opacity .75s ease-in-out}.border-glow-card:before{background:linear-gradient(var(--card-bg,#120f17) 0 100%) padding-box, linear-gradient(#fff0 0% 100%) border-box, var(--gradient-one,radial-gradient(at 80% 55%, #be85ff 0px, transparent 50%)) border-box, var(--gradient-two,radial-gradient(at 69% 34%, #ff7a93 0px, transparent 50%)) border-box, var(--gradient-three,radial-gradient(at 8% 6%, #8fffad 0px, transparent 50%)) border-box, var(--gradient-four,radial-gradient(at 41% 38%, #47daff 0px, transparent 50%)) border-box, var(--gradient-five,radial-gradient(at 86% 85%, #7af2ff 0px, transparent 50%)) border-box, var(--gradient-six,radial-gradient(at 82% 18%, #ffe74c 0px, transparent 50%)) border-box, var(--gradient-seven,radial-gradient(at 51% 4%, #ff8d70 0px, transparent 50%)) border-box, var(--gradient-base,linear-gradient(#c299ff 0 100%)) border-box;opacity:calc((var(--edge-proximity) - var(--color-sensitivity)) / (100 - var(--color-sensitivity)));-webkit-mask-image:conic-gradient(from var(--cursor-angle) at center, black calc(var(--cone-spread) * 1%), transparent calc((var(--cone-spread) + 15) * 1%), transparent calc((100 - var(--cone-spread) - 15) * 1%), black calc((100 - var(--cone-spread)) * 1%));mask-image:conic-gradient(from var(--cursor-angle) at center, black calc(var(--cone-spread) * 1%), transparent calc((var(--cone-spread) + 15) * 1%), transparent calc((100 - var(--cone-spread) - 15) * 1%), black calc((100 - var(--cone-spread)) * 1%));border:1px solid #0000}.border-glow-card:after{background:var(--gradient-one,radial-gradient(at 80% 55%, #be85ff 0px, transparent 50%)) padding-box, var(--gradient-two,radial-gradient(at 69% 34%, #ff7a93 0px, transparent 50%)) padding-box, var(--gradient-three,radial-gradient(at 8% 6%, #8fffad 0px, transparent 50%)) padding-box, var(--gradient-four,radial-gradient(at 41% 38%, #47daff 0px, transparent 50%)) padding-box, var(--gradient-five,radial-gradient(at 86% 85%, #7af2ff 0px, transparent 50%)) padding-box, var(--gradient-six,radial-gradient(at 82% 18%, #ffe74c 0px, transparent 50%)) padding-box, var(--gradient-seven,radial-gradient(at 51% 4%, #ff8d70 0px, transparent 50%)) padding-box, var(--gradient-base,linear-gradient(#c299ff 0 100%)) padding-box;-webkit-mask-image:linear-gradient(to bottom, black, black), radial-gradient(ellipse at 50% 50%, black 40%, transparent 65%), radial-gradient(ellipse at 66% 66%, black 5%, transparent 40%), radial-gradient(ellipse at 33% 33%, black 5%, transparent 40%), radial-gradient(ellipse at 66% 33%, black 5%, transparent 40%), radial-gradient(ellipse at 33% 66%, black 5%, transparent 40%), conic-gradient(from var(--cursor-angle) at center, transparent 5%, black 15%, black 85%, transparent 95%);mask-image:linear-gradient(to bottom, black, black), radial-gradient(ellipse at 50% 50%, black 40%, transparent 65%), radial-gradient(ellipse at 66% 66%, black 5%, transparent 40%), radial-gradient(ellipse at 33% 33%, black 5%, transparent 40%), radial-gradient(ellipse at 66% 33%, black 5%, transparent 40%), radial-gradient(ellipse at 33% 66%, black 5%, transparent 40%), conic-gradient(from var(--cursor-angle) at center, transparent 5%, black 15%, black 85%, transparent 95%);opacity:calc(var(--fill-opacity,.5) * (var(--edge-proximity) - var(--color-sensitivity)) / (100 - var(--color-sensitivity)));mix-blend-mode:soft-light;border:1px solid #0000;-webkit-mask-composite:source-out,source-over,source-over,source-over,source-over,source-over;mask-composite:subtract,add,add,add,add,add}.border-glow-card>.edge-light{inset:calc(var(--glow-padding) * -1);pointer-events:none;z-index:1;-webkit-mask-image:conic-gradient(from var(--cursor-angle) at center, black 2.5%, transparent 10%, transparent 90%, black 97.5%);mask-image:conic-gradient(from var(--cursor-angle) at center, black 2.5%, transparent 10%, transparent 90%, black 97.5%);opacity:calc((var(--edge-proximity) - var(--edge-sensitivity)) / (100 - var(--edge-sensitivity)));mix-blend-mode:plus-lighter}.border-glow-card>.edge-light:before{content:"";inset:var(--glow-padding);border-radius:inherit;box-shadow:inset 0 0 0 1px var(--glow-color,#f5daa3), inset 0 0 1px 0 var(--glow-color-60,#f5daa399), inset 0 0 3px 0 var(--glow-color-50,#f5daa380), inset 0 0 6px 0 var(--glow-color-40,#f5daa366), inset 0 0 15px 0 var(--glow-color-30,#f5daa34d), inset 0 0 25px 2px var(--glow-color-20,#f5daa333), inset 0 0 50px 2px var(--glow-color-10,#f5daa31a), 0 0 1px 0 var(--glow-color-60,#f5daa399), 0 0 3px 0 var(--glow-color-50,#f5daa380), 0 0 6px 0 var(--glow-color-40,#f5daa366), 0 0 15px 0 var(--glow-color-30,#f5daa34d), 0 0 25px 2px var(--glow-color-20,#f5daa333), 0 0 50px 2px var(--glow-color-10,#f5daa31a);position:absolute}.border-glow-inner{display:contents}
