:root{--color-bg:#070707;--color-surface:#141414;--color-surface-2:#0d0d0d;--color-border:#232323;--color-border-2:#2a2a2a;--color-divider:#1f1f1f;--color-text:#fafafa;--color-text-2:#a3a3a3;--color-text-3:#737373;--color-text-4:#525252;--color-accent:#fafafa;--color-accent-fg:#0a0a0a;--color-success:#4ade80;--font-sans:"Inter", "SF Pro Text", -apple-system, system-ui, "PingFang TC", "Noto Sans TC", sans-serif;--font-mono:"JetBrains Mono", "SF Mono", "Menlo", ui-monospace, monospace;--text-xs:11px;--text-sm:12px;--text-base:13px;--text-lg:15px;--text-xl:18px;--radius-sm:6px;--radius-md:8px;--radius-lg:12px;--transition-fast:80ms ease-out;--transition-base:.14s ease-out}@media (prefers-color-scheme:light){:root{--color-bg:#fafafa;--color-surface:#fff;--color-surface-2:#f4f4f4;--color-border:#e5e5e5;--color-border-2:#d9d9d9;--color-divider:#ececec;--color-text:#0a0a0a;--color-text-2:#525252;--color-text-3:#737373;--color-text-4:#a3a3a3;--color-accent:#0a0a0a;--color-accent-fg:#fafafa;--color-success:#16a34a}}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}button{font:inherit;cursor:pointer;color:inherit;background:0 0;border:0;padding:0}input,textarea{font:inherit}a{color:inherit}body{background:var(--color-bg);color:var(--color-text);font:var(--text-base)/1.6 var(--font-sans);-webkit-font-smoothing:antialiased}::selection{background:var(--color-text);color:var(--color-bg)}a{text-decoration:none}.mono{font-family:var(--font-mono)}.label{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--color-text-3);letter-spacing:.08em;text-transform:uppercase}.site{flex-direction:column;min-height:100dvh;display:flex}.site-inner{width:100%;max-width:1600px;margin:0 auto;padding:0 48px}.site-main{flex:1;padding:72px 0 96px}.site-header{border-bottom:1px solid var(--color-divider)}.site-header .site-inner{justify-content:space-between;align-items:center;height:56px;display:flex}.wordmark{font-family:var(--font-mono);font-size:var(--text-sm);letter-spacing:-.01em;align-items:center;gap:10px;font-weight:500;display:inline-flex}.nav{gap:20px;display:flex}.nav a{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--color-text-3);transition:color var(--transition-fast)}.nav a:hover{color:var(--color-text)}.site-footer{border-top:1px solid var(--color-divider)}.site-footer .site-inner{justify-content:space-between;align-items:center;gap:16px;padding-top:22px;padding-bottom:22px;display:flex}.footer-links{flex-wrap:wrap;gap:18px;display:flex}.footer-links a{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--color-text-3);transition:color var(--transition-fast);align-items:center;gap:6px;display:inline-flex}.footer-links a:hover{color:var(--color-text)}.hero h1{letter-spacing:-.03em;margin:0 0 14px;font-size:40px;font-weight:600;line-height:1.15}.hero p{font-size:var(--text-lg);color:var(--color-text-2);max-width:560px;margin:0}.section{margin-top:72px}.section-head{justify-content:space-between;align-items:baseline;margin-bottom:18px;display:flex}.project-grid{grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:14px;display:grid}.project-card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);transition:border-color var(--transition-base), transform var(--transition-base);flex-direction:column;gap:6px;padding:22px 24px;display:flex}.project-card:hover{border-color:var(--color-text-4);transform:translateY(-1px)}.project-card:hover .project-arrow{color:var(--color-text);transform:translate(2px,-2px)}.project-top{justify-content:space-between;align-items:center;gap:12px;display:flex}.project-title{font-size:var(--text-base);font-weight:600}.project-desc{font-size:var(--text-sm);color:var(--color-text-3)}.project-meta{justify-content:space-between;align-items:center;margin-top:14px;display:flex}.project-host{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--color-text-4)}.project-arrow{color:var(--color-text-4);transition:color var(--transition-fast), transform var(--transition-base)}.tag{font-family:var(--font-mono);color:var(--color-text-3);border:1px solid var(--color-border-2);white-space:nowrap;border-radius:9999px;padding:1px 7px;font-size:10px}.contact-row{flex-wrap:wrap;gap:10px;display:flex}.btn{border-radius:var(--radius-md);font-family:var(--font-mono);font-size:var(--text-sm);border:1px solid var(--color-border-2);color:var(--color-text);transition:border-color var(--transition-fast), background var(--transition-fast);align-items:center;gap:8px;padding:8px 16px;display:inline-flex}.btn:hover{border-color:var(--color-text-4)}.btn-primary{background:var(--color-accent);color:var(--color-accent-fg);border-color:var(--color-accent)}.btn-primary:hover{opacity:.9;border-color:var(--color-accent)}.back-link{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--color-text-3);align-items:center;gap:6px;margin-bottom:28px;display:inline-flex}.back-link:hover{color:var(--color-text)}.prose{max-width:760px;color:var(--color-text-2);font-size:14px;line-height:1.75}.prose h1{letter-spacing:-.02em;color:var(--color-text);margin:0 0 8px;font-size:28px;font-weight:600;line-height:1.2}.prose h1+p{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--color-text-3);margin-bottom:36px}.prose h2{font-size:var(--text-xl);color:var(--color-text);letter-spacing:-.01em;margin:44px 0 10px;font-weight:600}.prose h3{font-size:var(--text-lg);color:var(--color-text);margin:28px 0 8px;font-weight:600}.prose h4{font-size:var(--text-base);color:var(--color-text);margin:22px 0 6px;font-weight:600}.prose p{margin:0 0 14px}.prose ul,.prose ol{margin:0 0 14px;padding-left:1.3em}.prose li{margin-bottom:6px}.prose li>p{margin:0}.prose strong{color:var(--color-text);font-weight:600}.prose a{color:var(--color-text);text-underline-offset:3px;text-decoration:underline;-webkit-text-decoration-color:var(--color-text-4);text-decoration-color:var(--color-text-4)}@media (width<=720px){.site-inner{padding:0 16px}.site-main{padding:44px 0 64px}.hero h1{font-size:26px}.section{margin-top:52px}.project-grid{grid-template-columns:1fr}.site-footer .site-inner{flex-direction:column;align-items:flex-start}}
