@font-face{font-display:swap;font-family:Sora;font-style:normal;font-weight:600;src:url(./sora-latin-ext-600-normal.Cue1zdhl.woff2) format("woff2"),url(./sora-latin-ext-600-normal.DLOJK0Ta.woff) format("woff");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-display:swap;font-family:Sora;font-style:normal;font-weight:600;src:url(./sora-latin-600-normal.Cdg4DaK0.woff2) format("woff2"),url(./sora-latin-600-normal.1_7fyUAY.woff) format("woff");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Sora;font-style:normal;font-weight:700;src:url(./sora-latin-ext-700-normal.DM0oy5s8.woff2) format("woff2"),url(./sora-latin-ext-700-normal.Oc7uZIYt.woff) format("woff");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-display:swap;font-family:Sora;font-style:normal;font-weight:700;src:url(./sora-latin-700-normal.9waGdLWo.woff2) format("woff2"),url(./sora-latin-700-normal.BKPfQAnC.woff) format("woff");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Instrument Sans Variable;font-style:normal;font-weight:400 700;src:url(./instrument-sans-latin-ext-wght-normal.B5bTHO_g.woff2) format("woff2-variations");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-display:swap;font-family:Instrument Sans Variable;font-style:normal;font-weight:400 700;src:url(./instrument-sans-latin-wght-normal.BbzFLZTg.woff2) format("woff2-variations");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:IBM Plex Mono;font-style:normal;font-weight:400;src:url(./ibm-plex-mono-cyrillic-ext-400-normal.xuaO2J-f.woff2) format("woff2"),url(./ibm-plex-mono-cyrillic-ext-400-normal.DMdlQ8Kv.woff) format("woff");unicode-range:u+0460-052f,u+1c80-1c8a,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-display:swap;font-family:IBM Plex Mono;font-style:normal;font-weight:400;src:url(./ibm-plex-mono-cyrillic-400-normal.BSMlKf0J.woff2) format("woff2"),url(./ibm-plex-mono-cyrillic-400-normal.CEL4l2ZJ.woff) format("woff");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-display:swap;font-family:IBM Plex Mono;font-style:normal;font-weight:400;src:url(./ibm-plex-mono-vietnamese-400-normal.BulugwFq.woff2) format("woff2"),url(./ibm-plex-mono-vietnamese-400-normal.DDuiU_S-.woff) format("woff");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-display:swap;font-family:IBM Plex Mono;font-style:normal;font-weight:400;src:url(./ibm-plex-mono-latin-ext-400-normal.BmRBH3aV.woff2) format("woff2"),url(./ibm-plex-mono-latin-ext-400-normal.D3D2R8hC.woff) format("woff");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-display:swap;font-family:IBM Plex Mono;font-style:normal;font-weight:400;src:url(./ibm-plex-mono-latin-400-normal.DMJ8VG8y.woff2) format("woff2"),url(./ibm-plex-mono-latin-400-normal.CvHOgSBP.woff) format("woff");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}:root{--bg:#f6f4ef;--bg-elevated:#fff;--text-primary:#1e2a32;--text-secondary:#5c6872;--line:#dde3e8;--accent:#0e7c86;--accent-soft:#daf0f2;--warm:#ff6b57;--warm-soft:#ffe6e0;--radius-sm:14px;--radius-md:20px;--radius-lg:28px;--shadow-soft:0 20px 45px -34px rgba(17,33,51,.35);--font-heading:"Sora","Segoe UI",sans-serif;--font-body:"Instrument Sans Variable","Segoe UI",sans-serif;--font-mono:"IBM Plex Mono","Consolas",monospace;--space-1:.5rem;--space-2:.75rem;--space-3:1rem;--space-4:1.5rem;--space-5:2rem;--space-6:3rem;--space-7:4.5rem}*,:after,:before{box-sizing:border-box}html{scroll-behavior:smooth}body{background:radial-gradient(circle at 15% 0,#f7f0e7 0,var(--bg) 46%);color:var(--text-primary);font-family:var(--font-body);line-height:1.6;margin:0}a{color:inherit;text-decoration:none}p{margin:0}.site-shell{min-height:100vh}.portfolio-page{margin:0 auto;padding-bottom:var(--space-6);position:relative;width:min(1120px,100% - 2.5rem)}.bg-orb{border-radius:50%;filter:blur(4px);pointer-events:none;position:fixed;z-index:-1}.bg-orb--one{background:radial-gradient(circle,#0e7c862e 0,#0e7c8600 70%);height:360px;right:4%;top:-130px;width:360px}.bg-orb--two{background:radial-gradient(circle,#ff6b572b 0,#ff6b5700 70%);bottom:6%;height:280px;left:1%;width:280px}.app-header{padding-top:var(--space-3);position:sticky;top:var(--space-3);z-index:10}.app-header__inner{align-items:center;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#ffffffc7;border:1px solid hsla(0,0%,100%,.7);border-radius:999px;box-shadow:var(--shadow-soft);display:flex;gap:var(--space-3);justify-content:space-between;padding:.8rem 1rem}.app-header__brand{aspect-ratio:1;background:var(--accent-soft);border-radius:999px;color:var(--accent);display:inline-grid;font-family:var(--font-mono);font-size:.9rem;place-items:center;width:2.4rem}.app-header__nav{display:flex;gap:var(--space-3)}.app-header__link{color:var(--text-secondary);font-size:.95rem;position:relative;transition:color .25s ease}.app-header__link:after{background:var(--accent);border-radius:999px;bottom:-.25rem;content:"";height:2px;left:0;position:absolute;transform:scaleX(0);transform-origin:left;transition:transform .25s ease;width:100%}.app-header__link:hover{color:var(--text-primary)}.app-header__link:hover:after{transform:scaleX(1)}.app-header__cta{align-items:center;background:var(--text-primary);border:1px solid transparent;border-radius:999px;color:#f8fafb;display:inline-flex;font-size:.88rem;justify-content:center;padding:.55rem 1rem;transition:transform .25s ease,background .25s ease}.app-header__cta:hover{background:var(--accent);transform:translateY(-1px)}.section{padding:var(--space-7) 0 0}.state-banner{background:var(--bg-elevated);border:1px solid var(--line);border-radius:var(--radius-sm);color:var(--text-secondary);margin-top:var(--space-4);padding:var(--space-3) var(--space-4)}.state-banner--error{background:#fff2ef;border-color:#c3443a4d;color:#8c3027}.section-title{max-width:700px}.section-title--center{margin:0 auto;text-align:center}.section-title__eyebrow{color:var(--accent);font-family:var(--font-mono);font-size:.78rem;letter-spacing:.1em;margin-bottom:var(--space-2);text-transform:uppercase}.section-title__headline{font-family:var(--font-heading);font-size:clamp(1.7rem,2.3vw + 1rem,2.7rem);line-height:1.2;margin:0}.section-title__description{color:var(--text-secondary);font-size:1.03rem;margin-top:var(--space-3)}.hero{display:grid;gap:var(--space-5);grid-template-columns:minmax(0,2fr) minmax(230px,1fr);padding-top:calc(var(--space-7) + var(--space-5))}.hero__role{background:#ffffffb8;border:1px solid var(--line);border-radius:999px;color:var(--text-secondary);display:inline-flex;font-family:var(--font-mono);font-size:.77rem;padding:.45rem .75rem}.hero__headline{font-family:var(--font-heading);font-size:clamp(2rem,4vw + 1rem,4.2rem);line-height:1.08;margin:var(--space-3) 0 0}.hero__summary{color:var(--text-secondary);font-size:1.08rem;margin-top:var(--space-4);max-width:680px}.hero__meta{color:var(--text-secondary);font-size:.92rem;margin-top:var(--space-4)}.hero__actions,.hero__meta{display:flex;flex-wrap:wrap;gap:var(--space-3)}.hero__actions{margin-top:var(--space-5)}.hero__aside{align-content:start;display:grid;gap:var(--space-3)}.hero__photo-card{background:#ffffffd1;border:1px solid var(--line);border-radius:var(--radius-md);box-shadow:var(--shadow-soft);margin:0;padding:.45rem}.hero__photo{aspect-ratio:4/5;border-radius:calc(var(--radius-md) - .2rem);display:block;height:auto;-o-object-fit:cover;object-fit:cover;width:100%}.button{align-items:center;border:1px solid transparent;border-radius:999px;display:inline-flex;font-size:.92rem;justify-content:center;padding:.72rem 1.16rem;transition:transform .25s ease,background .25s ease,color .25s ease}.button:hover{transform:translateY(-2px)}.button--primary{background:var(--accent);color:#f4fbfc}.button--primary:hover{background:#0b656e}.button--ghost{background:#fff;border-color:var(--line);color:var(--text-primary)}.button--ghost:hover{background:#f4f9fb}.hero__stats{display:flex;gap:var(--space-3)}.hero__stats article{flex:1;width:100%}.hero__stat-card{background:#ffffffd1;border:1px solid var(--line);border-radius:var(--radius-md);box-shadow:var(--shadow-soft);padding:var(--space-4)}.hero__stat-value{font-family:var(--font-heading);font-size:1.9rem;line-height:1.1;margin:0}.hero__stat-label{color:var(--text-secondary);font-size:.9rem;margin-top:var(--space-2)}.about-grid{display:grid;gap:var(--space-5);grid-template-columns:minmax(0,2fr) minmax(0,1fr);margin-top:var(--space-5)}.about-grid__story{display:grid;gap:var(--space-3)}.about-grid__story p{color:var(--text-secondary)}.about-grid__strengths-block{align-content:start;display:grid;gap:var(--space-3)}.about-grid__strengths-title{color:var(--text-secondary);font-family:var(--font-mono);font-size:.78rem;letter-spacing:.08em;text-transform:uppercase}.about-grid__strengths{align-content:start;display:grid;gap:var(--space-3);list-style:none;margin:0;padding:0}.about-grid__strengths li{background:#fffc;border:1px solid var(--line);border-radius:var(--radius-sm);padding:var(--space-3) var(--space-4)}.skills-grid{display:grid;gap:var(--space-4);grid-template-columns:repeat(2,minmax(0,1fr));margin-top:var(--space-5)}.skills-group{background:var(--bg-elevated);border:1px solid var(--line);border-radius:var(--radius-md);padding:var(--space-4);transition:transform .25s ease,box-shadow .25s ease}.skills-group:hover{box-shadow:var(--shadow-soft);transform:translateY(-3px)}.skills-group h3{font-family:var(--font-heading);font-size:1.02rem;margin:0}.skills-group ul{display:flex;flex-wrap:wrap;gap:var(--space-2);list-style:none;margin:var(--space-3) 0 0;padding:0}.skills-group li{align-items:center;background:#eef4f8;border:1px solid #d8e4ec;border-radius:999px;color:#2d3e4a;display:inline-flex;font-size:.83rem;gap:.42rem;padding:.36rem .7rem}.skill-icon{display:inline-grid;flex:0 0 1rem;height:1rem;place-items:center;width:1rem}.skill-icon__image{display:block;height:100%;-o-object-fit:contain;object-fit:contain;width:100%}.skill-icon__fallback{background:#2d3e4a;border-radius:999px;color:#fff;display:inline-grid;font-family:var(--font-mono);font-size:.52rem;height:100%;line-height:1;place-items:center;width:100%}.projects-grid{grid-template-columns:repeat(2,minmax(0,1fr));margin-top:var(--space-5)}.project-card,.projects-grid{display:grid;gap:var(--space-4)}.project-card{background:var(--bg-elevated);border:1px solid var(--line);border-radius:var(--radius-md);padding:var(--space-4);transition:transform .26s ease,box-shadow .26s ease}.project-card:hover{box-shadow:var(--shadow-soft);transform:translateY(-4px)}.project-card__banner-wrap{border:1px solid var(--line);border-radius:var(--radius-sm);margin:0;overflow:hidden}.project-card__banner{aspect-ratio:16/9;display:block;height:auto;-o-object-fit:cover;object-fit:cover;width:100%}.project-card__gallery{display:grid;gap:var(--space-2);grid-template-columns:repeat(3,minmax(0,1fr));list-style:none;margin:0;padding:0}.project-card__gallery li{border:1px solid var(--line);border-radius:10px;overflow:hidden}.project-card__gallery-image{aspect-ratio:3/2;display:block;height:auto;-o-object-fit:cover;object-fit:cover;width:100%}.project-card__period{color:var(--text-secondary);font-family:var(--font-mono);font-size:.78rem;letter-spacing:.08em;text-transform:uppercase}.project-card__title{font-family:var(--font-heading);font-size:1.16rem;margin:var(--space-2) 0 0}.project-card__summary{color:var(--text-secondary);margin-top:var(--space-2)}.project-card__highlights{color:#3e4d58;display:grid;gap:.55rem;margin:0;padding-left:1rem}.project-card__meta{display:grid;gap:var(--space-3)}.project-card__stack{display:flex;flex-wrap:wrap;gap:var(--space-2);list-style:none;margin:0;padding:0}.project-card__stack li{background:var(--warm-soft);border-radius:999px;color:#8f392d;font-size:.79rem;padding:.34rem .65rem}.project-card__links{display:flex;gap:var(--space-3)}.project-card__link{color:var(--accent);font-size:.87rem}.project-card__link:hover{text-decoration:underline}.journey-list{margin-top:var(--space-5)}.journey-list,.timeline-item{display:grid;gap:var(--space-3)}.timeline-item{background:var(--bg-elevated);border:1px solid var(--line);border-radius:var(--radius-md);padding:var(--space-4);position:relative}.timeline-item:before{background:var(--accent);border-radius:999px;content:"";height:.4rem;left:.95rem;position:absolute;top:1.1rem;width:.4rem}.timeline-item__media{margin-top:var(--space-2)}.timeline-item__media-label{color:var(--text-secondary);font-family:var(--font-mono);font-size:.76rem;letter-spacing:.08em;margin-bottom:.45rem;text-transform:uppercase}.timeline-item__thumbnails{display:flex;flex-wrap:wrap;gap:.55rem;list-style:none;margin:0;padding:0}.timeline-item__thumbnail-button{background:transparent;border:1px solid var(--line);border-radius:10px;cursor:pointer;display:inline-flex;overflow:hidden;padding:0;transition:transform .2s ease,box-shadow .2s ease}.timeline-item__thumbnail-button:hover{box-shadow:var(--shadow-soft);transform:translateY(-1px)}.timeline-item__thumbnail-image{display:block;height:64px;max-height:100%;max-width:100%;min-height:64px;min-width:92px;-o-object-fit:cover;object-fit:cover;width:92px}.timeline-lightbox{background:#0f1418d6;display:grid;height:100dvh;inset:0;padding:1.2rem;place-items:center;position:fixed;width:100vw;z-index:1200}.timeline-lightbox__figure{margin:0;width:min(940px,92vw)}.timeline-lightbox__image{background:#0f1418;border:1px solid hsla(0,0%,100%,.24);border-radius:14px;display:block;height:auto;max-height:82dvh;-o-object-fit:contain;object-fit:contain;width:100%}.timeline-lightbox__caption{color:#d7dee4;font-family:var(--font-mono);font-size:.78rem;margin-top:.6rem;text-align:center}.timeline-lightbox__close{background:#ffffff1a;border:1px solid hsla(0,0%,100%,.36);border-radius:999px;color:#fff;cursor:pointer;padding:.44rem .72rem;position:absolute;right:1rem;top:1rem}.timeline-lightbox__nav{background:#ffffff1c;border:1px solid hsla(0,0%,100%,.35);border-radius:999px;color:#fff;cursor:pointer;font-size:1.42rem;height:2.4rem;line-height:1;position:absolute;top:50%;transform:translateY(-50%);width:2.4rem}.timeline-lightbox__nav--prev{left:.9rem}.timeline-lightbox__nav--next{right:.9rem}.timeline-item__period{color:var(--text-secondary);font-family:var(--font-mono);font-size:.78rem;margin-left:.9rem}.timeline-item__role{font-family:var(--font-heading);font-size:1.15rem;margin:var(--space-2) 0 0}.timeline-item__company{color:var(--accent);font-size:.9rem;margin-top:.2rem}.timeline-item__summary{color:var(--text-secondary);margin-top:var(--space-3)}.timeline-item__highlights{color:#3e4d58;margin:var(--space-3) 0 0;padding-left:1rem}.contact-grid{display:grid;gap:var(--space-5);grid-template-columns:minmax(240px,1fr) minmax(0,1.4fr);margin-top:var(--space-5)}.contact-info{align-content:start;background:var(--bg-elevated);border:1px solid var(--line);border-radius:var(--radius-md);display:grid;gap:var(--space-3);padding:var(--space-4)}.contact-info p{color:var(--text-secondary)}.contact-info a{color:var(--accent)}.contact-info a:hover{text-decoration:underline}.contact-form{background:var(--bg-elevated);border:1px solid var(--line);border-radius:var(--radius-md);display:grid;gap:var(--space-3);padding:var(--space-4)}.contact-form label{display:grid;font-size:.92rem;gap:.42rem}.contact-form input,.contact-form textarea{background:#fff;border:1px solid #cbd6de;border-radius:12px;color:var(--text-primary);font:inherit;padding:.76rem .92rem;transition:border-color .25s ease,box-shadow .25s ease;width:100%}.contact-form input:focus,.contact-form textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px #0e7c861f;outline:none}.form-error{color:#af3f33;font-size:.79rem}.form-feedback{font-size:.9rem}.form-feedback--success{color:#1b6a33}.form-feedback--error{color:#8c3027}.app-footer{border-top:1px solid var(--line);margin-top:var(--space-7);padding-top:var(--space-4)}.app-footer__inner{align-items:center;display:flex;gap:var(--space-3);justify-content:space-between}.app-footer__copy{color:var(--text-secondary);font-size:.86rem}.app-footer__links{display:flex;font-size:.88rem;gap:var(--space-3)}.app-footer__links a{color:var(--text-secondary)}.app-footer__links a:hover{color:var(--accent)}@media(max-width:980px){.hero{grid-template-columns:1fr}.hero__aside{width:min(100%,440px)}.about-grid,.contact-grid,.projects-grid,.skills-grid{grid-template-columns:1fr}.project-card__gallery{grid-template-columns:repeat(3,minmax(0,1fr))}.app-header__nav{display:none}}@media(max-width:640px){.portfolio-page{width:min(1120px,100% - 1.25rem)}.section{padding-top:var(--space-6)}.hero{padding-top:calc(var(--space-6) + var(--space-5))}.app-header{top:var(--space-2)}.app-footer__inner{align-items:flex-start;flex-direction:column}.project-card__gallery{grid-template-columns:repeat(2,minmax(0,1fr))}}
