@font-face{font-family:Sora;font-style:normal;font-weight:300 800;font-display:swap;src:url(/fonts/sora-v17-latin.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:Sora;font-style:normal;font-weight:300 800;font-display:swap;src:url(/fonts/sora-v17-latin-ext.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:JetBrains Mono;font-style:normal;font-weight:400 700;font-display:swap;src:url(/fonts/jetbrainsmono-v24-latin.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:JetBrains Mono;font-style:normal;font-weight:400 700;font-display:swap;src:url(/fonts/jetbrainsmono-v24-latin-ext.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 TC Headings;font-style:normal;font-weight:700;font-display:swap;src:url(/assets/noto-sans-tc-700-headings-CCF4MqZS.woff2)format("woff2")}:root{--font-display:"Sora", "Noto Sans TC Headings", "PingFang TC", "Microsoft JhengHei", "Noto Sans CJK TC", sans-serif;--font-mono:"JetBrains Mono", "PingFang TC", "Microsoft JhengHei", "Noto Sans CJK TC", monospace;--font-cjk:"PingFang TC", "Microsoft JhengHei", "Noto Sans CJK TC", "Sora", sans-serif;--bg-0:#070b10;--bg-1:#0b1117;--bg-2:#0f1620;--band:#0e1620;--bg-3:#18222f;--line:#1d2733;--line-2:#2a3a4d;--line-bright:var(--line-2);--ink-0:#eaf2fb;--ink-1:#a9bacc;--ink-2:#8193a8;--ink-3:#3a4a5c;--mint:#34e3c4;--mint-ink:#04201b;--indigo:#7c8cff;--warm:#ffb454;--accent:var(--mint);--accent-soft:#34e3c41f;--accent-line:#34e3c452;--accent-2:var(--indigo);--accent-warm:var(--warm);--danger:#ff6b6b;--paper:#f2eee6;--p-ink:#161b22;--p-ink-2:#4a4f57;--p-rule:#d8d0c2;--p-accent:#0a6b5b;--t-sm:.9375rem;--t-base:1.0625rem;--t-lg:1.25rem;--t-xl:clamp(1.375rem, 1.1rem + .9vw, 1.75rem);--t-h2:clamp(2rem, 1.3rem + 2.6vw, 3.25rem);--t-h1:clamp(2.5rem, 1.5rem + 3.4vw, 4rem);--maxw:1200px;--gutter:clamp(16px, 4.5vw, 64px);--nav-h:68px;--radius:14px;--radius-sm:9px;--r-lg:20px;--r-md:12px;--r-sm:8px;--sheet:48px;--ease:cubic-bezier(.25, 1, .5, 1);--ease-in:cubic-bezier(.5, 0, .75, 0);--ease-expo:cubic-bezier(.16, 1, .3, 1);--ease-in-out:cubic-bezier(.65, 0, .35, 1);--dur-press:80ms;--dur-fast:.15s;--dur-base:.25s;--dur-slow:.6s;--lightningcss-light: ;--lightningcss-dark:initial;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}@view-transition{navigation:auto}::view-transition-old(root){animation:vt-out .16s var(--ease-in) both}::view-transition-new(root){animation:vt-in .28s var(--ease) both}@keyframes vt-out{to{opacity:0}}@keyframes vt-in{0%{opacity:0;transform:translateY(8px)}}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth;scroll-padding-top:calc(var(--nav-h) + 12px);-webkit-text-size-adjust:100%}body{background:var(--bg-0);color:var(--ink-0);font-family:var(--font-cjk);line-break:strict;letter-spacing:.01em;overflow-wrap:break-word;-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;caret-color:var(--mint);font-weight:400;line-height:1.6;overflow-x:clip}html.cv main:not(.doc) section:not(:first-of-type):not(.no-cv){content-visibility:auto;contain-intrinsic-size:auto 1500px}:where(h1,h2,h3){text-wrap:balance}:where(h1,h2,h3,p,li){word-break:keep-all}:where(p,li){text-wrap:pretty}body:after{content:"";z-index:45;pointer-events:none;opacity:.06;background:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='180' height='180'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 1  0 0 0 0 1  0 0 0 0 1  0 0 0 .9 0'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>");position:fixed;inset:0}::selection{background:var(--mint);color:var(--mint-ink)}:focus-visible{outline:2px solid var(--mint);outline-offset:3px;border-radius:6px}a{color:inherit;text-decoration:none}button{cursor:pointer;font-family:inherit}img,svg{max-width:100%;display:block}::-webkit-scrollbar{width:11px;height:11px}::-webkit-scrollbar-track{background:var(--bg-0)}::-webkit-scrollbar-thumb{background:var(--bg-3);border:3px solid var(--bg-0);border-radius:99px}::-webkit-scrollbar-thumb:hover{background:var(--line-bright)}.wrap{width:100%;max-width:calc(var(--maxw) + 2 * var(--gutter));padding-inline:var(--gutter);margin-inline:auto}.section{padding-block:clamp(72px,11vw,140px);position:relative}.eyebrow{font-family:var(--font-mono);letter-spacing:.22em;text-transform:uppercase;color:var(--accent);align-items:center;gap:.6em;font-size:.72rem;font-weight:500;display:inline-flex}.eyebrow:before{content:"";background:var(--accent);opacity:.6;width:22px;height:1px}.section-title{font-family:var(--font-display);letter-spacing:-.02em;color:var(--ink-0);margin-top:18px;font-size:clamp(1.7rem,4vw,2.9rem);font-weight:700;line-height:1.1}.section-lead{max-width:56ch;color:var(--ink-1);margin-top:16px;font-size:clamp(.98rem,1.4vw,1.1rem)}.btn{min-height:48px;font:600 1rem/1 var(--font-cjk);letter-spacing:.01em;white-space:nowrap;cursor:pointer;transition:background-color var(--dur-fast) var(--ease), border-color var(--dur-fast) var(--ease), color var(--dur-fast) var(--ease), transform .22s var(--ease);border:1px solid #0000;border-radius:999px;justify-content:center;align-items:center;gap:10px;padding:0 22px;display:inline-flex}.btn:active,.press:active{transition-duration:var(--dur-press);transform:scale(.97)}.btn-primary{background:var(--mint);color:var(--mint-ink)}.btn-primary:hover{background:#5cebd2}.btn-quiet,.btn-ghost{color:var(--ink-0);border-color:var(--line-2);background:0 0}.btn-quiet:hover,.btn-ghost:hover{border-color:var(--ink-2);background:var(--bg-3)}.btn-ink{background:var(--p-ink);color:var(--paper)}.btn-ink:hover{background:#26303b}.btn .ico{width:1.15em;height:1.15em}.link{color:var(--ink-0);border-bottom:1px solid var(--line-2);transition:border-color var(--dur-fast) var(--ease);align-items:center;gap:8px;padding:4px 0;font-weight:600;display:inline-flex}.link:hover{border-color:var(--mint)}.link .ico{width:1em;height:1em;color:var(--ink-2)}@media (prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;animation-duration:.001ms!important}:not([data-reveal]){transition-duration:.001ms!important}.btn:active,.press:active{transform:none}@view-transition{navigation:none}}.panel{background:linear-gradient(180deg, var(--bg-1), var(--bg-2));border:1px solid var(--line);border-radius:var(--radius)}.tag{font-family:var(--font-mono);letter-spacing:.04em;color:var(--ink-1);background:var(--bg-2);border:1px solid var(--line);white-space:nowrap;border-radius:6px;padding:.28em .6em;font-size:.72rem}.ico{fill:none;stroke:currentColor;stroke-width:1.75px;stroke-linecap:round;stroke-linejoin:round;flex:none;width:1.15em;height:1.15em;display:inline-block}.checks{gap:10px;display:grid}.checks li{align-items:flex-start;gap:10px;display:flex}.checks .ico{color:var(--mint);width:1em;height:1em;margin-top:.35em}.stars{color:var(--warm);gap:2px;display:inline-flex}.stars .ico{fill:currentColor}.num{font-family:var(--font-mono);font-variant-numeric:tabular-nums;letter-spacing:-.02em;font-weight:500}.fig{font-family:var(--font-display);font-variant-numeric:tabular-nums lining-nums;letter-spacing:-.035em;font-weight:600}.sr-only{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}main.home{font-size:var(--t-base);line-height:1.8}main.home :where(h1,h2,h3,h4){font-family:var(--font-display);letter-spacing:-.01em;font-weight:700}main.home :where(ul,ol){list-style:none}.sec{isolation:isolate;padding-block:clamp(72px,8vw,112px);position:relative}.on-band{background:var(--band);border-block:1px solid var(--line)}.sec-head{grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:end;gap:24px 64px;margin-bottom:clamp(40px,5vw,64px);display:grid}.sec-head h2{font-size:var(--t-h2);line-height:1.2}.sec-head p{color:var(--ink-1);max-width:36em}.sec-links{flex-wrap:wrap;gap:8px 28px;margin-top:16px;display:flex}@media (width<=900px){.sec-head{grid-template-columns:minmax(0,1fr)}}.pool:before{content:"";z-index:-1;pointer-events:none;background:radial-gradient(var(--pool-size,640px 460px) at var(--pool-at,12% 8%), var(--pool), transparent 70%);position:absolute;inset:0}.pool-indigo{--pool:#7c8cff17}.pool-mint{--pool:#34e3c412;--pool-at:88% 14%}.pool-warm{--pool:#ffb4540f;--pool-at:18% 40%;--pool-size:720px 520px}@media print{[data-reveal]{opacity:1!important;transition:none!important;transform:none!important}}.skip[data-v-d7f29e35]{position:absolute;top:8px;left:-999px}.skip[data-v-d7f29e35]:focus{z-index:200;background:var(--mint);color:var(--mint-ink);border-radius:8px;padding:8px 14px;left:8px}.nav[data-v-d7f29e35]{z-index:100;-webkit-backdrop-filter:saturate(140%)blur(14px);transition:border-color .2s var(--ease);background:#070b10db;border-bottom:1px solid #0000;position:fixed;inset:0 0 auto}.nav.scrolled[data-v-d7f29e35]{border-bottom-color:var(--line)}.nav-in[data-v-d7f29e35]{height:var(--nav-h);align-items:center;gap:32px;display:flex}.brand[data-v-d7f29e35]{font:600 1.125rem/1 var(--font-display);letter-spacing:-.02em;align-items:center;gap:10px;display:inline-flex}.brand svg[data-v-d7f29e35]{width:28px;height:28px}.brand b[data-v-d7f29e35]{color:var(--mint);font-weight:600}.nav-links[data-v-d7f29e35]{font-size:var(--t-sm);color:var(--ink-1);gap:28px;margin-left:auto;display:flex}.nav-links a[data-v-d7f29e35]{transition:color .2s var(--ease);padding:8px 0;position:relative}.nav-links a[data-v-d7f29e35]:after{content:"";background:var(--mint);transform-origin:0;height:1.5px;transition:transform var(--dur-base) var(--ease);position:absolute;bottom:2px;left:0;right:0;transform:scaleX(0)}.nav-links a[data-v-d7f29e35]:hover{color:var(--ink-0)}.nav-links a[data-v-d7f29e35]:hover:after,.nav-links a[data-v-d7f29e35]:focus-visible:after{transform:scaleX(1)}.nav-cta[data-v-d7f29e35]{min-height:40px;font-size:var(--t-sm);padding:0 18px}.menu-btn[data-v-d7f29e35]{border:1px solid var(--line-2);width:44px;height:44px;color:var(--ink-0);transition:transform .22s var(--ease);background:0 0;border-radius:10px;justify-content:center;align-items:center;margin-left:auto;display:none}.menu-btn .ico[data-v-d7f29e35]{width:20px;height:20px}.sheet[data-v-d7f29e35]{display:none}@media (width<=900px){.nav-links[data-v-d7f29e35],.nav-cta[data-v-d7f29e35]{display:none}.menu-btn[data-v-d7f29e35]{display:inline-flex}.sheet[data-v-d7f29e35]{inset:var(--nav-h) 0 auto 0;padding:8px var(--gutter) 24px;background:var(--bg-0);border-bottom:1px solid var(--line);display:block;position:fixed}.sheet a[data-v-d7f29e35]{border-bottom:1px solid var(--line);padding:14px 0;font-size:1.0625rem;display:block}.sheet .btn[data-v-d7f29e35]{border-bottom:0;width:100%;margin-top:20px;font-size:1rem;display:flex}}@media (prefers-reduced-motion:reduce){.nav-links a[data-v-d7f29e35]:after{transition:none}}.foot[data-v-2da9c447]{border-top:1px solid var(--line);background:var(--bg-0);padding:48px 0 56px}.foot-in[data-v-2da9c447]{grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:28px 48px;display:grid}.brand[data-v-2da9c447]{font:600 1.125rem/1 var(--font-display);letter-spacing:-.02em}.brand b[data-v-2da9c447]{color:var(--mint);font-weight:600}.foot-name[data-v-2da9c447]{color:var(--ink-2);font-size:var(--t-sm);margin-top:12px}.foot-links[data-v-2da9c447]{font-size:var(--t-sm);color:var(--ink-1);flex-wrap:wrap;gap:8px 28px;display:flex}.foot-links a[data-v-2da9c447]{transition:color .2s var(--ease);padding:10px 0}.foot-links a[data-v-2da9c447]:hover{color:var(--ink-0)}.foot-copy[data-v-2da9c447]{color:var(--ink-2);grid-column:1/-1;font-size:.875rem}@media (width<=640px){.foot-in[data-v-2da9c447]{grid-template-columns:minmax(0,1fr)}}
