@font-face{font-family:Noto Sans Thai;font-style:normal;font-weight:400;font-stretch:100%;font-display:swap;src:url(../media/bfd813093b8ca1bb-s.p.3ok2djvs6w93k.woff2)format("woff2");unicode-range:U+2D7,U+303,U+331,U+E01-E5B,U+200C-200D,U+25CC}@font-face{font-family:Noto Sans Thai;font-style:normal;font-weight:400;font-stretch:100%;font-display:swap;src:url(../media/acc5f86302586f33-s.1ttn5ge0anb6a.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Noto Sans Thai;font-style:normal;font-weight:400;font-stretch:100%;font-display:swap;src:url(../media/f304c3cf3765fb5f-s.p.0h0-3wqrkgcb1.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Noto Sans Thai;font-style:normal;font-weight:500;font-stretch:100%;font-display:swap;src:url(../media/bfd813093b8ca1bb-s.p.3ok2djvs6w93k.woff2)format("woff2");unicode-range:U+2D7,U+303,U+331,U+E01-E5B,U+200C-200D,U+25CC}@font-face{font-family:Noto Sans Thai;font-style:normal;font-weight:500;font-stretch:100%;font-display:swap;src:url(../media/acc5f86302586f33-s.1ttn5ge0anb6a.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Noto Sans Thai;font-style:normal;font-weight:500;font-stretch:100%;font-display:swap;src:url(../media/f304c3cf3765fb5f-s.p.0h0-3wqrkgcb1.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Noto Sans Thai;font-style:normal;font-weight:600;font-stretch:100%;font-display:swap;src:url(../media/bfd813093b8ca1bb-s.p.3ok2djvs6w93k.woff2)format("woff2");unicode-range:U+2D7,U+303,U+331,U+E01-E5B,U+200C-200D,U+25CC}@font-face{font-family:Noto Sans Thai;font-style:normal;font-weight:600;font-stretch:100%;font-display:swap;src:url(../media/acc5f86302586f33-s.1ttn5ge0anb6a.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Noto Sans Thai;font-style:normal;font-weight:600;font-stretch:100%;font-display:swap;src:url(../media/f304c3cf3765fb5f-s.p.0h0-3wqrkgcb1.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Noto Sans Thai;font-style:normal;font-weight:700;font-stretch:100%;font-display:swap;src:url(../media/bfd813093b8ca1bb-s.p.3ok2djvs6w93k.woff2)format("woff2");unicode-range:U+2D7,U+303,U+331,U+E01-E5B,U+200C-200D,U+25CC}@font-face{font-family:Noto Sans Thai;font-style:normal;font-weight:700;font-stretch:100%;font-display:swap;src:url(../media/acc5f86302586f33-s.1ttn5ge0anb6a.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Noto Sans Thai;font-style:normal;font-weight:700;font-stretch:100%;font-display:swap;src:url(../media/f304c3cf3765fb5f-s.p.0h0-3wqrkgcb1.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Noto Sans Thai Fallback;src:local(Arial);ascent-override:99.79%;descent-override:42.32%;line-gap-override:0.0%;size-adjust:106.33%}.noto_sans_thai_49e0345a-module__2BQmUW__className{font-family:Noto Sans Thai,Noto Sans Thai Fallback;font-style:normal}.noto_sans_thai_49e0345a-module__2BQmUW__variable{--font-noto:"Noto Sans Thai", "Noto Sans Thai Fallback"}
:root{--bg:#f7f8fc;--surface:#fff;--surface-2:#eff1f8;--ink:#202431;--muted:#5d6679;--body-strong:#3b4254;--faint:#8a91a3;--line:#e2e5ef;--primary:#24345f;--primary-hover:#1a2747;--on-primary:#fff;--link:#2c4489;--lavender:#e7e9fa;--mint:#ddf1ea;--warm:#f2deba;--accent-line:#7083d6;--dot:#24345f14;--ok:#1d7553;--warn:#94570f;--danger:#b42318;--danger-soft:#fdecea;--shadow-sm:0 1px 2px #2024310d;--shadow-md:0 2px 4px #2024310a, 0 12px 28px -12px #24345f38;--header-bg:#f7f8fcd1;--mascot-ring:#cdd3f2;--font:var(--font-noto), "Noto Sans Thai", "Leelawadee UI", system-ui, sans-serif;--wrap:77.5rem;--radius:14px;--radius-lg:20px;--ease:cubic-bezier(.22, .61, .36, 1);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:root[data-theme=dark]{--bg:#0e1220;--surface:#151a2b;--surface-2:#1c2236;--ink:#e8ebf4;--muted:#a6aec1;--body-strong:#ccd2df;--faint:#7c849a;--line:#2a3048;--primary:#b4c3f6;--primary-hover:#cbd6fa;--on-primary:#0e1220;--link:#b4c3f6;--lavender:#232a4b;--mint:#163a31;--warm:#3a2f1b;--accent-line:#8a9ef2;--dot:#b4c3f612;--ok:#5ccb9b;--warn:#e6ab61;--danger:#f2877c;--danger-soft:#3a1c1a;--shadow-sm:0 1px 2px #0000004d;--shadow-md:0 2px 4px #00000040, 0 14px 30px -14px #0009;--header-bg:#0e1220cc;--mascot-ring:#39426b;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-padding-top:5.5rem}body{background:var(--bg);color:var(--ink);font-family:var(--font);-webkit-font-smoothing:antialiased;margin:0;font-size:1.0625rem;line-height:1.8;transition:background-color .25s,color .25s;overflow-x:hidden}img{max-width:100%;display:block}a{color:var(--link);text-underline-offset:4px;text-decoration-thickness:1px}:focus-visible{outline:2px solid var(--accent-line);outline-offset:3px;border-radius:8px}h1,h2,h3{color:var(--ink);letter-spacing:0;text-wrap:balance;margin:0;font-weight:700;line-height:1.35}p{margin:0}.pre{white-space:pre-line}.sr-only{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.wrap{width:100%;max-width:var(--wrap);margin:0 auto;padding-inline:1rem}@media (min-width:640px){.wrap{padding-inline:2rem}}.skip{z-index:100;background:var(--primary);color:var(--on-primary);border-radius:10px;padding:.5rem 1rem;position:absolute;top:-4rem;left:1rem}.skip:focus{top:1rem}.btn{min-height:48px;font:inherit;cursor:pointer;white-space:nowrap;border:1px solid #0000;border-radius:999px;justify-content:center;align-items:center;gap:.5rem;padding:.7rem 1.45rem;font-size:1rem;font-weight:600;line-height:1.2;text-decoration:none;transition:background-color .18s,border-color .18s,color .18s,transform .12s,box-shadow .18s;display:inline-flex}.btn:active{transform:translateY(1px)scale(.99)}.btn-primary{background:var(--primary);color:var(--on-primary);box-shadow:var(--shadow-sm)}.btn-primary:hover{background:var(--primary-hover);color:var(--on-primary);box-shadow:var(--shadow-md)}.btn-ghost{background:var(--surface);color:var(--ink);border-color:var(--line)}.btn-ghost:hover{border-color:var(--faint);color:var(--ink)}.btn-soft{background:var(--lavender);color:var(--ink)}.btn-soft:hover{background:color-mix(in srgb, var(--lavender) 80%, var(--primary) 20%);color:var(--ink)}.btn-danger{background:var(--danger);color:#fff}.btn-danger:hover{filter:brightness(.92);color:#fff}.btn-sm{min-height:40px;padding:.45rem 1rem;font-size:.95rem;font-weight:600}.btn[disabled],.btn[aria-disabled=true]{opacity:.5;cursor:not-allowed;pointer-events:none}.icon-btn{border:1px solid var(--line);background:var(--surface);width:44px;height:44px;color:var(--ink);cursor:pointer;font:inherit;border-radius:12px;place-items:center;font-size:.85rem;font-weight:600;transition:border-color .18s,background-color .18s;display:inline-grid}.icon-btn:hover{border-color:var(--faint)}.icon-btn[disabled]{opacity:.4;cursor:not-allowed}.arrow-link{color:var(--link);white-space:nowrap;align-items:center;gap:.4rem;font-weight:600;text-decoration:none;display:inline-flex}.arrow-link svg{transition:transform .18s var(--ease)}.arrow-link:hover svg,.card:hover .arrow-link svg{transform:translate(3px)}.more-link{color:var(--link);align-items:center;gap:.35rem;font-weight:600;text-decoration:none;display:inline-flex}.more-link:hover{text-decoration:underline}.site-header{z-index:40;border-bottom:1px solid #0000;transition:background-color .2s,border-color .2s;position:sticky;top:0}.site-header[data-scrolled=true]{background:var(--header-bg);border-bottom-color:var(--line);-webkit-backdrop-filter:saturate(140%)blur(10px);backdrop-filter:saturate(140%)blur(10px)}.nav{align-items:center;gap:.75rem;min-height:76px;display:flex}.brand{color:var(--ink);align-items:center;gap:.6rem;margin-right:auto;font-size:1.2rem;font-weight:700;text-decoration:none;display:inline-flex}.brand-face{background:var(--lavender);border-radius:50%;place-items:end center;width:38px;height:38px;display:grid;overflow:hidden}.nav-links{gap:.25rem;margin:0;padding:0;list-style:none;display:none}.nav-links a{color:var(--muted);border-radius:999px;padding:.5rem .85rem;font-weight:500;text-decoration:none;transition:color .15s,background-color .15s;display:block}.nav-links a:hover{color:var(--ink);background:var(--surface-2)}.nav-links a[aria-current=page]{color:var(--primary);background:var(--lavender);font-weight:600}.nav-tools{align-items:center;gap:.4rem;display:flex}.nav-contact{display:none}.mobile-menu{border-top:1px solid var(--line);padding:.25rem 0 1.25rem}.mobile-menu ul{margin:0;padding:0;list-style:none}.mobile-menu a{border-bottom:1px solid var(--line);color:var(--ink);padding:.85rem .25rem;font-size:1.1rem;font-weight:600;text-decoration:none;display:block}.mobile-menu a[aria-current=page]{color:var(--primary)}.mobile-menu .btn{border-bottom:0;width:100%;margin-top:1rem}@media (min-width:960px){.nav-links{display:flex}.nav-contact{margin-left:.35rem;display:inline-flex}.menu-btn,.mobile-menu{display:none}}.hero{isolation:isolate;padding:2.5rem 0 3.5rem;position:relative;overflow:hidden}.hero-bg{z-index:-1;pointer-events:none;position:absolute;inset:0}.hero-bg:before{content:"";background:radial-gradient(42rem 30rem at 78% 30%, color-mix(in srgb, var(--lavender) 90%, transparent), transparent 70%), radial-gradient(30rem 22rem at 8% 92%, color-mix(in srgb, var(--mint) 70%, transparent), transparent 70%);position:absolute;inset:0}.hero-bg:after{content:"";background-image:radial-gradient(var(--dot) 1.2px, transparent 1.3px);background-size:22px 22px;width:min(60%,46rem);height:100%;position:absolute;top:0;right:0;-webkit-mask-image:radial-gradient(closest-side at 60% 45%,#000 30%,#0000 100%);mask-image:radial-gradient(closest-side at 60% 45%,#000 30%,#0000 100%)}.hero-grid{align-items:center;gap:2.5rem;display:grid}.hero-copy{min-width:0}.hero-hello{background:var(--surface);border:1px solid var(--line);color:var(--muted);box-shadow:var(--shadow-sm);border-radius:999px;align-items:center;gap:.6rem;margin-bottom:1.1rem;padding:.3rem .85rem .3rem .4rem;font-size:.98rem;font-weight:500;display:inline-flex}.hero-hello .wave{background:var(--warm);border-radius:50%;place-items:center;width:26px;height:26px;display:grid}.hero h1{letter-spacing:0;font-size:clamp(1.85rem,1.2rem + 2.9vw,3.15rem);font-weight:600;line-height:1.35}.hero h1 .line{display:block}.hero h1 .line-2{color:var(--primary)}.hero h1 .mark{white-space:nowrap;position:relative}.hero-text{max-width:34rem;color:var(--body-strong);margin-top:1.4rem;font-size:1.1rem;font-weight:400;line-height:1.7}@media (max-width:640px){.hero-text{white-space:normal}}.hero-actions{flex-wrap:wrap;gap:.75rem;margin-top:2rem;display:flex}.stage{aspect-ratio:1;justify-self:center;width:min(100%,22rem);position:relative}.stage-orbits{width:124%;height:124%;color:var(--mascot-ring);opacity:.55;pointer-events:none;position:absolute;inset:-12%;overflow:visible}.stage-orbits .spin{transform-origin:50%;animation:9s linear 2 orbit}.stage-disc{background:radial-gradient(circle at 35% 30%, var(--surface) 0, var(--lavender) 62%);box-shadow:inset 0 0 0 1px var(--line), var(--shadow-md);border-radius:50%;place-items:end center;display:grid;position:absolute;inset:0;overflow:hidden}.stage-disc .mascot{margin-bottom:-6%;width:78%!important}.stage-disc .mascot svg{width:100%;height:auto}.mascot3d{cursor:pointer;place-items:end center;display:grid;position:absolute;inset:0}.mascot3d>.mascot{margin-bottom:-6%;width:78%!important}.mascot3d>.mascot svg{width:100%;height:auto}.mascot3d-canvas{width:100%;height:100%;display:block;position:absolute;inset:0}.stage-shadow{filter:blur(2px);background:radial-gradient(closest-side,#24345f2e,#0000);border-radius:50%;height:7%;position:absolute;bottom:-7%;left:18%;right:18%}.bubble{background:var(--surface);border:1px solid var(--line);box-shadow:var(--shadow-md);white-space:nowrap;border-radius:16px 16px 16px 4px;padding:.5rem .95rem;font-size:.95rem;font-weight:600;position:absolute;top:4%;right:-4%}.chip-float{background:var(--surface);border:1px solid var(--line);box-shadow:var(--shadow-sm);white-space:nowrap;border-radius:999px;align-items:center;gap:.45rem;padding:.35rem .8rem;font-size:.85rem;font-weight:600;display:inline-flex;position:absolute}.chip-float i{border-radius:50%;width:9px;height:9px;display:block}.chip-ee{top:22%;left:-4%}.chip-ee i{background:var(--accent-line)}.chip-learn{bottom:26%;right:-8%}.chip-learn i{background:var(--ok)}.chip-tools{bottom:4%;left:2%}.chip-tools i{background:var(--warn)}.hero-wave{width:100%;height:56px;color:var(--line);pointer-events:none;position:absolute;bottom:0;left:0;right:0}@media (min-width:900px){.hero{padding:4rem 0 5rem}.hero-grid{grid-template-columns:minmax(0,1.45fr) minmax(0,1fr);gap:5rem}.stage{width:min(100%,25rem)}}@media (max-width:520px){.stage{width:min(78%,17rem)}.chip-ee{left:-14%}.chip-learn{right:-14%}.bubble{font-size:.85rem;right:-10%}}.rise{animation:rise .6s var(--ease) both}.rise-1{animation-delay:80ms}.rise-2{animation-delay:.16s}.rise-3{animation-delay:.24s}.rise-4{animation-delay:.32s}@keyframes rise{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:none}}@keyframes orbit{to{transform:rotate(360deg)}}.js .reveal{opacity:0;transition:opacity .6s var(--ease), transform .6s var(--ease);transform:translateY(18px)}.js .reveal.in{opacity:1;transform:none}main{min-height:60vh}.section{padding-block:4.5rem 0}.section-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:.75rem 2rem;margin-bottom:1.75rem;display:flex}.section-head h2{font-size:clamp(1.6rem,1.2rem + 1.4vw,2.2rem)}.section-head p{color:var(--muted);max-width:38rem;margin-top:.35rem}.page-head{max-width:46rem;padding-block:3.5rem 2rem}.page-head h1{font-size:clamp(2.1rem,1.5rem + 2.6vw,3.4rem)}.page-head p{color:var(--muted);margin-top:.9rem;font-size:1.1rem}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);transition:transform .22s var(--ease), box-shadow .22s var(--ease), border-color .22s;position:relative}a.card,.card.hoverable{color:inherit}.card.hoverable:hover{box-shadow:var(--shadow-md);border-color:color-mix(in srgb, var(--line) 60%, var(--accent-line) 40%);transform:translateY(-4px)}.grid{gap:1.5rem;display:grid}@media (min-width:720px){.grid-2{grid-template-columns:repeat(2,minmax(0,1fr))}}.grid-3{grid-template-columns:repeat(auto-fit,minmax(min(100%,19rem),1fr))}.project-card{flex-direction:column;display:flex;overflow:hidden}.project-card .cover{aspect-ratio:16/10;background:var(--surface-2);border-bottom:1px solid var(--line);overflow:hidden}.project-card .cover img{object-fit:cover;object-position:top;width:100%;height:100%;transition:transform .5s var(--ease)}.project-card:hover .cover img{transform:scale(1.03)}.cover-placeholder{width:100%;height:100%;color:var(--faint);background:linear-gradient(135deg, var(--lavender), var(--mint));place-items:center;display:grid}.project-card .body{flex-direction:column;flex:1;gap:.5rem;padding:1.25rem 1.35rem 1.4rem;display:flex}.project-card h3{font-size:1.3rem}.project-card h3 a{color:inherit;text-decoration:none}.project-card h3 a:after{content:"";border-radius:inherit;position:absolute;inset:0}.project-card h3 a:focus-visible{outline:none}.project-card:has(h3 a:focus-visible){outline:2px solid var(--accent-line);outline-offset:3px}.project-card .summary{color:var(--muted)}.project-card .role{color:var(--muted);font-size:.92rem}.project-card .role b{color:var(--ink);font-weight:600}.project-card .foot{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:1rem;margin-top:auto;padding-top:.6rem;display:flex}@media (min-width:900px){.project-card.lead{grid-column:1/-1;grid-template-columns:1.35fr 1fr;display:grid}.project-card.lead .cover{aspect-ratio:auto;border-bottom:0;border-right:1px solid var(--line);min-height:21rem}.project-card.lead .body{justify-content:center;padding:2rem}.project-card.lead h3{font-size:1.7rem}}.meta{color:var(--faint);flex-wrap:wrap;align-items:center;gap:.35rem .9rem;font-size:.88rem;display:flex}.tags{flex-wrap:wrap;gap:.4rem;margin:0;padding:0;list-style:none;display:flex}.tag{background:var(--surface-2);color:var(--muted);border-radius:999px;padding:.1rem .65rem;font-size:.82rem;display:inline-flex}.chip{color:var(--muted);white-space:nowrap;align-items:center;gap:.4rem;font-size:.85rem;font-weight:500;display:inline-flex}.chip:before{content:"";background:var(--faint);border-radius:50%;width:8px;height:8px}.chip-ready:before,.chip-done:before{background:var(--ok)}.chip-dev:before,.chip-active:before{background:var(--warn)}.chip-maintenance:before,.chip-paused:before{background:var(--danger)}.chip-draft:before{background:var(--faint)}.learning-card{flex-direction:column;gap:.7rem;padding:1.4rem;display:flex;overflow:hidden}.learning-card:before{content:"";background:var(--tint,var(--lavender));height:4px;position:absolute;inset:0 0 auto}.learning-card .top{justify-content:space-between;align-items:center;gap:.75rem;display:flex}.learning-card .code{background:var(--tint,var(--lavender));color:var(--ink);border-radius:8px;padding:.15rem .6rem;font-size:.85rem;font-weight:700;display:inline-flex}.learning-card h3{font-size:1.18rem}.learning-card .desc{color:var(--muted);font-size:.97rem}.learning-card .foot{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.75rem;margin-top:auto;padding-top:.4rem;display:flex}.tint-ee{--tint:var(--lavender)}.tint-basic{--tint:var(--mint)}.tint-other{--tint:var(--warm)}.no-link{color:var(--faint);font-size:.92rem}.tool-list{gap:.75rem;margin:0;padding:0;list-style:none;display:grid}.tool-row{grid-template-columns:auto minmax(0,1fr);align-items:center;gap:.4rem 1rem;padding:1.1rem 1.25rem;display:grid}.tool-icon{background:var(--mint);width:52px;height:52px;color:var(--ok);border-radius:14px;place-items:center;display:grid;overflow:hidden}.tool-icon img{object-fit:cover;width:100%;height:100%}.tool-row h3{font-size:1.1rem}.tool-row .desc{color:var(--muted);font-size:.97rem}.tool-row details{color:var(--muted);margin-top:.3rem;font-size:.93rem}.tool-row summary{cursor:pointer;color:var(--link);font-weight:600}.tool-row .side{flex-wrap:wrap;grid-column:1/-1;justify-content:space-between;align-items:center;gap:1rem;display:flex}@media (min-width:760px){.tool-row{grid-template-columns:auto minmax(0,1fr) auto}.tool-row .side{grid-column:auto;justify-content:flex-end}}.about-band{align-items:center;gap:1.5rem;padding:2rem;display:grid}.about-band .lead{font-size:clamp(1.2rem,1rem + .8vw,1.5rem);font-weight:500;line-height:1.7}.about-band .avatar-sm{background:var(--lavender);border-radius:50%;place-items:end center;width:96px;height:96px;display:grid;overflow:hidden}@media (min-width:760px){.about-band{grid-template-columns:auto 1fr;gap:2.25rem;padding:2.5rem}}.contact-band{border-radius:var(--radius-lg);background:var(--primary);color:var(--on-primary);gap:1.25rem;margin-top:4.5rem;padding:2.5rem 2rem;display:grid;position:relative;overflow:hidden}.contact-band h2{color:inherit;font-size:clamp(1.5rem,1.1rem + 1.5vw,2.1rem)}.contact-band .links{flex-wrap:wrap;gap:.6rem;display:flex}.contact-band .links a{background:color-mix(in srgb, var(--on-primary) 12%, transparent);min-height:44px;color:inherit;border:1px solid color-mix(in srgb, var(--on-primary) 25%, transparent);border-radius:999px;align-items:center;padding:.5rem 1.1rem;font-weight:600;text-decoration:none;display:inline-flex}.contact-band .links a:hover{background:color-mix(in srgb, var(--on-primary) 20%, transparent)}.contact-band svg.deco{opacity:.18;pointer-events:none;width:18rem;position:absolute;bottom:-1rem;right:-2rem}@media (min-width:760px){.contact-band{grid-template-columns:1fr auto;align-items:center;padding:3rem}}.filters{gap:1rem;margin-bottom:2rem;display:grid}.search{border:1px solid var(--line);background:var(--surface) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' fill='none' stroke='%238a91a3' stroke-width='2' stroke-linecap='round' viewBox='0 0 24 24'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cpath d='m20 20-3.5-3.5'/%3E%3C/svg%3E") no-repeat 1rem center;width:100%;min-height:48px;font:inherit;color:var(--ink);border-radius:999px;padding:.6rem 1rem .6rem 2.75rem}.search:focus{outline:2px solid var(--accent-line);outline-offset:1px}.pills{flex-wrap:wrap;gap:.5rem;display:flex}.pill{border:1px solid var(--line);background:var(--surface);min-height:40px;color:var(--muted);font:inherit;cursor:pointer;border-radius:999px;padding:.35rem 1rem;font-size:.95rem;font-weight:500;transition:all .15s}.pill:hover{color:var(--ink);border-color:var(--faint)}.pill[aria-pressed=true]{background:var(--primary);border-color:var(--primary);color:var(--on-primary)}@media (min-width:760px){.filters{grid-template-columns:minmax(16rem,22rem) 1fr;align-items:center}}.empty{text-align:center;color:var(--muted);border:1px dashed var(--line);border-radius:var(--radius-lg);background:var(--surface);padding:2.75rem 1.5rem}.empty strong{color:var(--ink);margin-bottom:.3rem;display:block}.alert{border-radius:var(--radius);background:var(--danger-soft);color:var(--danger);padding:.9rem 1.1rem}.skeleton{border-radius:var(--radius-lg);background:linear-gradient(90deg, var(--surface-2), var(--surface), var(--surface-2));background-size:200% 100%;min-height:220px;animation:1.4s infinite shimmer}@keyframes shimmer{to{background-position:-200% 0}}.about-grid{gap:2.5rem;display:grid}@media (min-width:900px){.about-grid{grid-template-columns:17rem minmax(0,1fr)}}.avatar{background:var(--lavender);border-radius:50%;place-items:end center;width:168px;height:168px;display:grid;overflow:hidden}.avatar img{object-fit:cover;width:100%;height:100%}.timeline{border-left:2px solid var(--line);margin:0;padding:0;list-style:none}.timeline li{padding:0 0 1.5rem 1.4rem;position:relative}.timeline li:before{content:"";background:var(--bg);border:3px solid var(--primary);border-radius:50%;width:12px;height:12px;position:absolute;top:.55rem;left:-7px}.timeline .period{color:var(--faint);font-size:.92rem}.prose{max-width:44rem}.prose h2{margin:2.25rem 0 .7rem;font-size:1.3rem}.prose p{color:var(--muted)}.detail-cover{border-radius:var(--radius-lg);border:1px solid var(--line);background:var(--surface-2);margin-block:.5rem 2.5rem;overflow:hidden}.gallery{grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:1.25rem;margin-top:1rem;display:grid}.gallery figure{margin:0}.gallery img{border-radius:var(--radius);border:1px solid var(--line)}.gallery figcaption{color:var(--faint);margin-top:.4rem;font-size:.88rem}.facts{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);grid-template-columns:repeat(auto-fit,minmax(9rem,1fr));gap:.75rem 1.5rem;max-width:44rem;padding:1.1rem 1.25rem;display:grid}.facts dt{color:var(--faint);font-size:.85rem}.facts dd{margin:0;font-weight:600}.site-footer{border-top:1px solid var(--line);color:var(--muted);margin-top:4.5rem;padding-block:2.5rem 7rem;font-size:.97rem}.footer-grid{gap:2rem;display:grid}@media (min-width:760px){.footer-grid{grid-template-columns:1.6fr 1fr 1fr}}.site-footer h2{color:var(--faint);margin-bottom:.6rem;font-size:.95rem;font-weight:500}.site-footer ul{gap:.35rem;margin:0;padding:0;list-style:none;display:grid}.site-footer a{color:var(--ink);text-decoration:none}.site-footer a:hover{color:var(--link);text-decoration:underline}.link-btn{font:inherit;color:var(--link);cursor:pointer;text-underline-offset:4px;background:0 0;border:0;padding:0;text-decoration:underline}.mascot svg{display:block;overflow:visible}.mascot .arm-r{transform-box:view-box;transform-origin:164px 196px;transition:transform .35s var(--ease)}.mascot[data-state=wave] .arm-r{animation:.5s ease-in-out 5 alternate wave;transform:rotate(-150deg)}.mascot[data-state=point] .arm-r{transform:rotate(-115deg)}.mascot[data-state=happy] .arm-r{transform:rotate(-160deg)}.mascot[data-state=happy] .bot{animation:.45s ease-out 2 hop}.mascot .eye-happy{display:none}.mascot[data-state=happy] .eye-happy,.mascot[data-state=wave] .eye-happy{display:block}.mascot[data-state=happy] .eye-open,.mascot[data-state=wave] .eye-open{display:none}.mascot[data-still=true] *{transition:none!important;animation:none!important}@keyframes wave{0%{transform:rotate(-165deg)}to{transform:rotate(-130deg)}}@keyframes hop{50%{transform:translateY(-8px)}}.helper{z-index:50;flex-direction:column;align-items:flex-end;gap:.6rem;display:flex;position:fixed;bottom:1rem;right:1rem}.helper-btn{border:1px solid var(--line);background:var(--lavender);width:60px;height:60px;box-shadow:var(--shadow-md);cursor:pointer;border-radius:50%;place-items:end center;padding:0;display:grid;overflow:hidden}.helper-panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg);width:min(19rem,100vw - 2rem);box-shadow:var(--shadow-md);padding:1.1rem}.helper-panel p{color:var(--muted);margin-bottom:.75rem;font-size:.97rem}.helper-links{gap:.4rem;margin-bottom:.75rem;display:grid}.helper-links a{background:var(--surface-2);color:var(--ink);border-radius:12px;padding:.6rem .85rem;font-weight:600;text-decoration:none;display:block}.helper-links a:hover{background:var(--lavender)}.helper-tools{border-top:1px solid var(--line);flex-wrap:wrap;gap:.4rem;padding-top:.75rem;display:flex}@media (max-width:640px){.helper-btn{width:52px;height:52px}}.highlights{grid-template-columns:repeat(auto-fit,minmax(min(100%,17rem),1fr));gap:.75rem;margin:.5rem 0 0;padding:0;list-style:none;display:grid}.highlights li{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);align-items:flex-start;gap:.8rem;padding:1rem 1.1rem;display:flex}.highlights b{font-weight:600;line-height:1.5;display:block}.highlights small{color:var(--muted);margin-top:.15rem;font-size:.88rem;display:block}.hl-icon{background:var(--warm);width:36px;height:36px;color:var(--ink);border-radius:10px;flex:none;place-items:center;display:grid}.hl-more{margin-top:.85rem}.section-title{margin-bottom:1.25rem;font-size:clamp(1.4rem,1.15rem + 1vw,1.8rem)}.entry-grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,19rem),1fr));gap:1rem;display:grid}.entry{align-items:center;gap:1rem;padding:1.15rem 1.3rem;text-decoration:none;display:flex}.entry>span:nth-child(2){flex:1;min-width:0}.entry b{color:var(--ink);font-size:1.08rem;display:block}.entry small{color:var(--muted);font-size:.92rem;display:block}.entry svg:last-child{color:var(--link);transition:transform .18s var(--ease)}.entry:hover svg:last-child{transform:translate(3px)}.entry-icon{background:var(--tint);width:48px;height:48px;color:var(--ink);border-radius:14px;flex:none;place-items:center;display:grid}.profile-head{align-items:center;gap:1.5rem;padding-block:3rem 1rem;display:grid}@media (min-width:760px){.profile-head{grid-template-columns:auto 1fr;gap:2.25rem}}.profile-head h1{font-size:clamp(1.9rem,1.4rem + 2vw,2.7rem);font-weight:600}.profile-field{color:var(--primary);font-weight:600}.profile-bio{color:var(--body-strong);max-width:42rem}.profile-jump{flex-wrap:wrap;gap:.5rem;margin-top:.5rem;display:flex}.profile-jump a{border:1px solid var(--line);background:var(--surface);min-height:40px;color:var(--ink);border-radius:999px;align-items:center;padding:.3rem .95rem;font-size:.95rem;font-weight:500;text-decoration:none;display:inline-flex}.profile-jump a:hover{border-color:var(--faint)}.profile-section{padding-top:2.75rem;scroll-margin-top:5rem}.profile-section>h2{margin-bottom:1.1rem;font-size:clamp(1.4rem,1.15rem + 1vw,1.8rem)}.exp-title{margin-bottom:1rem;font-size:1.12rem}.exp-group .timeline h4{margin:0;font-size:1.02rem;font-weight:600;line-height:1.5}.skill-list{grid-template-columns:repeat(auto-fit,minmax(min(100%,16rem),1fr));gap:.75rem;margin:0;padding:0;list-style:none;display:grid}.skill-list li{gap:.2rem;padding:.9rem 1.1rem;display:grid}.skill-works{color:var(--muted);font-size:.9rem}.tag-lg{padding:.3rem .85rem;font-size:.95rem}.contact-list{flex-wrap:wrap;gap:.6rem;margin:0;padding:0;list-style:none;display:flex}.owner-link{font-size:.88rem;color:var(--faint)!important}.thumb-btn{cursor:zoom-in;border-radius:var(--radius);background:0 0;border:0;width:100%;padding:0;display:block}.thumb-btn img{aspect-ratio:4/3;object-fit:cover;width:100%}dialog.lightbox{border-radius:var(--radius);background:var(--surface);max-width:min(92vw,70rem);max-height:92vh;color:var(--ink);border:0;padding:0;overflow:auto}dialog.lightbox::backdrop{background:#080a14cc}dialog.lightbox figure{margin:0}dialog.lightbox img{width:auto;max-height:84vh;margin:0 auto}dialog.lightbox figcaption{color:var(--muted);padding:.75rem 1rem}.lightbox-close{position:absolute;top:.6rem;right:.6rem}.exp-groups{gap:1.5rem;display:grid}@media (min-width:900px){.exp-groups{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start}}.exp-group{padding:1.5rem 1.5rem .5rem}.exp-group h2{margin-bottom:1.1rem;font-size:1.2rem}.exp-group .timeline h3{font-size:1.02rem;font-weight:600;line-height:1.5}.exp-group .period{flex-wrap:wrap;align-items:center;gap:.5rem;margin-bottom:.15rem;display:flex}.exp-group .org{color:var(--muted);font-size:.95rem}.exp-group .timeline p{color:var(--muted);margin-top:.3rem;font-size:.95rem}.stage-label{color:var(--primary);font-weight:600}.notfound{text-align:center;justify-items:center;gap:1rem;padding-block:4rem;display:grid}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.001ms!important;animation-duration:.001ms!important;animation-iteration-count:1!important}.js .reveal{opacity:1;transform:none}}
