:root{--bg-canvas: #181818;--bg-surface: #1f1f1f;--bg-card: #272727;--bg-elevated: #313131;--bg-deep: #131209;--text-primary: #f3f3f3;--text-secondary: #a1a1a1;--text-muted: #8e8e8e;--accent: #e5a970;--accent-hover: #f3be8c;--accent-muted: rgba(229, 169, 112, .15);--border-subtle: #2e2e2e;--border-card: #383838;--border-focus: #e5a970;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-6: 24px;--space-8: 32px;--space-10: 40px;--space-12: 48px;--space-16: 64px;--radius-sm: 4px;--radius-md: 8px;--radius-lg: 12px;--radius-full: 9999px;--ease-weighted: cubic-bezier(.32, .72, 0, 1);--transition-standard: all .3s var(--ease-weighted);--transition-fast: all .22s var(--ease-weighted)}*,*:before,*:after{box-sizing:border-box}html{background:var(--bg-canvas);color:var(--text-primary);font-family:Manrope,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;color-scheme:dark}body{margin:0;background:var(--bg-canvas);color:var(--text-primary);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;position:relative}.grain-overlay{position:fixed;inset:0;width:100vw;height:100vh;pointer-events:none;z-index:9998;opacity:.035;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E")}.skip-link{position:absolute;top:-9999px;left:var(--space-4);background:var(--bg-elevated);color:var(--accent);padding:var(--space-2) var(--space-4);z-index:9999;text-decoration:none;font-size:.875rem;font-weight:600;border-radius:var(--radius-sm);border:1px solid var(--border-subtle)}.skip-link:focus{top:var(--space-4)}button,a{-webkit-tap-highlight-color:transparent;font-family:inherit}:focus-visible{outline:2px solid var(--border-focus);outline-offset:4px}[hidden]{display:none!important}.site-shell{min-height:100dvh;display:flex;flex-direction:column;max-width:1440px;margin-inline:auto;padding-inline:clamp(24px,5vw,80px)}.site-header{text-align:center;flex:none}.top-nav-container{display:flex;justify-content:center;padding-block-start:var(--space-6)}.top-links{display:inline-flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:var(--space-1);border:1px solid var(--border-card);background:#1f1f1fbf;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-radius:var(--radius-full);padding:var(--space-1) var(--space-2);box-shadow:0 4px 20px #0000004d;color:var(--text-muted)}.top-links button,.back-link{color:var(--text-secondary);background:none;border:1px solid transparent;cursor:pointer;padding:var(--space-2) var(--space-4);min-height:40px;display:inline-flex;align-items:center;justify-content:center;font-size:.875rem;font-weight:500;border-radius:var(--radius-full);transition:var(--transition-fast)}.nav-divider{color:var(--border-card);font-size:.875rem;padding-inline:2px}.top-links button:hover,.back-link:hover{color:var(--text-primary);background:#ffffff0d}.top-links button:active,.back-link:active,.carousel-controls button:active{transform:scale(.98)}.top-links button[aria-expanded=true]{color:var(--text-primary);background:var(--bg-card);border-color:var(--border-card);font-weight:600;box-shadow:0 2px 8px #00000040}.identity{padding-block:clamp(24px,4vh,44px) clamp(16px,3vh,28px)}.eyebrow,.section-label,.project-category,.item-meta,.stack-label{text-transform:uppercase;font-size:.75rem;font-weight:600;letter-spacing:.06em;color:var(--accent)}.eyebrow{margin-block:0 var(--space-2)}h1,h2,h3,p{margin-block-start:0}h1,.info-stage>h2,.project-copy h2{font-weight:600;letter-spacing:-.03em;text-wrap:balance}h1{font-size:clamp(2.25rem,4.5vw,4.25rem);line-height:1.1;margin-block-end:var(--space-3);background:linear-gradient(to right,#fff,#9b9b9b);-webkit-background-clip:text;-webkit-text-fill-color:transparent}.period{color:var(--accent);-webkit-text-fill-color:var(--accent)}.intro{color:var(--text-secondary);line-height:1.6;font-size:clamp(.9375rem,1.15vw,1.0625rem);margin-inline:auto;margin-block-end:0;max-width:60ch;text-wrap:pretty}.main-stage{flex:1;min-height:0;display:flex;flex-direction:column}.stage{width:100%;flex:1;min-height:0;display:flex;flex-direction:column}.stage-heading{flex:none;display:flex;justify-content:space-between;align-items:center;padding-block:var(--space-3);border-top:1px solid var(--border-subtle)}.project-count{color:var(--text-muted);font-variant-numeric:tabular-nums;font-size:.8125rem;letter-spacing:.12em;font-weight:500}.project-viewport{flex:1;min-height:0;display:flex;position:relative}.project{width:100%;flex:1;min-height:0;display:grid;grid-template-columns:minmax(0,1.15fr) minmax(260px,.85fr);gap:clamp(24px,4vw,64px);align-items:center;padding-block:var(--space-2) var(--space-4);animation:fadeIn .35s var(--ease-weighted)}@keyframes fadeIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.project-image{height:100%;max-height:min(46vh,440px);min-height:220px;overflow:hidden;background:var(--bg-surface);border-radius:var(--radius-md);border:1px solid var(--border-card);outline:1px solid oklch(1 0 0 / .1);outline-offset:-1px}.project-image img{width:100%;height:100%;object-fit:cover;display:block}.project-image-placeholder{width:100%;height:100%;min-height:220px;display:flex;align-items:center;justify-content:center;background:radial-gradient(circle at 50% 45%,var(--bg-card),var(--bg-surface));position:relative;user-select:none;overflow:hidden}.project-image-placeholder:before{content:"";position:absolute;inset:0;background:radial-gradient(circle at 50% 50%,var(--accent-muted),transparent 70%);pointer-events:none}.placeholder-initials{font-size:clamp(3.5rem,8vw,6rem);font-weight:700;letter-spacing:.04em;color:var(--accent);text-shadow:0 4px 24px rgba(0,0,0,.4);position:relative;z-index:1}.project-copy{max-width:520px}.project-category{display:inline-block;margin-block-end:var(--space-3)}.project-copy h2{font-size:clamp(1.875rem,3.5vw,3.5rem);line-height:1.12;margin-block-end:var(--space-4);color:var(--text-primary)}.project-copy>p{color:var(--text-secondary);line-height:1.65;font-size:clamp(.9375rem,1.1vw,1.0625rem);max-width:65ch;margin-block-end:var(--space-4);text-wrap:pretty}.tech-stack{display:flex;align-items:baseline;gap:var(--space-3);margin-block-end:var(--space-6)}.tech-stack ul{display:flex;flex-wrap:wrap;gap:var(--space-1) 0;list-style:none;margin:0;padding:0;color:var(--text-secondary);font-size:.8125rem;line-height:1.5}.tech-stack li:not(:last-child):after{content:"·";padding-inline:var(--space-2);color:var(--text-muted)}.project-links{display:flex;flex-wrap:wrap;gap:var(--space-3) var(--space-6)}.project-links a,.document-link,.contact-links a{color:var(--text-primary);text-decoration:underline;text-underline-offset:5px;text-decoration-color:var(--border-card);font-size:.9375rem;font-weight:500;display:inline-flex;align-items:center;transition:var(--transition-fast)}.project-links a:hover,.document-link:hover,.contact-links a:hover{color:var(--accent-hover);text-decoration-color:var(--accent)}.icon-arrow{display:inline-block;vertical-align:middle;margin-inline-start:4px;transition:transform .22s var(--ease-weighted)}.project-links a:hover .icon-arrow,.document-link:hover .icon-arrow,.contact-links a:hover .icon-arrow{transform:translate(2px,-2px)}.carousel-controls{display:flex;justify-content:center;align-items:center;gap:var(--space-4);padding-block:var(--space-3) var(--space-4)}.carousel-controls button{border:1px solid transparent;background:none;color:var(--text-secondary);cursor:pointer;padding:var(--space-2) var(--space-4);min-height:44px;min-width:44px;display:inline-flex;align-items:center;justify-content:center;font-size:1rem;font-weight:600;border-radius:var(--radius-full);transition:var(--transition-fast)}.carousel-controls button span{font-size:.9375rem;padding-inline:var(--space-1)}.carousel-controls button:hover{color:var(--text-primary);background:var(--bg-surface);border-color:var(--border-subtle)}.control-line{width:48px;height:1px;background:var(--border-subtle)}.site-footer{flex:none;min-height:64px;border-top:1px solid var(--border-subtle);display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--space-4);color:var(--text-muted);font-size:.8125rem;padding-block:var(--space-3)}.contact-links{display:flex;gap:var(--space-4);align-items:center}.unavailable-link{color:var(--text-muted);cursor:default;font-size:.875rem}.empty-state{text-align:center;margin:auto;color:var(--text-secondary);padding:var(--space-8)}.info-stage{max-width:980px;margin-inline:auto;animation:fadeIn .35s var(--ease-weighted)}.info-stage>h2{font-size:clamp(2.25rem,4vw,3.5rem);margin-block:var(--space-3) var(--space-6);color:var(--text-primary)}.info-list,.certificate-grid{overflow-y:auto;min-height:0;scrollbar-color:var(--border-card) transparent}.info-item{display:grid;grid-template-columns:minmax(180px,.35fr) minmax(0,1fr);gap:var(--space-6);border-top:1px solid var(--border-subtle);padding-block:var(--space-6)}.item-meta{display:flex;flex-direction:column;gap:var(--space-2);line-height:1.5}.item-date{color:var(--text-secondary);font-size:.875rem;font-weight:500;font-variant-numeric:tabular-nums}.item-date .status-present{color:var(--accent);font-weight:600}.type-badge{display:inline-flex;align-items:center;gap:6px;width:fit-content;padding:3px 9px;border-radius:9999px;font-size:.6875rem;font-weight:600;letter-spacing:.04em;text-transform:uppercase;line-height:1}.badge-dot{width:6px;height:6px;border-radius:50%;display:inline-block}.badge-work{background:#e5a9701f;color:var(--accent);border:1px solid rgba(229,169,112,.3)}.badge-work .badge-dot{background-color:var(--accent);box-shadow:0 0 6px #e5a97080}.badge-bootcamp{background:#ffffff0d;color:var(--text-secondary);border:1px solid var(--border-card)}.badge-bootcamp .badge-dot{background-color:var(--text-muted)}.company-row{display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap;margin-block:var(--space-1) var(--space-2)}.item-company{color:var(--text-primary);font-weight:600;font-size:.9375rem;letter-spacing:-.01em}.item-separator{color:var(--text-muted);opacity:.6;font-size:.875rem}.item-location{color:var(--text-muted);font-size:.875rem}.experience-tech,.education-coursework{margin-block-start:var(--space-3)}.experience-tech ul,.education-coursework ul{display:flex;flex-wrap:wrap;gap:var(--space-2);list-style:none;padding:0;margin:0}.experience-tech li,.education-coursework li{font-size:.75rem;font-weight:500;color:var(--text-secondary);background:var(--bg-surface);border:1px solid var(--border-subtle);border-radius:var(--radius-sm);padding:3px 8px;line-height:1.3;transition:border-color .15s ease,color .15s ease,background-color .15s ease}.experience-tech li:hover,.education-coursework li:hover{border-color:var(--border-card);color:var(--text-primary);background:var(--bg-card)}.info-item h3,.certificate-item h3{font-size:1.1875rem;font-weight:600;margin-block-end:var(--space-1);color:var(--text-primary);text-wrap:balance}.item-place,.certificate-item p{margin:0;color:var(--text-muted);font-size:.875rem}.item-description{margin-block-start:var(--space-2);color:var(--text-secondary);font-size:.875rem;line-height:1.6;max-width:70ch;text-wrap:pretty}.certificate-grid{column-count:3;column-gap:var(--space-5);padding-block-end:var(--space-6)}.certificate-item{break-inside:avoid;display:inline-block;width:100%;margin-block-end:var(--space-6)}.certificate-preview,.certificate-placeholder{width:100%;display:block;border:1px solid var(--border-card);background:var(--bg-surface);border-radius:var(--radius-md);margin-block-end:var(--space-3);padding:0;overflow:hidden;outline:1px solid oklch(1 0 0 / .08);outline-offset:-1px}.certificate-preview{cursor:zoom-in;transition:border-color var(--transition-fast),transform var(--transition-fast)}.certificate-preview:hover{border-color:var(--accent)}.certificate-preview:active{transform:scale(.98)}.certificate-preview img{width:100%;height:auto;display:block}.certificate-placeholder{aspect-ratio:1 / 1.414;display:grid;place-items:center;text-align:center;color:var(--text-muted);font-size:.9375rem;line-height:1.5;padding:var(--space-4)}.certificate-placeholder.is-landscape{aspect-ratio:1.414 / 1}.document-link{display:inline-flex;margin-block-start:var(--space-2)}dialog{border:1px solid var(--border-card);border-radius:var(--radius-lg);padding:var(--space-6);max-width:min(90vw,1000px);max-height:90vh;background:var(--bg-surface);color:var(--text-primary);overscroll-behavior:contain;box-shadow:0 20px 40px #0009}dialog::backdrop{background:#000c;backdrop-filter:blur(4px)}dialog img{max-width:100%;max-height:72vh;object-fit:contain;display:block;margin:auto;border-radius:var(--radius-sm)}dialog p{text-align:center;margin-block-start:var(--space-3);color:var(--text-secondary);font-size:1rem;font-weight:500}#close-certificate{display:inline-flex;align-items:center;justify-content:center;margin-inline-start:auto;margin-block-end:var(--space-3);cursor:pointer;background:var(--bg-card);border:1px solid var(--border-subtle);color:var(--text-secondary);padding:var(--space-2) var(--space-4);min-height:36px;border-radius:var(--radius-sm);font-size:.875rem;font-weight:500;transition:var(--transition-fast)}#close-certificate:hover{color:var(--text-primary);border-color:var(--accent)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media(max-width:768px){.site-shell{padding-inline:var(--space-4)}.top-links{padding:4px;gap:2px}.top-links button{padding:var(--space-2) var(--space-3);font-size:.8125rem}.project{display:flex;flex-direction:column;align-items:stretch;gap:var(--space-4);padding-block:var(--space-1) var(--space-3)}.project-image{flex:none;height:clamp(200px,32vh,320px);min-height:0}.info-item{grid-template-columns:1fr;gap:var(--space-2)}.item-meta{flex-direction:row;align-items:center;flex-wrap:wrap;gap:var(--space-3)}.certificate-grid{column-count:2}}@media(max-width:580px){.certificate-grid{column-count:1}}@media(max-width:480px){.site-footer{flex-direction:column;align-items:center;text-align:center;gap:var(--space-2)}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}:root{color-scheme:dark}
