:root{--sky-top:#C9DBEC;--sky-mid:#DDE9F1;--sky-bot:#F2E6DE;--sun-x:78%;--sun-y:22%;--sun-color:#FFE9C4;--sun-opacity:0.85;--stars-opacity:0;--rain-opacity:0;--ink:#16223A;--ink-soft:#2E3F5E;--ink-dim:#5B6E8C;--ink-faint:rgba(22,34,58,0.42);--paper:#FBFAF6;--paper-warm:#F6EFE5;--line:rgba(22,34,58,0.15);--line-strong:rgba(22,34,58,0.3);--accent:#3B7BB0;--accent-warm:#E89B6E;--accent-cool:#6FA8CF;--shadow-soft:0 14px 38px -22px rgba(22,34,58,0.35),0 1px 0 rgba(255,255,255,0.6) inset;--font-display:"Shippori Mincho","Times New Roman",serif;--font-hand:"Klee One","Comic Sans MS",cursive;--font-body:"DM Sans",system-ui,sans-serif;--font-mono:"JetBrains Mono",ui-monospace,monospace}[data-direction=storm]{--paper:#F0F2F5;--paper-warm:#DDE5EB;--accent:#2A6299;--accent-warm:#C68B5E;--accent-cool:#4D7FA8}*{box-sizing:border-box}body,html{margin:0;padding:0}html{scroll-behavior:smooth;background:var(--paper)}body{min-height:100vh;font-family:var(--font-body);font-size:16px;color:var(--ink);background:transparent;-webkit-font-smoothing:antialiased;overflow-x:hidden}a{text-decoration:none}a,button{color:inherit}button{font:inherit;background:none;border:none;padding:0;cursor:pointer}::selection{background:var(--accent);color:white}.sky-stage{position:fixed;inset:0;z-index:-1;overflow:hidden;pointer-events:none}.sky-gradient{position:absolute;inset:0;background:radial-gradient(circle at var(--sun-x) var(--sun-y),color-mix(in oklch,var(--sun-color) 80%,transparent) 0,color-mix(in oklch,var(--sun-color) 30%,transparent) 8%,transparent 25%),linear-gradient(to bottom,var(--sky-top) 0,var(--sky-mid) 55%,var(--sky-bot) 100%);transition:background .8s linear}.sky-sun{position:absolute;top:var(--sun-y);left:var(--sun-x);width:220px;height:220px;margin:-110px 0 0 -110px;border-radius:50%;background:radial-gradient(circle,var(--sun-color) 0,rgba(255,233,196,.4) 30%,transparent 65%);opacity:var(--sun-opacity);transition:opacity .8s linear,top .8s linear,left .8s linear;mix-blend-mode:screen}.sky-stars{position:absolute;inset:0;background-image:radial-gradient(1px 1px at 20% 30%,white,transparent),radial-gradient(1px 1px at 60% 70%,white,transparent),radial-gradient(1.5px 1.5px at 80% 10%,white,transparent),radial-gradient(1px 1px at 30% 80%,white,transparent),radial-gradient(1px 1px at 90% 40%,white,transparent),radial-gradient(1px 1px at 10% 60%,white,transparent),radial-gradient(1.5px 1.5px at 50% 20%,white,transparent),radial-gradient(1px 1px at 70% 50%,white,transparent),radial-gradient(1px 1px at 15% 15%,white,transparent),radial-gradient(1px 1px at 85% 85%,white,transparent),radial-gradient(1px 1px at 45% 55%,white,transparent),radial-gradient(1.5px 1.5px at 25% 45%,white,transparent),radial-gradient(1px 1px at 65% 25%,white,transparent),radial-gradient(1px 1px at 95% 65%,white,transparent),radial-gradient(1px 1px at 5% 75%,white,transparent);background-size:100% 100%;opacity:var(--stars-opacity);transition:opacity 1.2s linear;animation:twinkle 4s ease-in-out infinite}@keyframes twinkle{0%,to{filter:brightness(.7)}50%{filter:brightness(1.15)}}.cloud-layer{position:absolute;width:200%;height:100%;top:0;left:0;pointer-events:none}.cloud-layer svg{width:100%;height:100%;display:block}.particle-canvas{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}.nav{position:fixed;top:0;left:0;right:0;z-index:50;justify-content:space-between;padding:18px 6vw;font-family:var(--font-body);font-size:13px;font-weight:500;color:var(--ink);background:linear-gradient(180deg,rgba(251,250,246,.7),rgba(251,250,246,0));backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}.nav,.nav .brand{display:flex;align-items:center}.nav .brand{gap:12px;font-family:var(--font-display);font-size:16px}.nav .brand .mark{width:28px;height:28px;border-radius:50%;background:radial-gradient(circle at 30% 30%,white 0,var(--accent-cool) 60%,var(--accent) 100%);box-shadow:0 4px 14px -4px var(--accent-cool);position:relative}.nav .brand .mark:after{content:"";position:absolute;inset:6px;border-radius:50%;border:1px dashed rgba(255,255,255,.55);animation:spin 14s linear infinite}@keyframes spin{to{transform:rotate(1turn)}}.nav .links{display:flex;gap:26px}.nav .links a{color:var(--ink-soft);position:relative;padding:2px 0}.nav .links a:hover{color:var(--ink)}.nav .links a:after{content:"";position:absolute;left:0;right:0;bottom:-2px;height:1px;background:var(--ink);transform:scaleX(0);transform-origin:left;transition:transform .22s}.nav .links a:hover:after{transform:scaleX(1)}.nav .clock{font-family:var(--font-mono);font-size:11px;color:var(--ink-dim);font-feature-settings:"tnum";font-variant-numeric:tabular-nums}main{z-index:1}.chapter,main{position:relative}.chapter{padding:140px 7vw 120px;max-width:1400px;margin:0 auto}.ch-marker{display:flex;align-items:center;gap:16px;margin-bottom:36px}.ch-marker .num{font-family:var(--font-hand);font-size:18px;color:var(--ink-dim)}.ch-marker .line{width:64px;height:1px;background:var(--ink-dim)}.ch-marker .label{font-family:var(--font-body);font-size:12px;letter-spacing:.22em;text-transform:uppercase;color:var(--ink-dim)}.ch-title{font-weight:500;font-size:clamp(48px,7vw,104px);line-height:1;letter-spacing:-.005em;color:var(--ink);margin:0}.ch-title,.ch-title .ji{font-family:var(--font-display)}.ch-title .ji{display:inline-block;font-size:.55em;font-weight:400;color:var(--accent);vertical-align:.45em;margin-left:.4em}.ch-sub{margin-top:14px;font-family:var(--font-hand);font-size:18px;color:var(--ink-soft);max-width:56ch}.hero{min-height:100vh;padding-top:120px;display:flex;flex-direction:column;justify-content:center;position:relative}.hero .card-stack{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(0,1fr);grid-gap:48px;gap:48px;align-items:end}.hero .name-card{position:relative}.hero .anime-eyebrow{font-family:var(--font-hand);font-size:22px;color:var(--accent);margin-bottom:4px;display:flex;align-items:center;gap:14px}.hero .anime-eyebrow .ji{font-family:var(--font-display);color:var(--ink-soft);font-size:18px;letter-spacing:.12em}.hero h1{font-family:var(--font-display);font-weight:500;font-size:clamp(64px,11vw,168px);line-height:.94;letter-spacing:-.02em;margin:6px 0 0;color:var(--ink)}.hero h1 .ja{display:block;font-family:var(--font-hand);font-size:.16em;color:var(--ink-dim);letter-spacing:.06em;margin-top:22px;font-weight:400}.hero .tagline{margin-top:28px;font-family:var(--font-body);font-size:17px;line-height:1.55;color:var(--ink-soft);max-width:52ch}.hero .tagline b{color:var(--ink);font-weight:600}.train-window{background:linear-gradient(180deg,rgba(255,255,255,.7),rgba(255,255,255,.5));backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border:1px solid rgba(255,255,255,.8);border-radius:18px;padding:28px 30px 26px;box-shadow:var(--shadow-soft);position:relative}.train-window .label{font-family:var(--font-hand);font-size:14px;color:var(--ink-dim);margin-bottom:12px;display:flex;align-items:center;gap:8px}.train-window .label:before{content:"";width:6px;height:6px;border-radius:50%;background:var(--accent);box-shadow:0 0 8px var(--accent)}.train-window .bio{font-family:var(--font-body);font-size:15px;line-height:1.65;color:var(--ink);margin-bottom:18px}.train-window .stats{display:grid;grid-template-columns:repeat(2,1fr);grid-gap:14px 18px;gap:14px 18px;padding-top:16px;border-top:1px dashed var(--line-strong)}.train-window .stat .v{font-family:var(--font-display);font-size:28px;line-height:1;color:var(--ink)}.train-window .stat .k{font-family:var(--font-body);font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:var(--ink-dim);margin-top:4px}.scroll-hint{position:absolute;bottom:36px;left:7vw;font-family:var(--font-hand);font-size:14px;color:var(--ink-dim);display:flex;align-items:center;gap:10px}.scroll-hint .arr{display:inline-block;width:14px;height:14px;border-right:1.5px solid;border-bottom:1.5px solid;transform:rotate(45deg);animation:bob 1.8s ease-in-out infinite}@keyframes bob{0%,to{transform:rotate(45deg) translate(0)}50%{transform:rotate(45deg) translate(3px,3px)}}.sigil{position:absolute;width:280px;height:280px;opacity:.12;pointer-events:none;color:var(--accent)}.sigil svg{width:100%;height:100%}.sigil .ring{animation:spin 30s linear infinite;transform-origin:center}.sigil .ring.rev{animation:spin 22s linear infinite reverse}.projects-grid{margin-top:56px;display:flex;flex-direction:column;gap:48px}.proj-card{perspective:1400px}.proj-inner{position:relative;background:linear-gradient(180deg,rgba(255,255,255,.78),rgba(255,255,255,.62));backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border:1px solid rgba(255,255,255,.7);border-radius:22px;padding:36px 40px 40px;box-shadow:var(--shadow-soft);transform-style:preserve-3d;overflow:hidden;transition:box-shadow .25s}.proj-card:hover .proj-inner{box-shadow:0 22px 56px -22px rgba(22,34,58,.45),inset 0 1px 0 rgba(255,255,255,.7)}.proj-head{display:flex;justify-content:space-between;align-items:flex-start;gap:24px;margin-bottom:22px;transform:translateZ(28px)}.proj-head .left{flex:1 1;min-width:0}.proj-head .ep{font-family:var(--font-hand);font-size:14px;color:var(--ink-dim);letter-spacing:.04em}.proj-head h3{font-family:var(--font-display);font-weight:500;font-size:clamp(34px,4.5vw,56px);line-height:1;margin:6px 0 10px;color:var(--ink);letter-spacing:-.01em}.proj-head .sub{font-family:var(--font-body);font-size:14px;color:var(--ink-dim)}.proj-head .status{font-family:var(--font-mono);font-size:11px;letter-spacing:.1em;padding:6px 12px;border:1px solid var(--ink);border-radius:999px;color:var(--ink);display:flex;align-items:center;gap:8px;white-space:nowrap}.proj-head .status .dot{width:6px;height:6px;border-radius:50%;background:var(--accent);box-shadow:0 0 8px var(--accent);animation:pulse 1.8s infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.45}}.proj-metrics{display:grid;grid-template-columns:repeat(4,1fr);grid-gap:18px;gap:18px;padding:18px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line);margin-bottom:26px;transform:translateZ(20px)}.proj-metrics .m .v{font-family:var(--font-display);font-size:32px;line-height:1;color:var(--ink)}.proj-metrics .m .v .u{font-size:13px;margin-left:3px;font-weight:400}.proj-metrics .m .k,.proj-metrics .m .v .u{font-family:var(--font-body);color:var(--ink-dim)}.proj-metrics .m .k{font-size:11px;letter-spacing:.18em;text-transform:uppercase;margin-top:4px}.proj-body{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(0,1fr);grid-gap:36px;gap:36px;transform:translateZ(12px)}.proj-body p{font-size:15px;line-height:1.65;color:var(--ink-soft);margin:0 0 18px}.proj-body ul{padding-left:0;margin:0;list-style:none}.proj-body li{font-size:14px;line-height:1.6;color:var(--ink-soft);padding:8px 0 8px 24px;position:relative;border-bottom:1px dashed var(--line)}.proj-body li:last-child{border-bottom:none}.proj-body li:before{content:"✦";position:absolute;left:0;top:8px;color:var(--accent);font-size:12px}.proj-arch{background:var(--paper-warm);border:1px solid var(--line);border-radius:14px;padding:18px;margin-bottom:16px}.proj-arch .label{font-family:var(--font-hand);font-size:14px;color:var(--ink-dim);margin-bottom:12px;display:flex;align-items:center;gap:8px}.proj-arch .label:before{content:"◇";color:var(--accent)}.proj-arch svg{width:100%;height:auto;display:block}.proj-tech{display:flex;flex-wrap:wrap;gap:7px}.proj-tech .chip{font-family:var(--font-mono);font-size:11px;padding:5px 10px;background:rgba(22,34,58,.06);border-radius:6px;color:var(--ink-soft)}.proj-actions{display:flex;gap:12px;margin-top:24px;transform:translateZ(10px)}.btn{display:inline-flex;align-items:center;gap:10px;font-family:var(--font-body);font-size:13px;font-weight:500;padding:11px 20px;border-radius:999px;background:var(--ink);color:var(--paper);border:1px solid var(--ink);transition:background .18s,color .18s,transform .18s;position:relative;overflow:hidden}.btn:hover{background:transparent;color:var(--ink)}.btn:after{content:"→";transition:transform .2s}.btn:hover:after{transform:translateX(4px)}.btn.ghost{background:transparent;border:1px solid var(--ink);color:var(--ink)}.btn.ghost:hover{background:var(--ink);color:var(--paper)}.speedlines{position:relative;display:inline-block}.speedlines:after,.speedlines:before{content:"";position:absolute;width:0;height:1px;background:currentColor;opacity:0;transition:width .28s cubic-bezier(.4,.6,.2,1),opacity .2s;pointer-events:none}.speedlines:before{top:30%;left:-8px}.speedlines:after{top:70%;left:-8px}.speedlines:hover:after,.speedlines:hover:before{width:24px;opacity:.6}.speedlines:hover:after{transition-delay:60ms}body[data-speedlines=false] .speedlines:after,body[data-speedlines=false] .speedlines:before{display:none}.cp-shell{margin-top:48px;display:grid;grid-template-columns:minmax(0,1.55fr) minmax(0,1fr);grid-gap:36px;gap:36px;align-items:stretch}.cp-card{background:linear-gradient(180deg,rgba(255,255,255,.78),rgba(255,255,255,.6));border:1px solid rgba(255,255,255,.7);border-radius:22px;padding:28px 32px;box-shadow:var(--shadow-soft);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px)}.cp-card .graph-head{display:flex;justify-content:space-between;align-items:baseline;gap:16px;flex-wrap:wrap;margin-bottom:18px}.cp-card .graph-head .t{font-family:var(--font-display);font-size:24px;color:var(--ink)}.cp-card .graph-head .legend{display:flex;flex-wrap:wrap;gap:6px 16px;font-family:var(--font-body);font-size:11px;color:var(--ink-dim);letter-spacing:.05em}.cp-card .graph-head .legend .swatch{display:inline-block;width:14px;height:2px;vertical-align:middle;margin-right:6px;border-radius:2px}.graph-svg{width:100%;height:auto;display:block}.platform-stack{display:flex;flex-direction:column;gap:16px}.platform-card{background:linear-gradient(180deg,rgba(255,255,255,.78),rgba(255,255,255,.6));border:1px solid rgba(255,255,255,.7);border-radius:18px;padding:20px 22px;box-shadow:var(--shadow-soft);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);position:relative;overflow:hidden}.platform-card .top{display:flex;justify-content:space-between;align-items:baseline}.platform-card .name{font-family:var(--font-hand);font-size:16px;color:var(--ink-soft)}.platform-card .rating{font-family:var(--font-display);font-size:44px;line-height:1;color:var(--ink)}.platform-card .row{display:flex;justify-content:space-between;font-family:var(--font-body);font-size:12px;color:var(--ink-dim);margin-top:8px}.platform-card .row b{color:var(--ink);font-weight:600}.platform-card .bar{margin-top:14px;height:4px;background:rgba(22,34,58,.08);border-radius:4px;position:relative;overflow:hidden}.platform-card .bar i{position:absolute;top:0;left:0;bottom:0;background:linear-gradient(to right,var(--accent-cool),var(--accent));border-radius:4px;transition:width 1.2s cubic-bezier(.2,.8,.2,1)}.cp-summary{display:grid;grid-template-columns:repeat(4,1fr);grid-gap:16px;gap:16px;margin-top:32px}.cp-summary .box{background:linear-gradient(180deg,rgba(255,255,255,.82),rgba(255,255,255,.66));border:1px solid rgba(255,255,255,.7);border-radius:14px;padding:18px 20px;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px)}.cp-summary .v{font-family:var(--font-display);font-size:40px;line-height:1;color:var(--ink)}.cp-summary .k{font-family:var(--font-body);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-dim);margin-top:4px}.exp-list{margin-top:56px;position:relative;padding-left:56px}.exp-list:before{left:24px;width:2px;background:linear-gradient(to bottom,transparent 0,var(--ink-dim) 8%,var(--ink-dim) 92%,transparent 100%)}.exp-list:after,.exp-list:before{content:"";position:absolute;top:6px;bottom:6px}.exp-list:after{left:17px;width:16px;background-image:repeating-linear-gradient(to bottom,var(--ink-dim) 0,var(--ink-dim) 1px,transparent 1px,transparent 14px);opacity:.35}.exp-item{position:relative;padding:24px 0 28px;border-bottom:1px dashed var(--line)}.exp-item:last-child{border-bottom:none}.exp-item .station{position:absolute;left:-42px;top:32px;width:18px;height:18px;border-radius:50%;background:var(--paper);border:2px solid var(--ink);box-shadow:0 0 0 4px var(--paper),0 0 14px var(--accent-cool)}.exp-item .when{font-family:var(--font-hand);font-size:14px;letter-spacing:.04em;color:var(--ink-dim)}.exp-item .what{font-family:var(--font-display);font-weight:500;font-size:clamp(28px,3.4vw,44px);line-height:1;color:var(--ink);margin:8px 0 4px;letter-spacing:-.01em}.exp-item .where{font-family:var(--font-body);font-size:14px;font-weight:500;color:var(--accent);margin-bottom:12px}.exp-item .note{font-family:var(--font-body);font-size:15px;color:var(--ink-soft);line-height:1.7;max-width:64ch}.skills-grid{margin-top:56px;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));grid-gap:22px;gap:22px}.skill-col{background:linear-gradient(180deg,rgba(255,255,255,.82),rgba(255,255,255,.64));border:1px solid rgba(255,255,255,.7);border-radius:18px;padding:22px 22px 18px;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);box-shadow:var(--shadow-soft)}.skill-col h4{font-family:var(--font-hand);font-weight:600;font-size:18px;color:var(--ink);margin:0 0 14px;padding-bottom:10px;border-bottom:1px dashed var(--line-strong);display:flex;align-items:center;gap:8px}.skill-col h4:before{content:"✦";color:var(--accent);font-size:14px}.skill-col ul{list-style:none;padding:0;margin:0}.skill-col li{font-family:var(--font-body);font-size:14px;color:var(--ink-soft);padding:5px 0;transition:color .15s,transform .15s;cursor:default}.skill-col li:hover{color:var(--ink);transform:translateX(3px)}footer{position:relative;padding:100px 7vw 80px;max-width:1400px;margin:60px auto 0;z-index:1}footer .panel{background:linear-gradient(180deg,rgba(255,255,255,.86),rgba(255,255,255,.72));border:1px solid rgba(255,255,255,.78);border-radius:28px;padding:56px 60px 44px;box-shadow:0 24px 60px -28px rgba(22,34,58,.5),inset 0 1px 0 rgba(255,255,255,.8);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);position:relative}footer .marker{margin-bottom:36px}footer .big{font-family:var(--font-display);font-weight:500;font-size:clamp(56px,9vw,144px);line-height:.98;color:var(--ink);margin:0;letter-spacing:-.015em}footer .big .ja{display:block;font-family:var(--font-hand);font-size:.16em;color:var(--ink-dim);margin-top:22px;font-weight:400}footer .grid{margin-top:56px;display:grid;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);grid-gap:48px;gap:48px;align-items:end}footer .blurb{font-family:var(--font-body);font-size:18px;line-height:1.6;color:var(--ink-soft);max-width:50ch}footer .blurb b{color:var(--ink);font-weight:600}footer .contact-list{display:flex;flex-direction:column;gap:10px}footer .contact-list a{display:flex;justify-content:space-between;align-items:baseline;padding:14px 0;border-bottom:1px solid var(--line);font-family:var(--font-body);font-size:15px;color:var(--ink);transition:color .18s}footer .contact-list a:hover{color:var(--accent)}footer .contact-list a .k{font-family:var(--font-hand);font-size:13px;color:var(--ink-dim)}footer .contact-list a .v{font-weight:500}footer .contact-list a .v:after{content:" ↗";opacity:.5}footer .colophon{margin-top:56px;display:flex;justify-content:space-between;align-items:baseline;padding-top:24px;border-top:1px dashed var(--line);font-family:var(--font-mono);font-size:11px;color:var(--ink-dim)}@media (max-width:960px){.chapter{padding:100px 6vw 80px}.hero .card-stack{grid-template-columns:1fr;gap:32px}.proj-metrics{grid-template-columns:repeat(2,1fr)}.cp-shell,.proj-body{grid-template-columns:1fr}.cp-summary,.skills-grid{grid-template-columns:repeat(2,1fr)}.nav .links{display:none}footer .grid{grid-template-columns:1fr;gap:36px}}@media (max-width:640px){.nav{padding:14px 5vw}.nav .clock{font-size:10px}.chapter{padding:80px 5vw 60px}.hero{padding-top:80px}.proj-inner{padding:22px 18px 24px}.proj-head h3{font-size:clamp(26px,7vw,40px)}.proj-metrics{grid-template-columns:repeat(2,1fr);gap:12px}.proj-metrics .m .v{font-size:26px}.platform-card{padding:16px 18px}.platform-card .rating{font-size:36px}.cp-summary{grid-template-columns:repeat(2,1fr)}.cp-summary .v{font-size:32px}.skills-grid{grid-template-columns:repeat(2,1fr);gap:14px}footer{padding:60px 5vw;margin-top:30px}footer .panel{padding:32px 24px 28px;border-radius:20px}footer .big{font-size:clamp(38px,11vw,80px)}footer .colophon{flex-direction:column;gap:6px}footer .contact-list a{flex-direction:column;gap:2px;padding:12px 0}footer .contact-list a .v:after{content:" ↗"}}@media (max-width:400px){.nav{padding:12px 4vw}.nav .clock{display:none}.chapter{padding:70px 4vw 50px}.proj-inner{padding:18px 14px 20px}.proj-metrics{gap:10px}.cp-summary{grid-template-columns:repeat(2,1fr)}footer .panel{padding:24px 18px 22px}footer .big{font-size:clamp(34px,10vw,60px)}}