:root{--bg-primary:#fff;--bg-secondary:#f6f6f4;--bg-tertiary:#ededeb;--bg-panel:#fff;--bg-header:hsla(0,0%,100%,.92);--bg-footer:#f6f6f4;--bg-overlay:hsla(0,0%,9%,.5);--text-primary:#171717;--text-secondary:#4a4a4a;--text-tertiary:#6b6b6b;--text-inverse:#fff;--text-on-brand:#fff;--border-color:#e5e5e3;--border-color-strong:rgba(6,182,212,.35);--border-subtle:hsla(0,0%,9%,.08);--hover-bg:rgba(14,116,144,.06);--hover-bg-strong:rgba(14,116,144,.12);--accent-primary:#06b6d4;--accent-primary-hover:#0891b2;--accent-primary-soft:#ecfeff;--accent-success:#10b981;--accent-warning:#f59e0b;--accent-danger:#ef4444;--accent-info:#3b82f6;--link:#0e7490;--link-hover:#155e75;--accent-ink:#0e7490;--accent-ink-soft:#e6f6f9;--focus-ring:0 0 0 3px rgba(14,116,144,.35);--code-bg:#1f1f1f;--code-text:#e5e5e3;--shadow-sm:0 1px 2px rgba(15,23,42,.04);--shadow-md:0 4px 12px rgba(15,23,42,.06);--shadow-lg:0 12px 24px rgba(15,23,42,.08);--shadow-xl:0 24px 48px rgba(15,23,42,.1);--shadow-brand:0 8px 24px rgba(6,182,212,.3);--shadow-brand-soft:0 4px 16px rgba(6,182,212,.18)}*,:after,:before{box-sizing:border-box}body,html{margin:0;padding:0}html{scroll-behavior:smooth}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}body{background-color:var(--bg-primary);color:var(--text-primary);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang TC,Microsoft JhengHei,Noto Sans TC,sans-serif;font-size:15px;line-height:1.6;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}a{color:var(--link);text-decoration:none;transition:color .15s ease-out}a:hover{color:var(--link-hover)}::-moz-selection{background:var(--link);color:var(--text-inverse)}::selection{background:var(--link);color:var(--text-inverse)}:focus-visible{outline:2px solid var(--link);outline-offset:2px}img{display:block;max-width:100%}button{font-family:inherit}h1,h2,h3,h4,h5,h6{color:var(--text-primary);font-weight:700;letter-spacing:-.01em;line-height:1.25;margin-top:0}.container{margin:0 auto;max-width:1440px;padding:0 24px}@media (max-width:768px){.container{padding:0 16px}}.sr-only,.visually-hidden{height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;clip:rect(0,0,0,0);border:0;white-space:nowrap}:where(.front){font-size:16px;line-height:1.75}:where(.front) .btn{align-items:center;border:1px solid transparent;border-radius:10px;cursor:pointer;display:inline-flex;font-size:16px;font-weight:600;gap:8px;justify-content:center;line-height:1.25;min-height:44px;padding:12px 20px;text-decoration:none;transition:color .15s ease-out,background-color .15s ease-out,border-color .15s ease-out}:where(.front) .btn-primary,:where(.front) .btn-primary:hover{color:var(--text-inverse)}:where(.front) .btn-primary{background:var(--link)}:where(.front) .btn-primary:hover{background:var(--link-hover)}:where(.front) .btn-secondary,:where(.front) .btn-secondary:hover{color:var(--text-primary)}:where(.front) .btn-secondary{background:transparent;border-color:var(--border-color)}:where(.front) .btn-secondary:hover{background:var(--hover-bg);border-color:var(--text-tertiary)}:where(.front) .btn-lg{font-size:17px;padding:14px 26px}:where(.front) .link-arrow{align-items:center;color:var(--link);display:inline-flex;font-weight:600;gap:6px;min-height:44px;text-decoration:none}:where(.front) .link-arrow .app-icon{transition:transform .15s ease-out}:where(.front) .link-arrow:hover{color:var(--link-hover);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:.18em}:where(.front) .link-arrow:hover .app-icon{transform:translate(2px)}:where(.front) .link-arrow.is-back:hover .app-icon{transform:translate(-2px)}:where(.front) .page-head{margin-bottom:clamp(40px,6vw,72px)}:where(.front) .page-head h1{font-size:clamp(40px,6vw,88px);margin:0}:where(.front) .page-head .lead{color:var(--text-secondary);font-size:clamp(17px,1.5vw,20px);line-height:1.65;margin:16px 0 0;max-width:36em}:where(.front) .section,:where(.front) .section-alt{padding-block:clamp(64px,9vw,120px)}:where(.front) .section:first-child{padding-top:clamp(40px,6vw,72px)}:where(.front) .section-alt{background:var(--bg-secondary)}:where(.front) .section-head{margin-bottom:48px}:where(.front) .section-head h2{font-size:clamp(32px,4.2vw,56px);margin:0}:where(.front) .section-head .sub{color:var(--text-secondary);font-size:17px;margin:12px 0 0;max-width:36em}:where(.front) .prose{color:var(--text-primary);font-size:17px;line-height:1.85;max-width:72ch}:where(.front) .prose>:first-child{margin-top:0}:where(.front) .prose>:last-child{margin-bottom:0}:where(.front) .prose h2{font-size:28px;margin:48px 0 16px}:where(.front) .prose h3{font-size:clamp(26px,2.4vw,34px);margin:32px 0 12px}:where(.front) .prose p{margin:0 0 1.2em}:where(.front) .prose ol,:where(.front) .prose ul{margin:0 0 1.2em;padding-left:1.4em}:where(.front) .prose li{margin:6px 0}:where(.front) .prose a{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:.18em}:where(.front) .prose blockquote{border-left:3px solid var(--border-color);color:var(--text-secondary);margin:0 0 1.2em;padding-left:16px}:where(.front) .prose code{background:var(--bg-secondary);border-radius:4px;font-family:SFMono-Regular,Consolas,Liberation Mono,monospace;font-size:.9em;padding:2px 6px}:where(.front) .prose pre{background:var(--code-bg);border-radius:10px;color:var(--code-text);line-height:1.6;margin:0 0 1.2em;overflow:auto;padding:20px}:where(.front) .prose pre code{background:none;border-radius:0;color:inherit;padding:0}:where(.front) .prose img{border-radius:10px;margin:24px 0}:where(.front) .prose table{border-collapse:collapse;font-size:16px;margin:0 0 1.2em;width:100%}:where(.front) .prose td,:where(.front) .prose th{border:1px solid var(--border-color);padding:8px 12px;text-align:left}:where(.front) .prose th{background:var(--bg-secondary);font-weight:600}:where(.front) .prose hr{border:0;border-top:1px solid var(--border-color);margin:40px 0}:where(.front) .chip{align-items:center;background:var(--bg-secondary);border-radius:999px;color:var(--text-secondary);display:inline-flex;font-size:13px;line-height:1.5;padding:3px 10px;white-space:nowrap}:where(.front) .chip-teal{background:var(--accent-ink-soft);color:var(--accent-ink)}:where(.front) .hairline-list{list-style:none;margin:0;padding:0}:where(.front) .hairline-list>li{border-top:1px solid var(--border-color);padding-block:20px}:where(.front) .hairline-list>li:last-child{border-bottom:1px solid var(--border-color)}:where(.front) .scenario-list>li{padding-block:0}:where(.front) .scenario-list a{align-items:center;color:var(--text-primary);display:flex;font-size:17px;gap:16px;justify-content:space-between;line-height:1.5;min-height:44px;padding:18px 12px;text-decoration:none;transition:background-color .15s ease-out}:where(.front) .scenario-list a .app-icon{color:var(--text-tertiary);transition:color .15s ease-out,transform .15s ease-out}:where(.front) .scenario-list a:hover{background:var(--hover-bg);color:var(--text-primary)}:where(.front) .scenario-list a:hover .app-icon{color:var(--link);transform:translate(2px)}:where(.front) .checks{list-style:none;margin:0;padding:0}:where(.front) .checks li{align-items:flex-start;display:flex;font-size:16px;gap:10px;padding:6px 0}:where(.front) .checks .app-icon{color:var(--link);margin-top:.2em}:where(.front) .tabs{display:flex;gap:24px;margin:0 -4px 40px;overflow-x:auto;padding:4px;scrollbar-width:none}:where(.front) .tabs::-webkit-scrollbar{display:none}:where(.front) .tabs button{background:none;border:0;border-bottom:2px solid transparent;border-radius:0;color:var(--text-secondary);cursor:pointer;flex-shrink:0;font-size:16px;min-height:44px;padding:8px 2px;transition:color .15s ease-out,border-color .15s ease-out;white-space:nowrap}:where(.front) .tabs button:hover{color:var(--text-primary)}:where(.front) .tabs button.active{border-bottom-color:var(--text-primary);color:var(--text-primary);font-weight:600}:where(.front) .work-grid{display:grid;gap:28px;grid-template-columns:repeat(3,minmax(0,1fr));list-style:none;margin:0;padding:0}@media (max-width:1024px){:where(.front) .work-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:640px){:where(.front) .work-grid{grid-template-columns:minmax(0,1fr)}}:where(.front) .work-card{align-items:flex-start;color:var(--text-primary);display:flex;flex-direction:column;text-decoration:none}:where(.front) .work-card .cover{aspect-ratio:16/10;background:var(--bg-secondary);border-radius:12px;-o-object-fit:cover;object-fit:cover;outline:1px solid transparent;transition:outline-color .15s ease-out;width:100%}:where(.front) .work-card .chip{margin-top:16px}:where(.front) .work-card :is(h2,h3){font-size:20px;margin:10px 0 0;transition:color .15s ease-out}:where(.front) .work-card p{color:var(--text-secondary);display:-webkit-box;font-size:15px;margin:6px 0 0;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;overflow:hidden}:where(.front) .work-card:hover{color:var(--text-primary)}:where(.front) .work-card:hover :is(h2,h3){color:var(--link)}:where(.front) .work-card:hover .cover{outline-color:var(--text-tertiary)}:where(.front),body.is-front{--bg:#0f1416;--bg-2:#141a1d;--card:#171e21;--card-2:#1a2326;--line:hsla(120,7%,92%,.1);--grid:hsla(120,7%,92%,.05);--fg:#e9ece9;--fg-2:#9aa4a2;--fg-3:#6f7977;--acc:#22e0c9;--acc-ink:#0f1416;--acc-soft:rgba(34,224,201,.08);--sand:#d9c69c;--sand-ink:#141a1d;--glow:0 0 40px rgba(34,224,201,.35);--focus:0 0 0 2px var(--acc);--acc-line:rgba(34,224,201,.4);--bg-glass:rgba(15,20,22,.88);--bg-glass-strong:rgba(15,20,22,.92);--bg-deep:#0a0e10;--device:#2a3338;--shadow-deep:0 40px 100px rgba(0,0,0,.55);--watermark:hsla(120,7%,92%,.06);--bg-primary:var(--bg);--bg-secondary:var(--bg-2);--bg-tertiary:var(--card);--bg-panel:var(--card);--bg-header:var(--bg-glass);--bg-footer:var(--bg);--text-primary:var(--fg);--text-secondary:var(--fg-2);--text-tertiary:var(--fg-3);--text-inverse:var(--acc-ink);--text-on-brand:var(--acc-ink);--border-color:var(--line);--border-subtle:var(--line);--hover-bg:var(--acc-soft);--hover-bg-strong:var(--acc-soft);--link:var(--acc);--link-hover:var(--fg);--accent-ink:var(--acc);--accent-ink-soft:var(--acc-soft);--focus-ring:var(--focus);--code-bg:var(--bg-deep);--code-text:var(--acc);background:var(--bg);color:var(--fg);color-scheme:dark;font-size:16px;line-height:1.8}:where(.front) .in{margin-inline:auto;width:min(1440px,100% - 10vw)}:where(.front) .sec{padding-block:clamp(72px,9vw,128px)}:where(.front) .sec-sm{padding-block:clamp(48px,6vw,80px)}:where(.front) .hairline{border-block:1px solid var(--line)}:where(.front) .prose-dark{color:var(--fg-2);font-size:16px;line-height:1.95;max-width:72ch}:where(.front) .prose-dark>:first-child{margin-top:0}:where(.front) .prose-dark>:last-child{margin-bottom:0}:where(.front) .prose-dark h2,:where(.front) .prose-dark h3,:where(.front) .prose-dark h4{color:var(--fg);line-height:1.35}:where(.front) .prose-dark h2{font-size:28px;font-weight:900;margin:48px 0 14px}:where(.front) .prose-dark h3{font-size:22px;font-weight:700;margin:32px 0 12px}:where(.front) .prose-dark p{margin:0 0 16px}:where(.front) .prose-dark b,:where(.front) .prose-dark strong{color:var(--fg)}:where(.front) .prose-dark ol,:where(.front) .prose-dark ul{margin:0 0 16px;padding-left:1.2em}:where(.front) .prose-dark ul{list-style:square}:where(.front) .prose-dark li{margin:6px 0}:where(.front) .prose-dark li::marker{color:var(--acc)}:where(.front) .prose-dark a{color:var(--acc);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:.18em}:where(.front) .prose-dark a:hover{color:var(--fg)}:where(.front) .prose-dark blockquote{background:var(--card);border-left:2px solid var(--acc);color:var(--fg);margin:20px 0;padding:14px 20px}:where(.front) .prose-dark blockquote>:last-child{margin-bottom:0}:where(.front) .prose-dark code{background:var(--card);border-radius:4px;color:var(--acc);font-family:JetBrains Mono,Consolas,Courier New,monospace;font-size:.875em;padding:2px 6px}:where(.front) .prose-dark pre{background:var(--bg-deep);border:1px solid var(--line);border-radius:10px;color:var(--acc);font-family:JetBrains Mono,Consolas,Courier New,monospace;font-size:13px;line-height:1.7;margin:0 0 16px;overflow:auto;padding:16px 18px}:where(.front) .prose-dark pre code{background:none;border-radius:0;color:inherit;font-size:inherit;padding:0}:where(.front) .prose-dark img{border-radius:10px;margin:24px 0}:where(.front) .prose-dark table{border-collapse:collapse;font-size:15px;margin:0 0 16px;width:100%}:where(.front) .prose-dark td,:where(.front) .prose-dark th{border:1px solid var(--line);padding:8px 12px;text-align:left}:where(.front) .prose-dark th{background:var(--card);color:var(--fg);font-weight:600}:where(.front) .prose-dark hr{border:0;border-top:1px solid var(--line);margin:40px 0}.front-btn[data-v-07f167c3]{align-items:center;border:1px solid transparent;border-radius:999px;cursor:pointer;display:inline-flex;font-size:15px;font-weight:700;gap:10px;justify-content:center;line-height:1.25;min-height:44px;padding:0 22px;text-align:center;text-decoration:none;transition:color .15s cubic-bezier(.23,1,.32,1),background-color .15s cubic-bezier(.23,1,.32,1),border-color .15s cubic-bezier(.23,1,.32,1),box-shadow .15s cubic-bezier(.23,1,.32,1),transform .15s cubic-bezier(.23,1,.32,1);white-space:nowrap}.front-btn[data-v-07f167c3]:active:not(:disabled):not([aria-disabled=true]){transform:scale(.97)}.front-btn[data-v-07f167c3]:focus-visible{outline:2px solid var(--acc);outline-offset:3px}.front-btn[data-v-07f167c3]:disabled,.front-btn[aria-disabled=true][data-v-07f167c3]{box-shadow:none;cursor:not-allowed;opacity:.45}.size-lg[data-v-07f167c3]{font-size:16px;min-height:50px;padding:0 26px}.is-block[data-v-07f167c3]{display:flex;width:100%}.is-primary[data-v-07f167c3],.is-primary[data-v-07f167c3]:hover{color:var(--acc-ink)}.is-primary[data-v-07f167c3]{background:var(--acc);box-shadow:var(--glow)}.is-primary[data-v-07f167c3]:hover:not(:disabled){background:var(--fg)}.is-ghost[data-v-07f167c3],.is-ghost[data-v-07f167c3]:hover{color:var(--fg)}.is-ghost[data-v-07f167c3]{background:transparent;border-color:var(--line)}.is-ghost[data-v-07f167c3]:hover:not(:disabled){background:var(--acc-soft);border-color:var(--fg-2)}.is-line[data-v-07f167c3]{background:transparent;border-color:var(--acc);color:var(--acc);font-family:JetBrains Mono,Consolas,Courier New,monospace;font-size:13px;font-weight:400;font-weight:600;letter-spacing:.12em;line-height:1.6;text-transform:uppercase}.is-line[data-v-07f167c3]:hover:not(:disabled){background:var(--acc);color:var(--acc-ink)}@media (prefers-reduced-motion:reduce){.front-btn[data-v-07f167c3]{transition:color .15s cubic-bezier(.23,1,.32,1),background-color .15s cubic-bezier(.23,1,.32,1),border-color .15s cubic-bezier(.23,1,.32,1)}.front-btn[data-v-07f167c3]:active:not(:disabled):not([aria-disabled=true]){transform:none}}.front-grid-bg[data-v-2009bb0e]{background-image:linear-gradient(var(--grid) 1px,transparent 1px),linear-gradient(90deg,var(--grid) 1px,transparent 1px);background-size:96px 96px}.error-page[data-v-b44fdd8c]{align-items:center;display:flex;justify-content:center;min-height:100vh;padding:24px}.error-card[data-v-b44fdd8c]{max-width:40em;text-align:center;width:100%}.error-code[data-v-b44fdd8c]{color:var(--sand);font-family:Chakra Petch,Noto Sans TC,PingFang TC,Microsoft JhengHei,sans-serif;font-size:clamp(44px,8.6vw,128px);font-weight:700;letter-spacing:.04em;line-height:1}.error-title[data-v-b44fdd8c]{color:var(--fg);font-size:clamp(26px,2.4vw,34px);font-weight:900;margin:24px 0 12px}.error-message[data-v-b44fdd8c]{color:var(--fg-2);font-size:16px;line-height:1.8;margin:0 0 32px}.error-actions[data-v-b44fdd8c]{display:flex;flex-wrap:wrap;gap:12px;justify-content:center}
