:root{--color-bg: #FAFAF8;--color-surface: #FFFFFF;--color-text: #1A1A18;--color-text-secondary: #5C5C56;--color-text-tertiary: #8A8A82;--color-accent: #2D6A4F;--color-accent-light: #D8F3DC;--color-accent-hover: #1B4332;--color-border: #E8E8E4;--color-border-light: #F0F0EC;--font-display: "Newsreader", Georgia, serif;--font-body: "DM Sans", -apple-system, sans-serif;--font-mono: "JetBrains Mono", monospace;--max-width: 720px;--space-xs: .5rem;--space-sm: 1rem;--space-md: 1.5rem;--space-lg: 3rem;--space-xl: 5rem}*{margin:0;padding:0;box-sizing:border-box}html{scroll-behavior:smooth;-webkit-font-smoothing:antialiased}body{font-family:var(--font-body);background:var(--color-bg);color:var(--color-text);font-size:16px;line-height:1.7}nav{position:sticky;top:0;z-index:100;background:#fafaf8d9;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-bottom:1px solid var(--color-border-light);padding:var(--space-sm) var(--space-md)}nav .nav-inner{max-width:var(--max-width);margin:0 auto;display:flex;justify-content:space-between;align-items:center}nav .logo{font-family:var(--font-mono);font-size:.9rem;font-weight:500;color:var(--color-text);text-decoration:none;letter-spacing:-.02em}nav .logo span{color:var(--color-accent)}nav ul{list-style:none;display:flex;gap:var(--space-md)}nav a{font-size:.875rem;color:var(--color-text-secondary);text-decoration:none;transition:color .2s}nav a:hover{color:var(--color-accent)}nav .back{font-size:.875rem;color:var(--color-text-secondary);text-decoration:none;transition:color .2s}nav .back:hover{color:var(--color-accent)}main{max-width:var(--max-width);margin:0 auto;padding:0 var(--space-md)}.btn{display:inline-block;padding:.65rem 1.4rem;border-radius:6px;font-family:var(--font-body);font-size:.9rem;font-weight:500;text-decoration:none;transition:all .2s ease;cursor:pointer;border:none}.btn-primary{background:var(--color-accent);color:#fff}.btn-primary:hover{background:var(--color-accent-hover);transform:translateY(-1px);box-shadow:0 4px 12px #2d6a4f33}.btn-secondary{background:transparent;color:var(--color-text-secondary);border:1px solid var(--color-border)}.btn-secondary:hover{border-color:var(--color-accent);color:var(--color-accent)}.hero{padding:var(--space-xl) 0 var(--space-lg);border-bottom:1px solid var(--color-border)}.hero-greeting{font-family:var(--font-mono);font-size:.8rem;color:var(--color-accent);letter-spacing:.05em;text-transform:uppercase;margin-bottom:var(--space-sm);opacity:0;animation:fadeUp .6s ease forwards}.hero h1{font-family:var(--font-display);font-size:clamp(2rem,5vw,2.8rem);font-weight:500;line-height:1.3;color:var(--color-text);margin-bottom:var(--space-md);opacity:0;animation:fadeUp .6s ease .1s forwards}.hero p{font-size:1.05rem;color:var(--color-text-secondary);max-width:580px;opacity:0;animation:fadeUp .6s ease .2s forwards}.hero p+p{margin-top:var(--space-sm)}.hero-cta{margin-top:var(--space-md);display:flex;gap:var(--space-sm);flex-wrap:wrap;opacity:0;animation:fadeUp .6s ease .3s forwards}section{padding:var(--space-lg) 0;border-bottom:1px solid var(--color-border)}section:last-of-type{border-bottom:none}.section-label{font-family:var(--font-mono);font-size:.75rem;color:var(--color-text-tertiary);letter-spacing:.08em;text-transform:uppercase;margin-bottom:var(--space-md)}section h2{font-family:var(--font-display);font-size:1.6rem;font-weight:500;margin-bottom:var(--space-sm)}section p{color:var(--color-text-secondary);margin-bottom:var(--space-sm)}section p:last-child{margin-bottom:0}.thesis{background:var(--color-surface);border:1px solid var(--color-border);border-radius:8px;padding:var(--space-md);margin-top:var(--space-md)}.thesis p{font-family:var(--font-display);font-size:1.1rem;font-style:italic;color:var(--color-text);line-height:1.7;margin-bottom:0}.writing-list{list-style:none;margin-top:var(--space-sm)}.writing-list li{padding:var(--space-sm) 0}.writing-list li+li{border-top:1px solid var(--color-border-light)}.writing-list a{font-family:var(--font-display);font-size:1.05rem;color:var(--color-text);text-decoration:none;transition:color .2s}.writing-list a:hover{color:var(--color-accent)}.writing-date{font-family:var(--font-mono);font-size:.75rem;color:var(--color-text-tertiary);display:block;margin-top:.2rem}.writing-description{font-size:.9rem;color:var(--color-text-secondary);margin-top:.3rem;margin-bottom:0}.project{display:flex;gap:var(--space-md);align-items:flex-start;padding:var(--space-md) 0}.project+.project{border-top:1px solid var(--color-border-light)}.project-icon{flex-shrink:0;width:44px;height:44px;border-radius:10px;background:var(--color-accent-light);display:flex;align-items:center;justify-content:center;font-size:1.2rem}.project h3{font-family:var(--font-display);font-size:1.1rem;font-weight:500;margin-bottom:.25rem}.project h3 a{color:var(--color-text);text-decoration:none;border-bottom:1px solid transparent;transition:border-color .2s}.project h3 a:hover{border-bottom-color:var(--color-accent)}.project p{font-size:.925rem;margin-bottom:0}.services-grid{display:grid;grid-template-columns:1fr;gap:var(--space-md);margin-top:var(--space-md)}.service-card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:8px;padding:var(--space-md);transition:all .25s ease}.service-card:hover{border-color:var(--color-accent);box-shadow:0 2px 16px #0000000a;transform:translateY(-2px)}.service-card h3{font-family:var(--font-display);font-size:1.15rem;font-weight:500;margin-bottom:.5rem}.service-card p{font-size:.925rem;color:var(--color-text-secondary);margin-bottom:0}.service-tag{display:inline-block;font-family:var(--font-mono);font-size:.7rem;color:var(--color-accent);background:var(--color-accent-light);padding:.2rem .55rem;border-radius:4px;margin-bottom:.75rem}.about-details{margin-top:var(--space-md);padding-top:var(--space-sm);border-top:1px solid var(--color-border-light)}.about-details summary{font-family:var(--font-mono);font-size:.8rem;color:var(--color-accent);cursor:pointer;padding:var(--space-xs) 0;user-select:none}.about-details summary:hover{color:var(--color-accent-hover)}.timeline-item{padding:var(--space-sm) 0;display:flex;gap:var(--space-md)}.timeline-item+.timeline-item{border-top:1px solid var(--color-border-light)}.timeline-year{flex-shrink:0;width:80px;font-family:var(--font-mono);font-size:.8rem;color:var(--color-text-tertiary);padding-top:.15rem}.timeline-content h3{font-size:.95rem;font-weight:500;margin-bottom:.15rem}.timeline-content p{font-size:.875rem;color:var(--color-text-secondary);margin-bottom:0}.contact-section{background:var(--color-surface);border:1px solid var(--color-border);border-radius:8px;padding:var(--space-md);margin-top:var(--space-md)}.contact-links{display:flex;flex-wrap:wrap;gap:var(--space-sm);margin-top:var(--space-sm)}.contact-link{font-family:var(--font-mono);font-size:.85rem;color:var(--color-accent);text-decoration:none;padding:.4rem .8rem;border:1px solid var(--color-border);border-radius:5px;transition:all .2s}.contact-link:hover{background:var(--color-accent-light);border-color:var(--color-accent)}footer{max-width:var(--max-width);margin:0 auto;padding:var(--space-lg) var(--space-md) var(--space-md);display:flex;justify-content:space-between;align-items:center;font-size:.8rem;color:var(--color-text-tertiary)}footer a{color:var(--color-text-tertiary);text-decoration:none}footer a:hover{color:var(--color-accent)}article{max-width:680px;margin:0 auto;padding:var(--space-xl) var(--space-md) var(--space-lg)}.post-meta{font-family:var(--font-mono);font-size:.8rem;color:var(--color-text-tertiary);letter-spacing:.02em;margin-bottom:var(--space-sm)}article h1{font-family:var(--font-display);font-size:clamp(1.8rem,4.5vw,2.4rem);font-weight:500;line-height:1.3;color:var(--color-text);margin-bottom:var(--space-md)}.post-subtitle{font-family:var(--font-display);font-size:1.15rem;font-style:italic;color:var(--color-text-secondary);margin-bottom:var(--space-lg);padding-bottom:var(--space-lg);border-bottom:1px solid var(--color-border)}article p{color:var(--color-text-secondary);margin-bottom:var(--space-md);font-size:1.02rem}article h2{font-family:var(--font-display);font-size:1.4rem;font-weight:500;color:var(--color-text);margin-top:var(--space-lg);margin-bottom:var(--space-sm)}article a{color:var(--color-accent);text-decoration:none;border-bottom:1px solid var(--color-accent);transition:opacity .2s}article a:hover{opacity:.7}article em{color:var(--color-text)}article code{font-family:var(--font-mono);font-size:.9em;background:var(--color-accent-light);padding:.15em .4em;border-radius:3px;color:var(--color-accent-hover)}article .grid-table{width:100%;border-collapse:collapse;margin:var(--space-md) 0;font-size:.85rem}article .grid-table th{font-family:var(--font-mono);font-size:.7rem;font-weight:500;color:var(--color-text-tertiary);text-transform:uppercase;letter-spacing:.05em;padding:.6rem .5rem;text-align:center;border-bottom:2px solid var(--color-border);white-space:nowrap}article .grid-table th:first-child{text-align:left}article .grid-table td{padding:.6rem .5rem;text-align:center;border-bottom:1px solid var(--color-border-light)}article .grid-table td:first-child{font-weight:500;text-align:left;color:var(--color-text);font-size:.85rem}article .grid-table .check{color:var(--color-accent);font-size:1.1rem}article .grid-table .empty{color:var(--color-border)}article .grid-table .col-eng{background:var(--color-accent-light)}article .grid-table tr:last-child td{border-bottom:none}article .grid-table tr.row-full td{background:#d8f3dc4d}article .grid-table tr.row-full td:first-child{background:transparent}@media(max-width:480px){article .grid-table{font-size:.75rem}article .grid-table th,article .grid-table td{padding:.4rem .25rem}article .grid-table th{font-size:.6rem}}.post-separator{text-align:center;color:var(--color-text-tertiary);margin:var(--space-lg) 0;font-family:var(--font-mono);font-size:.9rem;letter-spacing:.3em}.post-footer{margin-top:var(--space-xl);padding-top:var(--space-lg);border-top:1px solid var(--color-border);font-size:.95rem}.post-footer p{color:var(--color-text-secondary)}@keyframes fadeUp{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}.fade-in{opacity:0;transform:translateY(12px);transition:opacity .5s ease,transform .5s ease}.fade-in.visible{opacity:1;transform:translateY(0)}@media(min-width:600px){.services-grid{grid-template-columns:1fr 1fr}}@media(max-width:480px){nav ul{gap:var(--space-sm)}nav a{font-size:.8rem}.hero h1{font-size:1.8rem}.project{flex-direction:column;gap:var(--space-xs)}.timeline-item{flex-direction:column;gap:.25rem}.timeline-year{width:auto}article h1{font-size:1.6rem}footer{flex-direction:column;gap:var(--space-xs);text-align:center}}
