:root{--bg:#071014;--surface:#0c181d;--surface2:#102128;--line:#1b343d;--text:#e8f2f4;--muted:#83a0aa;--cyan:#4bdbe4;--green:#52e08b;--red:#ff7183;--max:1220px}*{box-sizing:border-box}html{background:var(--bg);color:var(--text);font-family:Manrope,sans-serif;scroll-behavior:smooth}body{margin:0;background:linear-gradient(135deg,#071014,#09191e 60%,#0b2228);min-height:100vh}a{color:inherit}header{height:72px;border-bottom:1px solid var(--line);display:flex;align-items:center;padding:0 max(28px,calc((100vw - var(--max))/2));gap:42px;background:#071014f2;position:sticky;top:0;z-index:10;backdrop-filter:blur(14px)}.brand{display:flex;align-items:center;gap:11px;text-decoration:none}.brand>b{font:600 15px 'IBM Plex Mono';color:var(--cyan);border:1px solid var(--cyan);padding:8px}.brand span{font-weight:800;letter-spacing:.13em;font-size:13px}.brand small{display:block;font:500 8px 'IBM Plex Mono';color:var(--muted);margin-top:3px}nav{display:flex;gap:8px;flex:1}nav a,.account-link{font:600 10px 'IBM Plex Mono';text-decoration:none;color:var(--muted);padding:10px 12px;border-radius:4px}nav a:hover{background:var(--surface2);color:var(--cyan)}.head-tools,.language,.button-row,.card-actions{display:flex;align-items:center;gap:10px}.language{font:600 11px 'IBM Plex Mono';border:1px solid var(--line);padding:8px 10px}.language a{text-decoration:none;color:var(--muted)}.language a.on{color:var(--green)}.language i{font-style:normal;color:#34505a}main{width:min(var(--max),calc(100% - 56px));margin:auto;padding:54px 0 80px}.hero{display:grid;grid-template-columns:1.25fr .75fr;gap:56px;align-items:center;min-height:440px;padding:45px 0}.eyebrow,.tag{font:600 10px 'IBM Plex Mono';color:var(--cyan);letter-spacing:.12em}.hero h1,.page-intro h1{font-size:clamp(44px,5vw,70px);line-height:1.02;letter-spacing:-.045em;margin:18px 0}.hero-copy>p,.page-intro>p{font-size:17px;line-height:1.7;color:var(--muted);max-width:720px}.button{display:inline-flex;align-items:center;justify-content:center;min-height:42px;padding:0 16px;border:1px solid var(--line);background:var(--surface);font:600 10px 'IBM Plex Mono';text-decoration:none;color:var(--text);border-radius:4px;cursor:pointer}.button:hover{border-color:var(--cyan);color:var(--cyan);transform:translateY(-1px)}.button.primary{background:var(--cyan);border-color:var(--cyan);color:#041115}.button.small{min-height:36px;padding:0 12px}.button.danger{border-color:#58303a;color:var(--red)}.button:disabled{opacity:.45}.status-card,.panel,.project-card,.download-card,.quick>a,.project-list>article,.flash-panel{background:linear-gradient(145deg,var(--surface),#091519);border:1px solid var(--line);border-radius:8px}.status-card{padding:22px}.status-card header{position:static;height:auto;padding:0 0 18px;background:none;border-bottom:1px solid var(--line);justify-content:space-between}.status-card header b{color:var(--green);font:600 10px 'IBM Plex Mono'}.status-card dl{margin:0}.status-card dl div,.donate dl div{display:flex;justify-content:space-between;padding:14px 0;border-bottom:1px solid var(--line)}dt{color:var(--muted)}dd{margin:0;font:500 11px 'IBM Plex Mono'}.quick{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin:14px 0 72px}.quick>a{padding:23px;text-decoration:none;display:grid;gap:12px}.quick>a:hover{border-color:var(--cyan);background:var(--surface2)}.quick small{font:600 9px 'IBM Plex Mono';color:var(--cyan)}.quick b{font-size:17px}.quick span{font-size:12px;line-height:1.6;color:var(--muted)}.section-title{display:flex;justify-content:space-between;align-items:end;margin-bottom:20px}.section-title h2{font-size:28px;margin:7px 0}.section-title span{color:var(--muted);font:11px 'IBM Plex Mono'}.text-link{font:600 11px 'IBM Plex Mono';color:var(--cyan)}.project-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.project-card{padding:24px;min-height:260px;display:flex;flex-direction:column;justify-content:space-between}.project-card h3{font-size:22px;margin:18px 0 10px}.project-card p,.project-list p,.download-card p,.panel p{color:var(--muted);font-size:13px;line-height:1.7}.page-intro{padding:45px 0 36px;border-bottom:1px solid var(--line);margin-bottom:30px}.page-intro h1{font-size:56px}.filter-tabs{display:flex;gap:8px;position:sticky;top:72px;background:var(--bg);padding:12px 0;z-index:5}.filter-tabs a{padding:10px 16px;background:var(--surface);border:1px solid var(--line);text-decoration:none;font:600 10px 'IBM Plex Mono';border-radius:4px}.download-section{padding:30px 0}.download-grid{display:grid;gap:12px}.download-card{display:grid;grid-template-columns:54px 1fr 280px;gap:20px;padding:20px;align-items:center}.asset-icon{width:50px;height:50px;border:1px solid var(--cyan);color:var(--cyan);display:grid;place-items:center;font:600 20px 'IBM Plex Mono'}.asset-main h3{margin:8px 0;font-size:20px}.asset-main small{color:var(--green);font:600 9px 'IBM Plex Mono'}.asset-actions{display:grid;gap:8px}.asset-actions b{font:600 13px 'IBM Plex Mono';color:var(--cyan)}input,textarea,select{width:100%;border:1px solid var(--line);background:#061014;color:var(--text);padding:11px;border-radius:4px;font:12px 'IBM Plex Mono';outline:none}input:focus,textarea:focus,select:focus{border-color:var(--cyan)}.flash-panel{margin-top:34px;padding:28px;display:flex;align-items:center;justify-content:space-between;gap:30px}.support-grid,.account-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}.panel{padding:24px}.panel.wide{grid-column:1/-1}.panel ol{color:var(--muted);line-height:2}.donate form,.settings-form{display:grid;gap:10px}.account-hero{display:flex;align-items:center;gap:20px;padding:25px 0 40px}.account-hero img{width:76px;height:76px;border-radius:50%;border:2px solid var(--cyan)}.account-hero h1{margin:5px 0;font-size:34px}.account-hero .button{margin-left:auto}.history-row{display:flex;justify-content:space-between;align-items:center;padding:14px 0;border-bottom:1px solid var(--line);gap:15px}.history-row span{color:var(--muted);font:10px 'IBM Plex Mono'}.project-list{display:grid;gap:12px}.project-list>article{display:grid;grid-template-columns:55px 1fr auto;align-items:center;gap:25px;padding:24px}.project-index{font:600 24px 'IBM Plex Mono';color:#36555f}.project-list h2{margin:8px 0}.empty{padding:25px;color:var(--muted);border:1px dashed var(--line);border-radius:6px}.asset-form{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}.form-grid .wide{grid-column:1/-1}.admin-list article{display:flex;justify-content:space-between;padding:14px 0;border-bottom:1px solid var(--line)}footer{border-top:1px solid var(--line);padding:35px max(28px,calc((100vw - var(--max))/2));display:grid;grid-template-columns:1fr auto auto;gap:40px;color:var(--muted);font-size:12px}footer a{display:block;margin:5px;text-decoration:none}@media(max-width:850px){header{height:auto;padding:15px 20px;flex-wrap:wrap;gap:14px}nav{order:3;width:100%;overflow:auto}.account-link{display:none}main{width:calc(100% - 32px);padding-top:25px}.hero{grid-template-columns:1fr;min-height:auto;gap:20px}.quick,.project-grid,.support-grid,.account-grid{grid-template-columns:1fr}.download-card,.project-list>article{grid-template-columns:1fr}.asset-actions{grid-template-columns:1fr 1fr}.page-intro h1{font-size:40px}.flash-panel{align-items:start;flex-direction:column}.asset-form,.form-grid{grid-template-columns:1fr}.panel.wide,.form-grid .wide{grid-column:auto}footer{grid-template-columns:1fr}.filter-tabs{top:120px}}
body{position:relative;isolation:isolate;overflow-x:hidden}.ambient-bg{position:fixed;inset:0;z-index:-2;overflow:hidden;pointer-events:none;background:radial-gradient(circle at 75% 20%,rgba(38,145,158,.18),transparent 38%),linear-gradient(135deg,#061014,#081b20 60%,#061115)}.ambient-bg:before{content:'';position:absolute;inset:-60px;background-image:linear-gradient(rgba(75,219,228,.055) 1px,transparent 1px),linear-gradient(90deg,rgba(75,219,228,.055) 1px,transparent 1px);background-size:48px 48px;transform:perspective(700px) rotateX(55deg) translateY(-20%);transform-origin:top;animation:gridDrift 18s linear infinite}.ambient-bg i{position:absolute;border-radius:50%;filter:blur(70px);opacity:.18;animation:orb 12s ease-in-out infinite}.ambient-bg i:nth-child(1){width:360px;height:360px;background:var(--cyan);top:8%;right:6%}.ambient-bg i:nth-child(2){width:260px;height:260px;background:#287dff;bottom:8%;left:8%;animation-delay:-4s}.ambient-bg i:nth-child(3){width:220px;height:220px;background:var(--green);bottom:15%;right:25%;animation-delay:-8s}@keyframes gridDrift{to{transform:perspective(700px) rotateX(55deg) translateY(calc(-20% + 48px))}}@keyframes orb{0%,100%{transform:translate3d(0,0,0) scale(1)}50%{transform:translate3d(35px,-25px,0) scale(1.14)}}nav a{text-transform:uppercase;letter-spacing:.04em}.qr-box{display:grid;grid-template-columns:150px 1fr;gap:18px;align-items:center;margin:18px 0;padding:16px;border:1px solid var(--line);background:#061014;border-radius:6px}.qr-box img{width:150px;height:150px;object-fit:contain;background:white;padding:6px;border-radius:4px}.qr-box small{display:block;color:var(--muted);margin-top:8px}.qr-placeholder{display:flex;align-items:center;gap:14px;margin:18px 0;padding:15px;border:1px dashed var(--line);border-radius:6px}.qr-placeholder>span{display:grid;place-items:center;width:54px;height:54px;border:1px solid var(--cyan);color:var(--cyan);font:600 15px 'IBM Plex Mono'}@media(prefers-reduced-motion:reduce){.ambient-bg:before,.ambient-bg i{animation:none}}@media(max-width:600px){.qr-box{grid-template-columns:1fr}.qr-box img{width:130px;height:130px}}
.locale-editor{display:grid;gap:16px;padding:20px;border:1px solid var(--line);border-radius:6px;background:rgba(6,16,20,.7)}.locale-badge{color:var(--green);font:600 10px 'IBM Plex Mono';letter-spacing:.1em;padding-bottom:12px;border-bottom:1px solid var(--line)}.locale-fields{display:grid;grid-template-columns:1fr 1fr;gap:10px;grid-column:span 2}@media(max-width:850px){.locale-fields{grid-template-columns:1fr;grid-column:auto}}/* Responsive layout upgrade for thienha.io.vn */
:root {
  --max: 1680px;
  --content-pad: clamp(20px, 3.2vw, 64px);
  --section-gap: clamp(48px, 6vw, 96px);
}

header {
  padding-inline: var(--content-pad);
  min-height: 76px;
}

main {
  width: 100%;
  max-width: none;
  padding: clamp(32px, 4vw, 72px) var(--content-pad) clamp(64px, 7vw, 112px);
}

.hero {
  grid-template-columns: minmax(0, 1.45fr) minmax(340px, .55fr);
  gap: clamp(32px, 6vw, 112px);
  min-height: min(620px, calc(100vh - 140px));
  padding-block: clamp(40px, 6vh, 88px);
}

.hero-copy { max-width: 980px; }
.hero h1 { max-width: 1050px; font-size: clamp(52px, 5.3vw, 96px); }
.hero-copy > p { max-width: 820px; font-size: clamp(16px, 1.25vw, 21px); }
.status-card { width: 100%; max-width: 520px; justify-self: end; padding: clamp(22px, 2vw, 34px); }

.quick {
  gap: clamp(16px, 1.5vw, 28px);
  margin-block: 0 var(--section-gap);
}
.quick > a { min-height: 180px; padding: clamp(24px, 2.2vw, 38px); align-content: space-between; }
.quick b { font-size: clamp(17px, 1.25vw, 23px); }
.quick span { font-size: clamp(12px, .85vw, 15px); }

.featured, .download-section { margin-top: var(--section-gap); }
.project-grid { grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: clamp(16px, 1.5vw, 28px); }
.project-card { min-height: 300px; padding: clamp(24px, 2vw, 36px); }

.auth-callout {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: center;
  gap: 28px;
  margin: 0 0 var(--section-gap);
  padding: clamp(24px, 2.5vw, 42px);
  border: 1px solid color-mix(in srgb, var(--cyan) 50%, var(--line));
  border-radius: 10px;
  background: linear-gradient(120deg, rgba(75,219,228,.12), rgba(12,24,29,.86) 50%, rgba(82,224,139,.08));
}
.auth-callout h2 { margin: 8px 0; font-size: clamp(23px, 2vw, 34px); }
.auth-callout p { margin: 0; color: var(--muted); line-height: 1.65; max-width: 800px; }

.download-grid { gap: 16px; }
.download-card { grid-template-columns: 64px minmax(0, 1fr) minmax(260px, 340px); padding: clamp(20px, 1.8vw, 30px); }
.support-grid, .account-grid { gap: clamp(16px, 1.5vw, 28px); }
.panel { padding: clamp(22px, 2vw, 34px); }

footer { padding: 40px var(--content-pad); }

@media (min-width: 1920px) {
  :root { --content-pad: max(64px, calc((100vw - 1760px) / 2)); }
}

@media (max-width: 1100px) {
  .hero { grid-template-columns: minmax(0, 1.15fr) minmax(300px, .85fr); gap: 36px; min-height: auto; }
  .hero h1 { font-size: clamp(46px, 6vw, 68px); }
  .quick { grid-template-columns: repeat(2, 1fr); }
  .quick > a:last-child { grid-column: 1 / -1; }
  .download-card { grid-template-columns: 54px minmax(0,1fr); }
  .asset-actions { grid-column: 2; grid-template-columns: repeat(2, minmax(0,1fr)); }
}

@media (max-width: 850px) {
  :root { --content-pad: clamp(16px, 4vw, 28px); }
  header { padding: 14px var(--content-pad); }
  main { width: 100%; padding-inline: var(--content-pad); }
  .hero { grid-template-columns: 1fr; padding-block: 36px; }
  .status-card { max-width: none; justify-self: stretch; }
  .quick { grid-template-columns: 1fr; }
  .quick > a:last-child { grid-column: auto; }
  .auth-callout { grid-template-columns: 1fr; }
  .download-card { grid-template-columns: 1fr; }
  .asset-actions { grid-column: auto; }
  footer { padding-inline: var(--content-pad); }
}

@media (max-width: 560px) {
  header { gap: 10px; }
  .brand span { font-size: 11px; }
  .head-tools { margin-left: auto; }
  .language { display: none; }
  nav { gap: 4px; scrollbar-width: none; }
  nav a { flex: 0 0 auto; padding: 9px 10px; }
  .hero h1, .page-intro h1 { font-size: clamp(36px, 11vw, 52px); }
  .button-row, .card-actions, .asset-actions { align-items: stretch; flex-direction: column; grid-template-columns: 1fr; }
  .button-row .button, .card-actions .button { width: 100%; }
  .quick > a { min-height: 150px; }
  .status-card dl div { gap: 18px; }
  .status-card dd { text-align: right; }
  .section-title { align-items: flex-start; gap: 12px; }
  .project-list > article { padding: 20px; }
}

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { scroll-behavior: auto !important; transition: none !important; }
}

/* XIAOZHI PROJECT */
.xz-hero{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(320px,.6fr);gap:clamp(30px,5vw,80px);align-items:center}.xz-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:clamp(16px,2vw,28px);margin:0 0 clamp(28px,4vw,54px)}.xz-grid h2,.xz-section h2{font-size:clamp(24px,2vw,34px)}.xz-grid li{color:var(--muted);line-height:1.8;margin:.5rem 0}.xz-section{margin-bottom:clamp(28px,4vw,54px)}.chip-row{display:flex;flex-wrap:wrap;gap:8px;margin-top:22px}.chip-row span{border:1px solid var(--line);padding:8px 10px;color:var(--cyan);font:600 10px 'IBM Plex Mono'}.steps,.roadmap{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-top:24px}.steps>div,.roadmap>div{padding:20px;border:1px solid var(--line);background:#061014;border-radius:6px}.steps b{color:var(--cyan);font:600 18px 'IBM Plex Mono'}.steps h3{font-size:17px}.steps p,.roadmap p,.muted{color:var(--muted);line-height:1.65;font-size:13px}.stack{display:grid;gap:10px;margin-top:20px}.installer-box esp-web-install-button{display:block;margin:24px 0}.installer-box .button{min-height:48px}@media(max-width:900px){.xz-hero,.xz-grid{grid-template-columns:1fr}.steps,.roadmap{grid-template-columns:repeat(2,1fr)}}@media(max-width:560px){.steps,.roadmap{grid-template-columns:1fr}}

.home-cinematic{display:grid;grid-template-columns:1.1fr .9fr;min-height:680px;margin:24px 0 70px;border:1px solid var(--line);background:radial-gradient(circle at 25% 15%,#123b45 0,transparent 34%),linear-gradient(135deg,#02090f,#071725);overflow:hidden}.home-cinematic-copy{padding:clamp(38px,7vw,100px);align-self:center}.home-cinematic h1{font-size:clamp(56px,7vw,112px);line-height:.86;letter-spacing:-.07em;margin:24px 0}.home-cinematic h1 em{color:var(--cyan);font-style:normal}.home-cinematic p{max-width:680px;color:#b8c9ce;line-height:1.8}.home-visual-stack{display:grid;grid-template-rows:1fr 1fr;gap:1px;background:var(--line)}.home-visual-stack a{position:relative;display:flex;flex-direction:column;justify-content:flex-end;min-height:300px;padding:28px;color:white;text-decoration:none;overflow:hidden;background:#061014}.home-visual-stack img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;opacity:.6;transition:.35s}.home-visual-stack a:after{content:'';position:absolute;inset:0;background:linear-gradient(transparent 35%,rgba(1,8,13,.95))}.home-visual-stack b,.home-visual-stack span{position:relative;z-index:1}.home-visual-stack b{font-size:24px}.home-visual-stack a:hover img{transform:scale(1.04);opacity:.8}.console-selector{display:grid;grid-template-columns:1fr 1fr auto;gap:18px;align-items:end}.console-selector label,.catalog-form label{display:grid;gap:8px}.selected-device>header{display:flex;justify-content:space-between;gap:20px}.catalog-admin-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}.catalog-admin-grid dl{display:grid;gap:6px}.catalog-admin-grid dl div{display:flex;justify-content:space-between}.catalog-admin-grid dt{color:var(--muted)}dialog{border:0;padding:0;background:transparent;color:inherit;width:min(760px,92vw)}dialog::backdrop{background:rgba(0,0,0,.82)}.catalog-form{display:grid;gap:16px}.price-fields{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.bundle-list{display:grid;gap:20px}.bundle-device{border:1px solid var(--line)}.bundle-device>header{display:flex;justify-content:space-between;padding:16px;background:#07151b}.bundle-row{display:grid!important;grid-template-columns:auto 1fr minmax(190px,.4fr);align-items:center;gap:14px;padding:14px;border-top:1px solid var(--line)}.bundle-row>span{display:grid}.bundle-row small{color:var(--muted)}@media(max-width:900px){.home-cinematic{grid-template-columns:1fr}.home-visual-stack{grid-template-columns:1fr 1fr;grid-template-rows:none}.catalog-admin-grid{grid-template-columns:1fr 1fr}.console-selector{grid-template-columns:1fr}.price-fields{grid-template-columns:1fr}}@media(max-width:560px){.home-visual-stack,.catalog-admin-grid{grid-template-columns:1fr}.bundle-row{grid-template-columns:auto 1fr}.bundle-row select{grid-column:1/-1}.home-cinematic h1{font-size:52px}}
.skip-link{position:fixed;left:16px;top:12px;z-index:1000;padding:10px 14px;background:#fff;color:#042433;border:2px solid #e97132;border-radius:4px;font:600 12px 'IBM Plex Mono';transform:translateY(-160%);transition:transform .15s}.skip-link:focus{transform:translateY(0)}
:where(a,button,input,textarea,select):focus-visible{outline:3px solid #e97132;outline-offset:3px}
