.portfolio{max-width:720px;margin:0 auto;padding:48px 24px 40px;min-height:100vh;display:flex;flex-direction:column}@media (max-width: 600px){.header{position:relative;flex-direction:row;justify-content:space-between;align-items:flex-start;flex-wrap:wrap;gap:0}.header-right{gap:12px}}.header-left h1{font-size:18px;font-weight:600;line-height:1.25;letter-spacing:-.01em}.header-left p{font-size:14px;line-height:1.4;letter-spacing:0;color:var(--text-secondary);margin-top:2px}.header-right{display:flex;align-items:center;gap:24px}.theme-toggle{background:none;border:none;cursor:pointer;color:var(--icon-muted);padding:4px;display:flex;align-items:center;justify-content:center}.theme-toggle:hover{color:var(--text)}.nav-links{display:flex;gap:24px}.nav-links a{font-size:15px;color:var(--nav-text)}.nav-links a:hover{color:var(--nav-hover)}.nav-links a.nav-active{color:var(--nav-hover);font-weight:600}.nav-desktop{display:flex}.hamburger{display:none;flex-direction:column;gap:4px;background:none;border:none;cursor:pointer;padding:6px}.hamburger-line{display:block;width:20px;height:2px;background:var(--text);border-radius:2px;transition:transform .25s ease,opacity .25s ease}.hamburger-line.open:nth-child(1){transform:translateY(6px) rotate(45deg)}.hamburger-line.open:nth-child(2){opacity:0}.hamburger-line.open:nth-child(3){transform:translateY(-6px) rotate(-45deg)}.nav-mobile{display:flex;flex-direction:column;gap:12px;width:100%;margin-top:16px;padding:20px 0;border-top:1px solid var(--card-border)}.nav-mobile a{font-size:15px;color:var(--nav-text);padding:4px 0}.nav-mobile a:hover{color:var(--nav-hover)}.nav-mobile a.nav-active{color:var(--nav-hover);font-weight:600}@media (max-width: 600px){.nav-desktop{display:none}.hamburger,.nav-mobile{display:flex}.header{flex-wrap:wrap}}.bio{font-size:15.5px;color:var(--text-tertiary);line-height:1.65;letter-spacing:-.005em;font-weight:400;margin-bottom:36px;max-width:600px;opacity:0;animation:stagger-fade-in .5s cubic-bezier(.4,0,.2,1) .05s forwards}.links-card{border:1px solid var(--card-border);border-radius:12px;overflow:hidden;margin-bottom:36px}@keyframes stagger-fade-in{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}.link-row{display:flex;align-items:center;padding:16px 20px;border-bottom:1px solid var(--card-divider);cursor:pointer;text-decoration:none;color:inherit;transition:background .3s ease,transform .25s cubic-bezier(.4,0,.2,1),box-shadow .3s ease;position:relative;opacity:0;animation:stagger-fade-in .5s cubic-bezier(.4,0,.2,1) forwards}.link-row:nth-child(1){animation-delay:.1s}.link-row:nth-child(2){animation-delay:.2s}.link-row:nth-child(3){animation-delay:.3s}.link-row:nth-child(4){animation-delay:.4s}.link-row:nth-child(5){animation-delay:.5s}.link-row:last-child{border-bottom:1px solid var(--card-divider)}.link-row:hover{background:var(--card-hover);transform:translate(6px)}.link-row:active{transform:translate(3px) scale(.99)}.link-icon{width:36px;height:36px;display:flex;align-items:center;justify-content:center;margin-right:14px;flex-shrink:0;transition:transform .4s cubic-bezier(.34,1.56,.64,1),filter .3s ease}.link-row:hover .link-icon{transform:scale(1.18) rotate(-5deg);animation:icon-bounce .5s cubic-bezier(.34,1.56,.64,1);filter:brightness(1.15) drop-shadow(0 2px 6px rgba(0,0,0,.15))}@keyframes icon-bounce{0%{transform:scale(1) rotate(0)}40%{transform:scale(1.25) rotate(-8deg)}60%{transform:scale(1.1) rotate(-3deg)}to{transform:scale(1.18) rotate(-5deg)}}.link-row:hover .link-label{color:var(--nav-hover)}.link-label{font-size:15px;flex:1;transition:letter-spacing .3s ease}.link-row:hover .link-label{letter-spacing:.3px}.arrow-icon{color:var(--icon-muted);flex-shrink:0;transition:transform .3s cubic-bezier(.4,0,.2,1),color .3s ease}.link-row:hover .arrow-icon{transform:translate(3px,-3px);color:var(--text-primary)}.contact-section{margin-bottom:48px;opacity:0;animation:stagger-fade-in .5s cubic-bezier(.4,0,.2,1) .65s forwards}.contact-heading{font-size:20px;font-weight:600;margin-bottom:6px;letter-spacing:-.3px}.contact-subtitle{font-size:14px;color:var(--text-secondary);margin-bottom:20px}.contact-form{display:flex;flex-direction:column;gap:12px}.form-row{display:flex;gap:12px}.form-input,.form-textarea{width:100%;padding:12px 16px;font-size:14px;font-family:inherit;border:1px solid var(--card-border);border-radius:10px;background:transparent;color:var(--text);outline:none;transition:border-color .2s ease}.form-input:focus,.form-textarea:focus{border-color:var(--nav-hover)}.form-textarea{resize:vertical;min-height:100px}.form-submit{align-self:flex-start;padding:10px 24px;font-size:14px;font-family:inherit;font-weight:500;border:none;border-radius:10px;background:var(--cv-bg);color:var(--cv-text);cursor:pointer;transition:background .2s ease,transform .3s cubic-bezier(.34,1.56,.64,1),box-shadow .3s ease}.form-submit:hover{background:var(--cv-bg-hover);transform:translateY(-2px) scale(1.03);box-shadow:0 4px 12px #0000001f}.form-submit:disabled{opacity:.6;cursor:default}.form-field{display:flex;flex-direction:column;gap:4px;width:100%;position:relative}.form-input-error{border-color:#e53935!important;background:#e539350a}.form-input-valid{border-color:#43a047!important}.form-error{font-size:12px;color:#e53935;padding-left:4px}.form-char-count{font-size:11px;color:var(--text-secondary);text-align:right;padding-right:4px}.bottom-section{display:flex;justify-content:space-between;align-items:flex-end;margin-bottom:48px;opacity:0;animation:stagger-fade-in .5s cubic-bezier(.4,0,.2,1) .6s forwards}.email-row{display:flex;align-items:center;gap:8px;font-size:15px;line-height:1.3;letter-spacing:-.005em;font-weight:500;color:var(--email-text);margin-bottom:10px}.email-row svg{color:var(--email-icon)}.online-pill{display:inline-flex;align-items:center;gap:8px;border:1px solid #c8e6c9;border-radius:999px;padding:5px 14px 5px 12px;font-size:13px;line-height:1;font-weight:500;color:#2e7d32;background:#f1f8f1}[data-theme=dark] .online-pill{border-color:#2e7d32;color:#81c784;background:#2e7d3226}.online-dot{width:7px;height:7px;border-radius:50%;background:#4caf50;box-shadow:0 0 #4caf5099;animation:online-pulse 2s ease-out infinite;flex-shrink:0}@keyframes online-pulse{0%{box-shadow:0 0 #4caf508c}70%{box-shadow:0 0 0 6px #4caf5000}to{box-shadow:0 0 #4caf5000}}@media (max-width: 600px){.online-pill{padding:4px 12px 4px 10px;font-size:12px;gap:7px}.online-dot{width:6px;height:6px}}.cv-button{display:inline-flex;align-items:center;gap:10px;background:var(--cv-bg);color:var(--cv-text);border:none;border-radius:10px;padding:12px 24px;font-size:15px;cursor:pointer;font-family:inherit;text-decoration:none;transition:background .2s ease,transform .3s cubic-bezier(.34,1.56,.64,1),box-shadow .3s ease}.cv-button:hover{background:var(--cv-bg-hover);transform:translateY(-2px) scale(1.03);box-shadow:0 4px 12px #0000001f}.cv-button:hover svg{animation:download-bounce .5s cubic-bezier(.34,1.56,.64,1)}@keyframes download-bounce{0%{transform:translateY(0)}40%{transform:translateY(3px)}70%{transform:translateY(-2px)}to{transform:translateY(0)}}.footer{text-align:center;margin-top:auto;padding-top:16px;opacity:0;animation:stagger-fade-in .5s cubic-bezier(.4,0,.2,1) .7s forwards}.footer-links{display:flex;justify-content:center;gap:22px;font-size:13px;font-weight:500;letter-spacing:.01em;color:var(--footer-text);margin-bottom:8px}.footer-links a:hover{color:var(--footer-hover)}.footer-tagline{font-size:12px;line-height:1.5;letter-spacing:.02em;color:var(--footer-text)}.github-icon{fill:var(--github-fill)}.x-icon{fill:var(--x-fill)}@media (max-width: 600px){.header{flex-direction:column;gap:16px}.header-right,.nav-links{gap:16px}.bottom-section{flex-direction:column;align-items:flex-start;gap:20px}.form-row{flex-direction:column}}.skeleton-line{height:14px;border-radius:6px;background:var(--card-divider)}.skeleton-short{width:40%}.skeleton-medium{width:70%}.skeleton-long{width:100%}.skeleton-card{margin-top:12px;border:1px solid var(--card-border);border-radius:12px;padding:8px 0;display:flex;flex-direction:column;gap:8px}.skeleton-row{height:52px;margin:0 16px;border-radius:8px;background:var(--card-divider)}.page-skeleton{display:flex;flex-direction:column;gap:16px;padding:20px 0}.skeleton-line,.skeleton-row{position:relative;overflow:hidden;background:var(--card-divider)}.skeleton-line:after,.skeleton-row:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;transform:translate(-100%);background:linear-gradient(90deg,transparent,rgba(255,255,255,.12),transparent);animation:skeleton-shimmer 1.3s linear infinite}@keyframes skeleton-shimmer{to{transform:translate(100%)}}.not-found-page{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:50vh;text-align:center;position:relative;padding:40px 20px}.not-found-particles{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;overflow:hidden}.not-found-particle{position:absolute;width:6px;height:6px;border-radius:50%;background:var(--text-secondary);left:calc(40% + var(--i, 0) * 5%);top:60%}.not-found-particle:nth-child(1){left:20%}.not-found-particle:nth-child(2){left:35%}.not-found-particle:nth-child(3){left:50%}.not-found-particle:nth-child(4){left:65%}.not-found-particle:nth-child(5){left:75%}.not-found-particle:nth-child(6){left:85%}.not-found-illustration{display:flex;align-items:center;gap:4px;margin-bottom:24px}.not-found-four{font-size:80px;font-weight:800;color:var(--text);line-height:1;-webkit-user-select:none;-moz-user-select:none;user-select:none}.not-found-globe svg{display:block}.not-found-title{font-size:22px;font-weight:600;color:var(--text);margin-bottom:8px}.not-found-subtitle{font-size:15px;color:var(--text-secondary);margin-bottom:28px}.not-found-path{background:var(--card-divider);padding:2px 8px;border-radius:4px;font-size:13px;color:var(--text-tertiary)}.not-found-home-btn{display:inline-flex;align-items:center;gap:8px;padding:12px 24px;border-radius:10px;background:var(--cv-bg);color:var(--cv-text);font-size:15px;font-weight:500;text-decoration:none;transition:background .2s,transform .2s}.not-found-home-btn:hover{background:var(--cv-bg-hover);transform:translateY(-2px)}.social-proof{margin-top:40px;margin-bottom:32px}.proof-stats{display:flex;gap:16px;margin-bottom:28px}.proof-stat{flex:1;display:flex;flex-direction:column;align-items:center;padding:18px 12px;border:1px solid var(--card-border);border-radius:12px;background:var(--card-hover);transition:border-color .2s}.proof-stat:hover{border-color:var(--icon-muted)}.proof-stat-value{font-size:26px;font-weight:700;color:var(--text);line-height:1.1}.proof-stat-label{font-size:11px;color:var(--text-secondary);margin-top:4px;text-transform:uppercase;letter-spacing:.5px;font-weight:500}.proof-testimonials{display:flex;flex-direction:column;gap:14px}.proof-card{border:1px solid var(--card-border);border-radius:12px;padding:20px 22px;background:var(--card-hover);transition:border-color .2s,transform .2s}.proof-card:hover{border-color:var(--icon-muted);transform:translateY(-2px)}.proof-quote{font-size:14px;line-height:1.6;color:var(--text-tertiary);font-style:italic;margin-bottom:14px}.proof-author{display:flex;flex-direction:column;gap:2px}.proof-name{font-size:13px;font-weight:600;color:var(--text)}.proof-role{font-size:11px;color:var(--text-secondary)}@media (max-width: 480px){.proof-stats{gap:10px}.proof-stat{padding:14px 8px}.proof-stat-value{font-size:22px}}@media (max-width: 640px){.np-inner{gap:10px;padding:6px 2px;background:#232323d9;-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);border:1px solid rgba(255,255,255,.06)}.np-inner:before{content:"";position:absolute;top:-60%;left:-40%;width:180px;height:180px;border-radius:50%;background:var(--accent-color);filter:blur(90px);opacity:.18;pointer-events:none}.np-art{width:56px;height:56px;border-radius:12px;-o-object-fit:cover;object-fit:cover;flex-shrink:0}.np-title{font-size:15px;font-weight:600;margin-bottom:0;color:#fff;line-height:1.3;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.np-artist{font-size:13px;font-weight:500;color:#ffffffd1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;line-height:1.25;margin:0}.np-status{font-size:11px;color:#ffffffa6;margin-bottom:4px}.np-spotify{width:16px;height:16px}}.now-playing{margin:0;overflow:hidden;transition:box-shadow .4s ease,transform .3s ease}.np-inner{--accent-color: #1DB954;position:relative;overflow:hidden;display:flex;align-items:center;gap:14px;padding:12px 16px;border-radius:0;background:linear-gradient(135deg,color-mix(in srgb,var(--accent-color) 28%,#0b0b0b),#141414 55%,#090909);border:1px solid rgba(255,255,255,.08);-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);text-decoration:none;transition:transform .35s ease,box-shadow .35s ease,border-color .35s ease}.np-inner:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:radial-gradient(circle at 12% 58%,color-mix(in srgb,var(--accent-color) 58%,transparent),transparent 46%),radial-gradient(circle at 92% 8%,color-mix(in srgb,var(--accent-color) 42%,transparent),transparent 62%);opacity:.62;filter:saturate(1.15);pointer-events:none}.np-inner:hover{border-color:color-mix(in srgb,var(--accent-color) 42%,rgba(255,255,255,.16));transform:translateY(-1px);box-shadow:0 10px 28px #00000052}.np-inner:hover .np-art{transform:scale(1.06)}.np-inner-muted{cursor:pointer}.np-art{width:68px;height:68px;border-radius:14px;-o-object-fit:cover;object-fit:cover;flex-shrink:0;box-shadow:0 0 25px #00000040;transition:transform .35s cubic-bezier(.2,.8,.2,1),box-shadow .35s ease;transform:scale(1)}.np-art-fallback{display:flex;align-items:center;justify-content:center;background:var(--card-divider);color:var(--text-secondary)}.np-art-error{color:#e53935}.np-art-loading{animation:skeleton-pulse 1.2s ease-in-out infinite alternate}.np-meta{flex:1;display:flex;flex-direction:column;justify-content:flex-start;gap:2px;min-width:0}.np-status{font-size:10px;text-transform:uppercase;letter-spacing:.06em;color:var(--text-secondary);display:flex;align-items:center;gap:6px;margin-bottom:4px}.np-dot{width:6px;height:6px;border-radius:50%;background:var(--text-secondary)}.np-dot-live{background:#1db954;animation:np-pulse 1.6s ease-in-out infinite}.np-equalizer{width:10px;height:11px;display:inline-flex;align-items:end;gap:1px;color:#1db954}.np-equalizer span{width:2px;height:45%;border-radius:999px;background:currentColor;animation:np-equalizer .85s ease-in-out infinite alternate}.np-equalizer span:nth-child(2){height:85%;animation-delay:-.28s}.np-equalizer span:nth-child(3){height:60%;animation-delay:-.52s}@keyframes np-equalizer{0%{transform:scaleY(.4)}to{transform:scaleY(1)}}.np-dot-error{background:#e53935}.np-dot-loading{background:var(--text-secondary);animation:np-pulse 1.2s ease-in-out infinite}@keyframes np-pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.4;transform:scale(1.3)}}.np-title{font-size:15px;font-weight:600;color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-bottom:2px;line-height:1.2}.np-title-muted{color:var(--text-secondary);font-weight:400}.np-artist{font-size:13px;color:var(--text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.np-progress{width:100%;height:4px;background:#ffffff26;border-radius:999px;overflow:hidden;padding:0;margin-top:8px}.np-progress-fill{height:100%;border-radius:inherit;box-shadow:0 0 10px color-mix(in srgb,var(--accent-color) 72%,transparent);transition:width 1s linear}.np-timing{display:flex;justify-content:space-between;margin-top:4px;color:#ffffff7a;font-size:10px;font-variant-numeric:tabular-nums;line-height:1}.np-spotify{margin-left:auto;margin-top:2px;width:22px;height:22px;align-self:flex-start;opacity:.9;flex-shrink:0}.np-spotify:hover .np-spotify{transform:translate(3px)}[data-theme=light] .np-inner{background:linear-gradient(135deg,color-mix(in srgb,var(--accent-color) 14%,#ffffff),#fbfbfb 55%,#f2f2f2);border-color:#0000001a;box-shadow:inset 0 1px #ffffffbf}[data-theme=light] .np-inner:before{opacity:.2}[data-theme=light] .np-inner:hover{border-color:color-mix(in srgb,var(--accent-color) 42%,rgba(0,0,0,.16));box-shadow:0 10px 28px #0000001f,inset 0 1px #ffffffbf}[data-theme=light] .np-title{color:#1a1a1a}[data-theme=light] .np-artist,[data-theme=light] .np-status,[data-theme=light] .np-timing{color:#1a1a1a9e}[data-theme=light] .np-progress{background:#0000001f}[data-theme=light] .np-title-muted{color:var(--text-secondary)}@media (prefers-reduced-motion: reduce){.np-equalizer span,.np-progress-fill,.np-inner{animation:none;transition:none}}.about-section{margin-bottom:36px}.about-heading{font-size:20px;font-weight:600;margin-bottom:16px;letter-spacing:-.3px}.about-card{background:transparent;border-color:var(--card-border)}.skills-section{margin-bottom:48px}.category-badges{display:flex;gap:8px;margin-bottom:20px;flex-wrap:wrap}.skills-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:14px}.skill-card{cursor:default;border-color:var(--card-border);background:transparent;transition:transform .3s cubic-bezier(.4,0,.2,1),background .3s ease,box-shadow .3s ease}.skill-card:hover{transform:translateY(-4px) scale(1.03);background:var(--card-hover);box-shadow:0 8px 24px #00000014}.skill-card-content{display:flex;flex-direction:column;align-items:center;gap:10px;padding:20px 12px!important}.skill-logo{transition:transform .3s cubic-bezier(.4,0,.2,1)}.skill-card:hover .skill-logo{transform:scale(1.15) rotate(-5deg)}.skill-name{font-size:13px;font-weight:500;color:var(--text-secondary);text-align:center}.skill-badge{font-size:10px;padding:1px 8px}.pro-skills-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:14px}.pro-skill-card{cursor:default;border-color:var(--card-border);background:transparent;transition:transform .3s cubic-bezier(.4,0,.2,1),background .3s ease,box-shadow .3s ease}.pro-skill-card:hover{transform:translateY(-4px);background:var(--card-hover);box-shadow:0 8px 24px #00000014}.pro-skill-content{display:flex;flex-direction:column;gap:6px;padding:20px 16px!important}.pro-skill-icon{font-size:28px;margin-bottom:4px}.pro-skill-title{font-size:15px;font-weight:600;letter-spacing:-.2px}.pro-skill-desc{font-size:13px;color:var(--text-secondary);line-height:1.5;margin:0}.timeline{position:relative;padding-left:28px;display:flex;flex-direction:column;gap:28px}.timeline:before{content:"";position:absolute;left:7px;top:4px;bottom:4px;width:2px;background:var(--card-border)}.timeline-item{position:relative}.timeline-dot{position:absolute;left:-24px;top:6px;width:12px;height:12px;border-radius:50%;background:var(--cv-bg);border:2px solid var(--cv-bg-hover)}.timeline-content{display:flex;flex-direction:column;gap:6px}.timeline-header{display:flex;justify-content:space-between;align-items:baseline;flex-wrap:wrap;gap:8px}.timeline-role{font-size:15px;font-weight:600;letter-spacing:-.2px;color:var(--text)}.timeline-period{font-size:12px;color:var(--text-secondary);white-space:nowrap}.timeline-company{font-size:13px;font-weight:500;color:var(--text-tertiary);margin:0}.timeline-desc{font-size:13px;color:var(--text-secondary);line-height:1.5;margin:0}.timeline-stack{display:flex;flex-wrap:wrap;gap:6px;margin-top:4px}[data-theme=dark] .invert-in-dark{filter:invert(1)}@media (max-width: 600px){.skills-grid{grid-template-columns:repeat(3,1fr);gap:10px}.skill-card-content{padding:16px 8px!important}}.articles-section{margin-bottom:48px}.articles-heading{font-size:20px;font-weight:600;margin-bottom:16px;letter-spacing:-.3px}.articles-subtitle{font-size:14px;color:var(--text-secondary);margin-bottom:20px}.substack-link{color:var(--text);text-decoration:underline;text-underline-offset:2px}.articles-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:16px}.article-card-link{text-decoration:none;color:inherit}.article-card{cursor:pointer;border-color:var(--card-border);background:transparent;transition:transform .3s cubic-bezier(.4,0,.2,1),background .3s ease,box-shadow .3s ease;height:100%}.article-card:hover{transform:translateY(-4px);background:var(--card-hover);box-shadow:0 8px 24px #00000014}.article-cover{width:100%;height:180px;-o-object-fit:cover;object-fit:cover;display:block;border-radius:12px 12px 0 0}.article-card-content{display:flex;flex-direction:column;gap:8px;padding:20px 16px!important}.article-date{font-size:12px;color:var(--text-secondary);opacity:.7}.article-title{font-size:16px;font-weight:600;letter-spacing:-.3px;line-height:1.3}.article-excerpt{font-size:13px;color:var(--text-secondary);line-height:1.5;margin:0}.article-read-more{font-size:13px;font-weight:500;margin-top:4px;opacity:.6;transition:opacity .2s ease}.article-card:hover .article-read-more{opacity:1}.projects-simple{--project-bg: var(--background);--project-ink: var(--text);--project-ink-muted: var(--text-secondary);--project-ink-dim: var(--text-secondary);--project-line: var(--card-border);--font-serif: "Cormorant Garamond", "Playfair Display", "Times New Roman", serif;--font-sans: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;position:relative;background:var(--project-bg);color:var(--project-ink);margin:0 -1.5rem;padding:0;min-height:100vh;overflow:hidden;font-family:var(--font-sans)}.projects-heading{font-family:var(--font-serif);font-weight:400;font-size:clamp(42px,7vw,92px);line-height:1.05;letter-spacing:-.035em;color:var(--project-ink);padding:96px 6vw 56px;border-bottom:1px solid var(--project-line)}.projects-list{list-style:none;padding:0;margin:0}.project-item{border-bottom:1px solid var(--project-line);opacity:0}@media (prefers-reduced-motion: reduce){.project-item{opacity:1}}.project-link{display:flex;flex-direction:column;gap:6px;padding:48px 6vw;text-decoration:none;color:inherit;transition:background .35s ease}.project-link:hover{background:#f5f0e606}.project-name{font-family:var(--font-serif);font-weight:400;font-size:clamp(28px,4vw,48px);line-height:1.15;letter-spacing:-.025em;color:var(--project-ink);transition:color .3s ease}.project-link:hover .project-name{color:var(--project-ink)}.project-domain{font-family:var(--font-sans);font-size:11px;letter-spacing:.28em;text-transform:uppercase;color:var(--project-ink-dim);transition:color .3s ease}.project-link:hover .project-domain{color:var(--project-ink-muted)}.project-desc{font-family:var(--font-sans);font-size:15px;line-height:1.55;color:var(--project-ink-muted);max-width:520px;transition:color .3s ease}.project-link:hover .project-desc{color:#f5f0e699}@media (max-width: 900px){.projects-simple{margin:0;width:100%;min-height:100dvh}.projects-heading{padding:64px 24px 36px;font-size:clamp(36px,10vw,64px)}.project-link{padding:36px 24px;gap:5px}.project-name{font-size:clamp(24px,6vw,36px)}.project-domain{font-size:10px;letter-spacing:.24em}.project-desc{font-size:14px;max-width:none}}@media (max-width: 480px){.projects-simple{margin:0;width:100%;min-height:100dvh}.projects-heading{padding:48px 18px 28px}.project-link{padding:28px 18px}}.guestbook{max-width:640px;margin:0 auto;padding:2rem 1.25rem 4rem;color:var(--text)}.guestbook-header{margin-bottom:1.75rem}.guestbook-header h1{font-size:1.75rem;font-weight:600;margin-bottom:.35rem}.guestbook-header p{color:var(--text-secondary);font-size:.95rem}.guestbook-auth,.guestbook-form{display:flex;flex-direction:column;gap:.75rem;padding:1.25rem;border:1px solid var(--card-border);border-radius:10px;background:var(--card-hover);margin-bottom:2.5rem}.guestbook-auth-tabs{display:flex;gap:.25rem;margin-bottom:.25rem}.guestbook-auth-tabs button{flex:1;padding:.5rem;border:1px solid var(--card-border);background:transparent;color:var(--text-secondary);border-radius:6px;cursor:pointer;font-size:.9rem}.guestbook-auth-tabs button.active{background:var(--bg);color:var(--text)}.guestbook-auth input,.guestbook-form input,.guestbook-form textarea{padding:.65rem .85rem;border:1px solid var(--card-border);border-radius:6px;background:var(--bg);color:var(--text);font:inherit;font-size:.95rem;outline:none;transition:border-color .15s}.guestbook-auth input:focus,.guestbook-form input:focus,.guestbook-form textarea:focus{border-color:var(--text-tertiary)}.guestbook-form textarea{resize:vertical}.guestbook-auth button[type=submit],.guestbook-form button[type=submit]{padding:.7rem 1rem;border:none;border-radius:6px;background:var(--cv-bg);color:var(--cv-text);font-weight:500;cursor:pointer;transition:background .15s}.guestbook-auth button[type=submit]:hover,.guestbook-form button[type=submit]:hover{background:var(--cv-bg-hover)}.guestbook-auth button[type=submit]:disabled,.guestbook-form button[type=submit]:disabled{opacity:.6;cursor:not-allowed}.guestbook-signed-in{display:flex;justify-content:space-between;align-items:center;font-size:.85rem;color:var(--text-secondary)}.guestbook-user,.entry-author{display:inline-flex;align-items:center;gap:.55rem;min-width:0}.guestbook-avatar{position:relative;display:inline-grid;place-items:center;width:2rem;height:2rem;flex:0 0 auto;overflow:hidden;border:1px solid var(--card-border);border-radius:50%;background:var(--cv-bg);color:var(--cv-text);font-size:.78rem;font-weight:700}.guestbook-avatar-small{width:1.5rem;height:1.5rem;font-size:.65rem}.guestbook-avatar img{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;-o-object-fit:cover;object-fit:cover;background:var(--cv-bg)}.linklike{background:none;border:none;color:var(--text-tertiary);cursor:pointer;font:inherit;font-size:.85rem;text-decoration:underline;padding:0}.signature-wrap{display:flex;flex-direction:column;gap:.4rem}.signature-label{display:flex;justify-content:space-between;font-size:.85rem;color:var(--text-secondary)}.signature-pad{width:100%;height:140px;border:1px dashed var(--card-border);border-radius:6px;background:var(--bg);color:var(--text);cursor:crosshair;display:block}.guestbook-entries h2{font-size:1.05rem;font-weight:500;margin-bottom:1rem;color:var(--text-secondary)}.guestbook-entries ul{list-style:none;display:flex;flex-direction:column;gap:1rem}.entry{padding:1rem 1.1rem;border:1px solid var(--card-border);border-radius:8px;background:var(--card-hover)}.entry-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:.4rem;font-size:.9rem}.entry-author strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.entry-head time{color:var(--text-secondary);font-size:.8rem}.entry-message{white-space:pre-wrap;color:var(--text-tertiary);font-size:.95rem;margin-bottom:.6rem}.entry-signature{color:var(--text);border-top:1px solid var(--card-divider);padding-top:.6rem}.entry-signature svg{max-width:240px;height:auto;display:block}.muted{color:var(--text-secondary);font-size:.9rem}.oauth-btn{display:inline-flex;align-items:center;justify-content:center;gap:.6rem;width:100%;padding:.7rem 1rem;border:1px solid var(--card-divider);border-radius:8px;background:var(--bg);color:var(--text);font-size:.95rem;cursor:pointer;transition:background .15s ease,border-color .15s ease}.oauth-btn:hover:not(:disabled){background:var(--card-hover, rgba(127,127,127,.06))}.oauth-btn:disabled{opacity:.6;cursor:not-allowed}.oauth-btn svg{flex-shrink:0}:root,[data-theme=light]{--bg: #f5f5f5;--text: #1a1a1a;--text-secondary: #666;--text-tertiary: #444;--nav-text: #333;--nav-hover: #000;--card-border: #ddd;--card-divider: #eee;--card-hover: #fafafa;--icon-muted: #999;--email-text: #333;--email-icon: #888;--cv-bg: #d4eaf7;--cv-bg-hover: #c0dff0;--cv-text: #1a1a1a;--footer-text: #666;--footer-hover: #333;--github-fill: #333;--x-fill: #000}[data-theme=dark]{--bg: #1a1a1a;--text: #e8e8e8;--text-secondary: #999;--text-tertiary: #bbb;--nav-text: #ccc;--nav-hover: #fff;--card-border: #333;--card-divider: #2a2a2a;--card-hover: #252525;--icon-muted: #777;--email-text: #ccc;--email-icon: #888;--cv-bg: #1e3a4f;--cv-bg-hover: #254b63;--cv-text: #d4eaf7;--footer-text: #888;--footer-hover: #ccc;--github-fill: #e8e8e8;--x-fill: #e8e8e8}*{margin:0;padding:0;box-sizing:border-box}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;background:var(--bg);color:var(--text);line-height:1.6;-webkit-font-smoothing:antialiased;transition:background .3s,color .3s}a{color:inherit;text-decoration:none}
