@import url("/mac26.css");
/* ============================================================================
   OpenCADs — Public marketing site · shared stylesheet
   Tech: standalone HTML/CSS/JS, no framework, no build step.
   Font: 'Manrope' (Google Fonts) — THỐNG NHẤT với app (index.html/appshell) để
         web↔app↔desktop dùng CHUNG 1 typography (hết "đổi font" khi marketing→app).
   This file is the SINGLE source of shared styles for every page under /site/.
   ============================================================================ */

@import url('https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;600;700;800&display=swap');

/* ----------------------------------------------------------------------------
   DESIGN TOKENS (extracted from the Claude Design source). Inline styles in the
   page markup use literal values; these vars are provided for new/shared UI
   (footer, modal, badges, cards) so page agents stay on-palette.
   ---------------------------------------------------------------------------- */
:root {
  /* ★ macOS-2026: token marketing CŨ nay chỉ là BÍ DANH trỏ về /mac26.css
     (nạp qua @import ở đầu file). Không khai báo màu riêng ở đây nữa. */
  --oc-blue:        var(--mc-accent);
  --oc-blue-2:      var(--mc-accent);
  --oc-blue-bright: var(--mc-accent-hi);
  --oc-blue-deep:   var(--mc-accent-press);
  --oc-blue-ink:    var(--mc-accent-press);
  --oc-navy:        var(--mc-label);
  --oc-navy-2:      var(--mc-label);
  --oc-navy-hero:   var(--mc-label);
  --oc-green:       var(--mc-success);
  --oc-orange:      var(--mc-accent);
  --oc-purple:      var(--mc-accent);
  --oc-pink:        var(--mc-accent-hi);
  --oc-red:         var(--mc-danger);
  --oc-ink:         var(--mc-label);
  --oc-text:        var(--mc-label-2);
  --oc-muted:       var(--mc-label-3);
  --oc-muted-2:     var(--mc-label-3);
  --oc-line:        var(--mc-separator);
  --oc-line-2:      var(--mc-separator-strong);
  --oc-bg:          var(--mc-surface);
  --oc-bg-soft:     var(--mc-surface);
  --oc-bg-tint:     var(--mc-accent-soft);
  --oc-maxw:        1240px;
  --oc-pad-x:       var(--mc-s6);
  --oc-radius:      var(--mc-r-card);
  --oc-shadow:      var(--mc-e3);
  --oc-font:        var(--mc-font);
}

/* ----------------------------------------------------------------------------
   BASE (from design <helmet>) — keep 1:1
   ---------------------------------------------------------------------------- */
* { margin:0; padding:0; box-sizing:border-box; }
body { font-family: var(--oc-font); -webkit-font-smoothing:antialiased; background:#fff; color:var(--oc-navy-2); }
/* Contain stray horizontal overflow from the wide page CONTENT (the design has
   1240px fixed grids + absolutely-positioned hero/world-map decorations). We use
   overflow-x:hidden on #site-main — SAFE here because the sticky header is a
   SIBLING of #site-main (in #site-header), not a descendant, so this does not
   break sticky. (We deliberately do NOT clip <html>/<body>, which would.) */
#site-main { overflow-x:hidden; }

@keyframes ocFloat { 0%,100%{ transform:translateY(0);} 50%{ transform:translateY(-10px);} }
@keyframes ocPulse { 0%,100%{ opacity:.45; transform:scale(1);} 50%{ opacity:.9; transform:scale(1.06);} }
@keyframes ocDash  { to { stroke-dashoffset:-24; } }

/* ----------------------------------------------------------------------------
   HEADER + MEGA-MENU (from design <helmet>) — desktop hover behaviour.
   The header markup itself ships in /site/_partials/header.html and is injected
   by site.js into <div id="site-header"></div>.
   ---------------------------------------------------------------------------- */
.oc-mega { opacity:0; transform:translateX(-50%) translateY(-10px) scale(.985); pointer-events:none; transition:opacity .18s ease, transform .18s ease;
  /* never wider than the viewport (the design hard-codes up to 1360px) */
  max-width:calc(100vw - 32px); }
.oc-navitem:hover .oc-mega { opacity:1; transform:translateX(-50%) translateY(0) scale(1); pointer-events:auto; }
.oc-navitem:hover .oc-chev { transform:rotate(180deg); }
.oc-navitem:hover .oc-nav-link { color:var(--mc-accent); }
.oc-cat { color:var(--mc-label); transition:background .12s, color .12s; }
.oc-cat:hover { background:var(--mc-accent-soft); color:var(--mc-accent); }
.oc-cat-active { background:var(--mc-accent-soft); color:var(--mc-accent); }
.oc-appcard { transition:transform .15s ease, box-shadow .15s ease; }
.oc-appcard:hover { transform:translateY(-4px); box-shadow:0 20px 48px rgba(11,99,255,.16); }
.oc-ind { transition:background .12s; }
.oc-ind:hover { background:var(--mc-fill); }

/* The header markup uses position:sticky, but it sits inside the injection
   wrapper <div id="site-header">, which is only as tall as the header itself —
   so sticky would have no room to travel. display:contents makes the wrapper
   "disappear" from layout so the <header> becomes a direct flow child of <body>
   and sticks to the viewport across the whole page scroll. */
#site-header { display:contents; }
#site-header header { position:sticky; top:0; z-index:50; }

/* hamburger — hidden on desktop, shown on mobile via media query */
.oc-burger { display:none; flex:none; width:42px; height:42px; border-radius:10px; border:1px solid rgba(120,140,220,.22);
  background:rgba(255,255,255,.5); color:var(--mc-label-2); align-items:center; justify-content:center; cursor:pointer; backdrop-filter:blur(12px); -webkit-backdrop-filter:blur(12px); }
.oc-burger svg { width:22px; height:22px; }
.oc-burger:active { background:rgba(120,140,220,.12); }
/* mobile drawer (body-level panel; visibility controlled in the ≤1099 media query) */
.oc-drawer { display:none; }
/* nav row = Y NGUYÊN .ocs-mdrawer-item của app (ui-kit.js) — CEO 2026-07-05 */
.oc-drawer a { display:block; color:var(--mc-label-2); padding:11px 12px; border-radius:11px;
  font:600 15px 'Manrope',-apple-system,system-ui,sans-serif; text-decoration:none; border-bottom:none;
  transition:background .16s ease; }
.oc-drawer a:active { background:rgba(80,110,230,.1); transform:scale(.985); }
.oc-drawer > a.is-on { background:var(--mc-accent-soft); color:var(--mc-accent); font-weight:800; }
.oc-drawer > a.is-on .ocm-ico { color:var(--mc-accent); }
.oc-drawer a.oc-drawer-cta { margin-top:16px; border:none; text-align:center; border-radius:12px; color:#fff;
  padding:15px; background:linear-gradient(135deg, var(--mc-accent-hi), var(--mc-accent) 52%, var(--mc-accent)); box-shadow:0 8px 20px rgba(120,60,220,.34); }
@keyframes ocDrawerIn { from { transform:translateX(-102%); } to { transform:none; } }
/* ── MOBILE header GIỐNG APP (CEO 2026-07-05): card glass bo tròn logo + 🔍 + 🔔 + ☰;
   header marketing cũ ẩn @≤760px — 2 nơi đồng nhất tuyệt đối ── */
.ocs-mkhdr { display:none; }
@media (max-width:760px) {
  body.ocs-has-mkhdr #site-header { display:none !important; }
  body.ocs-has-mkhdr { padding-top:74px; }
  .ocs-mkhdr { position:fixed; top:8px; left:8px; right:8px; z-index:1300;
    display:flex; align-items:center; gap:8px; padding:10px 12px; border-radius:20px;
    background:rgba(255,255,255,.78); backdrop-filter:blur(30px) saturate(180%);
    -webkit-backdrop-filter:blur(30px) saturate(180%);
    border:1px solid rgba(255,255,255,.75); box-shadow:0 12px 34px rgba(50,70,140,.12); }
}
.ocs-mkhdr-brand { display:inline-flex; align-items:center; gap:10px; text-decoration:none;
  font:800 21px 'Manrope',-apple-system,system-ui,sans-serif; color:var(--mc-label); }
.ocs-mkhdr-btn { width:42px; height:42px; flex:none; border-radius:50%; border:none; background:#fff;
  box-shadow:0 6px 16px rgba(50,70,140,.08); color:var(--mc-label-2); display:flex; align-items:center;
  justify-content:center; cursor:pointer; text-decoration:none; }
.ocs-mkhdr-btn:active { transform:scale(.92); }
/* 🔔 popup thông báo tại chỗ (marketing) — glass card dưới header, không chuyển trang */
.ocs-mknotif { position:fixed; inset:0; z-index:9650; }
.ocs-mknotif-card { position:absolute; top:76px; left:8px; right:8px; border-radius:20px;
  background:rgba(255,255,255,.92); backdrop-filter:blur(40px) saturate(190%); -webkit-backdrop-filter:blur(40px) saturate(190%);
  border:1px solid rgba(255,255,255,.7); box-shadow:0 30px 80px rgba(20,30,80,.3),0 2px 8px rgba(20,30,80,.1);
  overflow:hidden; font-family:'Manrope',-apple-system,system-ui,sans-serif; }
@media (min-width:761px) { .ocs-mknotif-card { left:auto; right:14px; top:68px; width:384px; } }
.ocs-mknotif-hd { display:flex; align-items:center; justify-content:space-between; padding:14px 16px 10px; }
.ocs-mknotif-hd b { font-weight:800; font-size:15.5px; color:var(--mc-label); }
.ocs-mknotif-x { width:30px; height:30px; border:none; border-radius:9px; background:rgba(120,138,170,.1);
  color:var(--mc-label-2); display:flex; align-items:center; justify-content:center; cursor:pointer; }
.ocs-mknotif-empty { padding:22px 18px 26px; text-align:center; display:flex; flex-direction:column; align-items:center; gap:4px; }
.ocs-mknotif-ic { width:52px; height:52px; border-radius:16px; background:var(--mc-accent-soft); color:var(--mc-accent);
  display:flex; align-items:center; justify-content:center; margin-bottom:8px; }
.ocs-mknotif-empty b { font-weight:800; font-size:14px; color:var(--mc-label); }
.ocs-mknotif-empty span:last-child { font-size:12.5px; color:var(--mc-label-3); }
.ocs-mknotif-all { display:block; margin:10px; padding:11px 0; border-radius:12px; text-align:center;
  background:var(--mc-accent-soft); color:var(--mc-accent); font-weight:800; font-size:13.5px; text-decoration:none; }

/* ── Desktop RAIL TRÁI (thay header ngang — thống nhất với app, CEO 2026-07-05) ── */
.ocs-mrail { display:none; }
@media (min-width:761px) {
  #site-header { display:none !important; }
  body { padding-left:92px; }
  .ocs-mrail { position:fixed; left:0; top:0; bottom:0; width:92px; z-index:900;
    display:flex; flex-direction:column; align-items:center; gap:4px; padding:16px 8px;
    background:var(--mc-mat-ultrathin); backdrop-filter:var(--mc-blur); -webkit-backdrop-filter:var(--mc-blur);
    border-right:.5px solid var(--mc-separator); }
}
/* RAIL macOS-2026 (Liquid Glass): sidebar kính + hairline. GIỮ hành vi CEO chốt —
   icon ACCENT (cam) khi rảnh · CLICK = LABEL (đen) trên ô fill · chấm ĐỎ thông báo.
   Token hoá 100% qua /mac26.css (khớp tuyệt đối rail app trong ui-kit.js). */
.ocs-mrail-logo { width:38px; height:38px; margin:2px 0 12px; border-radius:var(--mc-r-control); display:flex;
  align-items:center; justify-content:center; color:var(--mc-brand); cursor:pointer; transition:transform .24s var(--mc-ease-spring); }
.ocs-mrail-logo:hover { transform:scale(1.06); }
/* PINTEREST THUẦN: chỉ icon (không nhãn) · đang chọn = GLYPH ĐẶC đen KHÔNG nền ·
   hover = vòng tròn xám quanh icon. Tooltip qua title/aria-label. */
.ocs-mrail-item { position:relative; width:100%; display:flex; justify-content:center;
  padding:6px 0; text-decoration:none; color:var(--mc-label); }
.ocs-mrail-item svg { box-sizing:content-box; padding:10px; border-radius:50%;
  transition:background .22s var(--mc-ease-spring); }
.ocs-mrail-item:hover svg { background:var(--mc-fill); }
.ocs-mrail-item:active svg { transform:scale(.92); }
.ocs-mrail-item.is-on svg { background:none; color:var(--mc-label); }
.ocs-mrail-item.is-on:hover svg { background:var(--mc-fill); }
.ocs-mrail-item:focus-visible { outline:none; }
.ocs-mrail-item:focus-visible svg { box-shadow:var(--mc-ring); }
.ocs-mrail-item:focus-visible { outline:none; box-shadow:var(--mc-ring); }
.ocs-mrail-dot { position:absolute; top:8px; right:24px; width:9px; height:9px; border-radius:50%;
  background:var(--mc-danger); border:2px solid var(--mc-surface); animation:ocsMDot 1.8s ease-in-out infinite; }
@keyframes ocsMDot { 0%,100%{transform:scale(1)} 50%{transform:scale(1.18)} }
@media (prefers-reduced-motion:reduce){ .ocs-mrail-dot { animation:none; } }
.ocs-mrail-item span { line-height:1.1; text-align:center; }
.ocs-mrail-grow { flex:1; }
.ocs-mrail-globe { width:38px; height:38px; border:none; border-radius:var(--mc-r-control); background:none;
  color:var(--mc-label-3); display:flex; align-items:center; justify-content:center; cursor:pointer; margin-bottom:8px;
  transition:background .22s var(--mc-ease-spring), color .18s ease; }
.ocs-mrail-globe:hover { background:var(--mc-fill); color:var(--mc-label); }
.ocs-mrail-langs { display:none; position:fixed; left:98px; bottom:70px; z-index:950; width:200px;
  max-height:320px; overflow:auto; background:var(--mc-mat-thick);
  backdrop-filter:var(--mc-blur); -webkit-backdrop-filter:var(--mc-blur);
  border-radius:var(--mc-r-sheet); border:.5px solid var(--mc-separator); box-shadow:var(--mc-e4),var(--mc-specular); padding:8px; }
.ocs-mrail.langs-open .ocs-mrail-langs { display:block; }
.ocs-mrail-langs button { display:block; width:100%; padding:8px 12px; border:none; background:none;
  text-align:left; font:600 var(--mc-fs-callout)/1.4 'Manrope',-apple-system,sans-serif; color:var(--mc-label-2); border-radius:var(--mc-r-chip); cursor:pointer; }
.ocs-mrail-langs button:hover { background:var(--mc-fill); color:var(--mc-label); }
.ocs-mrail-ava { width:42px; height:42px; border:none; border-radius:var(--mc-r-pill); overflow:hidden; position:relative;
  background:var(--mc-accent); color:#fff; display:flex; align-items:center;
  justify-content:center; cursor:pointer; box-shadow:var(--mc-e2);
  transition:transform .24s var(--mc-ease-spring), box-shadow .24s var(--mc-ease-spring); }
.ocs-mrail-ava:hover { transform:translateY(-2px); box-shadow:var(--mc-e3); }
.ocs-mrail-ava img, .ocs-mrail-ava > div { width:100% !important; height:100% !important; border-radius:50%; }

/* Claude-style drawer bottom — Y NGUYÊN số đo .ocs-mdrawer-* của app (ui-kit.js) */
.ocm-head { display:flex; align-items:center; justify-content:space-between; padding:2px 8px 14px; }
.ocm-brand { display:inline-flex; align-items:center; gap:10px; font:800 20px 'Manrope',-apple-system,system-ui,sans-serif; color:var(--mc-label); letter-spacing:-.02em; }
.ocm-x { width:36px; height:36px; border:none; border-radius:11px; background:none; color:var(--mc-label-2);
  display:flex; align-items:center; justify-content:center; cursor:pointer; }
.ocm-x:active { background:rgba(120,138,170,.12); transform:scale(.92); }
.oc-drawer > a { display:flex; align-items:center; gap:13px; }
.ocm-ico { flex:none; color:var(--mc-label-3); }
.ocm-bottom { margin-top:auto; border-top:1px solid rgba(120,140,200,.16); padding-top:8px; }
.ocm-bottom a { border-bottom:none; display:flex; align-items:center; gap:13px; }
.ocm-langcur { margin-left:auto; font-size:12px; font-weight:800; color:var(--mc-label-3); text-transform:uppercase; }
.ocm-langs { max-height:0; overflow:hidden; transition:max-height .3s ease; }
.oc-drawer.langs-open .ocm-langs { max-height:216px; overflow:auto; }
.ocm-lang { display:block; width:100%; padding:9px 14px 9px 46px; border:none; background:none;
  font:600 14px 'Manrope',-apple-system,system-ui,sans-serif; color:var(--mc-label-2); text-align:left; border-radius:9px; cursor:pointer; }
.ocm-lang:active, .ocm-lang.is-on { background:var(--mc-accent-soft); color:var(--mc-accent); font-weight:800; }
.ocm-acct { display:flex; align-items:center; gap:11px; width:100%; padding:10px; margin-top:4px; border:none;
  border-radius:13px; background:none; text-align:left; cursor:pointer; font-family:inherit; transition:background .16s ease; }
.ocm-acct:active { background:rgba(80,110,230,.1); }
.ocm-acct-ava { width:38px; height:38px; flex:none; border-radius:50%; overflow:hidden; position:relative;
  background:var(--mc-label); color:#fff; display:flex; align-items:center; justify-content:center; font-weight:800; font-size:14px; }
.ocm-acct-ava img, .ocm-acct-ava > div { width:100% !important; height:100% !important; border-radius:50%; }
.ocm-acct-nm { display:block; font-weight:800; font-size:14.5px; color:var(--mc-label); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.ocm-acct-pl { display:block; font-weight:500; font-size:12px; color:var(--mc-label-3); margin-top:1px; }

/* ----------------------------------------------------------------------------
   SHARED FOOTER (designed to match the design system; injected by site.js)
   ---------------------------------------------------------------------------- */
/* mac26: footer = nền canvas trung tính + hairline, KHÔNG gradient tím/xanh (chỏi accent cam). */
.oc-footer { background:var(--mc-canvas); color:var(--mc-label-2); padding:var(--mc-s7) var(--oc-pad-x) var(--mc-s5); border-top:.5px solid var(--mc-separator); }
.oc-footer__in { max-width:var(--oc-maxw); margin:0 auto; }
.oc-footer__top { display:grid; grid-template-columns:1.4fr 1fr 1fr 1fr 1fr; gap:var(--mc-s6); padding-bottom:var(--mc-s6); border-bottom:.5px solid var(--mc-separator); }
.oc-footer__brand { display:flex; align-items:center; gap:var(--mc-s3); margin-bottom:var(--mc-s4); }
.oc-footer__brand span { color:var(--mc-label); font-weight:700; font-size:var(--mc-fs-title3); letter-spacing:-.012em; }
.oc-footer__tag { color:var(--mc-label-2); font-size:var(--mc-fs-footnote); line-height:1.6; max-width:280px; }
.oc-footer__social { display:flex; gap:var(--mc-s2); margin-top:var(--mc-s4); }
.oc-footer__social a { width:36px; height:36px; border-radius:var(--mc-r-control); background:var(--mc-surface); border:.5px solid var(--mc-separator);
  display:flex; align-items:center; justify-content:center; color:var(--mc-label-2); text-decoration:none;
  transition:background .22s var(--mc-ease-spring), color .18s ease, transform .22s var(--mc-ease-spring); }
.oc-footer__social a:hover { background:var(--mc-accent-soft); color:var(--mc-accent); transform:translateY(-2px); }
.oc-footer__col h4 { color:var(--mc-label-3); font-size:var(--mc-fs-caption); font-weight:600; letter-spacing:.04em; text-transform:uppercase; margin-bottom:var(--mc-s4); }
.oc-footer__col a { display:block; color:var(--mc-label-2); font-size:var(--mc-fs-footnote); line-height:1; text-decoration:none; margin-bottom:var(--mc-s3); transition:color .18s ease; }
.oc-footer__col a:hover { color:var(--mc-accent); }
.oc-footer__bottom { display:flex; align-items:center; justify-content:space-between; gap:var(--mc-s4); padding-top:var(--mc-s5); flex-wrap:wrap; }
.oc-footer__copy { color:var(--mc-label-3); font-size:var(--mc-fs-footnote); }
.oc-footer__legal { display:flex; gap:var(--mc-s5); }
.oc-footer__legal a { color:var(--mc-label-2); font-size:var(--mc-fs-footnote); text-decoration:none; }
.oc-footer__legal a:hover { color:var(--mc-accent); }

/* ----------------------------------------------------------------------------
   SHARED COMPONENTS — project/app card, progress badge, "Send to coding agent"
   modal. Page agents call the render helpers in site.js (window.OCSite.*) which
   emit markup using these classes.
   ---------------------------------------------------------------------------- */

/* progress badge */
.oc-badge { display:inline-flex; align-items:center; gap:6px; padding:4px 11px; border-radius:999px; font-size:11.5px; font-weight:700; letter-spacing:.2px; white-space:nowrap; }
.oc-badge__dot { width:7px; height:7px; border-radius:50%; flex:none; }
.oc-badge--done       { background:var(--mc-success-soft); color:var(--mc-success); }
.oc-badge--done    .oc-badge__dot { background:var(--mc-success); }
.oc-badge--progress   { background:var(--mc-accent-soft); color:var(--mc-accent); }
.oc-badge--progress .oc-badge__dot { background:var(--mc-accent); animation:ocPulse 2s ease-in-out infinite; }
.oc-badge--todo       { background:var(--mc-fill); color:var(--mc-label-2); }
.oc-badge--todo    .oc-badge__dot { background:var(--mc-label-3); }

/* project / app card */
.oc-card { display:flex; flex-direction:column; border:1px solid var(--oc-line); border-radius:18px; background:var(--oc-bg-soft);
  padding:20px; text-decoration:none; color:inherit; transition:transform .15s ease, box-shadow .15s ease; }
.oc-card:hover { transform:translateY(-4px); box-shadow:var(--oc-shadow); }
.oc-card__head { display:flex; align-items:center; justify-content:space-between; gap:12px; margin-bottom:12px; }
.oc-card__icon { width:46px; height:46px; border-radius:12px; flex:none; display:flex; align-items:center; justify-content:center;
  background:linear-gradient(150deg,var(--mc-accent-hi),var(--mc-accent-press)); color:#fff; }
.oc-card__title { font-size:16px; font-weight:700; color:var(--oc-ink); }
.oc-card__desc { font-size:13px; color:var(--oc-text); line-height:1.55; margin-top:4px; }
.oc-card__meta { display:flex; gap:16px; margin-top:14px; font-size:12px; color:var(--oc-muted); }
.oc-card__bar { height:6px; border-radius:4px; background:var(--mc-fill); overflow:hidden; margin-top:12px; }
.oc-card__bar > span { display:block; height:100%; border-radius:4px; background:linear-gradient(90deg,var(--mc-accent),var(--mc-accent)); }
.oc-card__foot { display:flex; align-items:center; justify-content:space-between; gap:12px; margin-top:14px; }
.oc-card__cta { display:inline-flex; align-items:center; gap:7px; padding:9px 16px; border-radius:9px; font-size:13px; font-weight:600;
  color:#fff; background:linear-gradient(150deg,var(--mc-accent),var(--mc-accent-press)); text-decoration:none; }

/* "Send to coding agent" modal */
.oc-modal { position:fixed; inset:0; z-index:9000; display:none; align-items:center; justify-content:center; padding:24px;
  background:rgba(8,15,40,.55); backdrop-filter:blur(6px); -webkit-backdrop-filter:blur(6px); }
.oc-modal.is-open { display:flex; }
.oc-modal__panel { width:min(640px,100%); max-height:88vh; overflow:auto; background:#fff; border-radius:22px;
  box-shadow:0 40px 120px rgba(3,10,30,.4); border:1px solid rgba(255,255,255,.7); }
.oc-modal__head { display:flex; align-items:center; justify-content:space-between; gap:14px; padding:22px 24px 16px; border-bottom:1px solid var(--oc-line); }
.oc-modal__title { font-size:18px; font-weight:800; color:var(--oc-ink); letter-spacing:-.2px; }
.oc-modal__x { width:34px; height:34px; border-radius:9px; border:1px solid var(--oc-line); background:#fff; color:var(--oc-text);
  font-size:18px; line-height:1; cursor:pointer; display:flex; align-items:center; justify-content:center; }
.oc-modal__x:hover { background:var(--mc-canvas-2); }
.oc-modal__body { padding:20px 24px 24px; }
.oc-modal__label { font-size:12px; font-weight:700; letter-spacing:.4px; text-transform:uppercase; color:var(--oc-muted-2); margin-bottom:9px; }
.oc-modal__pre { width:100%; min-height:160px; max-height:340px; overflow:auto; border:1px solid var(--oc-line); border-radius:12px;
  background:var(--mc-canvas-2); padding:14px 16px; font:12.5px/1.55 ui-monospace,'SF Mono',Menlo,monospace; color:var(--mc-label); white-space:pre-wrap; word-break:break-word; }
.oc-modal__actions { display:flex; gap:12px; margin-top:18px; justify-content:flex-end; }
.oc-btn { display:inline-flex; align-items:center; gap:8px; padding:11px 20px; border-radius:10px; font-size:13.5px; font-weight:600;
  text-decoration:none; cursor:pointer; border:1px solid transparent; }
.oc-btn--primary { color:#fff; background:linear-gradient(150deg,var(--mc-accent),var(--mc-accent-press)); box-shadow:0 6px 16px rgba(47,123,255,.35); }
.oc-btn--ghost   { color:var(--oc-text); background:#fff; border-color:var(--oc-line); }
.oc-btn--ghost:hover { background:var(--mc-canvas-2); }

/* tiny toast for "Copied!" */
.oc-toast { position:fixed; left:50%; bottom:32px; transform:translateX(-50%) translateY(12px); z-index:9500;
  background:var(--mc-label); color:#fff; font-size:13px; font-weight:600; padding:11px 20px; border-radius:11px;
  box-shadow:0 14px 36px rgba(0,0,0,.3); opacity:0; pointer-events:none; transition:opacity .2s, transform .2s; }
.oc-toast.is-show { opacity:1; transform:translateX(-50%) translateY(0); }

/* "Gửi yêu cầu dự án" request-form modal */
.oc-modal__head > div:first-child { min-width:0; }
.oc-modal__sub { font-size:13px; color:var(--oc-text); line-height:1.5; margin-top:5px; max-width:440px; }
.oc-reqmodal { width:min(620px,100%); }
.oc-form { display:flex; flex-direction:column; gap:14px; }
.oc-form__row { display:grid; grid-template-columns:1fr 1fr; gap:14px; }
.oc-field { display:flex; flex-direction:column; gap:6px; margin:0; }
.oc-field > span { font-size:12.5px; font-weight:600; color:var(--oc-ink); }
.oc-field input, .oc-field select, .oc-field textarea {
  width:100%; box-sizing:border-box; font:inherit; font-size:14px; color:var(--oc-ink); background:var(--mc-surface);
  border:1px solid var(--oc-line); border-radius:11px; padding:11px 13px; outline:none;
  transition:border-color .14s, box-shadow .14s; }
.oc-field textarea { resize:vertical; min-height:94px; line-height:1.5; }
.oc-field input:focus, .oc-field select:focus, .oc-field textarea:focus {
  border-color:var(--mc-accent); box-shadow:0 0 0 3px var(--mc-accent-soft); background:#fff; }
.oc-field .oc-sel { appearance:none; -webkit-appearance:none; cursor:pointer; padding-right:34px;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%238290aa' stroke-width='3'><path d='M6 9l6 6 6-6'/></svg>");
  background-repeat:no-repeat; background-position:right 12px center; }
.oc-form__err { font-size:12.5px; font-weight:600; color:var(--mc-danger); line-height:1.4; }
.oc-form__err:empty { display:none; }
.oc-req-ok { text-align:center; padding:18px 6px 8px; }
.oc-req-ok__badge { width:62px; height:62px; border-radius:50%; margin:4px auto 16px;
  background:linear-gradient(150deg,var(--mc-success),var(--mc-success)); color:#fff; font-size:31px; font-weight:700; line-height:1;
  display:flex; align-items:center; justify-content:center; box-shadow:0 12px 30px rgba(22,167,99,.36); }
.oc-req-ok__title { font-size:19px; font-weight:800; color:var(--oc-ink); margin-bottom:8px; }
.oc-req-ok__msg { font-size:14px; color:var(--oc-text); line-height:1.6; max-width:380px; margin:0 auto 22px; }
@media (max-width:560px) { .oc-form__row { grid-template-columns:1fr; } }

/* language picker dropdown (header) */
.oc-langmenu { position:absolute; top:calc(100% + 8px); right:0; min-width:140px; background:#fff; border-radius:12px;
  box-shadow:0 18px 48px rgba(3,10,30,.22); border:1px solid var(--mc-separator); padding:6px; z-index:1200; display:none; }
.oc-langmenu.is-open { display:block; }
.oc-langmenu button { display:flex; align-items:center; gap:9px; width:100%; padding:9px 12px; border:none; background:none;
  border-radius:9px; font:inherit; font-size:13.5px; font-weight:600; color:var(--mc-label); cursor:pointer; text-align:left; }
.oc-langmenu button:hover { background:var(--mc-accent-soft); color:var(--mc-accent); }
.oc-langmenu button[aria-current="true"] { background:var(--mc-accent-soft); color:var(--mc-accent); }

/* ----------------------------------------------------------------------------
   RESPONSIVE — desktop ≥1100, tablet 641–1099, mobile ≤640.
   The design is a fixed 1240–1320px desktop; we make it fluid + stack the wide
   grids and convert the hover mega-menus into a tap drawer on mobile.
   ---------------------------------------------------------------------------- */

/* fluid container: shrink the inner max-width wrappers below 1300px */
@media (max-width: 1299px) {
  #site-header header > div,
  .oc-footer__in { padding-left:24px; padding-right:24px; }
}

/* TABLET (641–1099) */
@media (max-width: 1099px) {
  .oc-footer__top { grid-template-columns:1.4fr 1fr 1fr; row-gap:30px; }
  /* The design hard-codes the hover mega-menus at ~1230px inner width — far
     wider than a tablet viewport, and a position:fixed panel can't be made to
     fit without destroying its layout. So below the desktop breakpoint we drop
     the hover panels entirely; the top-level nav links still navigate to their
     routes (and ≤760px the whole nav becomes the hamburger drawer). This is the
     standard graceful-degrade and removes ALL horizontal overflow. */
  .oc-mega { display:none !important; }
}

/* TABLET + MOBILE — switch the header to a hamburger drawer.
   The desktop horizontal nav (5 items) + right cluster needs the full 1240px
   bar; below ~1080px it would overflow, so we collapse to the drawer here. This
   matches the breakpoint where the hover mega-menus are dropped (≤1099). */
@media (max-width: 1099px) {
  .oc-burger { display:flex; }
  /* push everything after the logo to the far right so the bar reads:
     logo (left) ........ language + hamburger (right). Anchored on the LOGO
     (always the bar's first child in static markup) so it works even if
     site.js hasn't tagged the right cluster yet. Burger is the last element
     → flush right. */
  #site-header header > div > :first-child { margin-right:auto !important; }
  /* Hide the desktop centered nav entirely on mobile (open OR closed). The
     drawer is a SEPARATE body-level panel (.oc-drawer) built by site.js — an
     in-header drawer can't cover the viewport because the header's
     `backdrop-filter` makes it the containing block for position:fixed
     descendants (it would clip to the ~62px bar). Structural selector so it
     hides even before site.js wires the header. */
  #site-header header nav { display:none !important; }
  /* hide the header's Sign-in/Download CTAs on the phone bar — they move into
     the drawer (the lang switch is wrapped in a <div> so it stays in the bar). */
  #site-header .oc-actions > a { display:none !important; }
  /* the mobile drawer: body-level, viewport-fixed full-screen sheet */
  /* panel Y NGUYÊN .ocs-mdrawer-panel của app: full màn từ TOP 0, nền sáng phẳng,
     blur, trượt từ TRÁI (head brand + ✕ nằm trong drawer) — CEO 2026-07-05 */
  body.oc-nav-open .oc-drawer {
    display:flex; flex-direction:column;
    position:fixed; top:0; left:0; right:0; bottom:0; z-index:9600;
    background:rgba(252,253,255,.99);
    backdrop-filter:blur(32px) saturate(180%); -webkit-backdrop-filter:blur(32px) saturate(180%);
    padding:16px 14px calc(14px + env(safe-area-inset-bottom,0px)); overflow-y:auto;
    animation:ocDrawerIn .36s cubic-bezier(.32,.72,0,1);
  }
  body.oc-nav-open { overflow:hidden; }
}

@media (max-width: 640px) {
  :root { --oc-pad-x: 18px; }
  .oc-footer { padding:40px 18px 26px; }
  .oc-footer__top { grid-template-columns:1fr 1fr; gap:26px; }
  .oc-footer__brand-col { grid-column:1 / -1; }
  .oc-footer__bottom { flex-direction:column; align-items:flex-start; gap:12px; }
  .oc-modal { padding:14px; }
  .oc-modal__head, .oc-modal__body { padding-left:18px; padding-right:18px; }

  /* --- Stack ALL of the design's fixed multi-column grids on phones. The
        homepage uses inline `display:grid; grid-template-columns:...` with fixed
        px / multi-fr tracks at 1240px width; collapse every grid in the content
        to a single column so nothing overflows. --- */
  #site-main [style*="grid-template-columns"] { grid-template-columns:1fr !important; }
  /* flex rows that were horizontal at desktop should wrap */
  #site-main [style*="display:flex"],
  #site-main [style*="display: flex"] { flex-wrap:wrap; }
  /* the design pins inner content blocks with fixed px max-width — let them fill */
  #site-main [style*="max-width"] { max-width:100% !important; }
  /* large inline SVG illustrations / world-map / hero art: scale to fit width */
  #site-main svg { max-width:100%; height:auto; }
  /* sections with big horizontal padding -> tighten on phones */
  #site-main section { padding-left:0 !important; padding-right:0 !important; }
  #site-main section > div { padding-left:18px !important; padding-right:18px !important; margin-left:0 !important; margin-right:0 !important; }
  /* illustration containers given a fixed height/position can clip oddly; relax */
  #site-main [style*="position: absolute"] { max-width:100%; }
}

/* ---- HOMEPAGE mobile/tablet polish ---- */
@media (max-width:760px) {
  /* "How OpenCADs Works" — stack the squeezed flex:1 cards into one column */
  .hw-row { flex-direction:column !important; gap:12px !important; }
  .hw-row > div { width:100% !important; }
  .hw-row > div > span { display:none !important; }
  /* FDI world map — hide the absolutely-positioned route cards (they overflow on phones); keep the map svg */
  .fdi-mapbox > div > div { display:none !important; }
}
