/* ============================================================
   Vilna Holding Data Room — unified interface system
   Single source of truth for chrome: tokens, sidebar, topbar,
   buttons, cards, focus states, mobile drawer, presentation mode.
   Project brand lives ONLY in its logo/name inside the sidebar.
   ============================================================ */

/* ---------- canonical page reset ----------
   Every standalone shell page (data room, deck, document) loads this
   file, so this is the one place the reset can live without drifting
   per file. Home gets the equivalent from BaseLayout.astro; the two
   are intentionally identical (margin:0, border-box) so neither shell
   can be told apart by a stray 8px UA margin or a content-box border. */
*{box-sizing:border-box}
html,body{margin:0;padding:0}

.vh-app{
  /* Apple-style surface system: a grey grouped canvas, white cards on it,
     and a grey fill again for a row nested inside a card. Depth comes from
     that alternation, not from outlines. */
  --vh-bg:#f2f2f7;
  --vh-surface:#ffffff;
  --vh-fill:#f5f5f7;
  --vh-fill-hover:#ebebf0;
  --vh-ink:#1d2127;
  --vh-muted:#697077;
  /* Hairlines survive only as real separators — a sidebar edge, a row
     divider — never as an outline around something already filled. */
  --vh-line:rgba(0,0,0,.07);
  --vh-line-soft:rgba(0,0,0,.045);
  --vh-accent:#2e5aac;
  --vh-action-blue:#2e5aac;
  --vh-accent-soft:rgba(46,90,172,.12);
  /* Partner-facing wash: #b7cbd9, carried as a channel triple so the
     rule below can fade it out without a second colour. */
  --vh-partner-wash:183,203,217;
  /* Depth wash: the same gradient in the neutral line grey, used to
     give the intranet home a sense of volume without tinting it. */
  --vh-depth-wash:168,175,184;
  /* Dot grid: the canvas texture every shell surface carries. A 13px
     lattice of 1.5px squares in the neutral line grey, drawn with
     crispEdges so it stays a lattice instead of blurring into noise at
     fractional device pixels. Both washes above are deliberately kept
     light enough for it to read through them. */
  /* Canvas texture, switched off at the token so no rule has to change.
     `none` is legal inside a background-image list, so the layered rules
     below keep parsing. */
  --vh-dot-grid:none;
  --vh-dot-grid-step:13px;
  --vh-hover:rgba(0,0,0,.045);
  --vh-radius:14px;
  --vh-radius-sm:10px;
  --vh-shadow-sm:0 1px 2px rgba(16,24,32,.05);
  --vh-shadow-md:0 1px 2px rgba(16,24,32,.04),0 8px 24px rgba(16,24,32,.06);
  /* Only for something that genuinely floats: menu, dropdown, modal.
     Never set a shadow token to `none` — the canonical rules compose it
     into a box-shadow list, where `none` is illegal and drops the lot. */
  --vh-shadow-pop:0 12px 32px rgba(16,24,32,.14);
  --vh-font:-apple-system,BlinkMacSystemFont,'SF Pro Text','Segoe UI',Roboto,Arial,sans-serif;
  --vh-mono:ui-monospace,'SF Mono',SFMono-Regular,Menlo,Consolas,'Liberation Mono',monospace;

  --vh-nav-ink:#33383f;
  --vh-on-ink:#fff;
  --vh-ink-hover:#343a42;
  --vh-notice-fill:rgba(255,255,255,.94);
  --vh-danger:#dd1f1f;
  --vh-notice-backdrop:rgba(18,32,47,.42);
  --vh-body-ink:#38414a;
  --vh-selection:rgba(46,90,172,.22);
  --vh-drawer-shadow:18px 0 44px rgba(16,24,32,.22);
  --vh-drawer-bg:#f3f4f5;
  --vh-drawer-backdrop:rgba(16,24,32,.42);
  --vh-paper:#fff;
  --vh-paper-ink:#1d2127;
  --vh-paper-shadow:0 20px 60px rgba(15,47,74,.22),0 2px 7px rgba(15,47,74,.16);
  --vh-presentation-bg:#101318;
  --vh-on-accent:#fff;
  --vh-placeholder:#9aa0a6;
  --vh-update-ink:#3f454c;
  --vh-error:#9c3d25;
  --vh-overlay:rgba(20,28,38,.5);
  color-scheme:light;

  min-height:100vh;
  display:flex;
  flex-direction:column;
  background:var(--vh-bg);
  color:var(--vh-ink);
  font-family:var(--vh-font);
}


/* A presentation owns the document canvas as well as its app tokens. */
html:has(.vh-app[data-presentation],.vh-app[data-artifact="deck"]){color-scheme:only light}

/* Graphite is chrome only. Decks/presentation retain their local light tokens. */
:root{  --vh-nav-ink:#33383f;
  --vh-on-ink:#fff;
  --vh-ink-hover:#343a42;
  --vh-notice-fill:rgba(255,255,255,.94);
  --vh-danger:#dd1f1f;
  --vh-notice-backdrop:rgba(18,32,47,.42);
  --vh-body-ink:#38414a;
  --vh-selection:rgba(46,90,172,.22);
  --vh-drawer-shadow:18px 0 44px rgba(16,24,32,.22);
  --vh-drawer-bg:#f3f4f5;
  --vh-drawer-backdrop:rgba(16,24,32,.42);
  --vh-paper:#fff;
  --vh-paper-ink:#1d2127;
  --vh-paper-shadow:0 20px 60px rgba(15,47,74,.22),0 2px 7px rgba(15,47,74,.16);
  --vh-presentation-bg:#101318;
  --vh-on-accent:#fff;
  --vh-placeholder:#9aa0a6;
  --vh-update-ink:#3f454c;
  --vh-error:#9c3d25;
  --vh-overlay:rgba(20,28,38,.5);
}
html[data-theme="dark"]:not(:has(.vh-app[data-presentation],.vh-app[data-artifact="deck"])),html[data-theme="dark"] .vh-app:not([data-presentation]):not([data-artifact="deck"]){
  --vh-bg:#1c1d20;
  --vh-surface:#25272b;
  --vh-fill:#2c2e33;
  --vh-fill-hover:#34363c;
  --vh-ink:#e4e5e7;
  --vh-muted:#9a9fa6;
  --vh-line:rgba(255,255,255,.08);
  --vh-line-soft:rgba(255,255,255,.05);
  --vh-accent:#7fa2e0;
  --vh-accent-soft:rgba(127,162,224,.16);
  --vh-hover:rgba(255,255,255,.05);
  --vh-partner-wash:52,62,72;
  --vh-depth-wash:58,61,66;
  --vh-shadow-sm:0 1px 2px rgba(0,0,0,.30);
  --vh-shadow-md:0 1px 2px rgba(0,0,0,.28),0 8px 24px rgba(0,0,0,.32);
  --vh-shadow-pop:0 12px 32px rgba(0,0,0,.45);
  --vh-nav-ink:#c9ccd1;
  --vh-on-ink:#1c1d20;
  --vh-ink-hover:#cfd1d4;
  --vh-notice-fill:#25272b;
  --vh-danger:#f08080;
  --vh-notice-backdrop:rgba(0,0,0,.55);
  --vh-body-ink:#b9bdc3;
  --vh-selection:rgba(127,162,224,.28);
  --vh-drawer-shadow:18px 0 44px rgba(0,0,0,.45);
  --vh-drawer-bg:#1c1d20;
  --vh-drawer-backdrop:rgba(0,0,0,.55);
  --vh-on-accent:#1c1d20;
  --vh-placeholder:#9a9fa6;
  --vh-update-ink:#b9bdc3;
  --vh-error:#eea28e;
  --vh-overlay:rgba(0,0,0,.6);
  color-scheme:dark;
}

/* Page canvas default (sits outside .vh-app, so it needs its own
   fallback-safe values rather than inheriting the tokens above). */
body{background:var(--vh-bg,#f4f5f6);color:var(--vh-ink,#1d2127)}
/* Slide-canvas scale vars live on :root because the deck's fitSlide()
   script writes them via document.documentElement.style — an inline
   style always outranks a stylesheet rule, wherever that rule lives. */
:root{--scale:1;--slide-half-width:561.26px}
@page{size:A4 landscape;margin:0}
@media print{html,body{width:auto;height:auto;overflow:visible;background:var(--vh-paper)}}

/* ---------- topbar ---------- */
.vh-app .vh-topbar{
  flex:none;
  display:flex;
  align-items:center;
  gap:.75rem;
  min-height:50px;
  padding:0 1rem;
  background:var(--vh-surface);
  border-bottom:1px solid var(--vh-line);
}
.vh-app .vh-topbar-logo{height:22px;width:auto;display:block;flex:none}
.vh-app .vh-topbar-identity{display:flex;align-items:center;gap:.65rem;min-width:0}
.vh-app .vh-topbar-identity .vh-tag{padding:0;line-height:1}
.vh-home .pcards .pr-logo{height:20px;width:84px;flex:none;object-fit:contain;object-position:center}
.vh-home .vh-fi{width:18px;height:18px;flex:none}
.vh-app .vh-logo-mark.vh-topbar-logo{width:26px;height:26px;border-radius:7px;font-size:.72rem}
.vh-app .vh-sidebar .vh-brand.vh-moved{display:none}
.vh-app .vh-topbar-title{
  font-size:.86rem;
  font-weight:600;
  color:var(--vh-ink);
  white-space:nowrap;
  overflow:hidden;
  text-overflow:ellipsis;
}
.vh-app .vh-topbar-sub{
  font-size:.72rem;
  color:var(--vh-muted);
  white-space:nowrap;
}
/* deck slide counter: lives in the canonical topbar, not a second header.
   Hidden on desktop (the sidebar list already shows position); shown at
   the same breakpoint the deck canvas goes single-column. */
.vh-app .vh-topbar-counter{
  display:none;
  font-family:var(--vh-mono);
  font-size:.68rem;
  font-weight:700;
  letter-spacing:.06em;
  color:var(--vh-muted);
  white-space:nowrap;
  flex:none;
}
.vh-app .vh-spacer{flex:1}
.vh-app .vh-tag{
  font-family:var(--vh-mono);
  font-size:.58rem;
  font-weight:600;
  letter-spacing:.14em;
  text-transform:uppercase;
  color:var(--vh-muted);
  border:0;
  border-radius:999px;
  padding:.28rem .65rem;
  white-space:nowrap;
}
.vh-app .vh-actions{display:flex;align-items:center;gap:.45rem}

/* ---------- shell grid ---------- */
.vh-app > .vh-shell,
.vh-app .vh-shell{
  flex:1;
  display:grid;
  grid-template-columns:264px minmax(0,1fr);
  min-height:0;
}

/* ---------- sidebar ---------- */
.vh-app .vh-sidebar{
  background:var(--vh-bg);
  border-right:1px solid var(--vh-line);
  padding:.9rem .7rem;
  display:flex;
  flex-direction:column;
  gap:.85rem;
  overflow:hidden auto;
  min-width:0;
}
@media (min-width:921px){
  .vh-app .vh-sidebar:has(> .vh-side-actions){
    position:sticky;top:0;align-self:start;height:calc(100dvh - 50px);
  }
}
/* Secondary tools stay at the bottom of the sidebar, below primary navigation. */
.vh-app .vh-side-actions{
  margin-top:auto;padding-top:.5rem;
  display:flex;flex-direction:column;gap:.25rem;flex-shrink:0;
  background:var(--vh-bg);
}
.vh-app .vh-side-actions .vh-btn{justify-content:flex-start;min-height:2.25rem;margin-top:0}
.vh-app .vh-brand{display:flex;align-items:center;gap:.65rem;padding:.15rem .35rem}
.vh-app .vh-brand img{height:26px;width:auto;display:block}
.vh-app .vh-logo-mark{
  flex:none;width:30px;height:30px;border-radius:8px;
  background:var(--vh-ink);color:var(--vh-on-ink);
  display:grid;place-items:center;
  font-weight:700;font-size:.82rem;letter-spacing:.02em;
}
.vh-app .vh-brand-name{font-size:.84rem;font-weight:650;line-height:1.25;color:var(--vh-ink)}
.vh-app .vh-back{
  display:inline-flex;align-items:center;gap:.45rem;
  padding:.42rem .6rem;
  border:0;
  border-radius:var(--vh-radius-sm);
  background:var(--vh-fill);
  color:var(--vh-ink);
  font-size:.76rem;font-weight:600;text-decoration:none;
  box-shadow:none;
}
.vh-app .vh-back:hover{background:var(--vh-fill-hover)}
.vh-app .vh-back:focus-visible{outline:2px solid var(--vh-accent);outline-offset:2px}
.vh-app .vh-sidebar-controls{display:flex;align-items:center;justify-content:flex-end;gap:.45rem;min-width:0}
.vh-app .vh-sidebar-controls .vh-back{
  width:30px;height:30px;min-width:30px;flex:none;
  padding:0;justify-content:center;
}
.vh-app .vh-sidebar-controls .vh-home-icon{margin:0}
.vh-app .vh-home-icon{
  width:14px;height:14px;flex:none;display:block;
  fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;
}
.vh-app .vh-side-head{
  margin:0 0 .3rem;padding-left:.55rem;
  font-size:.62rem;font-weight:700;letter-spacing:.08em;
  text-transform:uppercase;color:var(--vh-muted);
}
.vh-app .vh-nav{display:grid;gap:2px}
.vh-app .vh-nav-item{
  position:relative;
  display:block;
  padding:.48rem .6rem .48rem .74rem;
  border-left:3px solid transparent;
  border-radius:var(--vh-radius-sm);
  color:var(--vh-nav-ink);
  font-size:.83rem;
  line-height:1.35;
  text-decoration:none;
  transition:background .12s ease,color .12s ease,border-color .12s ease;
}
.vh-app .vh-nav-item:hover{background:var(--vh-hover);color:var(--vh-ink)}
.vh-app .vh-nav-item:focus-visible{
  outline:2px solid var(--vh-accent);
  outline-offset:-2px;
  background:var(--vh-surface);
}
.vh-app .vh-nav-item.is-active,
.vh-app .vh-nav-item[aria-current='page']{
  background:var(--vh-surface);
  border-left-color:var(--vh-accent);
  font-weight:650;
  color:var(--vh-ink);
  box-shadow:var(--vh-shadow-sm);
}
.vh-app .vh-nav-item--sub{margin-left:.9rem;font-size:.78rem}
.vh-app .vh-side-foot{
  margin-top:auto;
  padding:.6rem .55rem 0;
  border-top:1px solid var(--vh-line);
  font-family:var(--vh-mono);
  font-size:.56rem;
  letter-spacing:.1em;
  text-transform:uppercase;
  color:var(--vh-muted);
}

.vh-app .vh-side-foot{min-height:2.25rem;box-sizing:border-box}
.vh-app #admin-panel + #network-drive{margin-top:.25rem}

/* ---------- buttons ---------- */
.vh-app .vh-btn{
  display:inline-flex;align-items:center;gap:.4rem;
  padding:.38rem .75rem;
  border:0;
  border-radius:var(--vh-radius-sm);
  background:var(--vh-fill);
  color:var(--vh-ink);
  font-family:var(--vh-font);
  font-size:.76rem;font-weight:600;line-height:1.2;
  text-decoration:none;cursor:pointer;
  box-shadow:none;
  transition:background .12s ease,border-color .12s ease;
}
.vh-app .vh-btn:hover{background:var(--vh-fill-hover)}
.vh-app .vh-btn:active{transform:translateY(1px)}
.vh-app .vh-btn:focus-visible{outline:2px solid var(--vh-accent);outline-offset:2px}
.vh-app .vh-btn--icon{padding:.38rem .5rem}
.vh-app .vh-menu-btn{display:none}

/* ---------- presentation confidentiality ---------- */
.vh-app .vh-confidential-button{
  display:inline-flex;align-items:center;gap:7px;
  padding:.42rem .72rem;
  border:0;border-radius:999px;
  background:var(--vh-notice-fill);color:var(--vh-muted);
  font-family:var(--vh-font);font-size:.72rem;font-weight:650;line-height:1;
  white-space:nowrap;cursor:pointer;box-shadow:none;
  transition:color .15s ease,border-color .15s ease,background .15s ease;
}
.vh-app .vh-confidential-button:hover{color:var(--vh-ink);background:var(--vh-hover)}
.vh-app .vh-confidential-button:focus-visible{outline:2px solid var(--vh-accent);outline-offset:2px}
.vh-app .vh-confidential-icon{
  display:block;width:15px;height:15px;flex:none;color:var(--vh-danger);
  transition:color .15s ease;
}
.vh-app .vh-confidential-button.is-acknowledged .vh-confidential-icon{color:var(--vh-muted)}
.vh-app .vh-confidential-caret{display:block;width:9px;height:9px;flex:none;opacity:.72}
.vh-confidential-modal[hidden]{display:none}
.vh-confidential-modal{
  position:fixed;inset:0;z-index:120;
  display:flex;align-items:center;justify-content:center;padding:24px;
  font-family:var(--vh-font);
}
.vh-confidential-backdrop{position:absolute;inset:0;background:var(--vh-notice-backdrop);backdrop-filter:blur(2px)}
.vh-confidential-panel{
  position:relative;width:min(680px,100%);box-sizing:border-box;
  padding:32px 34px;background:var(--vh-surface);color:var(--vh-ink);
  border:0;border-radius:var(--vh-radius);
  box-shadow:var(--vh-shadow-pop);
}
.vh-confidential-panel:focus{outline:none}
.vh-confidential-title{margin:0 44px 16px 0;font-size:1.35rem;font-weight:700;line-height:1.2}
.vh-confidential-body{color:var(--vh-body-ink);font-size:.94rem;line-height:1.6}
.vh-confidential-body p{margin:0 0 14px}.vh-confidential-body p:last-child{margin-bottom:0}
.vh-confidential-close{
  position:absolute;top:16px;right:16px;width:34px;height:34px;
  display:inline-flex;align-items:center;justify-content:center;
  border:0;border-radius:999px;background:var(--vh-fill);color:var(--vh-muted);cursor:pointer;
}
.vh-confidential-close:hover{color:var(--vh-ink);background:var(--vh-fill-hover)}
.vh-confidential-close:focus-visible,.vh-confidential-confirm:focus-visible{outline:2px solid var(--vh-accent);outline-offset:2px}
.vh-confidential-actions{display:flex;justify-content:flex-end;margin-top:26px}
.vh-confidential-confirm{
  padding:10px 22px;border:0;border-radius:999px;
  background:var(--vh-ink);color:var(--vh-on-ink);font-family:var(--vh-font);font-size:.8rem;font-weight:650;cursor:pointer;
}
.vh-confidential-confirm:hover{background:var(--vh-ink-hover);border-color:var(--vh-ink-hover)}

.vh-app .vh-sidebar-toggle{
  width:30px;height:30px;min-height:30px;flex:none;align-self:flex-end;
  display:inline-flex;align-items:center;justify-content:center;
  padding:0;
  border:0;border-radius:8px;
  background:var(--vh-fill);color:var(--vh-ink);
  cursor:pointer;
  box-shadow:none;
}
.vh-app .vh-sidebar-toggle:hover{background:var(--vh-fill-hover)}
.vh-app .vh-sidebar-toggle:focus-visible{outline:2px solid var(--vh-accent);outline-offset:2px}
.vh-app .vh-sidebar-toggle-icon{
  position:relative;width:16px;height:11px;flex:none;
  border:1.5px solid currentColor;border-radius:2px;
}
.vh-app .vh-sidebar-toggle-icon::before{
  content:'';position:absolute;top:-1.5px;bottom:-1.5px;left:4px;
  border-left:1.5px solid currentColor;
}
@media (min-width:921px){
  .vh-app.vh-sidebar-collapsed .vh-shell,
  .vh-app.vh-sidebar-collapsed .deck-app{grid-template-columns:44px minmax(0,1fr)}
  .vh-app.vh-sidebar-collapsed .vh-sidebar{
    display:flex;padding:.55rem .4rem;overflow:hidden;align-items:center;
  }
  .vh-app.vh-sidebar-collapsed .vh-sidebar > :not(.vh-sidebar-toggle):not(.vh-sidebar-controls){display:none!important}
  /* Home + Back stay visible as an icon rail when collapsed — only the
     text nav list collapses. Previously a blanket rule hid everything in
     .vh-sidebar-controls except the toggle, so Home silently vanished. */
  .vh-app.vh-sidebar-collapsed .vh-sidebar-controls{
    display:flex!important;flex-direction:column;width:100%;align-items:center;gap:.4rem;
  }
  .vh-app.vh-sidebar-collapsed .vh-sidebar-toggle{align-self:center}
}

@media (max-width:680px){
  .vh-app .vh-confidential-button span,.vh-app .vh-confidential-caret{display:none}
  .vh-app .vh-confidential-button{width:30px;height:30px;padding:0;justify-content:center}
  .vh-confidential-modal{padding:14px}
  .vh-confidential-panel{padding:26px 22px}
  /* topbar action buttons (Fullscreen/PDF/Share): icon-only once the label
     text no longer fits next to the menu button, brand and counter. */
  .vh-app .vh-btn-label{display:none}
  .vh-app .vh-actions .vh-btn{padding:.38rem .55rem}
  /* deck topbar is already carrying menu-btn + logo + counter + 3 icon
     buttons at this width; the session avatar is the one non-essential
     item left, so it drops first rather than risk clipping a control. */
  .vh-app[data-presentation] .vh-user{display:none}
}
@media (max-width:360px){
  .vh-app .vh-topbar{gap:.45rem;padding-inline:.65rem}
  .vh-app .vh-actions{gap:.25rem}
  .vh-app .vh-share-btn span{display:none}
  .vh-app .vh-share-btn{width:30px;height:30px;padding:0;justify-content:center}
}

@media print{
  .vh-app .vh-confidential-button,.vh-confidential-modal{display:none!important}
}

/* ---------- project card (launcher) ---------- */
.vh-app .vh-card{
  display:flex;flex-direction:column;gap:.5rem;
  padding:1.5rem 1.4rem 1.25rem;
  background:var(--vh-surface);
  border:0;
  border-radius:var(--vh-radius);
  box-shadow:var(--vh-shadow-md);
  color:inherit;text-decoration:none;
  transition:transform .14s ease,box-shadow .14s ease,border-color .14s ease;
}
.vh-app .vh-card:hover{
  transform:translateY(-2px);
  
  box-shadow:var(--vh-shadow-pop);
}
.vh-app .vh-card:focus-visible{outline:2px solid var(--vh-accent);outline-offset:3px}
.vh-app .vh-card-head{display:flex;align-items:center;gap:.7rem}
.vh-app .vh-card-head img{height:30px;width:auto}
.vh-app .vh-card-name{font-size:1.02rem;font-weight:650;color:var(--vh-ink)}
.vh-app .vh-card-kind{
  font-family:var(--vh-mono);font-size:.6rem;font-weight:600;
  letter-spacing:.12em;text-transform:uppercase;color:var(--vh-muted);
}
.vh-app .vh-card-sub{font-size:.84rem;color:var(--vh-muted);line-height:1.5}
.vh-app .vh-card-go{
  margin-top:auto;padding-top:1rem;
  font-size:.72rem;font-weight:700;letter-spacing:.08em;
  text-transform:uppercase;color:var(--vh-accent);
}
.vh-app .vh-card-go::after{content:' ↗'}

/* ---------- content surface ---------- */
.vh-app .vh-content{min-width:0;min-height:0;display:flex;flex-direction:column}
.vh-app .vh-empty{
  margin:auto;padding:2rem 2.4rem;
  border:1px dashed var(--vh-line);
  border-radius:var(--vh-radius);
  color:var(--vh-muted);font-size:.85rem;text-align:center;
  max-width:34rem;
}

/* ---------- launcher ---------- */
.vh-app .vh-sr{
  position:absolute!important;width:1px;height:1px;
  margin:-1px;padding:0;overflow:hidden;
  clip:rect(0 0 0 0);white-space:nowrap;border:0;
}
.vh-app .vh-launch{padding:clamp(1.4rem,4vw,2.6rem)}
.vh-app .vh-cards{
  display:grid;
  grid-template-columns:repeat(auto-fit,minmax(min(100%,19rem),1fr));
  gap:1rem;
  max-width:58rem;
}
.vh-app .vh-card{min-height:10.5rem}

/* ---------- focus / selection ---------- */
.vh-app :focus-visible{outline:2px solid var(--vh-accent);outline-offset:2px}
.vh-app ::selection{background:var(--vh-selection)}

/* ---------- mobile drawer ---------- */
@media (max-width:920px){
  .vh-app .vh-menu-btn{display:inline-flex}
  .vh-app .vh-sidebar-toggle{display:none}
  .vh-app .vh-shell{grid-template-columns:minmax(0,1fr)}
  .vh-app .vh-sidebar{
    position:fixed;z-index:60;top:0;bottom:0;left:0;
    width:min(80vw,300px);
    transform:translateX(-102%);
    transition:transform .18s ease;
    box-shadow:var(--vh-drawer-shadow);
  }
  .vh-app[data-project='energy'] #vh-sidebar{
    overflow-x:hidden;
    position:fixed;z-index:60;top:0;bottom:0;left:0;
    width:min(80vw,300px);
    transform:translateX(-102%);
    transition:transform .18s ease;
    box-shadow:var(--vh-drawer-shadow);
    background:var(--vh-drawer-bg);
    border-right:1px solid var(--vh-line);
  }
  .vh-app[data-presentation] #sidebar{
    position:fixed;z-index:60;top:0;bottom:0;left:0;
    width:min(80vw,300px);
    transform:translateX(-102%);
    transition:transform .18s ease;
    box-shadow:var(--vh-drawer-shadow);
  }
}
@media (max-width:920px){
  body.vh-drawer-open .vh-app .vh-sidebar,
  body.vh-drawer-open .vh-app[data-project='energy'] #vh-sidebar,
  body.vh-drawer-open .vh-app[data-presentation] #sidebar{transform:translateX(0)}
  body.vh-drawer-open::before{
    content:'';position:fixed;inset:0;z-index:50;background:var(--vh-drawer-backdrop);
  }
}

/* ============================================================
   Surface adapters — visual alignment of existing interiors
   ============================================================ */

/* --- Vilna Energy (hub-shell inside the system frame) --- */
.vh-app[data-project='energy'] > .hub-shell,
.vh-app[data-project='energy'] .vh-energy-body{
  flex:1;min-height:0;height:auto;
}
.vh-app[data-project='energy'] .hub-main{background:var(--vh-bg)}
.vh-app[data-project='energy'] .content-frame{max-width:1120px;margin-inline:auto;padding:clamp(1.2rem,3vw,2.2rem)}

/* --- Queralt Solutions / QX --- */
.vh-app[data-project='qs'] .vh-content{padding:clamp(1rem,3vw,1.8rem)}
.vh-app[data-project='qs'] .page{
  width:auto;min-height:0;margin:0;max-width:none;
  background:var(--vh-surface);
  border:0;border-radius:var(--vh-radius);
  box-shadow:var(--vh-shadow-md);overflow:hidden;
}

/* QX library documents — former standalone slide-decks normalized
   into a single reading surface inside the shell */
body.vh-doc{
  height:auto!important;width:auto!important;
  overflow:visible!important;
  display:block!important;
  background:var(--vh-bg)!important;
}
.vh-app[data-project='qs'] .vh-doc-surface{
  display:block;
  background:var(--vh-bg);
}
.vh-app[data-project='qs'] .vh-doc-surface > *{
  width:min(100%,1080px);
  margin-inline:auto;
  background:var(--vh-surface);
  border:0;
  border-radius:var(--vh-radius);
  /* JS (shell.js, fitDocSurface) sets transform:scale() here in
     fullscreen so a document's reading card actually grows to use the
     freed-up screen instead of just floating in empty background —
     see body.vh-present rules below for the topbar/sidebar hide. */
  transform-origin:top center;
  transition:transform .12s ease;
  box-shadow:var(--vh-shadow-md);
  overflow:hidden;
}
.vh-app[data-project='qs'] .vh-doc-surface > #deck{
  position:static;inset:auto;
  display:block;transform:none!important;transition:none;will-change:auto;
}
.vh-app[data-project='qs'] .vh-doc-surface .slide{
  min-width:0;width:100%;height:auto;min-height:0;
  padding:clamp(1.4rem,3.5vw,2.4rem);
  overflow:visible;
}
.vh-app[data-project='qs'] .vh-doc-surface .slide + .slide{
  border-top:1px solid var(--vh-line-soft);
}
.vh-app[data-project='qs'] .vh-doc-surface > #progress{display:none}

@media print{
  .vh-app .vh-topbar,
  .vh-app .vh-sidebar,
  .vh-app .vh-menu-btn,
  .vh-app .vh-sidebar-toggle{display:none!important}
  .vh-app > .vh-shell,
  .vh-app .vh-shell{grid-template-columns:minmax(0,1fr)!important}
  .vh-app .vh-content{padding:0!important}
}

/* ---------- presentation deck extension ----------
   Adds the slide canvas, keyboard/click arrows, progress bar, mobile
   bar and print export on top of the canonical shell above. Every
   color/radius/spacing value is a --vh-* token — nothing here defines
   a competing palette, so any future workspace type (data room,
   deck, or whatever comes next) just adds its own structural layer
   the same way, and stays visually identical everywhere else. */
.vh-app[data-presentation]{
  height:100%;
  --slide-w:1122.52px;--slide-h:793.70px;
  --nav-control-width:58px;--nav-page-gap:8px;
}
.vh-app[data-presentation] .deck-app{
  width:100%;height:100%;flex:1;min-height:0;
  display:grid;grid-template-columns:264px minmax(0,1fr);
  background:var(--vh-bg);
}
/* Same specificity as the collapsed-sidebar rule above (three classes each),
   and this one comes later in the file, so without this explicit four-class
   override it always wins and the Hide-sidebar button silently does nothing
   on any deck. */
.vh-app[data-presentation].vh-sidebar-collapsed .deck-app{grid-template-columns:44px minmax(0,1fr)}
.vh-app[data-presentation] .workspace{
  position:relative;min-width:0;min-height:0;overflow:hidden;
  background:var(--vh-bg);
}
.vh-app[data-presentation] .stage{position:absolute;inset:0;overflow:hidden;touch-action:pan-y}
.vh-app[data-presentation] .slide-shell{
  display:none;position:absolute;left:50%;top:50%;
  width:var(--slide-w);height:var(--slide-h);overflow:hidden;background:var(--vh-paper);
  transform:translate(-50%,-50%) scale(var(--scale));transform-origin:center center;
  box-shadow:var(--vh-paper-shadow);
}
.vh-app[data-presentation] .slide-shell.is-active{display:block}
.vh-app[data-presentation] .slide-frame{position:absolute;inset:0;width:297mm;height:210mm;border:0;display:block;background:var(--vh-paper);pointer-events:none}
.vh-app[data-presentation] .slide-shell.has-slide-links .slide-frame{pointer-events:auto}
.vh-app[data-presentation] .slide-shell.crop-2 .slide-frame{height:420mm;transform:translateY(calc(-210mm - 1px))}
.vh-app[data-presentation] .deck-page-number{
  position:absolute;z-index:3;right:8mm;bottom:3.2mm;color:var(--vh-accent);
  font-size:6.3pt;font-weight:700;letter-spacing:.08em;line-height:1;pointer-events:none;
}
.vh-app[data-presentation] .nav-arrow{
  position:absolute;z-index:15;top:50%;width:58px;height:100px;transform:translateY(-50%);
  border:0;background:transparent;color:var(--vh-muted);cursor:pointer;
  display:grid;place-items:center;padding:0;transition:color .16s ease,opacity .16s ease;
}
.vh-app[data-presentation] .nav-arrow svg{width:28px;height:54px;display:block;fill:none;stroke:currentColor;stroke-width:1.55;stroke-linecap:square;stroke-linejoin:miter}
.vh-app[data-presentation] .nav-arrow:hover,
.vh-app[data-presentation] .nav-arrow:focus-visible{color:var(--vh-ink);outline:none}
.vh-app[data-presentation] .nav-arrow:focus-visible svg{stroke-width:2}
.vh-app[data-presentation] .nav-arrow:disabled{opacity:.12;cursor:default}
.vh-app[data-presentation] .nav-arrow.prev{left:calc(50% - var(--slide-half-width) - var(--nav-control-width) - var(--nav-page-gap))}
.vh-app[data-presentation] .nav-arrow.next{right:calc(50% - var(--slide-half-width) - var(--nav-control-width) - var(--nav-page-gap))}
.vh-app[data-presentation] .progress{position:absolute;left:0;right:0;bottom:0;height:3px;background:var(--vh-line)}
.vh-app[data-presentation] .progress span{display:block;width:16.6667%;height:100%;background:var(--vh-accent);transition:width .16s ease}
@media (max-width:820px){
  .vh-app[data-presentation] .deck-app{display:block}
  .vh-app[data-presentation] .workspace{width:100%;height:100%}
  .vh-app[data-presentation] .vh-topbar-counter{display:inline-flex}
  .vh-app[data-presentation]{--nav-control-width:42px;--nav-page-gap:6px}
  .vh-app[data-presentation] .nav-arrow{width:42px;height:76px}
  .vh-app[data-presentation] .nav-arrow svg{width:20px;height:42px}
}
@media (prefers-reduced-motion:reduce){.vh-app[data-presentation] .progress span{transition:none}}
@media print{
  .vh-app[data-presentation] .deck-app,
  .vh-app[data-presentation] .workspace,
  .vh-app[data-presentation] .stage{display:block;position:static;width:auto;height:auto;overflow:visible;background:var(--vh-paper)}
  .vh-app[data-presentation] .nav-arrow,
  .vh-app[data-presentation] .progress{display:none!important}
  .vh-app[data-presentation] .slide-shell,
  .vh-app[data-presentation] .slide-shell.is-active{display:block!important;position:relative;left:auto;top:auto;width:297mm;height:210mm;overflow:hidden;transform:none!important;box-shadow:none;page-break-after:always;break-after:page}
  .vh-app[data-presentation] .slide-shell:last-of-type{page-break-after:auto;break-after:auto}
  .vh-app[data-presentation] .slide-frame{width:297mm;height:210mm}
  .vh-app[data-presentation] .slide-shell.crop-2 .slide-frame{height:420mm;transform:translateY(-210mm)}
}

/* ---------- unified navigation item (all surfaces) ----------
   One pattern for Energy sections, QX library and deck slides.
   Active state = white surface + accent bar + ring + weight,
   i.e. recognizable without relying on color alone.            */
.vh-app .vh-nav-item{
  position:relative;
  display:block;width:100%;
  padding:.48rem .6rem .48rem .74rem;
  border-left:3px solid transparent;
  border-radius:var(--vh-radius-sm);
  background:transparent;
  color:var(--vh-nav-ink);
  font-family:var(--vh-font);
  font-size:.83rem;line-height:1.35;text-align:left;text-decoration:none;
  transition:background .12s ease,color .12s ease,border-color .12s ease;
}
button.vh-nav-item{cursor:pointer;border-top:0;border-right:0;border-bottom:0}
.vh-app .vh-nav-item:hover{background:var(--vh-hover);color:var(--vh-ink)}
.vh-app .vh-nav-item:focus-visible{
  outline:2px solid var(--vh-accent);outline-offset:-2px;background:var(--vh-surface);
}
.vh-app .vh-nav-item.is-active,
.vh-app[data-presentation] .slide-link.is-current{
  background:var(--vh-surface);
  border-left-color:var(--vh-accent);
  font-weight:650;color:var(--vh-ink);
  box-shadow:var(--vh-shadow-sm);
}
.vh-app .vh-nav-item.is-active:focus-visible,
.vh-app[data-presentation] .slide-link.is-current:focus-visible{
  outline:2px solid var(--vh-accent);outline-offset:-2px;
}
.vh-app .vh-nav-item--sub{margin-left:.9rem;font-size:.78rem}
.vh-app .slide-link-number{
  font-family:var(--vh-mono);font-size:.62rem;font-weight:600;
  letter-spacing:.08em;color:var(--vh-muted);
}
.vh-app .is-active .slide-link-number,
.vh-app [aria-current='page'] .slide-link-number{color:var(--vh-accent)}
.vh-app .slide-link-copy{display:block;min-width:0}
.vh-app .slide-link-copy strong{display:block;font-size:.8rem;font-weight:600;line-height:1.3}
.vh-app .slide-link-copy small{display:block;margin-top:2px;color:var(--vh-muted);font-size:.7rem;line-height:1.35}
/* deck slide list: number + title on one line, separated by | */
.vh-app[data-presentation] .slide-link{display:flex;align-items:center;gap:0}
.vh-app[data-presentation] .slide-link-number{flex:0 0 auto;display:inline-flex;align-items:center}
.vh-app[data-presentation] .slide-link-number::after{content:"|";margin:0 .55em;color:var(--vh-muted);font-weight:400}
.vh-app[data-presentation] .slide-link-copy{display:inline;min-width:0}
.vh-app[data-presentation] .slide-link-copy strong{display:inline;font-weight:600}

/* presentation mode: chrome collapses, stage takes over.
   shell.js toggles this class on real `fullscreenchange`; the deck's own
   toggleFullscreen() also falls back to it directly when the native
   Fullscreen API is unavailable (e.g. a nested editor preview iframe) —
   one class, one set of rules, for both cases. The fixed positioning
   below is a no-op in real fullscreen (the browser already fills the
   viewport) and is what makes the fallback case actually cover it. */
body.vh-present .vh-app[data-presentation]{position:fixed;inset:0;z-index:2147483000}
body.vh-present .vh-app .vh-sidebar,
body.vh-present .vh-app .vh-topbar{display:none}
body.vh-present .vh-app[data-presentation] .deck-app{grid-template-columns:minmax(0,1fr)}
/* Document shell (flyer/memo pages) needs the same collapse the deck grid
   already gets above: with the sidebar's grid item gone, an unclaimed
   264px track was left at the front of .vh-shell and the lone remaining
   child (.vh-content) auto-placed into it instead of the wide track —
   the page visually shrank to sidebar width instead of filling fullscreen. */
body.vh-present .vh-app .vh-shell{grid-template-columns:minmax(0,1fr)}
body.vh-present .vh-app{background:var(--vh-presentation-bg)}

/* ---------- launcher folders (file-browser root) ---------- */
.vh-app .vh-rootlist{display:grid;gap:.6rem;max-width:58rem}
.vh-app .vh-folder{
  background:var(--vh-surface);
  border:0;
  border-radius:var(--vh-radius);
  box-shadow:var(--vh-shadow-md);
  overflow:hidden;
}
.vh-app .vh-folder > summary{
  display:flex;align-items:center;gap:.75rem;
  padding:.85rem 1rem;cursor:pointer;list-style:none;
  font-weight:600;color:var(--vh-ink);
}
.vh-app .vh-folder > summary::-webkit-details-marker{display:none}
.vh-app .vh-folder > summary:hover{background:var(--vh-hover)}
.vh-app .vh-folder > summary:focus-visible{outline:2px solid var(--vh-accent);outline-offset:-2px}
.vh-app .vh-fi{width:24px;height:24px;flex:none}
/* Partner-facing areas are marked with a globe in the accent colour. */
.vh-app .vh-fi--globe{fill:none;stroke:var(--vh-accent);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}
/* Internal workspaces: the office-building mark. Panel-level headings carry
   the accent colour (as the partners globe does); the muted grey is kept
   for the folder icons nested under them. Stroke width is scaled to this
   icon set rather than carried over from the source drawing. */
.vh-app .vh-fi--internal{fill:none;stroke:var(--vh-accent);stroke-width:1.5;stroke-linejoin:round}
/* Recent Files and What's new: drawn on the same 24px grid and stroke
   weight as the internal mark above, so the heading icons read as one set. */
.vh-app .vh-fi--recent,.vh-app .vh-fi--news{fill:none;stroke:var(--vh-muted);stroke-width:1.5;stroke-linejoin:round}
.vh-app .vh-folder > summary:hover .vh-fi--recent,.vh-app .vh-folder > summary:hover .vh-fi--news{stroke:var(--vh-ink)}
.vh-app .vh-fi--folder{fill:var(--blast-bright)}
.vh-app .vh-fi--drive,.vh-app .vh-fi--users,.vh-app .vh-fi--admin{fill:none;stroke:var(--vh-muted);stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.vh-app .vh-folder-name{flex:0 0 auto}
.vh-app .vh-folder-meta,
.vh-app .vh-row-meta{
  margin-left:auto;
  font-family:var(--vh-mono);font-size:.62rem;letter-spacing:.08em;
  text-transform:uppercase;color:var(--vh-muted);white-space:nowrap;
}
.vh-app .vh-chevron{
  width:8px;height:8px;flex:none;margin-left:.35rem;
  border-right:2px solid var(--vh-muted);border-bottom:2px solid var(--vh-muted);
  transform:rotate(-45deg);transition:transform .14s ease;
}
.vh-app .vh-folder[open] .vh-chevron{transform:rotate(45deg)}
.vh-app .vh-folder-body{
  display:grid;gap:.7rem;
  padding:.4rem 1rem 1rem calc(1rem + 26px + .75rem);
  border-top:1px solid var(--vh-line-soft);
  background:var(--vh-bg);
}
@media(max-width:720px){.vh-app .vh-folder-body{padding-left:1rem}}
.vh-app .vh-row{
  display:flex;align-items:center;gap:.75rem;
  padding:.85rem 1rem;
  background:var(--vh-fill);
  border:0;
  border-radius:var(--vh-radius);
  box-shadow:none;
  color:var(--vh-ink);font-weight:600;font-size:.9rem;
}
.vh-app .vh-row[data-disabled]{opacity:.62}

/* link variant of system row + document icon */
.vh-app a.vh-row{text-decoration:none}
.vh-app a.vh-row:hover{background:var(--vh-fill-hover)}
.vh-app a.vh-row:focus-visible{outline:2px solid var(--vh-accent);outline-offset:2px}
.vh-app .vh-fi--doc{fill:none;stroke:var(--vh-muted);stroke-width:1.6}
.vh-app a.vh-row:hover .vh-fi--doc{stroke:var(--vh-ink)}

/* ---------- session user chip (placeholder identity) ---------- */
.vh-app .vh-user{
  display:flex;align-items:center;gap:.5rem;
  padding:.26rem .65rem .26rem .3rem;
  border:0;
  border-radius:999px;background:var(--vh-bg);
}
.vh-app .vh-avatar{
  width:22px;height:22px;border-radius:50%;flex:none;
  background:var(--vh-accent);color:var(--vh-on-accent);
  display:grid;place-items:center;
  font-size:.6rem;font-weight:700;letter-spacing:.02em;
}
.vh-app .vh-user-name{font-size:.76rem;font-weight:600;color:var(--vh-ink);white-space:nowrap}
@media(max-width:720px){.vh-app .vh-user-name{display:none}.vh-app .vh-user{padding:.26rem}}

/* ---------- session menu (placeholder logout) ---------- */
.vh-app .vh-user{position:relative;cursor:pointer}
.vh-app .vh-logout-menu{
  position:absolute;right:0;top:calc(100% + 6px);z-index:80;
  min-width:210px;padding:.4rem;
  background:var(--vh-surface);
  border:0;border-radius:var(--vh-radius-sm);
  box-shadow:var(--vh-shadow-pop);
}
.vh-app .vh-menu-item{
  display:flex;align-items:center;gap:.5rem;
  padding:.45rem .55rem;border-radius:var(--vh-radius-sm);
  font-size:.78rem;font-weight:600;color:var(--vh-ink);
}
.vh-app .vh-menu-item::before{content:'⏻';font-weight:400;color:var(--vh-muted)}
.vh-app .vh-menu-item.vh-disabled{opacity:.55;cursor:default}
.vh-app .vh-menu-item.vh-disabled:hover{background:transparent}
/* Visible sign-out next to the identity chip */
.vh-app .vh-logout-btn{margin-left:.35rem;white-space:nowrap}
.vh-app[data-presentation] .vh-logout-btn{display:none}
@media(max-width:720px){.vh-app .vh-logout-btn{font-size:0;gap:0;margin-left:.2rem}.vh-app .vh-logout-btn::before{content:'\23FB';font-size:.95rem;line-height:1}}
.vh-app .vh-menu-note{
  padding:.4rem .55rem .25rem;border-top:1px solid var(--vh-line-soft);margin-top:.25rem;
  font-family:var(--vh-mono);font-size:.58rem;letter-spacing:.06em;
  color:var(--vh-muted);line-height:1.5;
}

/* ---------- workspace panels, search, chips ---------- */
.vh-app .vh-panel{
  background:var(--vh-surface);
  border:0;
  border-radius:var(--vh-radius);
  box-shadow:var(--vh-shadow-md);
  padding:1rem 1.1rem;
  display:flex;flex-direction:column;gap:.55rem;
  min-width:0;
}
.vh-app .vh-panel-head{
  display:flex;align-items:center;justify-content:space-between;
  gap:.6rem;padding-bottom:.45rem;border-bottom:1px solid var(--vh-line-soft);
  min-width:0;
}
/* Heading row for a panel that has no <summary> to align its icon in:
   title sits next to the mark, not pushed to the far edge by
   space-between, and the gap matches a summary row so the heading lines
   up with the folder titles below it. */
.vh-app .vh-panel-head--icon{justify-content:flex-start;gap:.75rem}
.vh-app .vh-panel-title{
  /* The UA gives an h2 an asymmetric bottom margin, and a flex row centres
     the margin box — which is what pushed every panel heading off its icon. */
  margin:0;font-size:.8rem;font-weight:700;line-height:1.25;color:var(--vh-ink);
}
.vh-app .vh-panel-note{font-family:var(--vh-mono);font-size:.58rem;color:var(--vh-muted)}
.vh-app .vh-badge{
  display:inline-flex;align-items:center;
  padding:.18rem .55rem;border-radius:999px;
  font-family:var(--vh-mono);font-size:.56rem;font-weight:600;
  letter-spacing:.12em;text-transform:uppercase;
  color:var(--vh-muted);border:0;background:var(--vh-fill);
}
.vh-app .vh-search-field{position:relative;display:flex;align-items:center}
.vh-app .vh-search-field svg{
  position:absolute;left:.7rem;width:15px;height:15px;flex:none;
  fill:none;stroke:var(--vh-muted);stroke-width:2;stroke-linecap:round;
}
.vh-app .vh-search-field input{
  width:100%;padding:.52rem .7rem .52rem 2rem;
  border:0;border-radius:var(--vh-radius-sm);
  background:var(--vh-fill);color:var(--vh-ink);
  font-family:var(--vh-font);font-size:.84rem;
}
.vh-app .vh-search-field input::placeholder{color:var(--vh-placeholder)}
.vh-app .vh-search-field input:focus-visible{outline:2px solid var(--vh-accent);outline-offset:-1px;border-color:transparent}

/* folder used bare inside a panel (no double frame) */
.vh-app .vh-folder--bare{border:0;box-shadow:none;border-radius:0}
.vh-app .vh-folder--bare > summary{padding:.35rem 0 .6rem}
.vh-app .vh-folder--bare .vh-folder-body{
  border-top:0;background:transparent;
  padding:.2rem 0 0;
}

/* ---------- What's new digest rows ---------- */
.vh-app .wn-list{margin:0;padding:0;list-style:none;display:grid;gap:.45rem}
.vh-app .wn-list li{
  display:grid;gap:.05rem;
  padding:.5rem .65rem;
  border:0;
  border-radius:var(--vh-radius-sm);
  background:var(--vh-fill);
}
.vh-app .wn-title{font-weight:650;font-size:.82rem;color:var(--vh-ink)}
.vh-app .wn-text{font-size:.78rem;color:var(--vh-update-ink)}
.vh-app .wn-date{font-family:var(--vh-mono);font-size:.6rem;letter-spacing:.08em;text-transform:uppercase;color:var(--vh-muted)}

/* ---------- Recent files widget (dashboard) ---------- */
.vh-app .rf-status{margin:0 0 .5rem;font-size:.8rem;color:var(--vh-muted)}
.vh-app .rf-list{margin:0 0 .6rem;padding:0;list-style:none;display:grid;gap:.4rem}
.vh-app .rf-item{
  display:grid;grid-template-columns:minmax(0,1fr) auto auto auto;gap:.6rem;align-items:center;
  padding:.5rem .65rem;
  border:0;border-radius:var(--vh-radius-sm);
  background:var(--vh-fill);
  color:inherit;text-decoration:none;
}
.vh-app a.rf-item:hover{background:var(--vh-fill-hover)}
.vh-app a.rf-item:focus-visible{outline:2px solid var(--vh-accent);outline-offset:2px}
.vh-app .rf-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:650;font-size:.82rem;color:var(--vh-ink)}
.vh-app .rf-room{font-size:.68rem;color:var(--vh-muted);white-space:nowrap}
.vh-app .rf-type{
  font-family:var(--vh-mono);font-size:.58rem;font-weight:700;letter-spacing:.06em;
  color:var(--vh-muted);border:0;border-radius:6px;background:var(--vh-surface);padding:.1rem .35rem;white-space:nowrap;
}
.vh-app .rf-date{font-family:var(--vh-mono);font-size:.6rem;letter-spacing:.04em;color:var(--vh-muted);white-space:nowrap}
.vh-app .rf-demo-note{margin:0 0 .6rem;font-size:.66rem;color:var(--vh-muted);font-style:italic}
.vh-app .rf-all-btn{width:fit-content}
@media(max-width:520px){
  .vh-app .rf-item{grid-template-columns:minmax(0,1fr);row-gap:.2rem}
  .vh-app .rf-room,.vh-app .rf-type,.vh-app .rf-date{justify-self:start}
}

/* --- Energy workspace: surfaces aligned with the redesigned home --- */
.vh-app[data-project='energy']{font-family:var(--vh-font)}
.vh-app[data-project='energy'] .hub-shell{grid-template-columns:minmax(0,264px) minmax(0,1fr)}
.vh-app[data-project='energy'] .content-frame{max-width:none;padding:clamp(1rem,3vw,1.8rem) clamp(1rem,3vw,2rem)}
.vh-app[data-project='energy'] .section-panel,
.vh-app[data-project='energy'] .hero-panel{
  background:var(--vh-surface);
  border:0;
  border-radius:var(--vh-radius);
  box-shadow:var(--vh-shadow-md);
}
.vh-app[data-project='energy'] .section-label{
  font-family:var(--vh-mono);font-size:.62rem;font-weight:600;
  letter-spacing:.14em;text-transform:uppercase;color:var(--vh-muted);
}
.vh-app[data-project='energy'] .section-header h2,
.vh-app[data-project='energy'] .hero-panel h2{color:var(--vh-ink);letter-spacing:-.01em}
.vh-app[data-project='energy'] .section-note{color:var(--vh-muted);font-size:.8rem}
.vh-app[data-project='energy'] .info-card{
  background:var(--vh-bg);
  border:0;
  border-radius:var(--vh-radius-sm);
  box-shadow:none;
}
.vh-app[data-project='energy'] .hub-button{
  border:0;border-radius:var(--vh-radius-sm);
  background:var(--vh-surface);color:var(--vh-ink);
  font-weight:600;font-size:.78rem;
  box-shadow:none;
}
.vh-app[data-project='energy'] .hub-button:hover{background:var(--vh-hover)}
.vh-app[data-project='energy'] .hub-nav a{border-bottom-color:transparent;border-radius:var(--vh-radius-sm)}
.vh-app[data-project='energy'] .hub-nav a:hover{background:var(--vh-hover)}
.vh-app[data-project='energy'] .hub-nav a:focus-visible{outline:2px solid var(--vh-accent);outline-offset:-2px;background:var(--vh-surface)}
.vh-app[data-project='energy'] .document-item:hover{background:var(--vh-hover)}
.vh-app[data-project='energy'] .doc-type{font-family:var(--vh-mono);font-size:.62rem;letter-spacing:.06em}
.vh-app[data-project='energy'] .content-frame{width:100%;max-width:none}
.vh-app[data-project='energy'] .hero-panel h2{max-width:22ch}
.vh-app[data-project='energy'] .hero-copy{max-width:900px}

.vh-app[data-project='qs'] .vh-rootlist{max-width:none}

/* ---------- project Downloads: canonical vertical document list ---------- */
.vh-app .vh-project-downloads{
  margin-top:clamp(1rem,2.5vw,1.6rem);
  padding:clamp(1rem,2.5vw,1.5rem);
  border:0;
  border-radius:var(--vh-radius);
  background:var(--vh-surface);
  box-shadow:var(--vh-shadow-md);
}
.vh-app .vh-project-downloads-head{
  display:flex;align-items:flex-end;justify-content:space-between;gap:1rem;
  padding-bottom:.8rem;margin-bottom:.65rem;border-bottom:1px solid var(--vh-line-soft);
}
.vh-app .vh-project-downloads-head h2{margin:0;color:var(--vh-ink);font-family:var(--vh-font)}
.vh-app .vh-project-downloads-head>p{margin:0;max-width:34rem;color:var(--vh-muted);font-size:.76rem;text-align:right}
.vh-app .vh-project-downloads-label{
  margin:0 0 .18rem;font-family:var(--vh-mono);font-size:.58rem;font-weight:700;
  letter-spacing:.12em;text-transform:uppercase;color:var(--vh-muted);
}
.vh-app .vh-project-downloads-state{
  padding:.75rem 0;color:var(--vh-muted);font-size:.78rem;
}
.vh-app .vh-project-downloads-state.is-error{color:var(--vh-error)}
.vh-app .vh-project-downloads-list{list-style:none;margin:0;padding:0}
.vh-app .vh-project-download{
  display:grid;grid-template-columns:3rem minmax(0,1fr) auto;align-items:center;gap:.8rem;
  min-height:3.7rem;padding:.62rem 0;border-bottom:1px solid var(--vh-line-soft);
}
.vh-app .vh-project-download:last-child{border-bottom:0}
.vh-app .vh-project-download-type{
  display:grid;place-items:center;min-height:2rem;padding:.2rem;border:0;background:var(--vh-fill);
  border-radius:var(--vh-radius-sm);font-family:var(--vh-mono);font-size:.56rem;font-weight:700;
  letter-spacing:.05em;color:var(--vh-muted);background:var(--vh-bg);
}
.vh-app .vh-project-download-copy{display:flex;flex-direction:column;min-width:0;gap:.18rem}
.vh-app .vh-project-download-copy strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.8rem;color:var(--vh-ink)}
.vh-app .vh-project-download-copy span{font-family:var(--vh-mono);font-size:.6rem;color:var(--vh-muted)}
.vh-app .vh-project-download-action{text-decoration:none}
@media(max-width:620px){
  .vh-app .vh-project-downloads-head{align-items:flex-start;flex-direction:column}
  .vh-app .vh-project-downloads-head>p{text-align:left}
  .vh-app .vh-project-download{grid-template-columns:2.7rem minmax(0,1fr)}
  .vh-app .vh-project-download-action{grid-column:2;justify-self:start}
}

/* ---------- share menu ---------- */
.vh-app .vh-share-control{position:relative;display:inline-flex;align-items:center}
.vh-app .vh-share-btn[aria-expanded='true']{background:var(--vh-hover)}
.vh-app .vh-share-menu{
  position:absolute;top:calc(100% + 6px);right:0;z-index:85;
  width:min(300px,86vw);padding:.5rem;
  background:var(--vh-surface);
  border:0;border-radius:var(--vh-radius);
  box-shadow:var(--vh-shadow-pop);
}
.vh-app .vh-share-linkrow{
  display:flex;align-items:center;gap:.4rem;
  padding:.35rem;margin-bottom:.3rem;
  border:0;border-radius:var(--vh-radius-sm);background:var(--vh-fill);
  background:var(--vh-bg);
}
.vh-app .vh-share-url{
  flex:1;font-family:var(--vh-mono);font-size:.58rem;color:var(--vh-muted);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.vh-app .vh-copy{
  padding:.22rem .5rem;border:0;border-radius:var(--vh-radius-sm);background:var(--vh-surface);
  background:var(--vh-surface);color:var(--vh-ink);
  font-size:.62rem;font-weight:600;cursor:pointer;
}
.vh-app .vh-copy:hover{background:var(--vh-fill-hover)}
.vh-app .vh-copy:focus-visible{outline:2px solid var(--vh-accent);outline-offset:2px}
.vh-app .vh-share-row{
  display:flex;align-items:baseline;justify-content:space-between;gap:.6rem;
  padding:.42rem .35rem;
  border-bottom:1px solid var(--vh-line-soft);
  font-size:.76rem;
}
.vh-app .vh-share-row:last-of-type{border-bottom:0}
.vh-app .vh-role{font-weight:600;color:var(--vh-ink)}
.vh-app .vh-lvl{font-size:.66rem;color:var(--vh-muted)}

/* ---------- share menu: self-service client-access form ---------- */
.vh-app .vh-share-menu .vh-menu-note{
  padding:.3rem .35rem .5rem;margin:0;border-top:0;
  font-family:var(--vh-font);font-size:.72rem;line-height:1.45;
  color:var(--vh-muted);letter-spacing:normal;text-transform:none;
}
.vh-app .vh-share-menu a.vh-menu-item{text-decoration:none}
.vh-app .vh-share-status{margin:0;min-height:1.1em;font-size:.7rem;color:var(--vh-muted)}

/* Centered, scrollable Share dialog using the shared shell palette. */
body.vh-share-open{overflow:hidden}
.vh-app .vh-share-overlay{position:fixed;inset:0;z-index:120;display:grid;place-items:center;padding:clamp(12px,3vw,32px);background:var(--vh-overlay)}
.vh-app .vh-share-menu{position:static;top:auto;right:auto;width:min(760px,100%);max-height:min(88vh,900px);padding:0;display:flex;flex-direction:column;overflow:hidden;color:var(--vh-ink);font-family:var(--vh-font)}
.vh-app .vh-share-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:24px 28px 16px;border-bottom:1px solid var(--vh-line)}
.vh-app .vh-share-eyebrow{margin:0 0 5px;color:var(--vh-muted);font-size:.82rem;font-weight:600}
.vh-app .vh-share-head h2{margin:0;font-size:1.55rem;line-height:1.2}
.vh-app .vh-share-close{width:40px;height:40px;flex:none;border:0;border-radius:var(--vh-radius-sm);background:var(--vh-fill);color:var(--vh-ink);font:1.8rem/1 var(--vh-font);cursor:pointer}
.vh-app .vh-share-body{min-height:0;display:flex;flex-direction:column;overflow:hidden;padding:20px 28px 28px}
.vh-app .vh-share-intro{flex:none;margin:0 0 18px;font-size:1rem;line-height:1.5}
.vh-app .vh-share-tabs{display:flex;gap:4px;margin:0 0 18px;padding:4px;background:var(--vh-fill);border-radius:var(--vh-radius-sm)}
.vh-app .vh-share-tab{flex:1;min-height:40px;border:0;border-radius:calc(var(--vh-radius-sm) - 2px);background:transparent;color:var(--vh-muted);font:600 .9rem/1 var(--vh-font);cursor:pointer}
.vh-app .vh-share-tab[aria-selected="true"]{background:var(--vh-surface);color:var(--vh-ink);box-shadow:var(--vh-shadow-sm)}
.vh-app .vh-review-panel{display:flex;flex:1;flex-direction:column;min-height:0;overflow:auto;overscroll-behavior:contain}.vh-app .vh-review-panel>*{flex-shrink:0}.vh-app .vh-review-panel[hidden]{display:none}.vh-app .vh-review-panel>p{margin:.2rem 0 1rem;color:var(--vh-muted)}
.vh-app .vh-review-search{display:grid;gap:5px;margin-bottom:8px;font-size:.82rem;font-weight:600;color:var(--vh-muted)}
.vh-app .vh-review-search input{width:100%;min-height:40px;padding:8px 10px;border:1px solid var(--vh-line);border-radius:var(--vh-radius-sm);background:var(--vh-surface);color:var(--vh-ink);font:inherit}
.vh-app .vh-review-panel>.vh-review-count{margin:0 0 8px;font-size:.78rem}
.vh-app .vh-review-columns{display:flex;justify-content:space-between;padding:6px 12px;border:1px solid var(--vh-line);border-bottom:0;border-radius:var(--vh-radius-sm) var(--vh-radius-sm) 0 0;background:var(--vh-fill);color:var(--vh-muted);font-size:.72rem;font-weight:600}
.vh-app .vh-review-options{display:grid;align-content:start;gap:1px;min-height:0;overflow:visible;overscroll-behavior:contain;scrollbar-gutter:stable;border:1px solid var(--vh-line);border-radius:var(--vh-radius-sm)}
.vh-app .vh-review-row{min-width:0;border-radius:var(--vh-radius-sm);background:var(--vh-fill)}
.vh-app .vh-review-row:nth-child(odd){background:var(--vh-surface)}
.vh-app .vh-review-row>summary{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:48px;padding:10px 12px;cursor:pointer}
.vh-app .vh-review-row>summary strong{min-width:0;font-size:.9rem;overflow-wrap:anywhere}
.vh-app .vh-review-meta{flex:none;color:var(--vh-muted);font-size:.76rem;white-space:nowrap}
.vh-app .vh-review-detail{display:grid;gap:10px;padding:0 12px 12px}
.vh-app .vh-review-active{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:.82rem;overflow-wrap:anywhere}
.vh-app .vh-review-active .vh-btn{flex:none}
.vh-app .vh-review-grant-form{display:flex;flex-wrap:wrap;align-items:end;gap:8px;width:100%}
.vh-app .vh-review-grant-form label{display:grid;gap:4px;font-size:.78rem;color:var(--vh-muted)}
.vh-app .vh-review-grant-form input{min-height:42px;padding:8px 10px;border:1px solid var(--vh-line);border-radius:var(--vh-radius-sm);background:var(--vh-surface);color:var(--vh-ink);font:inherit}
.vh-app .vh-review-grant-form input[type="email"]{min-width:min(16rem,70vw)}
.vh-app .vh-review-grant-form textarea{width:100%;min-height:5.5rem;padding:8px 10px;border:1px solid var(--vh-line);border-radius:var(--vh-radius-sm);background:var(--vh-surface);color:var(--vh-ink);font:inherit;resize:vertical}
.vh-app .vh-share-results{width:100%;border-collapse:collapse;font-size:.82rem}
.vh-app .vh-share-results td{padding:4px 0;border-bottom:1px solid var(--vh-line);vertical-align:top}
.vh-app .vh-review-grant-form input[type="number"]{width:5.5rem}
.vh-app .vh-review-grant-form p{width:100%;margin:0}
.vh-app .vh-review-upload{display:grid;flex:none;gap:10px;margin:0 0 14px}
.vh-app .vh-review-upload>.vh-btn{justify-self:start;min-height:42px;padding:8px 14px;background:var(--vh-ink);color:var(--vh-on-ink)}
.vh-app .vh-review-upload-form{display:grid;gap:10px;padding:12px;border:1px solid var(--vh-line);border-radius:var(--vh-radius-sm);background:var(--vh-fill)}
.vh-app .vh-review-upload-form[hidden]{display:none}
.vh-app .vh-review-upload-form label{display:grid;gap:4px;font-size:.78rem;font-weight:600;color:var(--vh-muted)}
.vh-app .vh-review-upload-form label[hidden]{display:none}
.vh-app .vh-review-upload-form input,.vh-app .vh-review-upload-form select{min-height:42px;padding:8px 10px;border:1px solid var(--vh-line);border-radius:var(--vh-radius-sm);background:var(--vh-surface);color:var(--vh-ink);font:inherit}
.vh-app .vh-review-upload-mode{display:flex;flex-wrap:wrap;gap:12px;margin:0;padding:0;border:0}
.vh-app .vh-review-upload-mode label{display:flex;align-items:center;gap:6px;font-size:.9rem;color:var(--vh-ink)}
.vh-app .vh-review-drop{padding:10px;border:1px dashed var(--vh-line);border-radius:var(--vh-radius-sm);background:var(--vh-surface)}
.vh-app .vh-review-drop.is-over{background:var(--vh-accent-soft)}
.vh-app .vh-review-drop span{color:var(--vh-muted);font-weight:500}
.vh-app .vh-review-upload-form progress{width:100%;height:8px;accent-color:var(--vh-accent)}
.vh-app .vh-review-upload-form button[type="submit"]{justify-self:start;min-height:42px;padding:8px 14px;background:var(--vh-ink);color:var(--vh-on-ink)}
.vh-app .vh-review-upload-error,.vh-app .vh-review-upload-success{margin:0;font-size:.9rem}
.vh-app .vh-review-upload-success a{color:var(--vh-accent)}
.vh-app .vh-review-grant-form button[type="submit"]{min-height:42px;padding:8px 14px;background:var(--vh-ink);color:var(--vh-on-ink)}
.vh-app .vh-review-grant-form button[type="submit"]:hover{background:var(--vh-ink-hover)}
.vh-app .vh-review-active>.vh-btn{border:1px solid var(--vh-line);background:var(--vh-surface)}

.vh-app .vh-review-link{display:flex;align-items:center;flex-wrap:wrap;gap:8px;flex:1 0 100%;min-width:0}.vh-app .vh-review-link input{flex:1 1 260px;min-width:0;padding:9px;border:1px solid var(--vh-line);border-radius:var(--vh-radius-sm);font:inherit}.vh-app .vh-review-link a{color:var(--vh-accent)}
.vh-app .vh-share-status{font-size:.9rem;line-height:1.4}
.vh-app .vh-share-success h3{margin:0 0 8px;font-size:1.25rem}
.vh-app .vh-share-success p{font-size:1rem;line-height:1.5}
.vh-app .vh-share-linkrow{padding:10px 12px;gap:12px}
.vh-app .vh-share-url{font-size:.88rem}
.vh-app .vh-copy{min-height:40px;padding:8px 14px;font-size:.9rem}
.vh-app .vh-share-menu :focus-visible{outline:3px solid var(--vh-accent);outline-offset:2px}
@media(max-width:600px){
  .vh-app .vh-share-overlay{padding:8px}
  .vh-app .vh-share-menu{max-height:calc(100dvh - 16px)}
  .vh-app .vh-share-head{padding:18px 18px 14px}
  .vh-app .vh-share-body{padding:18px}
  .vh-app .vh-review-row>summary{align-items:flex-start;flex-direction:column;gap:2px}
}

/* ---------- sidebar polish: truncation + pinned sub-label + drive status ---------- */
.vh-app .vh-sidebar .vh-nav-item{
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.vh-app .vh-nav-item.vh-side-link{
  display:flex;flex-direction:column;align-items:flex-start;gap:1px;
}
.vh-app .vh-side-link span,
.vh-app .vh-side-link small,
.vh-app .vh-side-link .slide-link-copy{
  max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.vh-app .vh-side-link small{
  font-size:.62rem;font-weight:500;color:var(--vh-muted);letter-spacing:.02em;
}
.vh-app .vh-drive-status{
  display:flex;align-items:center;justify-content:space-between;gap:.5rem;
  padding:.5rem .6rem;
  border:0;border-radius:var(--vh-radius-sm);
  background:var(--vh-bg);
  font-size:.74rem;font-weight:600;color:var(--vh-ink);
}
.vh-app .vh-drive-status span{display:inline-flex;align-items:center;gap:.45rem;min-width:0;overflow:hidden;text-overflow:ellipsis}
.vh-app .vh-drive-status i{
  width:14px;height:12px;flex:none;display:inline-block;
  background:var(--vh-muted);
  -webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Crect x='3' y='4' width='18' height='7' rx='1.5'/%3E%3Crect x='3' y='13' width='18' height='7' rx='1.5'/%3E%3C/svg%3E") center/contain no-repeat;
          mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Crect x='3' y='4' width='18' height='7' rx='1.5'/%3E%3Crect x='3' y='13' width='18' height='7' rx='1.5'/%3E%3C/svg%3E") center/contain no-repeat;
}
.vh-app .vh-drive-status strong{
  font-family:var(--vh-mono);font-size:.54rem;font-weight:600;
  letter-spacing:.1em;text-transform:uppercase;color:var(--vh-muted);
}

/* ---- rule: partner-facing surfaces carry the top wash ----
   Every surface an external recipient can open gets the same soft
   #b7cbd9 highlight, fading out down the page. The rule is keyed on who
   the surface is for, never on which project it belongs to, so a new
   project room inherits it without another rule being written.

   Partner-facing means either of these:
     - a Holding surface explicitly marked data-area="partners"
     - a project room or project document (energy, qs and any project
       added later)

   Deliberately excluded: nothing — the wash marks who the surface is for;
   the dot grid underneath it is carried by every surface alike. The wash
   alphas are held low on purpose so the grid still reads through it. */
.vh-app[data-area='partners'] .vh-content,
.vh-app:not([data-project='holding']):is([data-artifact='data-room'], [data-artifact='document']) .vh-content{
  background-image:var(--vh-dot-grid),linear-gradient(180deg,
    rgba(var(--vh-partner-wash),.24) 0,
    rgba(var(--vh-partner-wash),.09) 220px,
    rgba(var(--vh-partner-wash),0) 460px);
  background-repeat:repeat,no-repeat;
  background-size:var(--vh-dot-grid-step) var(--vh-dot-grid-step),auto;
  background-attachment:local,local;
}
@media print{
  .vh-app[data-area='partners'] .vh-content,
  .vh-app:not([data-project='holding']):is([data-artifact='data-room'], [data-artifact='document']) .vh-content{background-image:none}
}

/* Approved 07 October 2026: themed deck chrome; immutable slide paper. */
@media screen {
html[data-theme="dark"] .vh-app[data-deck-theme]{
  --vh-bg:#1c1d20;
  --vh-surface:#25272b;
  --vh-fill:#2c2e33;
  --vh-fill-hover:#34363c;
  --vh-ink:#e4e5e7;
  --vh-muted:#9a9fa6;
  --vh-line:rgba(255,255,255,.08);
  --vh-line-soft:rgba(255,255,255,.05);
  --vh-accent:#7fa2e0;
  --vh-accent-soft:rgba(127,162,224,.16);
  --vh-hover:rgba(255,255,255,.05);
  --vh-partner-wash:52,62,72;
  --vh-depth-wash:58,61,66;
  --vh-shadow-sm:0 1px 2px rgba(0,0,0,.30);
  --vh-shadow-md:0 1px 2px rgba(0,0,0,.28),0 8px 24px rgba(0,0,0,.32);
  --vh-shadow-pop:0 12px 32px rgba(0,0,0,.45);
  --vh-nav-ink:#c9ccd1;
  --vh-on-ink:#1c1d20;
  --vh-ink-hover:#cfd1d4;
  --vh-notice-fill:#25272b;
  --vh-danger:#f08080;
  --vh-notice-backdrop:rgba(0,0,0,.55);
  --vh-body-ink:#b9bdc3;
  --vh-selection:rgba(127,162,224,.28);
  --vh-drawer-shadow:18px 0 44px rgba(0,0,0,.45);
  --vh-drawer-bg:#1c1d20;
  --vh-drawer-backdrop:rgba(0,0,0,.55);
  --vh-on-accent:#1c1d20;
  --vh-placeholder:#9a9fa6;
  --vh-update-ink:#b9bdc3;
  --vh-error:#eea28e;
  --vh-overlay:rgba(0,0,0,.6);
  color-scheme:dark;}
.vh-app[data-deck-theme] .slide-shell,.vh-app[data-deck-theme] .slide-frame{background:var(--vh-paper,#fff);color-scheme:light}
.vh-app[data-presentation][data-deck-theme] .vh-theme-btn{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;padding:0;color:var(--vh-muted);flex:none}
.vh-app .vh-theme-btn:hover{color:var(--vh-ink)}
.vh-app .vh-theme-btn svg{display:block}
body.vh-present .vh-app[data-deck-theme],body.vh-present .vh-app[data-deck-theme] .deck-app,body.vh-present .vh-app[data-deck-theme] .workspace,body.vh-present .vh-app[data-deck-theme] .stage{background:#000}
body.vh-present .nav-arrow,body.vh-present .progress{display:none!important}
}


/* Private client content retains its light palette; chrome continues to follow the theme.
   Low specificity preserves existing project content accents. */
:where(.vh-app[data-private-paper][data-project="energy"],.vh-app[data-private-paper][data-project="qs"]) .vh-content{
--vh-bg:#f2f2f7;
--vh-surface:#ffffff;
--vh-fill:#f5f5f7;
--vh-fill-hover:#ebebf0;
--vh-ink:#1d2127;
--vh-muted:#697077;
--vh-line:rgba(0,0,0,.07);
--vh-line-soft:rgba(0,0,0,.045);
--vh-accent:#2e5aac;
--vh-accent-soft:rgba(46,90,172,.12);
--vh-partner-wash:183,203,217;
--vh-depth-wash:168,175,184;
--vh-dot-grid:none;
--vh-dot-grid-step:13px;
--vh-hover:rgba(0,0,0,.045);
--vh-radius:14px;
--vh-radius-sm:10px;
--vh-shadow-sm:0 1px 2px rgba(16,24,32,.05);
--vh-shadow-md:0 1px 2px rgba(16,24,32,.04),0 8px 24px rgba(16,24,32,.06);
--vh-shadow-pop:0 12px 32px rgba(16,24,32,.14);
--vh-font:-apple-system,BlinkMacSystemFont,'SF Pro Text','Segoe UI',Roboto,Arial,sans-serif;
--vh-mono:ui-monospace,'SF Mono',SFMono-Regular,Menlo,Consolas,'Liberation Mono',monospace;
--vh-nav-ink:#33383f;
--vh-on-ink:#fff;
--vh-ink-hover:#343a42;
--vh-notice-fill:rgba(255,255,255,.94);
--vh-danger:#dd1f1f;
--vh-notice-backdrop:rgba(18,32,47,.42);
--vh-body-ink:#38414a;
--vh-selection:rgba(46,90,172,.22);
--vh-drawer-shadow:18px 0 44px rgba(16,24,32,.22);
--vh-drawer-bg:#f3f4f5;
--vh-drawer-backdrop:rgba(16,24,32,.42);
--vh-paper:#fff;
--vh-paper-ink:#1d2127;
--vh-paper-shadow:0 20px 60px rgba(15,47,74,.22),0 2px 7px rgba(15,47,74,.16);
--vh-presentation-bg:#101318;
--vh-on-accent:#fff;
--vh-placeholder:#9aa0a6;
--vh-update-ink:#3f454c;
--vh-error:#9c3d25;
--vh-overlay:rgba(20,28,38,.5);
 color-scheme:only light;
 color:var(--vh-paper-ink);
}

/* A closed private mobile drawer must not cast themed chrome shadow onto paper. */
@media (max-width:920px){
 body:not(.vh-drawer-open) .vh-app[data-private-paper] .vh-sidebar,
 body:not(.vh-drawer-open) .vh-app[data-private-paper] #vh-sidebar{box-shadow:none}
}
/* ---- rule: the intranet home carries the depth wash ----
   The partner wash in neutral grey, and carried further down the page: the
   launcher is panels from the top edge, so a short fade would only tint the
   strip above the first card. This one still reads in the gaps between
   panels, which is where the depth actually comes from. Keyed on the home
   content class, so the rest of the internal surfaces stay flat. */
.vh-app .vh-content.vh-home{
  background-image:var(--vh-dot-grid),linear-gradient(180deg,
    rgba(var(--vh-depth-wash),.20) 0,
    rgba(var(--vh-depth-wash),.10) 320px,
    rgba(var(--vh-depth-wash),.04) 700px,
    rgba(var(--vh-depth-wash),0) 1100px);
  background-repeat:repeat,no-repeat;
  background-size:var(--vh-dot-grid-step) var(--vh-dot-grid-step),auto;
  background-attachment:local,local;
}

/* ---- rule: every shell surface carries the dot grid ----
   The canvas texture is the system's, not one page's: any content area
   that does not paint a wash of its own still gets the lattice. Declared
   after the two wash rules and at the same specificity, so a surface that
   does carry a wash keeps its own two-layer declaration above. */
.vh-app .vh-content{
  background-image:var(--vh-dot-grid);
  background-repeat:repeat;
  background-size:var(--vh-dot-grid-step) var(--vh-dot-grid-step);
  background-attachment:local;
}
@media print{
  .vh-app .vh-content,
  .vh-app .vh-content.vh-home{background-image:none}
}

/* Direct PDF actions use a compact dialog without the material picker. */
.vh-app .vh-share-menu.vh-review-simple{width:min(440px,100%)}
.vh-app .vh-review-simple .vh-share-body{overflow:auto;gap:12px}
.vh-app .vh-review-simple .vh-review-grant-form{display:grid;grid-template-columns:1fr;align-items:stretch}
.vh-app .vh-review-simple .vh-review-grant-form input{width:100%;min-width:0}

/* User-menu theme choices share existing menu chrome. */
/* Theme button next to the session chip: icon-only shared button, cycles Auto/Light/Dark. */
.vh-app .vh-theme-btn{justify-content:center;width:30px;height:30px;padding:0;color:var(--vh-muted);flex:none}
.vh-app .vh-theme-btn:hover{color:var(--vh-ink)}
.vh-app .vh-theme-btn svg{display:block}
.vh-app[data-presentation] .vh-theme-btn{display:none}

html[data-theme="dark"] .vh-app:not([data-presentation]):not([data-artifact="deck"]) input::placeholder,html[data-theme="dark"] .vh-app:not([data-presentation]):not([data-artifact="deck"]) textarea::placeholder{color:var(--vh-placeholder);opacity:1}

html[data-theme="dark"] .vh-app:not([data-presentation]):not([data-artifact="deck"]) a:not([class]){color:var(--vh-accent)}

.vh-review-grant-form label.check{display:flex;align-items:center;gap:8px}
.vh-review-grant-form .check input[type=checkbox]{width:auto;margin:0;accent-color:var(--vh-accent)}

