:root{--color-accent: #00d4aa;--color-accent-hover: #00bf99;--color-accent-active: #00a888;--color-accent-light: rgba(0, 212, 170, .1);--color-accent-glow: rgba(0, 212, 170, .15);--color-white: #ffffff;--color-gray-50: #faf8f5;--color-gray-100: #f5f2ed;--color-gray-200: #e8e5de;--color-gray-300: #d4d0c8;--color-gray-400: #a8a29e;--color-gray-500: #78716c;--color-gray-600: #57534e;--color-gray-700: #44403c;--color-gray-800: #292524;--color-gray-900: #1c1917;--color-success: #10b981;--color-success-light: rgba(16, 185, 129, .1);--color-warning: #f59e0b;--color-warning-light: rgba(245, 158, 11, .1);--color-danger: #ef4444;--color-danger-light: rgba(239, 68, 68, .1);--chart-series-1: #00d4aa;--chart-series-2: #6366f1;--chart-series-3: #f59e0b;--chart-series-4: #ec4899;--chart-series-5: #8b5cf6;--font-sans: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-mono: "JetBrains Mono", "Fira Code", "Cascadia Code", monospace;--font-display: "Inter", sans-serif;--text-xs: 12px;--text-xs-line: 16px;--text-sm: 14px;--text-sm-line: 20px;--text-base: 16px;--text-base-line: 24px;--text-lg: 20px;--text-lg-line: 28px;--text-xl: 24px;--text-xl-line: 32px;--text-2xl: 32px;--text-2xl-line: 40px;--text-3xl: 40px;--text-3xl-line: 48px;--text-4xl: 48px;--text-4xl-line: 56px;--text-metric: 36px;--text-metric-line: 44px;--font-light: 300;--font-normal: 400;--font-medium: 500;--font-semibold: 600;--font-bold: 700;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 20px;--space-6: 24px;--space-8: 32px;--space-10: 40px;--space-12: 48px;--space-16: 64px;--space-20: 80px;--radius-sm: 6px;--radius-md: 10px;--radius-lg: 14px;--radius-xl: 20px;--radius-full: 9999px;--shadow-card: 0 1px 3px rgba(0, 0, 0, .06), 0 1px 2px rgba(0, 0, 0, .04);--shadow-card-hover: 0 12px 24px rgba(0, 0, 0, .08), 0 4px 8px rgba(0, 0, 0, .04);--shadow-popup: 0 20px 40px rgba(0, 0, 0, .12), 0 8px 16px rgba(0, 0, 0, .06);--shadow-focus: 0 0 0 3px rgba(0, 212, 170, .15);--border-default: 1px solid rgba(0, 0, 0, .06);--border-hover: 1px solid rgba(0, 212, 170, .3);--border-focus: 1px solid var(--color-accent);--border-subtle: 1px solid var(--color-gray-200);--ease-default: cubic-bezier(.4, 0, .2, 1);--ease-in: cubic-bezier(.4, 0, 1, 1);--ease-out: cubic-bezier(0, 0, .2, 1);--ease-emphasized: cubic-bezier(.2, 0, 0, 1);--duration-fast: .15s;--duration-normal: .25s;--duration-slow: .4s;--page-max-width: 1400px;--navbar-height: 64px}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{font-size:16px;scroll-behavior:smooth;-webkit-text-size-adjust:100%}body{min-height:100vh;font-family:var(--font-sans);font-size:var(--text-base);line-height:var(--text-base-line);color:var(--color-gray-700);background-color:var(--color-gray-50);background-image:radial-gradient(ellipse 80% 60% at 20% 80%,rgba(0,212,170,.04) 0%,transparent 70%),radial-gradient(ellipse 60% 80% at 80% 20%,rgba(0,212,170,.03) 0%,transparent 70%);background-attachment:fixed;animation:bg-breathe 8s ease-in-out infinite;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@keyframes bg-breathe{0%,to{background-position:0% 0%,100% 100%}50%{background-position:10% 10%,90% 90%}}h1,h2,h3,h4,h5,h6{font-family:var(--font-display);color:var(--color-gray-800);font-weight:var(--font-semibold);line-height:1.3}a{color:var(--color-accent);text-decoration:none;transition:color var(--duration-fast) var(--ease-default)}a:hover{text-decoration:underline}img{max-width:100%;display:block}ul,ol{list-style:none}button{font-family:inherit;font-size:inherit;cursor:pointer}code,pre,.mono,[data-mono]{font-family:var(--font-mono);font-feature-settings:"tnum"}.ghost-text{position:fixed;bottom:160px;left:40px;font-family:var(--font-display);font-size:120px;font-weight:700;color:#00d4aa0f;pointer-events:none;z-index:0;-webkit-user-select:none;user-select:none;white-space:nowrap;letter-spacing:-.01em;text-align:left}#app{position:relative;z-index:1;min-height:100vh;display:flex;flex-direction:column}#page-view{flex:1;width:100%}.page-enter{opacity:0;transform:translate(40px)}.page-enter-active{opacity:1;transform:translate(0);transition:all var(--duration-slow) var(--ease-default)}.page-back-enter{opacity:0;transform:translate(-40px)}.page-back-enter-active{opacity:1;transform:translate(0);transition:all var(--duration-slow) var(--ease-default)}.page{max-width:var(--page-max-width);margin:0 auto;padding:var(--space-16) var(--space-12)}.section{margin-bottom:var(--space-16)}.section-title{font-size:var(--text-2xl);line-height:var(--text-2xl-line);font-weight:var(--font-semibold);color:var(--color-gray-800);margin-bottom:var(--space-6)}.section-subtitle{font-size:var(--text-base);color:var(--color-gray-500);margin-bottom:var(--space-8)}.grid-12{display:grid;grid-template-columns:repeat(12,1fr);gap:var(--space-6)}.grid-2-8-2{display:grid;grid-template-columns:1fr 4fr 1fr;gap:var(--space-6)}.grid-4-8{display:grid;grid-template-columns:1fr 2fr;gap:var(--space-6)}.grid-8-4{display:grid;grid-template-columns:2fr 1fr;gap:var(--space-6)}.grid-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:var(--space-6)}.grid-cards-4{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--space-6)}.grid-cards-3{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--space-6)}.grid-cards-2{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--space-6)}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-clamp-2{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.text-clamp-3{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:var(--color-gray-100)}::-webkit-scrollbar-thumb{background:var(--color-gray-300);border-radius:var(--radius-full)}::-webkit-scrollbar-thumb:hover{background:var(--color-gray-400)}::selection{background:var(--color-accent-light);color:var(--color-gray-900)}.navbar{position:sticky;top:0;z-index:100;height:var(--navbar-height);background:#ffffffd9;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-bottom:var(--border-subtle)}.navbar-inner{max-width:var(--page-max-width);height:100%;margin:0 auto;padding:0 var(--space-12);display:flex;align-items:center;justify-content:space-between;gap:var(--space-6)}.navbar-brand{font-family:var(--font-display);font-size:var(--text-lg);line-height:var(--text-lg-line);font-weight:var(--font-bold);color:var(--color-gray-900);text-decoration:none;display:flex;align-items:center;gap:var(--space-2)}.navbar-brand:hover{text-decoration:none}.navbar-brand-dot{width:10px;height:10px;border-radius:var(--radius-full);background:var(--color-accent);box-shadow:0 0 12px var(--color-accent-glow)}.navbar-links{display:flex;align-items:center;gap:var(--space-1)}.navbar-link{padding:var(--space-2) var(--space-4);font-size:var(--text-sm);font-weight:var(--font-medium);color:var(--color-gray-500);text-decoration:none;border-radius:var(--radius-md);transition:all var(--duration-fast) var(--ease-default);position:relative}.navbar-link:hover{color:var(--color-gray-800);background:var(--color-gray-100);text-decoration:none}.navbar-link.active{color:var(--color-accent)}.navbar-link.active:after{content:"";position:absolute;bottom:-4px;left:50%;transform:translate(-50%);width:24px;height:3px;background:var(--color-accent);border-radius:var(--radius-full)}.card{background:var(--color-white);border-radius:var(--radius-md);box-shadow:var(--shadow-card);border:var(--border-default);padding:var(--space-6);transition:all var(--duration-normal) var(--ease-default);cursor:default}.card-clickable{cursor:pointer}.card-clickable:hover,.card:hover{transform:translateY(-4px);box-shadow:var(--shadow-card-hover);border-color:#00d4aa4d;background:linear-gradient(135deg,var(--color-white) 0%,#f8fffe 100%)}.card:focus-visible{outline:none;box-shadow:var(--shadow-focus),var(--shadow-card-hover);border-color:var(--color-accent)}.metric-card{background:var(--color-white);border-radius:var(--radius-lg);box-shadow:var(--shadow-card);border:var(--border-default);padding:var(--space-6);transition:all var(--duration-normal) var(--ease-default)}.metric-card:hover{transform:translateY(-4px);box-shadow:var(--shadow-card-hover);border-color:#00d4aa4d}.metric-label{font-size:var(--text-sm);color:var(--color-gray-500);margin-bottom:var(--space-2);display:flex;align-items:center;gap:var(--space-2)}.metric-value{font-family:var(--font-mono);font-size:var(--text-metric);line-height:var(--text-metric-line);font-weight:var(--font-bold);color:var(--color-gray-800);font-feature-settings:"tnum"}.metric-value-accent{color:var(--color-accent)}.metric-suffix{font-size:var(--text-base);font-weight:var(--font-normal);color:var(--color-gray-500);margin-left:var(--space-1)}.btn-primary{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);padding:12px 24px;background:var(--color-accent);color:var(--color-white);font-size:var(--text-base);font-weight:var(--font-medium);border:none;border-radius:var(--radius-md);cursor:pointer;transition:all var(--duration-fast) var(--ease-default);text-decoration:none}.btn-primary:hover{background:var(--color-accent-hover);transform:translateY(-1px);box-shadow:0 4px 12px #00d4aa4d;text-decoration:none}.btn-primary:active{background:var(--color-accent-active);transform:translateY(0);box-shadow:0 2px 4px #00d4aa33}.btn-primary:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.btn-secondary{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);padding:12px 24px;background:transparent;color:var(--color-gray-800);font-size:var(--text-base);font-weight:var(--font-medium);border:1px solid var(--color-gray-200);border-radius:var(--radius-md);cursor:pointer;transition:all var(--duration-fast) var(--ease-default);text-decoration:none}.btn-secondary:hover{background:var(--color-gray-100);border-color:var(--color-gray-300);text-decoration:none}.btn-secondary:active{background:var(--color-gray-200)}.link{color:var(--color-accent);text-decoration:none;text-decoration-color:transparent;transition:all var(--duration-fast) var(--ease-default)}.link:hover{text-decoration:underline;text-decoration-color:var(--color-accent)}.link:focus-visible{outline:none;box-shadow:var(--shadow-focus);border-radius:var(--radius-sm)}.input{width:100%;padding:12px 16px;background:var(--color-white);color:var(--color-gray-800);font-size:var(--text-base);font-family:var(--font-sans);border:1px solid var(--color-gray-200);border-radius:var(--radius-md);transition:all var(--duration-fast) var(--ease-default)}.input:hover{border-color:var(--color-gray-300)}.input:focus{outline:none;border-color:var(--color-accent);box-shadow:var(--shadow-focus)}.tabs{display:flex;gap:var(--space-1);border-bottom:1px solid var(--color-gray-200)}.tab{padding:12px 16px;color:var(--color-gray-500);font-size:var(--text-base);font-weight:var(--font-medium);border:none;background:transparent;cursor:pointer;position:relative;transition:all var(--duration-fast) var(--ease-default)}.tab:hover{color:var(--color-gray-800)}.tab.active{color:var(--color-accent)}.tab.active:after{content:"";position:absolute;bottom:-1px;left:0;right:0;height:3px;background:var(--color-accent);border-radius:3px 3px 0 0}.badge{display:inline-flex;align-items:center;gap:var(--space-1);padding:var(--space-1) var(--space-3);font-size:var(--text-xs);font-weight:var(--font-medium);border-radius:var(--radius-sm);background:var(--color-gray-100);color:var(--color-gray-600);line-height:1.4}.badge-accent{background:var(--color-accent-light);color:var(--color-accent-active)}.badge-success{background:var(--color-success-light);color:#065f46}.badge-warning{background:var(--color-warning-light);color:#92400e}.badge-danger{background:var(--color-danger-light);color:#991b1b}.badge-outline{background:transparent;border:1px solid var(--color-gray-200);color:var(--color-gray-500)}.badge-dot{width:6px;height:6px;border-radius:var(--radius-full);background:currentColor}.skeleton{background:linear-gradient(90deg,var(--color-gray-100) 25%,var(--color-gray-50) 50%,var(--color-gray-100) 75%);background-size:200% 100%;animation:skeleton-shimmer 1.5s ease-in-out infinite;border-radius:var(--radius-sm)}@keyframes skeleton-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.skeleton-text{height:14px;margin-bottom:var(--space-2)}.skeleton-title{height:24px;width:60%;margin-bottom:var(--space-3)}.skeleton-card{height:180px;border-radius:var(--radius-md)}.alert{display:flex;align-items:flex-start;gap:var(--space-3);padding:16px 20px;border-radius:var(--radius-md);font-size:var(--text-sm);line-height:1.5}.alert-success{background:var(--color-success-light);color:#065f46;border:1px solid rgba(16,185,129,.2)}.alert-warning{background:var(--color-warning-light);color:#92400e;border:1px solid rgba(245,158,11,.2)}.alert-danger{background:var(--color-danger-light);color:#991b1b;border:1px solid rgba(239,68,68,.2)}.alert-info{background:var(--color-accent-light);color:#065f46;border:1px solid rgba(0,212,170,.2)}.toast-container{position:fixed;top:calc(var(--navbar-height) + var(--space-4));right:var(--space-6);z-index:1000;display:flex;flex-direction:column;gap:var(--space-2);pointer-events:none}.toast{background:var(--color-white);color:var(--color-gray-800);padding:var(--space-3) var(--space-4);border-radius:var(--radius-md);box-shadow:var(--shadow-popup);border:var(--border-default);font-size:var(--text-sm);display:flex;align-items:center;gap:var(--space-2);animation:toast-in var(--duration-normal) var(--ease-out);pointer-events:auto;max-width:360px}.toast.toast-out{animation:toast-out var(--duration-fast) var(--ease-in) forwards}@keyframes toast-in{0%{opacity:0;transform:translate(100%)}to{opacity:1;transform:translate(0)}}@keyframes toast-out{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(100%)}}.progress{width:100%;height:6px;background:var(--color-gray-100);border-radius:var(--radius-full);overflow:hidden}.progress-bar{height:100%;background:var(--color-accent);border-radius:var(--radius-full);transition:width var(--duration-slow) var(--ease-default)}.divider{height:1px;background:var(--color-gray-200);border:none;margin:var(--space-6) 0}.footer{border-top:var(--border-subtle);background:var(--color-white);padding:var(--space-8) var(--space-12);margin-top:var(--space-20)}.footer-inner{max-width:var(--page-max-width);margin:0 auto;display:flex;align-items:center;justify-content:space-between;gap:var(--space-6);flex-wrap:wrap}.footer-text{font-size:var(--text-sm);color:var(--color-gray-500)}.footer-links{display:flex;gap:var(--space-4)}.footer-link{font-size:var(--text-sm);color:var(--color-gray-500);text-decoration:none;transition:color var(--duration-fast) var(--ease-default)}.footer-link:hover{color:var(--color-accent);text-decoration:none}.home-hero{display:grid;grid-template-columns:1fr auto;gap:var(--space-12);align-items:center;padding:var(--space-16) 0 var(--space-12)}.home-hero-title{font-size:var(--text-4xl);line-height:var(--text-4xl-line);font-weight:var(--font-light);color:var(--color-gray-900);margin-bottom:var(--space-4);letter-spacing:-.02em}.home-hero-subtitle{display:flex;align-items:center;gap:var(--space-3);font-size:var(--text-lg);line-height:var(--text-lg-line);color:var(--color-gray-700);font-weight:var(--font-medium);margin-bottom:var(--space-6);flex-wrap:wrap}.home-hero-dot{width:6px;height:6px;border-radius:var(--radius-full);background:var(--color-accent)}.home-hero-desc{font-size:var(--text-base);line-height:var(--text-base-line);color:var(--color-gray-500);max-width:520px;margin-bottom:var(--space-8)}.home-hero-actions{display:flex;gap:var(--space-3)}.home-hero-avatar{flex-shrink:0}.home-hero-avatar-ring{width:180px;height:180px;border-radius:var(--radius-full);background:linear-gradient(135deg,var(--color-accent) 0%,var(--color-accent-active) 100%);padding:4px;box-shadow:var(--shadow-card-hover);animation:avatar-pulse 4s ease-in-out infinite}@keyframes avatar-pulse{0%,to{box-shadow:0 12px 24px #00000014,0 0 0 0 var(--color-accent-glow)}50%{box-shadow:0 12px 24px #00000014,0 0 0 12px transparent}}.home-hero-avatar-inner{width:100%;height:100%;border-radius:var(--radius-full);background:var(--color-white);display:flex;align-items:center;justify-content:center;font-family:var(--font-display);font-size:72px;font-weight:var(--font-bold);color:var(--color-accent)}.metric-value-row{display:flex;align-items:baseline;gap:var(--space-1)}.home-section-entry{position:relative;text-align:left}.home-section-icon{font-size:32px;margin-bottom:var(--space-3);line-height:1}.home-section-title{font-size:var(--text-xl);line-height:var(--text-xl-line);font-weight:var(--font-semibold);color:var(--color-gray-800);margin-bottom:var(--space-2)}.home-section-desc{font-size:var(--text-sm);color:var(--color-gray-500);margin-bottom:var(--space-4)}.home-section-arrow{font-size:var(--text-lg);color:var(--color-accent);transition:transform var(--duration-fast) var(--ease-default)}.home-section-entry:hover .home-section-arrow{transform:translate(4px)}.home-recent-title{font-size:var(--text-lg);line-height:var(--text-lg-line);font-weight:var(--font-semibold);color:var(--color-gray-800)}.home-recent-desc{font-size:var(--text-sm);color:var(--color-gray-500);margin-top:var(--space-2)}.about-grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-8)}.about-section-text{font-size:var(--text-base);line-height:1.8;color:var(--color-gray-700)}.about-section-text p{margin-bottom:var(--space-4)}.about-radar{display:flex;justify-content:center}.about-radar-chart{width:100%;max-width:480px;height:420px}.about-ability-list{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-4)}.about-ability-item{background:var(--color-white);border-radius:var(--radius-md);border:var(--border-default);padding:var(--space-4) var(--space-5);box-shadow:var(--shadow-card);transition:all var(--duration-normal) var(--ease-default)}.about-ability-item:hover{transform:translateY(-2px);box-shadow:var(--shadow-card-hover);border-color:#00d4aa4d}.about-ability-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--space-2)}.about-ability-name{font-size:var(--text-sm);font-weight:var(--font-semibold);color:var(--color-gray-800)}.about-ability-score{font-family:var(--font-mono);font-size:var(--text-sm);font-weight:var(--font-bold);color:var(--color-accent);font-feature-settings:"tnum"}.about-ability-desc{font-size:var(--text-xs);color:var(--color-gray-500);margin-top:var(--space-2)}.about-timeline{position:relative;padding-left:var(--space-8)}.about-timeline:before{content:"";position:absolute;left:8px;top:4px;bottom:4px;width:2px;background:var(--color-gray-200)}.about-timeline-item{position:relative;padding-bottom:var(--space-6)}.about-timeline-item:last-child{padding-bottom:0}.about-timeline-item:before{content:"";position:absolute;left:-28px;top:6px;width:10px;height:10px;border-radius:var(--radius-full);background:var(--color-accent);box-shadow:0 0 0 4px var(--color-accent-light)}.about-timeline-period{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--color-accent);font-weight:var(--font-medium);margin-bottom:var(--space-1)}.about-timeline-title{font-size:var(--text-base);font-weight:var(--font-semibold);color:var(--color-gray-800);margin-bottom:var(--space-1)}.about-timeline-desc{font-size:var(--text-sm);color:var(--color-gray-500)}.github-section-header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-4);margin-bottom:var(--space-6)}.project-card-header{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--space-3);margin-bottom:var(--space-3)}.project-card-title{font-size:var(--text-lg);line-height:var(--text-lg-line);font-weight:var(--font-semibold);color:var(--color-gray-800)}.project-card-period{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--color-gray-400);white-space:nowrap}.project-card-desc{font-size:var(--text-sm);color:var(--color-gray-500);line-height:1.6;margin-bottom:var(--space-4);min-height:44px}.project-card-tags{display:flex;flex-wrap:wrap;gap:var(--space-2)}.github-repo-card{background:var(--color-white);border-radius:var(--radius-md);border:var(--border-default);padding:var(--space-5);box-shadow:var(--shadow-card);transition:all var(--duration-normal) var(--ease-default);display:flex;flex-direction:column;gap:var(--space-3)}.github-repo-card:hover{transform:translateY(-4px);box-shadow:var(--shadow-card-hover);border-color:#00d4aa4d}.github-repo-name{font-family:var(--font-mono);font-size:var(--text-base);font-weight:var(--font-semibold);color:var(--color-accent)}.github-repo-desc{font-size:var(--text-sm);color:var(--color-gray-500);line-height:1.6;min-height:40px}.github-repo-meta{display:flex;align-items:center;gap:var(--space-4);font-size:var(--text-xs);color:var(--color-gray-500);font-family:var(--font-mono);font-feature-settings:"tnum"}.github-repo-stat,.github-repo-lang{display:flex;align-items:center;gap:var(--space-1)}.github-lang-dot{width:10px;height:10px;border-radius:var(--radius-full)}.projects-tabs{margin-bottom:var(--space-8)}.blog-filters{display:flex;gap:var(--space-2);flex-wrap:wrap;margin-bottom:var(--space-8)}.blog-filter-chip{padding:var(--space-2) var(--space-4);font-size:var(--text-sm);font-weight:var(--font-medium);color:var(--color-gray-500);background:var(--color-white);border:1px solid var(--color-gray-200);border-radius:var(--radius-full);cursor:pointer;transition:all var(--duration-fast) var(--ease-default)}.blog-filter-chip:hover{border-color:var(--color-gray-300);color:var(--color-gray-800)}.blog-filter-chip.active{background:var(--color-accent);border-color:var(--color-accent);color:var(--color-white)}.blog-card{cursor:pointer;display:flex;flex-direction:column;gap:var(--space-3)}.blog-card-title{font-size:var(--text-xl);line-height:var(--text-xl-line);font-weight:var(--font-semibold);color:var(--color-gray-800)}.blog-card-meta{display:flex;align-items:center;gap:var(--space-3);font-size:var(--text-xs);color:var(--color-gray-400);font-family:var(--font-mono)}.blog-card-summary{font-size:var(--text-sm);color:var(--color-gray-500);line-height:1.6}.blog-card-tags{display:flex;gap:var(--space-2);flex-wrap:wrap;margin-top:auto}.blog-empty{text-align:center;padding:var(--space-16) var(--space-6);color:var(--color-gray-400)}.blog-post-layout{display:grid;grid-template-columns:1fr 280px;gap:var(--space-10);align-items:start}.blog-post-main{min-width:0}.blog-post-header{margin-bottom:var(--space-8);padding-bottom:var(--space-6);border-bottom:var(--border-subtle)}.blog-post-title{font-size:var(--text-3xl);line-height:var(--text-3xl-line);font-weight:var(--font-bold);color:var(--color-gray-900);margin-bottom:var(--space-4)}.blog-post-meta{display:flex;align-items:center;gap:var(--space-3);font-size:var(--text-sm);color:var(--color-gray-500);font-family:var(--font-mono)}.blog-post-content{font-size:var(--text-base);line-height:1.8;color:var(--color-gray-700)}.blog-post-content h2{font-size:var(--text-2xl);line-height:var(--text-2xl-line);font-weight:var(--font-semibold);color:var(--color-gray-900);margin-top:var(--space-10);margin-bottom:var(--space-4);scroll-margin-top:80px}.blog-post-content h3{font-size:var(--text-xl);line-height:var(--text-xl-line);font-weight:var(--font-semibold);color:var(--color-gray-800);margin-top:var(--space-8);margin-bottom:var(--space-3);scroll-margin-top:80px}.blog-post-content p{margin-bottom:var(--space-4)}.blog-post-content ul,.blog-post-content ol{margin-bottom:var(--space-4);padding-left:var(--space-6)}.blog-post-content ul li{list-style:disc;margin-bottom:var(--space-2)}.blog-post-content ol li{list-style:decimal;margin-bottom:var(--space-2)}.blog-post-content blockquote{border-left:3px solid var(--color-accent);padding:var(--space-2) var(--space-4);margin:var(--space-4) 0;background:var(--color-accent-light);color:var(--color-gray-700);border-radius:0 var(--radius-sm) var(--radius-sm) 0}.blog-post-content code{background:var(--color-gray-100);padding:2px 6px;border-radius:var(--radius-sm);font-size:.9em;color:var(--color-gray-800)}.blog-post-content pre{background:var(--color-gray-900);color:#e8e5de;padding:var(--space-4) var(--space-5);border-radius:var(--radius-md);overflow-x:auto;margin:var(--space-4) 0;font-size:var(--text-sm);line-height:1.6}.blog-post-content pre code{background:transparent;padding:0;color:inherit;font-size:inherit}.blog-post-content a{color:var(--color-accent);text-decoration:underline;text-decoration-color:var(--color-accent-light)}.blog-post-content img{border-radius:var(--radius-md);margin:var(--space-4) 0;box-shadow:var(--shadow-card)}.blog-post-content table{width:100%;border-collapse:collapse;margin:var(--space-4) 0}.blog-post-content th,.blog-post-content td{padding:var(--space-3);border:var(--border-subtle);text-align:left}.blog-post-content th{background:var(--color-gray-100);font-weight:var(--font-semibold)}.toc{position:sticky;top:calc(var(--navbar-height) + var(--space-6));background:var(--color-white);border-radius:var(--radius-md);border:var(--border-default);padding:var(--space-5);box-shadow:var(--shadow-card);max-height:calc(100vh - var(--navbar-height) - var(--space-12));overflow-y:auto}.toc-title{font-size:var(--text-xs);font-weight:var(--font-semibold);color:var(--color-gray-400);text-transform:uppercase;letter-spacing:.05em;margin-bottom:var(--space-3)}.toc-list{display:flex;flex-direction:column;gap:var(--space-1)}.toc-link{display:block;font-size:var(--text-sm);color:var(--color-gray-500);text-decoration:none;padding:var(--space-1) var(--space-2);border-radius:var(--radius-sm);border-left:2px solid transparent;transition:all var(--duration-fast) var(--ease-default);line-height:1.5}.toc-link:hover{color:var(--color-gray-800);background:var(--color-gray-100);text-decoration:none}.toc-link.active{color:var(--color-accent);border-left-color:var(--color-accent);background:var(--color-accent-light);font-weight:var(--font-medium)}.toc-level-3{padding-left:var(--space-5);font-size:var(--text-xs)}.roadmap-board{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--space-4);align-items:start}.roadmap-column{background:var(--color-gray-100);border-radius:var(--radius-lg);padding:var(--space-4);min-height:200px}.roadmap-column-header{display:flex;align-items:center;gap:var(--space-2);margin-bottom:var(--space-4);padding-bottom:var(--space-3);border-bottom:1px solid rgba(0,0,0,.04)}.roadmap-column-icon{font-size:var(--text-lg);line-height:1}.roadmap-column-title{font-size:var(--text-sm);font-weight:var(--font-semibold);color:var(--color-gray-800)}.roadmap-column-count{margin-left:auto;font-family:var(--font-mono);font-size:var(--text-xs);color:var(--color-gray-400);font-weight:var(--font-bold)}.roadmap-card{background:var(--color-white);border-radius:var(--radius-md);padding:var(--space-4);margin-bottom:var(--space-3);box-shadow:var(--shadow-card);transition:all var(--duration-normal) var(--ease-default);border:var(--border-default)}.roadmap-card:hover{transform:translateY(-2px);box-shadow:var(--shadow-card-hover)}.roadmap-card-title{font-size:var(--text-sm);font-weight:var(--font-semibold);color:var(--color-gray-800);margin-bottom:var(--space-2)}.roadmap-card-desc{font-size:var(--text-xs);color:var(--color-gray-500);line-height:1.6;margin-bottom:var(--space-3)}.roadmap-card-date{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--color-gray-400)}.roadmap-progress-wrap{margin-top:var(--space-3)}.roadmap-progress-label{display:flex;justify-content:space-between;font-size:var(--text-xs);color:var(--color-gray-500);margin-bottom:var(--space-1);font-family:var(--font-mono)}.roadmap-column-done .roadmap-column-header{color:var(--color-success)}.roadmap-column-doing .roadmap-column-header{color:var(--color-accent)}.roadmap-column-planned .roadmap-column-header{color:var(--color-warning)}.roadmap-column-concept .roadmap-column-header{color:var(--color-gray-400)}.resource-category{margin-bottom:var(--space-10)}.resource-category-header{display:flex;align-items:center;gap:var(--space-3);margin-bottom:var(--space-5)}.resource-category-icon{font-size:var(--text-xl)}.resource-category-title{font-size:var(--text-xl);line-height:var(--text-xl-line);font-weight:var(--font-semibold);color:var(--color-gray-800)}.resource-category-count{font-family:var(--font-mono);font-size:var(--text-sm);color:var(--color-gray-400);font-weight:var(--font-bold)}.resource-card{display:flex;flex-direction:column;gap:var(--space-2);text-decoration:none;color:inherit}.resource-card:hover{text-decoration:none}.resource-card-title{font-size:var(--text-base);font-weight:var(--font-semibold);color:var(--color-gray-800)}.resource-card-desc{font-size:var(--text-sm);color:var(--color-gray-500);line-height:1.6}.resource-card-tags{display:flex;gap:var(--space-2);flex-wrap:wrap;margin-top:var(--space-1)}.resource-card-link{display:flex;align-items:center;gap:var(--space-1);font-size:var(--text-xs);color:var(--color-accent);font-family:var(--font-mono);margin-top:auto;word-break:break-all}.empty-state{text-align:center;padding:var(--space-20) var(--space-6)}.empty-state-icon{font-size:48px;margin-bottom:var(--space-4);opacity:.5}.empty-state-title{font-size:var(--text-lg);font-weight:var(--font-semibold);color:var(--color-gray-700);margin-bottom:var(--space-2)}.empty-state-desc{font-size:var(--text-sm);color:var(--color-gray-400)}:root{--admin-sidebar-w: 240px;--admin-header-h: 56px}.admin-body{background:var(--color-gray-100);font-family:var(--font-sans);overflow-y:auto}.admin-body #app{padding:0}.admin-body #page-view{flex:1;min-height:100vh}.admin-login{min-height:100vh;display:flex;align-items:center;justify-content:center;background:var(--color-gray-50)}.admin-login-card{width:380px;background:var(--color-white);border-radius:var(--radius-lg);box-shadow:var(--shadow-card);padding:var(--space-10);border:var(--border-default)}.admin-login-title{font-size:var(--text-xl);font-weight:var(--font-bold);color:var(--color-gray-900);margin-bottom:var(--space-2);text-align:center}.admin-login-sub{font-size:var(--text-sm);color:var(--color-gray-500);margin-bottom:var(--space-8);text-align:center}.admin-login-error{background:var(--color-danger-light);color:#991b1b;padding:var(--space-3) var(--space-4);border-radius:var(--radius-sm);font-size:var(--text-sm);margin-bottom:var(--space-4);display:none}.admin-form-group{margin-bottom:var(--space-4)}.admin-form-label{display:block;font-size:var(--text-sm);font-weight:var(--font-medium);color:var(--color-gray-700);margin-bottom:var(--space-2)}.admin-form-input{width:100%;padding:10px 14px;font-size:var(--text-base);font-family:var(--font-sans);border:1px solid var(--color-gray-200);border-radius:var(--radius-md);background:var(--color-white);color:var(--color-gray-800);transition:all var(--duration-fast) var(--ease-default)}.admin-form-input:focus{outline:none;border-color:var(--color-accent);box-shadow:var(--shadow-focus)}.admin-shell{min-height:100vh;display:flex}.admin-sidebar{width:var(--admin-sidebar-w);background:var(--color-white);border-right:var(--border-subtle);display:flex;flex-direction:column;position:fixed;top:0;left:0;bottom:0;z-index:10}.admin-sidebar-brand{height:var(--admin-header-h);display:flex;align-items:center;gap:var(--space-3);padding:0 var(--space-5);border-bottom:var(--border-subtle);font-weight:var(--font-bold);font-size:var(--text-lg);color:var(--color-gray-900)}.admin-sidebar-brand-dot{width:10px;height:10px;border-radius:var(--radius-full);background:var(--color-accent)}.admin-sidebar-nav{flex:1;padding:var(--space-3);overflow-y:auto}.admin-nav-section{font-size:11px;font-weight:var(--font-semibold);color:var(--color-gray-400);text-transform:uppercase;letter-spacing:.05em;padding:var(--space-3) var(--space-3) var(--space-2)}.admin-nav-item{display:flex;align-items:center;gap:var(--space-3);padding:10px 12px;font-size:var(--text-sm);font-weight:var(--font-medium);color:var(--color-gray-600);border-radius:var(--radius-md);cursor:pointer;transition:all var(--duration-fast) var(--ease-default);text-decoration:none;border:none;background:none;width:100%;text-align:left}.admin-nav-item:hover{background:var(--color-gray-100);color:var(--color-gray-800)}.admin-nav-item.active{background:var(--color-accent-light);color:var(--color-accent-active)}.admin-sidebar-footer{padding:var(--space-4) var(--space-5);border-top:var(--border-subtle);font-size:var(--text-xs);color:var(--color-gray-400)}.admin-main{flex:1;margin-left:var(--admin-sidebar-w);padding:var(--space-10) var(--space-10);min-height:100vh}.admin-page-title{font-size:var(--text-2xl);font-weight:var(--font-bold);color:var(--color-gray-900);margin-bottom:var(--space-2)}.admin-page-desc{font-size:var(--text-sm);color:var(--color-gray-500);margin-bottom:var(--space-8)}.admin-card{background:var(--color-white);border-radius:var(--radius-lg);border:var(--border-default);padding:var(--space-6);margin-bottom:var(--space-6)}.admin-card-title{font-size:var(--text-base);font-weight:var(--font-semibold);color:var(--color-gray-800);margin-bottom:var(--space-4);display:flex;align-items:center;gap:var(--space-2)}.admin-table{width:100%;border-collapse:collapse}.admin-table th,.admin-table td{padding:var(--space-3) var(--space-4);text-align:left;font-size:var(--text-sm);border-bottom:1px solid var(--color-gray-100)}.admin-table th{font-weight:var(--font-semibold);color:var(--color-gray-500);font-size:var(--text-xs);text-transform:uppercase;letter-spacing:.03em}.admin-table td{color:var(--color-gray-700)}.admin-table tr:hover td{background:var(--color-gray-50)}.admin-btn{display:inline-flex;align-items:center;gap:var(--space-2);padding:8px 16px;font-size:var(--text-sm);font-weight:var(--font-medium);border-radius:var(--radius-md);cursor:pointer;transition:all var(--duration-fast) var(--ease-default);border:none}.admin-btn-primary{background:var(--color-accent);color:#fff}.admin-btn-primary:hover{background:var(--color-accent-hover)}.admin-btn-danger{background:transparent;color:var(--color-danger);border:1px solid var(--color-danger)}.admin-btn-danger:hover{background:var(--color-danger);color:#fff}.admin-btn-ghost{background:transparent;color:var(--color-gray-500)}.admin-btn-ghost:hover{background:var(--color-gray-100);color:var(--color-gray-800)}.admin-btn-sm{padding:4px 10px;font-size:var(--text-xs)}.admin-grid-2{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-4)}.admin-grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--space-4)}.admin-list-item{background:var(--color-gray-50);border-radius:var(--radius-md);padding:var(--space-4);margin-bottom:var(--space-3);border:1px solid transparent;transition:all var(--duration-fast) var(--ease-default)}.admin-list-item:hover{border-color:var(--color-gray-200)}.admin-list-item-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--space-3)}.admin-list-item-title{font-weight:var(--font-semibold);font-size:var(--text-sm);color:var(--color-gray-800)}.admin-list-item-fields{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-3)}.admin-textarea{width:100%;padding:10px 14px;font-size:var(--text-sm);font-family:var(--font-sans);border:1px solid var(--color-gray-200);border-radius:var(--radius-md);background:var(--color-white);color:var(--color-gray-800);transition:all var(--duration-fast) var(--ease-default);resize:vertical;min-height:60px;line-height:1.5}.admin-textarea:focus{outline:none;border-color:var(--color-accent);box-shadow:var(--shadow-focus)}.admin-toggle{display:flex;align-items:center;gap:var(--space-2);cursor:pointer;font-size:var(--text-sm);color:var(--color-gray-700)}.admin-toast{position:fixed;top:20px;right:20px;z-index:9999;padding:12px 20px;border-radius:var(--radius-md);font-size:var(--text-sm);box-shadow:var(--shadow-popup);animation:toastIn .3s ease;max-width:360px}.admin-toast-success{background:var(--color-success-light);color:#065f46;border:1px solid rgba(16,185,129,.2)}.admin-toast-error{background:var(--color-danger-light);color:#991b1b;border:1px solid rgba(239,68,68,.2)}@keyframes toastIn{0%{opacity:0;transform:translateY(-12px)}to{opacity:1;transform:translateY(0)}}.admin-empty{text-align:center;padding:var(--space-12) var(--space-6);color:var(--color-gray-400);font-size:var(--text-sm)}.admin-upload-zone{border:2px dashed var(--color-gray-200);border-radius:var(--radius-lg);padding:var(--space-8);text-align:center;cursor:pointer;transition:all var(--duration-fast) var(--ease-default)}.admin-upload-zone:hover{border-color:var(--color-accent);background:var(--color-accent-light)}.admin-upload-preview{width:120px;height:120px;border-radius:var(--radius-full);object-fit:cover;border:3px solid var(--color-accent);margin:0 auto var(--space-4)}.blog-editor-layout{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-6);min-height:60vh}.blog-editor-pane{display:flex;flex-direction:column}.blog-editor-pane-title{font-size:var(--text-xs);font-weight:var(--font-semibold);color:var(--color-gray-400);text-transform:uppercase;letter-spacing:.05em;margin-bottom:var(--space-3)}.blog-editor-textarea{flex:1;width:100%;padding:var(--space-4);font-family:var(--font-mono);font-size:var(--text-sm);line-height:1.7;border:1px solid var(--color-gray-200);border-radius:var(--radius-md);background:var(--color-white);color:var(--color-gray-800);resize:none}.blog-editor-textarea:focus{outline:none;border-color:var(--color-accent);box-shadow:var(--shadow-focus)}.blog-editor-preview{flex:1;overflow-y:auto;padding:var(--space-4);border:1px solid var(--color-gray-200);border-radius:var(--radius-md);background:var(--color-white);font-size:var(--text-sm);line-height:1.7;color:var(--color-gray-700)}.blog-editor-preview h2{font-size:var(--text-xl);margin-bottom:var(--space-3)}.blog-editor-preview h3{font-size:var(--text-lg);margin-bottom:var(--space-2)}.blog-editor-preview p{margin-bottom:var(--space-3)}.blog-editor-preview code{background:var(--color-gray-100);padding:2px 6px;border-radius:4px}.blog-editor-preview pre{background:var(--color-gray-900);color:#e8e5de;padding:var(--space-4);border-radius:var(--radius-md);overflow-x:auto}.blog-editor-preview pre code{background:none;padding:0;color:inherit}.blog-editor-preview blockquote{border-left:3px solid var(--color-accent);padding:var(--space-2) var(--space-4);margin:var(--space-3) 0;background:var(--color-accent-light)}pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*!
  Theme: GitHub
  Description: Light theme as seen on github.com
  Author: github.com
  Maintainer: @Hirse
  Updated: 2021-05-15

  Outdated base version: https://github.com/primer/github-syntax-light
  Current colors taken from GitHub's CSS
*/.hljs{color:#24292e;background:#fff}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#d73a49}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#6f42c1}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-variable,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id{color:#005cc5}.hljs-regexp,.hljs-string,.hljs-meta .hljs-string{color:#032f62}.hljs-built_in,.hljs-symbol{color:#e36209}.hljs-comment,.hljs-code,.hljs-formula{color:#6a737d}.hljs-name,.hljs-quote,.hljs-selector-tag,.hljs-selector-pseudo{color:#22863a}.hljs-subst{color:#24292e}.hljs-section{color:#005cc5;font-weight:700}.hljs-bullet{color:#735c0f}.hljs-emphasis{color:#24292e;font-style:italic}.hljs-strong{color:#24292e;font-weight:700}.hljs-addition{color:#22863a;background-color:#f0fff4}.hljs-deletion{color:#b31d28;background-color:#ffeef0}
