/* LIU Portfolio 1.5 — One page, logo Lucas Liu, mobile filters, vector icons */
:root{
  --ink:#101b30;--muted:#5d6a7c;--blue:#315de7;--blue-dark:#2046ca;
  --line:#e3e9f0;--paper:#f7f9fc;--white:#ffffff;--night:#0d172c;
  --container:1232px;--ease:cubic-bezier(.22,1,.36,1);
}
*,*::before,*::after{box-sizing:border-box}
html{scroll-behavior:smooth;scroll-padding-top:90px}
body{margin:0;overflow-x:hidden;background:var(--paper);color:var(--ink);font:400 16px/1.65 Inter,"Segoe UI",Arial,sans-serif;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
body,button,input{font-family:Inter,"Segoe UI",Arial,sans-serif}
img{display:block;max-width:100%}a{text-decoration:none;color:inherit}button{cursor:pointer}
button:focus-visible,a:focus-visible{outline:3px solid #7ca7ff;outline-offset:4px}
::selection{background:#9bb8ff;color:#07132b}
.container{width:min(var(--container),calc(100% - 88px));margin-inline:auto}
.skip-link{position:fixed;z-index:999;top:-80px;left:20px;background:#fff;padding:12px 16px;color:#07132b;border-radius:8px}.skip-link:focus{top:12px}
.section-anchor{scroll-margin-top:78px}.section-space{padding:118px 0 125px}
.scroll-progress{position:fixed;z-index:100;inset:0 0 auto;height:3px;pointer-events:none;background:transparent}
.scroll-progress span{display:block;height:100%;width:100%;background:#79a6ff;transform-origin:left;transform:scaleX(0);will-change:transform}
/* Header */
.site-header{height:82px;position:sticky;top:0;z-index:60;background:rgba(247,249,252,.91);border-bottom:1px solid rgba(205,217,233,.82);backdrop-filter:saturate(150%) blur(18px);-webkit-backdrop-filter:saturate(150%) blur(18px);transition:height .3s,box-shadow .3s}
.site-header.is-scrolled{height:72px;box-shadow:0 12px 36px #11254d0d}
.nav-wrap{height:100%;display:flex;align-items:center;justify-content:space-between;gap:25px}
.brand{display:inline-flex;align-items:baseline;white-space:nowrap;letter-spacing:-.08em;font-size:29px;line-height:1;font-weight:850}
.brand span{color:#3565e8}.brand small{font-size:9px;letter-spacing:.22em;color:#8190a2;font-weight:750;margin-left:14px}
.nav-links{display:flex;align-items:center;margin-left:auto;gap:25px}
.nav-links a{position:relative;display:inline-flex;align-items:center;min-height:44px;font-size:12px;font-weight:670;color:#647185;white-space:nowrap;transition:color .22s}
.nav-links a::after{content:"";height:2px;position:absolute;bottom:6px;left:0;right:0;transform-origin:left;transform:scaleX(0);background:#315de7;transition:transform .35s var(--ease)}
.nav-links a:hover,.nav-links a.is-current{color:#1645c9}.nav-links a:hover::after,.nav-links a.is-current::after{transform:scaleX(1)}
.nav-actions{display:flex;align-items:center;gap:21px}.lang{font-size:11px;font-weight:800;letter-spacing:.1em}
.button{display:inline-flex;align-items:center;justify-content:space-between;gap:29px;min-height:55px;padding:0 23px;border-radius:8px;border:1px solid transparent;font-size:13px;font-weight:760;letter-spacing:-.01em;line-height:1.2;white-space:nowrap;position:relative;overflow:hidden;isolation:isolate;transition:transform .33s var(--ease),box-shadow .33s,background .2s,border-color .2s}
.button span{font-size:20px;line-height:1;transition:transform .32s var(--ease)}.button:hover span{transform:translate(3px,-3px)}.button:hover{transform:translateY(-3px)}
.button-dark{color:#fff;background:#13223c}.button-small{min-height:40px;font-size:12px;padding:0 17px;gap:14px}
.button-primary{color:#fff;background:#426cfa;box-shadow:0 14px 30px #041d6940}.button-primary:hover{background:#5780ff;box-shadow:0 18px 36px #041d6966}
.button-white{color:#eef3ff;background:rgba(255,255,255,.07);border-color:rgba(192,207,233,.35)}.button-white:hover{background:rgba(255,255,255,.15);border-color:#c9d7f0}
.mobile-toggle{display:none;position:relative;padding:9px;border:0;background:transparent;min-width:44px;min-height:44px}
.mobile-toggle span{display:block;width:23px;height:2px;background:var(--ink);margin:6px auto;transition:transform .3s,opacity .3s}
.mobile-toggle[aria-expanded="true"] span:first-child{transform:translateY(4px) rotate(45deg)}
.mobile-toggle[aria-expanded="true"] span:last-child{transform:translateY(-4px) rotate(-45deg)}
/* Hero: a spacious statement, deliberately no right-hand statistic card */
.hero{position:relative;overflow:hidden;min-height:min(745px,90vh);background:var(--night);color:#fff;isolation:isolate}
.hero::before{content:"";position:absolute;inset:0;z-index:-1;opacity:.26;background-image:linear-gradient(to right,rgba(255,255,255,.055) 1px,transparent 1px),linear-gradient(to bottom,rgba(255,255,255,.055) 1px,transparent 1px);background-size:82px 82px;mask-image:linear-gradient(to left,#000 5%,transparent 90%)}
.hero::after{content:"";position:absolute;pointer-events:none;inset:0;z-index:-1;background:radial-gradient(570px circle at var(--mx,78%) var(--my,39%),rgba(55,101,225,.2),transparent 76%)}
.hero-ambient{position:absolute;inset:0;overflow:hidden;pointer-events:none;z-index:-1}
.hero-ambient i{position:absolute;display:block;border-radius:50%;border:1px solid rgba(132,173,255,.14);width:690px;height:690px;right:-120px;top:-66px;animation:float-orbit 18s ease-in-out infinite alternate}
.hero-ambient i:nth-child(2){width:460px;height:460px;right:5px;top:45px;border-color:rgba(142,174,250,.1);animation-duration:23s;animation-direction:alternate-reverse}
.hero-ambient i:nth-child(3){height:270px;width:270px;right:100px;top:145px;background:radial-gradient(circle,rgba(49,97,221,.22),rgba(49,97,221,.03) 64%,transparent 76%);border:0;filter:blur(15px);animation-duration:14s}
@keyframes float-orbit{from{transform:translate3d(-30px,8px,0) rotate(-8deg)}to{transform:translate3d(28px,-16px,0) rotate(7deg)}}
.hero-grid{min-height:700px;display:flex;align-items:center;position:relative;padding:95px 0 105px}
.hero-main{position:relative;z-index:3;max-width:1080px}
.eyebrow,.section-meta{font-weight:800;letter-spacing:.21em;line-height:1.4;font-size:10px}
.eyebrow{display:flex;align-items:center;gap:15px;color:#a7bff6}.eyebrow-line{height:2px;width:36px;display:inline-block;background:#779eff}
.hero-main h1{font-size:clamp(63px,7.5vw,111px);font-weight:770;line-height:1.045;letter-spacing:-.074em;max-width:1130px;margin:29px 0 31px;text-wrap:balance}
.hero-name{white-space:nowrap}.hero-main h1 em{font-style:normal;font-weight:500;color:#93b3ff;display:inline-block}
.hero-lead{max-width:630px;font-size:17px;line-height:1.82;color:#b9c7df;margin:0;letter-spacing:-.012em}
.hero-buttons{display:flex;flex-wrap:wrap;gap:12px;margin-top:33px}
.hero-bottom{margin-top:59px;display:flex;gap:10px;flex-wrap:wrap;align-items:center;font-size:11px;color:#b4c2d7}
.online-dot{width:8px;height:8px;display:inline-block;border-radius:50%;background:#77dfb1;box-shadow:0 0 0 4px rgba(119,223,177,.13);animation:pulse-dot 3s ease-in-out infinite}
@keyframes pulse-dot{50%{box-shadow:0 0 0 8px rgba(119,223,177,0)}}
.hero-separator{color:#5c7399;padding-inline:6px}.hero-side-note{position:absolute;right:0;bottom:123px;display:flex;align-items:center;gap:13px;color:#839ab9;font-size:9px;letter-spacing:.22em;writing-mode:vertical-rl;font-weight:750}.hero-side-line{height:75px;width:1px;background:linear-gradient(#567cbd,transparent)}
.scroll-cue{position:absolute;bottom:29px;left:calc((100% - min(var(--container),100% - 88px))/2);display:flex;align-items:center;gap:17px;font-size:9px;letter-spacing:.17em;color:#8da6ca;font-weight:800}.scroll-cue i{font-size:20px;font-style:normal;animation:cue-down 2.2s ease-in-out infinite}
@keyframes cue-down{50%{transform:translateY(7px)}}
@keyframes hero-enter{from{opacity:0;transform:translate3d(0,25px,0)}to{opacity:1;transform:translate3d(0,0,0)}}
.hero-animate{animation:hero-enter .9s var(--ease) both;animation-delay:var(--enter,0ms)}
/* Shared headings / reveal */
.section-heading{display:grid;grid-template-columns:210px minmax(0,1fr);gap:38px;margin-bottom:43px}
.section-meta{color:var(--blue);padding-top:10px}
.section-heading h2,.experience-layout h2{font-weight:750;font-size:clamp(39px,4.4vw,61px);letter-spacing:-.064em;line-height:1.12;margin:0;max-width:850px;text-wrap:balance}
.section-heading p{font-size:15px;line-height:1.83;color:var(--muted);max-width:705px;margin:18px 0 0}
html.has-motion [data-reveal]:not(.is-visible){opacity:0;transform:translate3d(0,35px,0)}
[data-reveal]{transition:opacity .85s var(--ease),transform .85s var(--ease);transition-delay:var(--reveal-delay,0ms)}
/* Projects / site previews */
.projects-section{background:#fff}
.filter-line{display:flex;align-items:center;justify-content:space-between;gap:24px;border-top:1px solid var(--line);padding:22px 0 33px}
.filters{display:flex;flex-wrap:wrap;gap:8px}.filter{background:#f8fafc;border:1px solid #e1e7f0;color:#677487;font-size:12px;font-weight:730;padding:10px 18px;border-radius:40px;transition:background .25s,color .25s,transform .25s,border-color .25s}
.filter.active,.filter[aria-pressed="true"]{background:#17243b;color:#fff;border-color:#17243b;transform:none;box-shadow:none}.filter{-webkit-tap-highlight-color:transparent;touch-action:manipulation;appearance:none;user-select:none}@media(hover:hover) and (pointer:fine){.filter:hover:not(.active){border-color:#bbc9ed;color:var(--blue);transform:translateY(-2px)}}.filter-total{font-size:12px;color:#8a96a6;white-space:nowrap}
.project-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:74px 31px}.project-item{min-width:0}.project-item[hidden]{display:none!important}
.project-preview{position:relative;display:block;padding:14px 14px 0;border-radius:13px;aspect-ratio:1.56;overflow:hidden;background:#dee6f1;transition:transform .55s var(--ease),box-shadow .55s var(--ease)}
.project-preview:hover{transform:translateY(-7px);box-shadow:0 22px 50px #18335620}.preview-ahorrito{background:#e5ebd5}.preview-luckybot{background:#e6deed}.preview-noti{background:#dcf0ed}.preview-volvix{background:#e0eafa}.preview-otros{background:#e6edff}
.project-browserbar{position:relative;z-index:2;height:31px;display:flex;align-items:center;gap:13px;padding:0 14px;background:#fbfcff;border-radius:7px 7px 0 0}
.browser-dots{display:flex;gap:5px}.browser-dots i{height:7px;width:7px;display:block;border-radius:50%;background:#cad4e3}.browser-dots i:first-child{background:#e9a29e}.browser-dots i:nth-child(2){background:#eccb8b}.browser-dots i:nth-child(3){background:#a1d6bb}
.browser-url{font-size:10px;color:#8090a4;max-width:calc(100% - 95px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin:auto}.browser-open{color:#5e7397;font-size:15px;transition:transform .3s}.project-preview:hover .browser-open{transform:translate(2px,-2px)}
.preview-inner{position:relative;height:calc(100% - 31px);overflow:hidden;background:#fff}.cover-img{width:100%;height:100%;object-fit:cover;object-position:top center;position:relative;z-index:2;transition:transform 1s var(--ease),filter .8s var(--ease)}.project-preview:hover .cover-img{transform:scale(1.042)}
.preview-fallback{position:absolute;inset:0;display:flex;flex-direction:column;align-items:flex-start;justify-content:center;padding:clamp(22px,4vw,50px);gap:12px;background:linear-gradient(125deg,#f4f7fc,#fff);color:var(--ink);z-index:1;overflow:hidden}
.preview-fallback::after{content:"";position:absolute;width:220px;height:220px;border:1px solid #c9d7ec;border-radius:50%;right:-75px;top:15px}.preview-fallback span{font-size:10px;color:#8895aa;letter-spacing:.2em}.preview-fallback strong{font-size:clamp(33px,4vw,57px);line-height:1.1;letter-spacing:-.065em}.preview-fallback small{font-size:12px;color:#8290a5}.preview-inner.is-fallback .cover-img{display:none}
.project-info{padding:25px 3px 0}.project-topline{display:flex;gap:13px;align-items:center;font-size:11px;letter-spacing:.06em;font-weight:700}.project-number{color:var(--blue)}.project-category{color:#778397;letter-spacing:0;flex:1}
.project-visit-mini{height:34px;width:34px;border-radius:50%;border:1px solid #dce3ed;display:flex;align-items:center;justify-content:center;font-size:17px;transition:background .25s,color .25s,transform .25s}.project-item:hover .project-visit-mini{background:#233f89;color:#fff;transform:rotate(45deg)}
.project-info h3{font-size:33px;letter-spacing:-.055em;line-height:1.16;font-weight:770;margin:10px 0 12px}.project-summary{color:#5e6a7a;font-size:14px;line-height:1.83;min-height:77px;margin:0}
.project-features{list-style:none;display:grid;gap:6px;padding:0;margin:17px 0 20px}.project-features li{position:relative;color:#46536a;font-size:12px;padding-left:17px}.project-features li::before{content:"";position:absolute;left:1px;top:8px;width:5px;height:5px;background:#4275f5;border-radius:50%}
.visit-link{display:inline-flex;align-items:center;gap:19px;margin-top:19px;padding-bottom:4px;color:var(--blue-dark);font-size:13px;font-weight:780;position:relative}.visit-link::after{content:"";position:absolute;bottom:0;left:0;right:0;height:1px;background:currentColor;transform:scaleX(0);transform-origin:left;transition:transform .33s}.visit-link:hover::after{transform:scaleX(1)}.visit-link span{font-size:18px;transition:transform .3s}.visit-link:hover span{transform:translate(3px,-3px)}
/* Services */
.services-section{background:#f2f5fa}.services-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));border-top:1px solid #dce4ee;border-left:1px solid #dce4ee}
.service{padding:30px 25px 33px;min-height:254px;border-right:1px solid #dce4ee;border-bottom:1px solid #dce4ee;transition:background .42s var(--ease),padding .42s var(--ease)}.service:hover{background:#fff}
.service-top{display:flex;align-items:center;justify-content:space-between;color:#8d9aae;font-size:11px;font-weight:790}.service-arrow{color:var(--blue);font-size:22px;transition:transform .35s}.service:hover .service-arrow{transform:translate(4px,-4px)}
.service h3{font-size:21px;line-height:1.3;letter-spacing:-.04em;font-weight:730;margin:43px 0 12px}.service p{font-size:13px;line-height:1.78;color:#6a7688;margin:0}
/* Experience: editorial text and specific delivered domains, not a technology badge strip */
.experience-section{color:#fff;background:#111e33;position:relative;overflow:hidden}.experience-section::before{content:"";position:absolute;inset:0;background:radial-gradient(600px circle at 100% 100%,rgba(70,110,209,.15),transparent 80%);pointer-events:none}
.experience-layout{position:relative;display:grid;grid-template-columns:.90fr 1.1fr;gap:92px}.experience-layout .section-meta{color:#97b3ff;margin-bottom:28px}.experience-layout h2{color:#fff}
.experience-lead{font-size:21px;line-height:1.7;color:#f0f4ff;margin:0;letter-spacing:-.015em}.experience-content>p:not(.experience-lead){font-size:15px;color:#afbdd1;line-height:1.88;margin:23px 0 0}
.experience-highlights{margin-top:35px;border-top:1px solid #35435a}.experience-highlight{display:grid;grid-template-columns:33px 1fr 22px;gap:16px;padding:18px 0;border-bottom:1px solid #35435a;align-items:start}.experience-highlight>span{font-size:10px;font-weight:750;color:#8297b7}.experience-highlight strong{font-size:14px;color:#f0f4ff}.experience-highlight p{color:#9fb0c8;font-size:12px;line-height:1.75;margin:5px 0 0}.experience-highlight b{font-size:16px;color:#91b3ff;font-weight:400}
.inline-link{display:inline-flex;border-bottom:1px solid #96b0e8;color:#b8ccff;font-size:14px;font-weight:740;padding:2px 0 9px;margin-top:28px;transition:color .25s}.inline-link:hover{color:#fff}
/* Reviews */
.reviews-section{background:#fff}.review-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:19px}.review-card{border:1px solid var(--line);border-radius:12px;min-height:305px;margin:0;padding:35px;display:flex;flex-direction:column;transition:box-shadow .35s,transform .35s}.review-card:hover{transform:translateY(-4px);box-shadow:0 18px 35px #142a4810}
.review-mark{font:76px/.76 Georgia,serif;color:#3565e8}.review-card>p{flex:1;font-size:16px;line-height:1.82;margin:22px 0 30px;overflow-wrap:anywhere}.review-person{display:flex;align-items:center;gap:13px;border-top:1px solid #e6eaf1;padding-top:20px}.review-avatar{width:49px;height:49px;border-radius:50%;background:#e6ecf7;overflow:hidden;flex:0 0 auto}.review-avatar img{height:100%;width:100%;object-fit:cover}
.person-meta{display:flex;flex-direction:column;gap:3px;line-height:1.4}.person-meta strong{font-size:13px}.person-meta small,.person-meta span{font-size:11px;color:#7d8a9e}.person-meta a{font-size:11px;font-weight:750;color:var(--blue);overflow-wrap:anywhere}
.review-empty{border:1px solid #e5ebf3;background:#f8fafe;border-radius:10px;padding:29px 32px;display:flex;gap:23px;align-items:center;max-width:850px}.review-empty-symbol{font:74px/.8 Georgia,serif;color:#315de7}.review-empty strong{font-size:17px}.review-empty p{font-size:13px;color:#77859b;line-height:1.8;margin:4px 0 0}
/* Contact */
.contact-section{background:#e9effa;padding:119px 0 115px}.contact-layout{display:grid;grid-template-columns:1fr .82fr;gap:115px}.contact-section h2{font-size:clamp(49px,5.6vw,81px);letter-spacing:-.07em;line-height:1.12;margin:27px 0 20px;font-weight:770}.contact-section h2 em{color:#2956d6;font-weight:500;font-style:normal}.contact-section p{font-size:15px;color:#627083;line-height:1.83;max-width:520px}
.contact-kicker{font-size:10px;letter-spacing:.18em;font-weight:800;color:#7d8ba1;margin:11px 0 16px}.contact-line{display:flex;gap:16px;align-items:center;min-height:74px;border-top:1px solid #cbd7e8;transition:padding .25s}.contact-line:last-of-type{border-bottom:1px solid #cbd7e8}.contact-line:hover{padding-left:6px}.contact-line span{font-size:11px;font-weight:720;color:#7b899d;width:92px}.contact-line strong{font-size:15px;letter-spacing:-.02em;flex:1;overflow-wrap:anywhere}.contact-line b{font-size:21px;color:var(--blue);font-weight:400}.contact-line:hover strong{color:var(--blue-dark)}.contact-note{font-size:11px!important;color:#8190a5!important;margin-top:20px}
/* Footer / top */
.site-footer{background:#f7f9fc;padding:40px 0 35px}.footer-inner{display:flex;justify-content:space-between;align-items:flex-end;gap:30px}.footer-brand{font-size:33px}.site-footer p{font-size:12px;color:#8490a0;margin:12px 0 0}.footer-nav{display:flex;justify-content:flex-end;flex-wrap:wrap;gap:21px;color:#728093;font-size:12px;margin-bottom:16px}.footer-nav a:hover{color:var(--blue)}.copyright{display:block;text-align:right;font-size:11px;color:#97a3b3}
.back-top{position:fixed;bottom:26px;right:26px;height:46px;width:46px;display:flex;align-items:center;justify-content:center;border-radius:50%;background:rgba(255,255,255,.96);border:1px solid #dce4ee;box-shadow:0 12px 28px #162e4c1a;color:#1b4cce;font-size:21px;z-index:30;opacity:0;pointer-events:none;transform:translateY(14px);transition:opacity .35s,transform .35s}.back-top.visible{opacity:1;pointer-events:auto;transform:translateY(0)}.back-top:hover{background:#1b4cce;color:white}
/* Breakpoints */
@media(max-width:1170px){.container{width:min(var(--container),calc(100% - 60px))}.nav-links{gap:17px}.nav-links a{font-size:11px}.hero-main h1{font-size:clamp(63px,8vw,95px)}.services-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.service{min-height:222px}.experience-layout{gap:50px}}
@media(max-width:870px){.site-header{height:74px}.site-header.is-scrolled{height:70px}.brand small{display:none}.mobile-toggle{display:block}.nav-talk{display:none}.nav-wrap{gap:13px}
 .nav-links{position:absolute;display:none;top:100%;left:0;right:0;background:#fff;flex-direction:column;align-items:stretch;padding:12px 30px 24px;gap:0;box-shadow:0 25px 33px #152b4c1a;border-bottom:1px solid var(--line)}.nav-links.open{display:flex}.nav-links a{font-size:15px;min-height:52px;padding:11px 0;border-bottom:1px solid #f0f2f6}.nav-links a::after{display:none}
 .hero{min-height:650px}.hero-grid{min-height:650px;padding:95px 0 110px}.hero-main h1{font-size:clamp(53px,8.5vw,75px)}.hero-side-note{display:none}.scroll-cue{left:30px}.section-space{padding:80px 0 87px}.section-heading{grid-template-columns:1fr;gap:16px}.section-meta{padding-top:0}.project-grid{gap:58px 23px}.project-summary{min-height:0}.experience-layout{grid-template-columns:1fr;gap:34px}.contact-layout{grid-template-columns:1fr;gap:43px}.contact-section{padding:85px 0}}
@media(max-width:640px){.container{width:calc(100% - 38px)}.hero{min-height:690px}.hero-grid{min-height:680px;padding:87px 0 110px}.hero-ambient i{right:-450px;top:50px}.hero-main h1{font-size:clamp(45px,10.7vw,67px);line-height:1.08;letter-spacing:-.066em;margin:27px 0 22px}.hero-name{white-space:normal}.hero-main h1 em{display:inline}.hero-lead{font-size:15px;line-height:1.8}.eyebrow,.section-meta{font-size:9px}.hero-buttons{margin-top:29px;gap:10px}.hero-buttons .button{width:100%;gap:12px}.hero-bottom{font-size:11px;margin-top:35px;gap:9px}.hero-separator{padding-inline:2px}.scroll-cue{bottom:26px;left:19px;font-size:9px}.section-space{padding:68px 0 75px}.section-heading h2,.experience-layout h2{font-size:clamp(34px,9.5vw,45px)}.section-heading p{font-size:14px;margin-top:11px}.filter-line{align-items:flex-start;flex-direction:column;gap:11px;padding:18px 0 25px}.filters{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;overflow:visible;width:100%;max-width:100%;padding:0}.filter{min-width:0;min-height:46px;width:100%;padding:10px 9px;border-radius:12px;white-space:normal;overflow-wrap:normal;text-wrap:balance;font-size:11.5px;line-height:1.25;transform:none!important}.filter:first-child{grid-column:1/-1}.filter:focus:not(:focus-visible){outline:0}.filter.active,.filter[aria-pressed="true"]{box-shadow:0 5px 13px rgba(19,35,60,.10)}.filter-total{align-self:flex-end}.project-grid{grid-template-columns:1fr;gap:49px}.project-preview{aspect-ratio:1.43;padding:10px 10px 0}.project-browserbar{height:28px}.preview-inner{height:calc(100% - 28px)}.project-info{padding-top:19px}.project-info h3{font-size:30px}.project-features{margin:13px 0 16px}.project-summary{font-size:13px}.services-grid{grid-template-columns:1fr}.service{min-height:0;padding:22px 24px 26px}.service h3{margin-top:26px;font-size:20px}.experience-lead{font-size:18px}.experience-content>p:not(.experience-lead){font-size:14px}.experience-highlight{grid-template-columns:25px 1fr 20px;gap:11px}.review-grid{grid-template-columns:1fr}.review-card{padding:25px;min-height:0}.review-empty{gap:10px;padding:21px 17px;align-items:flex-start}.review-empty-symbol{font-size:53px}.review-empty strong{font-size:14px}.review-empty p{font-size:12px}.contact-section h2{font-size:clamp(44px,12vw,64px)}.contact-section p{font-size:14px}.contact-line{min-height:68px}.contact-line span{width:65px}.contact-line strong{font-size:13px}.footer-inner{flex-direction:column;align-items:flex-start;gap:25px}.footer-nav{justify-content:flex-start;gap:17px}.copyright{text-align:left}.back-top{bottom:12px;right:12px;width:42px;height:42px}}
@media(max-width:375px){.hero-main h1{font-size:43px}.hero{min-height:720px}.hero-grid{min-height:710px}.hero-bottom{align-items:flex-start}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}html.has-motion [data-reveal]:not(.is-visible){opacity:1;transform:none}}

/* =======================================================
   v1.5.0 — Identidad Lucas Liu + íconos vectoriales SVG
   ======================================================= */
.brand{display:inline-flex;align-items:center;flex:0 0 auto;letter-spacing:normal;line-height:1}
.brand img{display:block;width:180px;height:auto;max-height:44px;object-fit:contain}
.footer-brand img{width:172px;max-height:44px}
.arrow-icon{display:inline-block;flex:0 0 auto;width:20px;height:20px;vertical-align:middle;stroke:currentColor;fill:none;pointer-events:none;transition:transform .28s var(--ease)}
.button .button-arrow,.visit-link .visit-arrow{display:inline-flex;align-items:center;justify-content:center;line-height:1}
.button .button-arrow svg{width:18px;height:18px}
.button:hover .button-arrow{transform:translate(2px,-2px)}
.browser-open,.service-arrow,.icon-only{display:inline-flex;align-items:center;justify-content:center}
.browser-open svg,.service-arrow svg,.icon-only svg{width:18px;height:18px}
.visit-link .visit-arrow svg{width:18px;height:18px}
.visit-link:hover .visit-arrow{transform:translate(3px,-3px)}
.scroll-cue i{display:inline-flex;align-items:center;justify-content:center}
.scroll-cue i svg{width:20px;height:20px}
.inline-link{display:inline-flex;align-items:center;gap:9px}
.inline-link svg{width:16px;height:16px}
.person-meta a{display:inline-flex;align-items:center;gap:3px;max-width:max-content}
.person-meta a svg{width:12px;height:12px}
.contact-line b svg{width:20px;height:20px}
.back-top svg{width:20px;height:20px}
@media(max-width:870px){.brand img{width:166px;max-height:40px}}
@media(max-width:640px){.brand img{width:151px;max-height:37px}.footer-brand img{width:161px}.filter:active{transform:none;box-shadow:none}}

/* v1.6.0 | Nueva identidad Lucas Liu + selector ES / EN / 繁體中文 */
.brand img { width: 190px; max-height: 66px; height: auto; object-fit: contain; }
.footer-brand img { width: 200px; max-height: 68px; }
.nav-actions { gap: 14px; }
.lang-picker { position: relative; z-index: 71; flex: 0 0 auto; color: #263852; }
.lang-picker summary { list-style: none; display: inline-flex; align-items: center; justify-content: center; gap: 7px; min-height: 43px; min-width: 90px; padding: 0 11px; border: 1px solid #dce5f0; border-radius: 11px; background: #fff; box-shadow: 0 2px 6px #07193005; color: #34445e; font: 750 12px/1.2 Inter,"Segoe UI",Arial,sans-serif; cursor: pointer; user-select: none; -webkit-tap-highlight-color: transparent; transition: color .22s, border-color .22s, background .22s, box-shadow .22s; }
.lang-picker summary::-webkit-details-marker { display: none; }
.lang-picker summary::marker { content: ""; }
.lang-picker summary .globe-icon { color: #4166c8; flex: 0 0 auto; }
.lang-picker summary .chevron { color: #8a9bb0; flex: 0 0 auto; transition: transform .25s; }
.lang-picker[open] summary { background: #edf3ff; border-color: #9cb6ef; color: #163867; }
.lang-picker[open] .chevron { transform: rotate(180deg); }
.lang-picker summary:focus-visible { outline: 3px solid #9dc1ff; outline-offset: 3px; }
.lang-panel { position: absolute; top: calc(100% + 10px); right: 0; z-index: 100; min-width: 182px; padding: 7px; background: #fff; border: 1px solid #e0e8f3; border-radius: 13px; box-shadow: 0 20px 50px #15274b22; animation: language-enter .23s cubic-bezier(.2,.8,.2,1); }
.lang-option { display: flex; align-items: center; justify-content: space-between; gap: 20px; width: 100%; min-height: 43px; padding: 9px 12px; font-size: 13px; line-height: 1.3; font-weight: 650; color: #4c5a70; border-radius: 8px; }
.lang-option.selected { color: #1c4cdb; background: #f0f5ff; }
.lang-indicator { font-size: 15px; font-weight: 800; }
@media (hover:hover) and (pointer:fine) { .lang-picker summary:hover { border-color: #adc4ee; background: #f9fbff; } .lang-option:hover { color: #1743ae; background: #f4f7ff; } }
@keyframes language-enter { from { opacity: 0; transform: translateY(-6px); } to { opacity: 1; transform: translateY(0); } }
/* Traditional Chinese on all sections, including testimonial copy. */
html[lang="zh-Hant"] body, html[lang="zh-Hant"] button, html[lang="zh-Hant"] summary { font-family: "Noto Sans TC", "PingFang TC", "Microsoft JhengHei", "Heiti TC", "Segoe UI", sans-serif; }
html[lang="zh-Hant"] .hero-main h1 { letter-spacing: -.045em; font-size: clamp(52px, 6.5vw, 90px); line-height: 1.18; }
html[lang="zh-Hant"] .hero-main h1 em { font-weight: 620; }
html[lang="zh-Hant"] .section-heading h2, html[lang="zh-Hant"] .experience-layout h2 { letter-spacing: -.035em; line-height: 1.24; }
html[lang="zh-Hant"] .contact-section h2 { letter-spacing: -.035em; line-height: 1.24; }
html[lang="zh-Hant"] .eyebrow, html[lang="zh-Hant"] .section-meta { letter-spacing: .11em; }
html[lang="zh-Hant"] .project-category { line-height: 1.55; }
html[lang="zh-Hant"] .review-card>p { line-height: 1.95; }
html[lang="zh-Hant"] .nav-links a { font-size: 13px; }
@media (max-width:1170px){ .brand img { width: 174px; } .nav-actions { gap: 10px; } }
@media (max-width:870px){ .brand img { width: 162px; max-height: 46px; } .nav-actions { gap: 12px; } .lang-picker summary { min-width: 86px; } .lang-panel { right: -16px; } html[lang="zh-Hant"] .hero-main h1 { font-size: clamp(49px, 7.8vw, 72px); } }
@media (max-width:640px){
 .brand img { width: 154px; }
 .footer-brand img { width: 189px; }
 .lang-picker summary { min-width: 86px; padding: 0 10px; }
 html[lang="zh-Hant"] .hero-main h1 { font-size: clamp(42px, 9.2vw, 60px); line-height: 1.27; }
 html[lang="zh-Hant"] .hero-grid { min-height: 695px; }
 html[lang="zh-Hant"] .project-category { font-size: 11px; }
 .lang-panel { right: -5px; }
}
@media (max-width:375px){
 .nav-wrap { gap: 5px; }
 .nav-actions { gap: 4px; }
 .brand img { width: 120px; }
 .lang-picker summary { min-width: 69px; gap: 4px; padding: 0 7px; font-size: 11px; }
 .lang-picker .globe-icon { display: none; }
 .mobile-toggle { min-width: 39px; width: 39px; }
 html[lang="zh-Hant"] .hero-main h1 { font-size: 41px; }
}
@media (prefers-reduced-motion: reduce) { .lang-panel { animation: none; } }
