/* PORTFOLIO | CAO THANH LUAN — self-contained, no external libraries */
:root{color-scheme:dark;--bg:#0d1519;--bg-2:#111d22;--surface:#18252a;--surface-2:#203137;--white:#f1f0e8;--muted:#9caeaa;--lime:#c2e47a;--line:rgba(223,234,223,.15);--container:1210px;--header:84px}
*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:90px}body{margin:0;background:var(--bg);color:var(--white);font:400 16px/1.7 system-ui,-apple-system,"Segoe UI",Arial,sans-serif;overflow-x:hidden}body.menu-open{overflow:hidden}a{color:inherit;text-decoration:none}button{font:inherit}button,a{-webkit-tap-highlight-color:transparent}a:focus-visible,button:focus-visible{outline:3px solid var(--lime);outline-offset:4px}::selection{background:var(--lime);color:#16231a}.container{width:min(calc(100% - 96px),var(--container));margin-inline:auto}.page-glow{position:absolute;top:-150px;left:-350px;width:900px;height:860px;pointer-events:none;background:radial-gradient(circle,rgba(47,79,75,.17),transparent 67%);z-index:0}.skip-link{position:absolute;top:-80px;left:12px;background:var(--lime);color:var(--bg);padding:12px 16px;z-index:100}.skip-link:focus{top:12px}
/* HEADER */
.site-header{position:sticky;top:0;z-index:50;background:rgba(13,21,25,.88);backdrop-filter:blur(18px);border-bottom:1px solid transparent;transition:border-color .25s,background .25s}.site-header.is-scrolled{border-color:var(--line);background:rgba(13,21,25,.96)}.header-inner{height:var(--header);display:flex;justify-content:space-between;align-items:center;gap:25px}.brand{display:flex;align-items:center;gap:18px;min-width:max-content}.brand-mark{font-size:30px;letter-spacing:-4px;font-weight:850;line-height:1}.brand-dot{color:var(--lime);padding-inline:1px}.brand-name{font-size:10px;font-weight:800;letter-spacing:2px;color:#d4dfd8}.desktop-nav{display:flex;gap:36px;align-items:center}.desktop-nav a{font-size:13px;font-weight:600;color:#b4c0bc;position:relative;transition:color .2s}.desktop-nav a:hover,.desktop-nav a.active{color:var(--lime)}.desktop-nav a::after{content:"";position:absolute;bottom:-11px;left:0;width:0;height:1px;background:var(--lime);transition:width .2s}.desktop-nav a:hover::after,.desktop-nav a.active::after{width:100%}.header-hello{border:1px solid rgba(194,228,122,.5);padding:13px 20px;border-radius:3px;font-size:11px;font-weight:800;letter-spacing:1px;display:inline-flex;gap:17px;align-items:center;transition:background .2s,color .2s}.header-hello:hover{background:var(--lime);color:var(--bg)}.header-hello span{font-size:18px;line-height:0}.menu-toggle,.mobile-nav{display:none}
/* HERO */
.hero{position:relative;min-height:710px;display:grid;grid-template-columns:1.09fr .91fr;gap:70px;align-items:center;padding-top:62px;padding-bottom:120px}.hero-content{position:relative;z-index:2}.eyebrow{display:flex;align-items:center;gap:11px;font-size:10px;letter-spacing:1.4px;font-weight:780;color:#becac3;white-space:nowrap}.status-pulse{width:8px;height:8px;border-radius:100%;background:var(--lime);box-shadow:0 0 0 5px rgba(194,228,122,.09);flex:none}.eyebrow-line{flex:1;height:1px;max-width:45px;background:rgba(193,220,200,.28)}.hero-overline{color:var(--lime);font-size:12px;letter-spacing:2.8px;font-weight:800;margin:52px 0 9px}.hero h1{font-size:clamp(63px,7.4vw,112px);line-height:1.1;letter-spacing:-6.5px;margin:0;font-weight:850;white-space:nowrap}.hero h1 .name-stroke{display:inline-block;color:var(--white)}.hero h1 .period{color:var(--lime)}.hero-lead{color:#a9b9b2;max-width:485px;font-size:18px;line-height:1.9;margin:30px 0 34px}.hero-lead em{font-style:normal;color:var(--white);font-weight:650}.hero-ctas{display:flex;align-items:center;flex-wrap:wrap;gap:27px}.btn{display:inline-flex;align-items:center;gap:23px;justify-content:center;font-size:13px;font-weight:760;transition:transform .2s,background .2s,color .2s}.btn:hover{transform:translateY(-3px)}.btn-primary{background:var(--lime);color:#112017;padding:18px 24px;min-height:58px}.btn-primary svg{width:20px;height:20px}.btn-primary:hover{background:#d6f5a0}.btn-text{border-bottom:1px solid #657a6b;padding-bottom:8px}.btn-text span{font-size:19px}.hero-bottom{display:flex;gap:28px;align-items:center;margin-top:67px;color:#859a93;font-size:9px;letter-spacing:1px;font-weight:700;white-space:nowrap}.hero-bottom b{font-size:18px;color:var(--white);margin-right:7px}.hero-bottom-rule{height:1px;background:var(--line);width:45px}.hero-visual{height:590px;min-width:0;position:relative;padding:0 27px 40px 0}.hero-portrait-frame{height:100%;border-radius:230px 230px 5px 5px;overflow:hidden;position:relative;background:#32433a;isolation:isolate;box-shadow:0 25px 100px rgba(0,0,0,.27)}.hero-portrait{display:block;width:100%;height:100%;object-fit:cover;object-position:50% 38%;filter:saturate(.84) contrast(1.01)}.photo-sheen{position:absolute;inset:0;background:linear-gradient(180deg,rgba(13,21,25,.05) 45%,rgba(13,21,25,.65) 100%);pointer-events:none}.portrait-caption{position:absolute;bottom:25px;left:28px;right:28px;display:flex;justify-content:space-between;align-items:center;gap:12px;color:#fff;font-size:10px;font-weight:780;letter-spacing:1.4px;z-index:1}.portrait-caption span:last-child{font-size:8px;color:#d5e0d7}.portrait-caption b{font-size:15px;color:var(--lime);margin-left:5px}.hero-sticker{display:grid;place-items:center;position:absolute;top:62px;right:-36px;width:142px;height:142px;background:var(--lime);color:#122019;border-radius:50%;transform:rotate(13deg);font-size:17px;font-weight:950;line-height:1.03;text-align:center;letter-spacing:-.5px;box-shadow:0 12px 40px rgba(0,0,0,.2)}.sticker-dot{display:block;margin-top:7px;font-size:25px}.hero-vertical-text{position:absolute;right:-23px;bottom:103px;writing-mode:vertical-rl;font-size:9px;letter-spacing:2.6px;color:#a2b3a9}.scroll-cue{position:absolute;left:0;bottom:34px;display:flex;align-items:center;gap:15px;font-size:9px;font-weight:750;letter-spacing:2px;color:#8fa69d}.scroll-icon{display:grid;place-items:center;border:1px solid var(--line);border-radius:50%;width:42px;height:42px;font-size:20px;color:var(--lime);transition:transform .2s}.scroll-cue:hover .scroll-icon{transform:translateY(4px)}
/* TICKER */
.ticker{background:var(--lime);color:#18261d;overflow:hidden;padding:17px 0;transform:rotate(-.4deg) scale(1.01)}.ticker-track{display:flex;align-items:center;gap:44px;width:max-content;animation:marquee 38s linear infinite;font-size:12px;letter-spacing:2.6px;font-weight:900;white-space:nowrap}.ticker-star{font-size:22px;letter-spacing:0}@keyframes marquee{to{transform:translateX(-50%)}}
/* SECTIONS */
.section{padding-top:130px;padding-bottom:140px}.section-top{display:flex;align-items:center;justify-content:space-between;border-top:1px solid var(--line);padding-top:22px;margin-bottom:78px}.section-index{color:var(--lime);letter-spacing:2.3px;font-size:11px;font-weight:800}.section-spark{font-size:23px;color:var(--lime)}.section-heading{font-size:clamp(55px,6vw,87px);letter-spacing:-5px;font-weight:830;line-height:1.14;margin:0}.italic-highlight{color:var(--lime);font-family:Georgia,serif;font-style:italic;letter-spacing:-5px;font-weight:400}.section-mini{margin-top:40px;color:#a0b6a8;font-size:10px;letter-spacing:2px;max-width:250px;font-weight:700}.section-heading-row{display:flex;justify-content:space-between;align-items:end;gap:50px;margin-bottom:55px}.section-heading-row>p{color:var(--muted);font-size:16px;max-width:315px;line-height:1.9;margin:0 0 10px}.about-layout{display:grid;grid-template-columns:1fr 1fr;gap:90px}.about-body{color:var(--muted);font-size:16px;line-height:1.95}.about-body p{margin:0 0 23px}.about-body .about-statement{font-size:23px;line-height:1.65;color:#dce6df}.about-body strong{color:var(--white);font-weight:750}.about-facts{display:grid;grid-template-columns:1fr 1fr;gap:30px 25px;padding-top:36px;margin-top:36px;border-top:1px solid var(--line)}.about-facts>div{display:flex;flex-direction:column;gap:3px}.fact-label{font-size:10px;letter-spacing:1.8px;color:var(--lime);font-weight:800}.about-facts strong{font-size:14px;color:#e4ebe4}
/* SKILLS */
.skills-section{background:#142127;position:relative}.skills-section::before{content:"";position:absolute;inset:0;background:radial-gradient(circle at 95% 0%,rgba(194,228,122,.04),transparent 35%);pointer-events:none}.skills-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px}.skill-card{position:relative;min-height:365px;padding:32px;background:#1b2a2f;border:1px solid rgba(220,235,222,.08);transition:transform .3s,border-color .3s,background .3s}.skill-card:hover{transform:translateY(-7px);border-color:rgba(194,228,122,.4);background:#203137}.skill-icon{width:70px;height:70px;display:grid;place-items:center;border-radius:18px;background:#2e403d;color:var(--lime);font-size:25px;font-weight:800;margin-bottom:40px}.icon-back{font-size:24px;font-family:monospace}.icon-tools{font-size:37px}.skill-num{position:absolute;top:38px;right:31px;color:#768b83;font-size:12px;letter-spacing:2px}.skill-card h3{font-size:25px;margin:0 0 8px;letter-spacing:-.8px}.skill-card p{font-size:14px;color:var(--muted);margin:0 0 30px;min-height:65px}.skill-tags,.project-tags{display:flex;flex-wrap:wrap;gap:7px}.skill-tags span,.project-tags span{border:1px solid rgba(219,232,222,.19);color:#bed1c1;font-size:11px;padding:6px 10px;line-height:1.4}
/* PROJECTS */
.projects-section{padding-bottom:150px}.project-list{display:grid;gap:26px}.project-row{display:grid;grid-template-columns:1.03fr .97fr;min-height:350px;background:#17242a;border:1px solid var(--line);overflow:hidden;transition:border-color .25s}.project-row:hover{border-color:rgba(194,228,122,.55)}.project-preview{min-height:350px;position:relative;display:grid;place-items:center;overflow:hidden;padding:34px}.project-info{padding:47px 46px;display:flex;flex-direction:column;align-items:flex-start;justify-content:center}.project-number{font-size:10px;letter-spacing:2px;color:var(--lime);font-weight:800}.project-info h3{font-size:38px;letter-spacing:-1.8px;line-height:1.2;margin:17px 0 16px}.project-info p{color:#a9bab2;line-height:1.85;margin:0 0 22px;font-size:14px;max-width:460px}.project-meta{font-size:10px;font-weight:800;letter-spacing:1.5px;color:var(--lime);margin-top:32px;display:flex;gap:10px;align-items:center}.project-meta span{font-size:16px}.preview-harmic{background:radial-gradient(circle at 35% 40%,#b6d0a6,#53736b 65%,#34564f)}.preview-window{width:min(100%,440px);height:260px;border-radius:11px;overflow:hidden;box-shadow:0 21px 50px rgba(0,0,0,.24);transform:rotate(-4deg);transition:transform .3s}.project-row:hover .preview-window{transform:rotate(-2deg) scale(1.03)}.mock-browser{background:#e9eee8;height:31px;display:flex;align-items:center;gap:6px;padding-inline:12px}.mock-browser i{width:6px;height:6px;border-radius:50%;background:#b5c5b6}.mock-browser span{margin:auto;color:#4f6c49;font-size:8px;font-weight:900;letter-spacing:1.8px}.mock-market{background:#fffdf4;height:229px}.mock-market-hero{height:150px;background:#e9eedb;display:flex;justify-content:space-between;align-items:center;padding:20px 36px;color:#2c5a32;font-size:19px;line-height:1.1;font-weight:700}.mock-market-hero strong{font-size:27px}.mock-market-hero small{display:block;font-size:7px;letter-spacing:2px;margin-top:10px}.market-orbit{font-size:72px;transform:rotate(12deg)}.mock-market-cards{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;padding:8px 14px}.mock-market-cards span{font-size:23px;text-align:center;background:#f5f5ee;display:block;line-height:1.15}.mock-market-cards small{display:block;font-size:7px;color:#365e35;line-height:1.9}.preview-leather{background:linear-gradient(130deg,#3c382f,#1a1c19 65%)}.leather-frame{width:min(100%,430px);height:280px;position:relative;border:1px solid #6f6755;background:radial-gradient(circle at 50% 45%,#3c372c,#17191a 70%);box-shadow:0 20px 70px rgba(0,0,0,.25);display:flex;align-items:center;flex-direction:column;overflow:hidden}.leather-label,.leather-base{font-size:9px;letter-spacing:2.6px;color:#bbaa8e;margin-top:20px;font-weight:700}.leather-display{font-family:Georgia,serif;color:#e4ceb0;font-size:31px;letter-spacing:2px;margin-top:7px}.leather-display span{color:#857153}.watch-strap{position:relative;width:190px;height:135px;margin-top:5px;transform:rotate(-17deg)}.strap-top,.strap-bottom{display:block;position:absolute;left:80px;width:35px;background:#965f34;border:3px solid #704427;box-shadow:inset 0 0 0 2px rgba(255,208,155,.26);border-radius:8px}.strap-top{height:75px;top:-5px}.strap-bottom{height:75px;bottom:-5px}.strap-watch{position:absolute;z-index:1;top:37px;left:59px;width:78px;height:78px;border-radius:50%;border:12px solid #c4a66d;background:radial-gradient(circle,#202a2e 52%,#071116);box-shadow:0 5px 12px #0008}.strap-watch::before{content:"";position:absolute;width:2px;height:23px;left:26px;top:14px;background:#d8e2d9;transform-origin:bottom;transform:rotate(30deg)}.strap-watch::after{content:"";position:absolute;width:17px;height:2px;left:27px;top:34px;background:#d8e2d9;transform:rotate(-35deg);transform-origin:left}.leather-base{margin-top:auto;margin-bottom:18px}.preview-spa{background:linear-gradient(135deg,#dedfca,#a0b0a4)}.spa-board{width:min(100%,420px);height:275px;border:1px solid #d7dfd2;background:#f4f5ed;padding:20px 25px;box-shadow:0 16px 50px #27362e30;transform:rotate(3deg);transition:transform .3s}.project-row:hover .spa-board{transform:rotate(1deg) scale(1.02)}.spa-board-title{font-size:12px;letter-spacing:1px;font-weight:900;color:#35594c;border-bottom:1px solid #d2dcd0;padding-bottom:11px;display:flex;justify-content:space-between;align-items:center}.spa-board-title span{font-size:7px;color:#7f9990}.diagram{height:175px;position:relative}.diagram-box{position:absolute;background:#e0eadd;border:1px solid #a9c5ad;border-radius:5px;padding:8px 12px;color:#496b55;font-size:9px;font-weight:800;white-space:nowrap;z-index:1}.diagram-box.a{top:18px;left:50%;transform:translateX(-50%)}.diagram-box.b{top:79px;left:12%}.diagram-box.c{top:79px;right:10%}.diagram-box.d{bottom:0;left:12%}.diagram-box.e{bottom:0;right:10%}.diagram-line{position:absolute;background:#8ea99a}.diagram-line.l1{height:1px;width:62%;top:68px;left:19%}.diagram-line.l2{width:1px;height:40px;left:50%;top:35px}.diagram-line.l3{height:1px;width:61%;top:135px;left:19%}.spa-footer{font-size:8px;letter-spacing:2px;color:#5a7167;text-align:right}
/* CONTACT */
.contact-section{background:var(--lime);color:#122018;padding:100px 0 105px;overflow:hidden}.contact-section .section-top{border-color:rgba(20,45,27,.22);margin-bottom:65px}.contact-section .section-index,.contact-section .section-spark{color:#37512a}.contact-content{max-width:1000px}.contact-eyebrow{font-size:11px;font-weight:800;letter-spacing:2px;display:flex;gap:13px;align-items:center}.contact-eyebrow .status-pulse{background:#2f5533;box-shadow:0 0 0 5px #406f3920}.contact-content h2{font-size:clamp(55px,8.8vw,128px);line-height:1.04;letter-spacing:-7px;margin:30px 0 25px;font-weight:850}.contact-content h2 em{font-family:Georgia,serif;font-weight:400;letter-spacing:-8px}.contact-content p{font-size:17px;line-height:1.9;max-width:550px;color:#3d5537;margin-bottom:34px}.email-giant{font-size:clamp(19px,3.6vw,49px);font-weight:800;letter-spacing:-2px;display:inline-flex;gap:12px;align-items:center;overflow-wrap:anywhere;border-bottom:2px solid #2f5336;padding-bottom:7px;transition:opacity .2s}.email-giant:hover{opacity:.65}.email-giant span{font-size:30px;white-space:nowrap}.copy-email{display:flex;align-items:center;gap:10px;margin-top:25px;border:0;background:transparent;padding:0 0 6px;color:#324b34;cursor:pointer;font-size:12px;font-weight:760;letter-spacing:.4px;border-bottom:1px solid #658257}.copy-email:hover{color:#102b19}.copy-email svg{width:17px;height:17px}.site-footer{background:#101a1e}.footer-inner{display:flex;align-items:center;justify-content:space-between;gap:25px;padding:35px 0}.footer-logo{font-size:27px;font-weight:870;letter-spacing:-4px}.footer-logo span{color:var(--lime)}.footer-inner p{color:#869b91;font-size:12px}.back-top{font-size:10px;letter-spacing:1.3px;font-weight:800;color:#c5d7ca}.back-top:hover{color:var(--lime)}.toast{position:fixed;bottom:28px;left:50%;transform:translate(-50%,20px);background:#f0f3e5;color:#15251a;padding:12px 18px;border-radius:7px;font-size:13px;font-weight:700;box-shadow:0 10px 40px #0005;opacity:0;visibility:hidden;transition:opacity .2s,transform .2s,visibility .2s;z-index:100}.toast.show{opacity:1;visibility:visible;transform:translate(-50%,0)}
/* REVEALS */
[data-reveal]{opacity:0;transform:translateY(30px);transition:opacity .65s ease,transform .65s ease}[data-reveal].is-visible{opacity:1;transform:translateY(0)}.skill-card:nth-child(2){transition-delay:.08s}.skill-card:nth-child(3){transition-delay:.16s}
@media(max-width:1190px){.container{width:min(calc(100% - 70px),var(--container))}.hero{gap:40px}.hero h1{font-size:clamp(56px,7vw,84px);letter-spacing:-4px}.hero-sticker{right:-20px}.desktop-nav{gap:22px}.section-heading{font-size:68px}.project-info{padding:30px}.hero-bottom{gap:17px}}
@media(max-width:910px){:root{--header:75px}.brand-name{display:none}.hero{grid-template-columns:1fr 0.9fr;gap:23px;min-height:650px}.hero h1{font-size:clamp(50px,6.8vw,72px);letter-spacing:-3.9px}.hero-visual{height:470px}.hero-lead{font-size:16px}.hero-bottom{margin-top:45px;font-size:8px}.hero-sticker{width:110px;height:110px;font-size:14px;right:-8px}.hero-sticker .sticker-dot{font-size:19px}.about-layout{gap:40px}.skills-grid{gap:12px}.skill-card{padding:23px;min-height:390px}.project-row{grid-template-columns:1fr 1fr}.project-info h3{font-size:29px}.project-preview{padding:24px}.section-heading{font-size:61px}.contact-content h2{letter-spacing:-4px}}
@media(max-width:760px){.container{width:calc(100% - 40px)}:root{--header:68px}.desktop-nav,.header-hello{display:none}.menu-toggle{display:flex;flex-direction:column;justify-content:center;gap:7px;align-items:center;background:transparent;border:1px solid var(--line);height:43px;width:45px;cursor:pointer}.menu-toggle span{width:21px;height:2px;background:var(--white);transition:transform .25s}.menu-toggle[aria-expanded="true"] span:first-child{transform:translateY(4.5px) rotate(45deg)}.menu-toggle[aria-expanded="true"] span:last-child{transform:translateY(-4.5px) rotate(-45deg)}.mobile-nav:not([hidden]){display:flex;position:absolute;top:calc(var(--header) - 1px);left:0;right:0;background:#162329;border-top:1px solid var(--line);padding:20px;flex-direction:column;box-shadow:0 20px 40px #0007}.mobile-nav a{padding:15px 9px;border-bottom:1px solid var(--line);font-weight:700}.mobile-nav a:hover{color:var(--lime)}.hero{display:flex;flex-direction:column;align-items:stretch;gap:30px;padding-top:52px;padding-bottom:100px;min-height:0}.hero-overline{margin-top:30px}.hero h1{font-size:clamp(55px,12vw,80px);letter-spacing:-4px}.hero-lead{margin-top:22px;font-size:16px}.hero-bottom{margin-top:41px;gap:12px;justify-content:space-between}.hero-bottom-rule{display:none}.hero-visual{width:min(100%,450px);height:540px;align-self:center;padding-right:22px;padding-bottom:10px}.hero-sticker{right:-12px;top:38px}.hero-vertical-text{right:-6px;font-size:8px}.scroll-cue{bottom:27px}.section{padding-top:80px;padding-bottom:90px}.section-top{margin-bottom:42px}.section-heading{font-size:clamp(52px,10vw,69px);letter-spacing:-3px}.italic-highlight{letter-spacing:-3px}.about-layout{grid-template-columns:1fr;gap:10px}.section-mini{margin-top:23px}.about-body .about-statement{font-size:21px}.about-body{font-size:15px}.section-heading-row{display:block;margin-bottom:35px}.section-heading-row>p{margin-top:22px}.skills-grid{grid-template-columns:1fr}.skill-card{min-height:0;padding:29px}.skill-card p{min-height:0}.skill-icon{margin-bottom:28px}.project-list{gap:25px}.project-row{grid-template-columns:1fr}.project-preview{min-height:290px}.project-info{padding:35px 28px 38px}.project-info h3{font-size:34px}.contact-section{padding:70px 0 80px}.contact-content h2{font-size:clamp(51px,10vw,83px);letter-spacing:-4px}.contact-content h2 em{letter-spacing:-5px}.footer-inner{flex-wrap:wrap}.footer-inner p{order:3;width:100%;margin:0}.brand-name{display:block}.ticker-track{gap:27px}}
@media(max-width:440px){.brand-name{font-size:9px;letter-spacing:1.4px}.brand{gap:11px}.hero h1{font-size:clamp(48px,11.4vw,62px);letter-spacing:-3.5px}.eyebrow{font-size:8.5px;letter-spacing:.8px;gap:8px}.hero-visual{height:440px}.hero-ctas{gap:19px}.btn-primary{padding:15px 15px;font-size:12px}.btn-text{font-size:12px}.hero-bottom{font-size:7px}.hero-bottom b{font-size:15px}.portrait-caption{left:17px;right:17px;font-size:8px}.hero-sticker{height:90px;width:90px;font-size:12px}.section-heading{font-size:52px}.contact-content h2{font-size:49px}.email-giant{font-size:19px;letter-spacing:-.6px}.email-giant span{font-size:20px}.spa-board{padding:12px}.spa-board-title{font-size:9px}.spa-board-title span{font-size:6px}.diagram-box{font-size:7px}.project-preview{padding:17px}.leather-frame{height:270px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}[data-reveal]{opacity:1;transform:none}}
