:root{--brand: #2E5BFF;--brand-dark: #1F3FCC;--brand-ink: #0F1A3D;--bg: #F5F8FF;--card-bg: #FFFFFF;--text: #0B1320;--muted: #4A5568;--border: rgba(46, 91, 255, .15);--sidebar-width: 240px;--sidebar-collapsed: 64px;--sidebar-gap: 24px}*{box-sizing:border-box}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans TC,PingFang TC,Hiragino Sans,Microsoft JhengHei,Arial,sans-serif;color:var(--text);background:var(--bg);overflow-x:hidden}.hero{padding:120px 20px 28px;text-align:center}.sub .hero.sub-hero{display:flex;align-items:center;justify-content:center;gap:16px;text-align:left;flex-wrap:wrap}.sub .hero.sub-hero .title{margin:0}.logo{width:96px;height:auto}.title{margin:16px auto 0;font-size:clamp(28px,5vw,56px);line-height:1.1;letter-spacing:.4px;background:linear-gradient(90deg,var(--brand) 0%,var(--brand-dark) 50%,var(--brand) 100%);background-size:200% 100%;-webkit-background-clip:text;background-clip:text;color:transparent}.page-shell{position:relative}.sidebar{position:fixed;left:var(--sidebar-gap);bottom:var(--sidebar-gap);width:var(--sidebar-width);background:var(--card-bg);border:1px solid var(--border);box-shadow:0 8px 24px #0f1a3d1f;border-radius:12px;padding:12px;display:flex;flex-direction:column;gap:6px;z-index:20;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);transition:width .22s ease,padding .22s ease}.sidebar{left:var(--sidebar-gap);bottom:var(--sidebar-gap);right:auto;top:auto;transform:none;max-height:calc(100vh - 48px);overflow:auto}.sidebar a{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:8px;color:inherit;text-decoration:none;font-size:14px;transition:background-color .2s,color .2s}.sidebar a.active,.sidebar a:hover{background:#2e5bff14;color:var(--brand-dark)}.sidebar .toggle{display:inline-flex;align-items:center;gap:8px;border:1px solid var(--border);background:linear-gradient(180deg,#ffffffe6,#ffffffbf);color:inherit;border-radius:10px;padding:8px 10px;cursor:pointer;font-size:14px}.sidebar .label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.icon{width:20px;height:20px;display:inline-flex;align-items:center;justify-content:center}.icon svg{width:20px;height:20px;stroke:currentColor;fill:none;stroke-width:1.8}.content{max-width:1024px;margin:0 auto;padding:0 28px 64px}.sidebar-collapsed .sidebar .label{display:none}.sidebar-collapsed .page .content{margin-left:auto!important;margin-right:auto!important}.footer{text-align:center;padding:32px 20px 48px;color:#6b7280;font-size:14px}.lang-switch{display:inline-flex;align-items:center;gap:8px;margin-bottom:8px}.lang-btn{background:transparent;border:1px solid transparent;color:#1f2937;padding:6px 10px;border-radius:10px;cursor:pointer;font-size:13px}.lang-btn[aria-pressed=true],.lang-btn:hover{border-color:#2e5bff59;color:var(--brand-dark);background:#2e5bff0f}.sep{color:#9ca3af}.carousel{overflow:hidden;position:relative}.carousel-track{display:inline-flex;gap:16px;padding:2px;will-change:transform}.carousel .controls{position:absolute;top:8px;right:8px;display:flex;gap:6px}.carousel .btn{border:1px solid var(--border);background:#ffffffb3;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);border-radius:10px;padding:6px 8px;cursor:pointer;font-size:12px}.project-section{margin:24px 0 8px}.project-section h2{margin:0 0 12px;font-size:20px;color:var(--brand-ink)}.project-card{background:var(--card-bg);border:1px solid var(--border);border-radius:14px;padding:16px;display:grid;grid-template-rows:2fr 2fr 1fr;gap:10px;transition:box-shadow .2s ease,transform .08s ease,border-color .2s ease;position:relative;min-height:220px}.project-card:hover{box-shadow:0 8px 24px #2e5bff24;transform:translateY(-2px);border-color:#2e5bff59}.project-card.large{width:360px}.project-card .badge{width:48px;height:48px;border-radius:50%;background:#fff;border:1px solid rgba(15,26,61,.12);display:flex;align-items:center;justify-content:center;box-shadow:0 2px 6px #0f1a3d14}.project-card .badge img.logo{width:28px;height:28px;border-radius:6px}.project-card .card-head{display:flex;align-items:center;gap:12px}.project-card .card-head h3{margin:0;font-size:18px;font-weight:700;color:var(--brand-ink);line-height:1.2}.project-card .card-body{min-height:0}.project-card .card-body p{margin:0;font-size:14px;color:var(--muted);display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}.project-card .card-foot{display:flex;align-items:flex-end}.project-card .card-foot time{font-size:13px;color:var(--muted)}.project-card .go{align-self:center;text-decoration:none;color:var(--brand-dark);padding:6px;border-radius:999px;width:36px;height:36px;display:flex;align-items:center;justify-content:center;border:1px solid var(--border);background:#2e5bff0f;transition:background-color .2s,transform .1s;position:absolute;right:12px;top:12px}.project-card .go:hover{background:#2e5bff24;transform:translateY(-1px)}.nav-section{padding:28px 28px 64px;max-width:1024px;margin:0 auto}.nav-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:16px;margin-top:24px}.card{display:block;background:var(--card-bg);border:1px solid var(--border);border-radius:14px;padding:18px;text-decoration:none;color:inherit;transition:border-color .2s,box-shadow .2s,transform .08s,background-color .2s;box-shadow:0 2px 10px #0f1a3d0d}.card h3{margin:0 0 8px;font-size:18px;color:var(--brand-ink)}.card p{margin:0;font-size:14px;color:var(--muted)}.card:hover,.card:focus-visible{border-color:#2e5bff80;box-shadow:0 8px 30px #2e5bff2e;transform:translateY(-2px);outline:none}.contact-apps{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:18px;margin-top:16px}.contact-apps .app{text-align:center}.contact-apps .app-icon{width:68px;height:68px;background:#111;border:1px solid var(--border);border-radius:16px;margin:0 auto 10px;box-shadow:0 2px 8px #0000001f}.contact-apps .app a{color:var(--brand-ink);text-decoration:none;font-size:14px}.contact-apps .app a:hover{text-decoration:underline}.home-logo{animation:home-float 6s ease-in-out infinite,fade-in .8s ease-out both}@keyframes home-float{0%{transform:translateY(0) scale(1)}50%{transform:translateY(-6px) scale(1.02)}to{transform:translateY(0) scale(1)}}@keyframes fade-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}:root{--radius-lg: 16px;--radius-md: 12px;--radius-sm: 10px;--shadow-sm: 0 2px 10px rgba(15,26,61,.06);--shadow-md: 0 8px 24px rgba(15,26,61,.12);--shadow-lg: 0 18px 50px rgba(15,26,61,.18);--surface: rgba(255,255,255,.86)}body{background:radial-gradient(1200px 800px at 20% -10%,rgba(46,91,255,.07),transparent 60%),radial-gradient(900px 600px at 110% 110%,rgba(31,63,204,.08),transparent 50%),var(--bg)}.hero{padding:110px 20px 30px}.sub .hero.sub-hero{gap:18px}.title{background-size:220% 100%;animation:title-shimmer 5.5s linear infinite}@keyframes title-shimmer{0%{background-position:0% 0}to{background-position:-220% 0}}.sidebar{background:var(--surface);border-radius:var(--radius-lg);box-shadow:var(--shadow-md);border:1px solid rgba(46,91,255,.12)}.sidebar a{padding:10px 12px;border-radius:var(--radius-md)}.sidebar a.active,.sidebar a:hover{background:linear-gradient(180deg,#2e5bff14,#2e5bff08);color:var(--brand-dark)}.sidebar .toggle{border-radius:var(--radius-md);border:1px solid rgba(46,91,255,.18);background:linear-gradient(180deg,#ffffffeb,#ffffffc7);box-shadow:var(--shadow-sm)}.sidebar-collapsed .sidebar{width:var(--sidebar-collapsed);padding:12px 8px}.sidebar-collapsed .sidebar .toggle{justify-content:center}.content{max-width:1024px;padding:0 28px 76px}.card{border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);border:1px solid rgba(46,91,255,.12);background:#ffffffeb}.card:hover,.card:focus-visible{box-shadow:var(--shadow-lg);border-color:#2e5bff6b;transform:translateY(-3px)}.project-card{border-radius:var(--radius-lg);border:1px solid rgba(46,91,255,.12);box-shadow:var(--shadow-sm);background:#fffffff0}.project-card:hover{box-shadow:var(--shadow-md)}.project-card .badge{width:52px;height:52px;box-shadow:0 3px 10px #0f1a3d1a}.project-card .badge img.logo{width:30px;height:30px;border-radius:8px}.project-card .card-head h3{letter-spacing:.2px}.project-card .go{border-color:#2e5bff42;background:#2e5bff14}.project-card .go:hover{background:#2e5bff29;transform:translateY(-2px)}.carousel .btn{border:1px solid rgba(46,91,255,.22);background:#ffffffd9;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}.contact-apps .app-icon{border-radius:18px;box-shadow:0 4px 16px #0000001f}.footer{padding-bottom:56px}.home-logo{animation:home-float 7s ease-in-out infinite,fade-in .82s ease-out both}@keyframes home-float{0%{transform:translateY(0) scale(1)}50%{transform:translateY(-5px) scale(1.018)}to{transform:translateY(0) scale(1)}}.sidebar{min-height:120px}.sidebar a{min-width:0}.sidebar .label{display:inline-block;max-width:100%}.sidebar{opacity:.8}.sidebar-collapsed .sidebar{opacity:1}.sidebar .toggle{width:100%}.sidebar-collapsed .sidebar .toggle{width:auto}.project-section.ongoing .project-card .card-foot time{color:#2e5bff;font-weight:600}.route-view{position:relative}.route-view>[aria-busy=true]{position:relative;z-index:1}.skeleton-overlay{position:absolute;top:0;right:0;bottom:0;left:0;background:var(--bg);z-index:999}.skeleton-overlay~*{visibility:hidden!important;opacity:0!important}@media (prefers-reduced-motion: reduce){*{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important;scroll-behavior:auto!important}}.sidebar{contain:layout paint;will-change:transform}.skip-link{position:absolute;left:-9999px;top:auto;width:1px;height:1px;overflow:hidden;z-index:-1}.skip-link:focus{left:16px;top:16px;width:auto;height:auto;padding:8px 12px;z-index:1000;background:var(--surface, #fff);color:var(--brand-ink, #0f1a3d);border:1px solid var(--border);border-radius:8px;box-shadow:var(--shadow-sm);text-decoration:none}.project-card .card-foot{position:relative;min-height:24px;display:flex;justify-content:space-between;align-items:flex-end;padding:0 10px 10px;box-sizing:border-box}.project-card time{position:static!important;left:auto;bottom:auto;font-size:13px;color:var(--muted)}.project-card .card-foot .oss{position:static;font-size:13px;color:var(--muted);white-space:nowrap}.project-card .card-foot .oss a{color:var(--brand);text-decoration:underline;text-underline-offset:2px}
