/* One site menu on every page (scripts/site_nav.py writes the markup, assets/nav.js adds touch, sheet, search). */
.vn-nav{display:flex;align-items:center;gap:.25rem;margin-right:auto}
.vn-head .logo{margin-right:1.2rem}
.vn-item{position:relative}
.vn-top{display:inline-flex;align-items:center;gap:.35rem;padding:.55rem .75rem;border-radius:10px;color:var(--ink-2);text-decoration:none;font:500 .9375rem/1.2 var(--font-ui);white-space:nowrap}
.vn-top:hover,.vn-item:focus-within .vn-top,.vn-item.open .vn-top{background:var(--sunken);color:var(--ink)}
.vn-top[aria-current]{color:var(--accent-ink)}
.vn-top[aria-current]::after{content:"";position:absolute;left:.75rem;right:1.6rem;bottom:.15rem;height:2px;border-radius:2px;background:var(--accent)}
.vn-caret{width:10px;height:6px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;opacity:.6;transition:transform .15s}
.vn-item:hover .vn-caret,.vn-item.open .vn-caret{transform:rotate(180deg)}
.vn-panel{position:absolute;top:calc(100% + 6px);left:-.5rem;z-index:30;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:4px;width:min(560px,calc(100vw - 32px));padding:10px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:0 18px 50px rgba(20,24,60,.16);opacity:0;visibility:hidden;transform:translateY(-4px);transition:opacity .14s,transform .14s,visibility 0s .14s}
.vn-panel::before{content:"";position:absolute;left:0;right:0;top:-10px;height:10px}
.vn-item:nth-last-child(-n+3) .vn-panel{left:auto;right:-.5rem}   /* the right-hand menus open leftwards: a hidden panel past the edge would scroll the page sideways */
.vn-item:hover .vn-panel,.vn-item:focus-within .vn-panel,.vn-item.open .vn-panel{opacity:1;visibility:visible;transform:none;transition:opacity .14s,transform .14s}
.vn-item.shut .vn-panel{opacity:0;visibility:hidden}
.vn-tile{display:flex;gap:.75rem;align-items:flex-start;padding:.65rem .7rem;border-radius:12px;color:var(--ink);text-decoration:none}
.vn-tile:hover,.vn-tile:focus-visible{background:var(--sunken);outline:none}
.vn-tile b{display:block;font:600 .9375rem/1.3 var(--font-ui)}
.vn-tile small{display:block;margin-top:2px;font:400 .8125rem/1.4 var(--font-ui);color:var(--muted)}
.vn-mark{flex:0 0 auto;display:grid;place-items:center;width:38px;height:38px;border-radius:10px;background:var(--accent-soft);color:var(--accent-ink);font:600 17px/1 var(--font-display)}
.vn-search{display:inline-flex;align-items:center;gap:.45rem;min-height:40px;padding:.4rem .7rem;border:1px solid var(--line-2);border-radius:10px;background:var(--surface);color:var(--muted);font:500 .875rem/1 var(--font-ui);cursor:pointer;white-space:nowrap}
.vn-search:hover{border-color:var(--accent-line);color:var(--ink)}
.vn-search svg,.vn-tab svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round}
.vn-search kbd{font:500 .6875rem/1 var(--font-ui);padding:.2rem .35rem;border:1px solid var(--line);border-radius:5px;background:var(--paper);color:var(--muted)}
.vn-tabbar{display:none}
@media (max-width:900px){
  .vn-nav,.vn-search kbd{display:none}
  .vn-head .logo{margin-right:auto}
  .vn-head .head-row{flex-wrap:nowrap;padding-top:0;gap:.5rem;min-height:60px}
  .vn-tabbar{position:fixed;left:0;right:0;bottom:0;z-index:40;display:grid;grid-template-columns:repeat(5,1fr);padding:4px 6px calc(4px + env(safe-area-inset-bottom));background:rgba(255,255,255,.96);backdrop-filter:saturate(1.2) blur(10px);border-top:1px solid var(--line)}
  body{padding-bottom:calc(64px + env(safe-area-inset-bottom))}
  .vn-tab{display:grid;justify-items:center;gap:3px;padding:6px 2px;border:0;background:none;border-radius:10px;color:var(--muted);text-decoration:none;font:600 11px/1.1 var(--font-ui);cursor:pointer}
  .vn-tab[aria-current],.vn-tab.on{color:var(--accent-ink)}
  .vn-tab-mark{display:grid;place-items:center;width:34px;height:26px;border-radius:9px;font:600 15px/1 var(--font-display)}
  .vn-tab[aria-current] .vn-tab-mark,.vn-tab.on .vn-tab-mark{background:var(--accent-soft)}
}
@media (max-width:420px){.vn-head .logo span:last-child{display:none}.vn-search span{display:none}}

/* phone: one section's pages, from the tab bar */
.vn-sheet{position:fixed;inset:auto 0 0 0;margin:0;width:100%;max-width:none;max-height:80vh;padding:8px 14px calc(18px + env(safe-area-inset-bottom));border:0;border-radius:18px 18px 0 0;background:var(--surface);color:var(--ink);box-shadow:0 -12px 40px rgba(20,24,60,.18)}
.vn-sheet::backdrop{background:rgba(15,18,40,.35)}
.vn-sheet[open]{animation:vn-up .18s ease-out}
@keyframes vn-up{from{transform:translateY(24px);opacity:.4}}
.vn-sheet-grip{width:40px;height:4px;margin:4px auto 10px;border-radius:4px;background:var(--line-2)}
.vn-sheet h2{margin:0 0 2px;font:600 1.25rem/1.3 var(--font-display)}
.vn-sheet p{margin:0 0 10px;font:400 .875rem/1.4 var(--font-ui);color:var(--muted)}
.vn-sheet .vn-tile{padding:.7rem .4rem}

/* search: pages, tools and fonts in one box */
.vn-pal{width:min(720px,calc(100vw - 24px));max-height:min(640px,calc(100vh - 72px));margin:9vh auto auto;padding:0;border:0;border-radius:20px;background:var(--surface);color:var(--ink);box-shadow:0 0 0 1px rgba(20,24,60,.08),0 30px 90px rgba(20,24,60,.3);overflow:hidden;display:none;flex-direction:column}
.vn-pal[open]{display:flex;animation:vn-in .16s ease-out}
@keyframes vn-in{from{opacity:0;transform:translateY(-6px) scale(.99)}}
.vn-pal::backdrop{background:rgba(15,18,40,.42);backdrop-filter:blur(3px)}
.vn-pal-in{display:flex;align-items:center;gap:.7rem;padding:1rem 1.15rem;border-bottom:1px solid var(--line)}
.vn-pal-in>svg{width:20px;height:20px;flex:0 0 auto;fill:none;stroke:var(--accent);stroke-width:2;stroke-linecap:round}
.vn-pal-in input{flex:1 1 auto;min-width:0;border:0;outline:none;box-shadow:none;background:transparent;color:var(--ink);font:500 1.125rem/1.4 var(--font-ui);padding:0}
.vn-pal-in input::placeholder{color:var(--muted);opacity:.8}
.vn-pal-x{width:28px;height:28px;border:0;border-radius:50%;background:var(--sunken);color:var(--muted);font:500 18px/1 var(--font-ui);cursor:pointer}
.vn-pal-x:hover{color:var(--ink)}
.vn-pal-esc{border:1px solid var(--line);background:var(--paper);color:var(--ink-2);border-radius:8px;font:600 .75rem/1 var(--font-ui);padding:.42rem .6rem;cursor:pointer}
.vn-pal-esc:hover{border-color:var(--line-2);color:var(--ink)}
.vn-pal-list{overflow:auto;padding:4px 12px 14px;overscroll-behavior:contain}
.vn-pal-g{display:flex;align-items:center;gap:.4rem;margin:14px 6px 8px;font:600 .75rem/1 var(--font-ui);letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
.vn-pal-g span{padding:.12rem .45rem;border-radius:99px;background:var(--sunken);color:var(--ink-2);letter-spacing:0}
.vn-pal-ideas{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:12px 4px 2px}
.vn-pal-ideas>span{margin-right:2px;font:500 .8125rem/1 var(--font-ui);color:var(--muted)}
.vn-pal-ideas button{border:1px solid var(--line);background:var(--paper);color:var(--ink-2);border-radius:99px;padding:.36rem .75rem;font:500 .8125rem/1 var(--font-ui);cursor:pointer}
.vn-pal-ideas button:hover{border-color:var(--accent-line);color:var(--accent-ink);background:var(--accent-soft)}
.vn-pal-hubs{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px}
.vn-pal-hub{display:flex;gap:.7rem;align-items:center;padding:.65rem .7rem;border:1px solid var(--line);border-radius:14px;color:var(--ink);text-decoration:none}
.vn-pal-hub b{display:block;font:600 .9375rem/1.3 var(--font-ui)}
.vn-pal-hub small{display:block;font:400 .8125rem/1.35 var(--font-ui);color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.vn-pal-hub>span:last-child{min-width:0}
.vn-pal-cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px}
.vn-pal-card{display:grid;gap:2px;padding:.75rem .8rem .7rem;border:1px solid var(--line);border-radius:14px;color:var(--ink);text-decoration:none;min-width:0}
.vn-pal-sample{display:block;padding:14px 0 6px;font-size:32px;line-height:1.15;white-space:nowrap;overflow-x:clip;overflow-y:visible;color:var(--ink)}
.vn-pal-card b{font:600 .875rem/1.3 var(--font-ui);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.vn-pal-card small{font:400 .75rem/1.3 var(--font-ui);color:var(--muted)}
.vn-pal-row{display:flex;align-items:center;gap:.75rem;padding:.55rem .65rem;border-radius:12px;color:var(--ink);text-decoration:none}
.vn-pal-txt{flex:1 1 auto;min-width:0}
.vn-pal-row b{display:block;font:600 .9375rem/1.3 var(--font-ui)}
.vn-pal-row small{display:block;font:400 .8125rem/1.35 var(--font-ui);color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.vn-pal-name{display:block;padding-top:6px;font-size:24px;line-height:1.35;white-space:nowrap;overflow-x:clip;overflow-y:visible;color:var(--ink)}
.vn-pal-frow{padding-top:.45rem;padding-bottom:.45rem}
.vn-pal-go{flex:0 0 auto;opacity:0;font:600 .875rem/1 var(--font-ui);color:var(--accent-ink)}
.vn-pal-row[aria-selected=true],.vn-pal-hub[aria-selected=true],.vn-pal-card[aria-selected=true]{background:var(--accent-soft);border-color:var(--accent-line)}
.vn-pal-row[aria-selected=true] .vn-pal-go{opacity:1}
.vn-pal-more{display:block;margin:8px 6px 0;padding:.55rem .65rem;border-radius:10px;font:600 .875rem/1.2 var(--font-ui);color:var(--accent-ink);text-decoration:none}
.vn-pal-more:hover{background:var(--sunken)}
.vn-pal-empty{padding:26px 10px 14px;text-align:center}
.vn-pal-empty b{display:block;font:600 1.0625rem/1.3 var(--font-ui)}
.vn-pal-empty p{margin:.4rem auto 1rem;max-width:420px;color:var(--muted);font:400 .9375rem/1.5 var(--font-ui)}
.vn-pal-empty div{display:flex;gap:8px;justify-content:center;flex-wrap:wrap}
.vn-pal-foot{display:flex;gap:1.1rem;padding:.6rem 1.15rem;border-top:1px solid var(--line);background:var(--paper);font:400 .75rem/1.2 var(--font-ui);color:var(--muted)}
.vn-pal-foot kbd{display:inline-grid;place-items:center;min-width:18px;height:18px;margin-right:2px;padding:0 .25rem;border:1px solid var(--line-2);border-bottom-width:2px;border-radius:4px;background:var(--surface);font:600 .6875rem/1 var(--font-ui);color:var(--ink-2)}
@media (max-width:900px){
  .vn-pal{margin:0;width:100vw;max-width:none;height:100%;max-height:none;border-radius:0}
  .vn-pal-foot{display:none}
  .vn-pal-hubs{grid-template-columns:1fr}
  .vn-pal-cards{grid-template-columns:repeat(2,minmax(0,1fr))}
}

/* next steps at the end of a page */
.vn-next{margin:clamp(32px,5vw,56px) 0}
/* a block placed after the page content: centred on the page column like the content above it */
.vn-next.wrap{margin-left:auto;margin-right:auto;padding-top:clamp(24px,3vw,36px);border-top:1px solid var(--line)}
main:has(.article)~.vn-next.wrap{max-width:calc(46rem + 2*clamp(18px,4vw,40px))}   /* reading pages: as narrow as the article */
.vn-next h2{font:600 1.375rem/1.3 var(--font-display);margin:0 0 .3rem}
.vn-next>p{margin:0 0 1rem;color:var(--muted)}
.vn-next-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:10px}
.vn-next-grid .vn-tile{border:1px solid var(--line);background:var(--surface)}
.vn-next-grid .vn-tile:hover{border-color:var(--accent-line)}
.fdetail .vn-next{margin:0 0 clamp(28px,4vw,44px)}
.vn-ico{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.vn-tab-mark .vn-ico{width:19px;height:19px}

/* the Studio sidebar: search on top, the rest of VFE behind "Khám phá VFE", small things in one bottom row */
.vn-side-search{display:flex;align-items:center;gap:.5rem;width:100%;min-height:38px;margin:4px 0 10px;padding:.45rem .65rem;border:1px solid var(--line-2);border-radius:10px;background:var(--surface);color:var(--muted);font:500 13px/1 var(--font-ui);cursor:pointer}
.vn-side-search:hover{border-color:var(--accent-line);color:var(--ink)}
/* phone: the Studio sidebar is one row of icons; the search box gives up room so the row never runs past the screen */
@media (max-width:760px){.sidebar .vn-side-search{flex:1 1 auto;min-width:38px;width:auto;margin:0;overflow:hidden}.sidebar .vn-side-search kbd{display:none}.sidebar .vn-side-search span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sidebar .vn-side-search svg{flex:none}.sidebar .vn-snav{flex:0 0 auto;width:auto}}
@media (max-width:420px){.sidebar .vn-side-search{flex:0 0 38px;justify-content:center;padding:0}.sidebar .vn-side-search span{display:none}}
.vn-side-search svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round}
.vn-side-search kbd{margin-left:auto;font:500 10.5px/1 var(--font-ui);padding:.18rem .3rem;border:1px solid var(--line);border-radius:4px;color:var(--muted)}
/* Studio binds page switching to every .nav, so the added entries look like one without being one */
.vn-snav{display:flex;align-items:center;gap:.7rem;width:100%;border:0;background:transparent;border-radius:var(--r-sm);padding:.6rem .7rem;text-align:left;color:var(--ink-2);font:inherit;font-size:14px;margin-bottom:2px;cursor:pointer}
.vn-snav:hover{background:var(--sunken)}
.vn-explore .vn-ico{width:18px;height:18px;flex:0 0 auto}
.vn-explore[aria-expanded=true]{background:var(--sunken)}
.vn-util{display:flex;gap:4px;margin:0 0 8px}
.sidebar .vn-util .vn-util-btn{flex:1 1 0;min-width:0;display:grid;justify-items:center;gap:3px;margin:0;padding:.45rem .2rem;border-radius:10px;font-size:11.5px;text-align:center}
.vn-util .vn-util-btn .nav-label{font-size:11.5px;white-space:nowrap}
.vn-util .vn-util-btn .ico,.vn-util .vn-util-btn>svg,.vn-util .vn-util-btn .vn-ico{width:18px;height:18px;margin:0}
.vn-pop{position:fixed;z-index:60;min-width:230px;max-width:calc(100vw - 16px);padding:8px;background:var(--surface);border:1px solid var(--line);border-radius:14px;box-shadow:0 18px 50px rgba(20,24,60,.2);animation:vn-in .14s ease-out}
.vn-pop.wide{width:min(560px,calc(100vw - 280px))}
.vn-pop-h{margin:4px 8px 8px;font:600 .75rem/1 var(--font-ui);letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
.vn-pop-cols{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px 10px}
.vn-pop-sec{display:flex;align-items:center;gap:.5rem;margin:4px 6px 4px;font:600 .875rem/1.2 var(--font-ui);color:var(--ink)}
.vn-pop-sec .vn-mark{width:28px;height:28px;border-radius:8px;font-size:14px}
.vn-pop-sec .vn-ico{width:16px;height:16px}
.vn-pop a,.vn-pop button{display:flex;align-items:center;gap:.55rem;width:100%;padding:.45rem .6rem;border:0;border-radius:8px;background:none;color:var(--ink-2);text-decoration:none;text-align:left;font:500 13px/1.3 var(--font-ui);cursor:pointer}
.vn-pop-cols a{padding-left:2.6rem}
.vn-pop a:hover,.vn-pop button:hover,.vn-pop a:focus-visible,.vn-pop button:focus-visible{background:var(--sunken);color:var(--ink);outline:none}
.vn-pop-note{margin:6px 8px 4px;padding-top:8px;border-top:1px solid var(--line);font:400 12px/1.45 var(--font-ui);color:var(--muted)}
.vn-pop.more{width:290px}
/* 900–1180 px: six entries plus search and the Studio button share one row */
@media (min-width:901px) and (max-width:1180px){.vn-head .vn-top{padding:.5rem .5rem}.vn-head .vn-search kbd{display:none}.vn-head .logo{margin-right:.6rem}.vn-head .head-row{gap:.5rem}}
@media (min-width:901px) and (max-width:1040px){.vn-head .logo span:last-child{display:none}}
