/* hall.css — the 3D exhibition hall section on /ndt-exhibition/ (Hall.php + hall.js), 2026-09-13 */
.ndti-hall{--hall-bg:#0b1620;--hall-gold:#d9a521;--hall-green:#44A047;--hall-navy:#16242f;--hall-grey:#9aa7b3}
/* 2026-09-14 (owner): no hero and no stands line above the hall. The stage opens the page, full width, the whole screen height under the fixed header */
.ndti-hall{padding:0 0 8px}
#content > article:first-child .ndti-hall{padding-top:var(--bb-header-height,76px)}   /* designed pages (body.ndti-live) start under the fixed header; a Sponsor banner or site notice above has cleared it already */
.ndti-hall .ndti-wrap{max-width:1640px}
.ndti-hall__stage{position:relative;width:100%;height:calc(100vh - var(--bb-header-height,76px));height:calc(100svh - var(--bb-header-height,76px));min-height:360px;overflow:hidden;background:var(--hall-bg);outline:none;touch-action:pan-y;user-select:none;-webkit-user-select:none;scroll-margin-top:var(--bb-header-height,76px)}
.ndti-hall__stage:focus-visible{outline:3px solid var(--hall-green);outline-offset:-3px}
.ndti-hall__stage:fullscreen{height:100%;min-height:0}
/* title + booth colours over the 3D, top left: the page's h1 now that the hero is gone */
.ndti-hall__hud{position:absolute;left:16px;top:16px;z-index:3;max-width:calc(100% - 32px);box-sizing:border-box;background:rgba(11,22,32,.62);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border:1px solid rgba(255,255,255,.12);border-radius:16px;padding:13px 18px 12px;pointer-events:none;transition:opacity .3s ease}
.ndti-hall .ndti-hall__kicker{margin:0 0 3px;font-size:11.5px;line-height:1.3;letter-spacing:.14em;text-transform:uppercase;font-weight:700;color:#8fd694}
.ndti-hall .ndti-hall__title{margin:0;font-size:clamp(19px,1.8vw,26px);line-height:1.2;letter-spacing:-.015em;font-weight:800;color:#fff}
.ndti-hall .ndti-hall__legend{list-style:none;margin:9px 0 0;padding:0;display:flex;flex-wrap:wrap;gap:5px 14px;font-size:12.5px;line-height:1.3;color:#c9d5de;font-weight:600}
.ndti-hall__legend li{display:inline-flex;align-items:center;gap:6px;margin:0}
.ndti-hall__legend li b{color:#fff;font-weight:800}
.ndti-hall__legend i{width:12px;height:12px;border-radius:3px;background:var(--hall-navy);display:inline-block;box-sizing:border-box;border:1px solid rgba(255,255,255,.45)}
.ndti-hall__legend .is-sponsor i{background:var(--hall-gold);border-color:transparent}
.ndti-hall__legend .is-exhibitor i{background:var(--hall-green);border-color:transparent}
.ndti-hall__legend .is-free i{background:transparent;border:1px dashed #c9d5de}
.ndti-hall__stage canvas{display:block;width:100%;height:100%;opacity:0;transition:opacity .9s ease}
.ndti-hall__stage.is-ready canvas{opacity:1}
.ndti-hall__stage.is-hover canvas{cursor:pointer}
.ndti-hall__stage.is-drag canvas{cursor:grabbing}
.ndti-hall__poster{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:#dfe6ec;background:radial-gradient(120% 90% at 50% 100%,#1d4a2c 0%,#173026 38%,#0b1620 78%);transition:opacity .6s ease;z-index:2}
.ndti-hall__poster::before{content:"";position:absolute;inset:auto 0 0 0;height:42%;background:repeating-linear-gradient(90deg,rgba(255,255,255,.06) 0 2px,transparent 2px 64px),repeating-linear-gradient(0deg,rgba(255,255,255,.05) 0 2px,transparent 2px 40px);transform:perspective(600px) rotateX(58deg);transform-origin:bottom;opacity:.7}
.ndti-hall__poster-in{position:relative;display:flex;align-items:center;gap:12px;font-weight:700;font-size:15px;letter-spacing:.02em;background:rgba(11,22,32,.55);padding:12px 18px;border-radius:999px;backdrop-filter:blur(6px)}
.ndti-hall__spinner{width:18px;height:18px;border-radius:50%;border:2.5px solid rgba(255,255,255,.25);border-top-color:var(--hall-green);animation:ndti-hall-spin .9s linear infinite}
@keyframes ndti-hall-spin{to{transform:rotate(360deg)}}
.ndti-hall__stage.is-ready .ndti-hall__poster{opacity:0;pointer-events:none}
.ndti-hall__stage.is-failed .ndti-hall__poster-in{background:rgba(11,22,32,.75)}
.ndti-hall__stage.is-failed .ndti-hall__spinner{display:none}
.ndti-hall__ui{position:absolute;left:14px;bottom:14px;z-index:4;display:flex;align-items:center;gap:6px;flex-wrap:wrap;background:rgba(11,22,32,.62);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border:1px solid rgba(255,255,255,.12);border-radius:14px;padding:6px}
.ndti-hall__btn{appearance:none;border:0;background:transparent;color:#e6edf2;font:inherit;font-weight:700;font-size:13px;line-height:1;padding:9px 12px;border-radius:9px;cursor:pointer;transition:background .15s ease,color .15s ease;display:inline-flex;align-items:center;gap:6px}
.ndti-hall__btn:hover{background:rgba(255,255,255,.12)}
.ndti-hall__btn.is-on{background:var(--hall-green);color:#fff}
.ndti-hall__btn--ic{padding:8px 11px;font-size:17px;line-height:1}
.ndti-hall__sep{width:1px;height:20px;background:rgba(255,255,255,.18);margin:0 3px}
.ndti-hall__tip{position:absolute;z-index:5;pointer-events:none;background:rgba(11,22,32,.9);color:#fff;font-size:13px;font-weight:700;padding:7px 11px;border-radius:9px;transform:translate(-50%,calc(-100% - 14px));white-space:nowrap;box-shadow:0 8px 20px -8px rgba(0,0,0,.6)}
.ndti-hall__tip small{display:block;font-weight:600;opacity:.75;font-size:11px;margin-top:2px}
.ndti-hall__hint{position:absolute;right:16px;bottom:18px;z-index:3;margin:0;font-size:12px;color:rgba(230,237,242,.72);text-shadow:0 1px 2px rgba(0,0,0,.5);pointer-events:none}
.ndti-hall__hint kbd{font:inherit;font-weight:700;color:#fff;background:rgba(255,255,255,.16);border:0;border-radius:4px;padding:0 5px;box-shadow:none}
.ndti-hall__card{position:absolute;right:14px;top:14px;z-index:4;width:min(340px,calc(100% - 28px));background:rgba(255,255,255,.96);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border-radius:18px;padding:16px 16px 14px;box-shadow:0 18px 40px -18px rgba(11,22,32,.6);color:#0b1620;animation:ndti-hall-card .35s ease}
@keyframes ndti-hall-card{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:none}}
.ndti-hall__card-top{display:flex;gap:12px;align-items:center}
.ndti-hall__card-logo{width:56px;height:56px;border-radius:12px;background:#fff;border:1px solid #e3e9ee;object-fit:contain;padding:5px;box-sizing:border-box;flex:0 0 auto}
.ndti-hall__card-logo.is-plus{display:flex;align-items:center;justify-content:center;font-size:30px;font-weight:800;color:var(--hall-green);border-style:dashed}
.ndti-hall__card h3{margin:0;font-size:16.5px;line-height:1.25;font-weight:800;letter-spacing:-.01em}
.ndti-hall__card-meta{display:flex;flex-wrap:wrap;gap:6px;margin-top:5px;font-size:12px;color:#57697a;font-weight:600;align-items:center}
.ndti-hall__badge{display:inline-block;font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;font-weight:800;padding:3px 7px;border-radius:999px;background:var(--hall-navy);color:#fff}
.ndti-hall__badge.is-sponsor{background:var(--hall-gold);color:#1d1a12}
.ndti-hall__badge.is-exhibitor{background:var(--hall-green)}
.ndti-hall__card p{margin:10px 0 0;font-size:13.5px;line-height:1.5;color:#33475a}
.ndti-hall__card-act{display:flex;gap:8px;margin-top:12px;align-items:center}
.ndti-hall__card-act .ndti-btn{padding:10px 14px;font-size:13.5px;border-radius:9px}
.ndti-hall__card-x{appearance:none;border:0;background:#eef2f5;color:#33475a;width:32px;height:32px;border-radius:50%;font-size:16px;cursor:pointer;margin-left:auto;line-height:1}
.ndti-hall__chips{list-style:none;margin:16px 0 0;padding:6px 2px 10px;display:flex;gap:10px;overflow-x:auto;scroll-snap-type:x proximity;scrollbar-width:thin;-webkit-overflow-scrolling:touch}
.ndti-hall__chips li{flex:0 0 auto;scroll-snap-align:start}
.ndti-hall__chip{display:flex;align-items:center;gap:10px;padding:8px 14px 8px 8px;border-radius:14px;background:#fff;border:1px solid #e3e9ee;text-decoration:none;color:#0b1620;min-width:190px;max-width:260px;transition:transform .15s ease,box-shadow .15s ease,border-color .15s ease;position:relative}
.ndti-hall__chip::before{content:"";position:absolute;left:0;top:10px;bottom:10px;width:4px;border-radius:0 4px 4px 0;background:var(--hall-navy)}
.ndti-hall__chip.is-sponsor::before{background:var(--hall-gold)}
.ndti-hall__chip.is-exhibitor::before{background:var(--hall-green)}
.ndti-hall__chip.is-free{border-style:dashed}
.ndti-hall__chip.is-free::before{background:var(--hall-grey)}
.ndti-hall__chip img{width:40px;height:40px;border-radius:10px;object-fit:contain;background:#fff;border:1px solid #eef2f5;padding:3px;box-sizing:border-box;flex:0 0 auto}
.ndti-hall__plus{width:40px;height:40px;border-radius:10px;border:1px dashed var(--hall-grey);display:flex;align-items:center;justify-content:center;font-size:22px;font-weight:800;color:var(--hall-green);flex:0 0 auto}
.ndti-hall__chip span:not(.ndti-hall__plus){display:flex;flex-direction:column;min-width:0}
.ndti-hall__chip b{font-size:13.5px;font-weight:700;line-height:1.25;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ndti-hall__chip small{font-size:11.5px;color:#57697a;font-weight:600;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ndti-hall__chip:hover,.ndti-hall__chip:focus-visible{transform:translateY(-2px);box-shadow:0 10px 24px -12px rgba(11,22,32,.4);border-color:#cbd6de;outline:none}
.ndti-hall__chip.is-active{border-color:var(--hall-green);box-shadow:0 0 0 2px rgba(68,160,71,.25)}
@media (max-width:900px){.ndti-hall__stage:has(.ndti-hall__card:not([hidden])) .ndti-hall__hud{opacity:0}}   /* the stand card needs the top of narrow screens */
@media (max-width:760px){
  .ndti-hall__hud{left:10px;top:10px;max-width:calc(100% - 20px);padding:10px 13px 9px;border-radius:13px}
  .ndti-hall .ndti-hall__legend{gap:3px 10px;font-size:11.5px;margin-top:6px}
  .ndti-hall__hint{display:none}
  .ndti-hall__ui{left:10px;bottom:10px;right:10px;justify-content:center}
  .ndti-hall__btn{padding:9px 10px;font-size:12.5px}
  .ndti-hall__card{left:10px;right:10px;top:10px;width:auto;padding:12px}
  .ndti-hall__card p{display:none}
  .ndti-hall__chip{min-width:170px}
}
@media (prefers-reduced-motion:reduce){.ndti-hall__stage canvas{transition:none}.ndti-hall__card{animation:none}.ndti-hall__hud{transition:none}}

/* entering a stand: the fly-in overlay, and the cross-document transition into the stand page where the browser supports it */
.ndti-hall__enter{position:absolute;inset:0;z-index:6;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;background:radial-gradient(60% 60% at 50% 50%,rgba(68,160,71,.55),rgba(11,22,32,.97));opacity:0;transition:opacity .5s ease;pointer-events:none;color:#fff;font-weight:700;font-size:15px;letter-spacing:.01em}
.ndti-hall__enter.is-on{opacity:1}
.ndti-hall__enter img{width:132px;height:132px;border-radius:28px;background:#fff;object-fit:contain;padding:14px;box-sizing:border-box;transform:scale(.55);box-shadow:0 30px 60px -20px rgba(0,0,0,.7);transition:transform .9s cubic-bezier(.2,.8,.2,1)}
.ndti-hall__enter.is-on img{transform:scale(1)}
.ndti-hall__enter span{background:rgba(11,22,32,.55);padding:10px 16px;border-radius:999px}
@view-transition{navigation:auto}
::view-transition-old(root),::view-transition-new(root){animation-duration:.45s}
::view-transition-group(ndti-stage){animation-duration:.65s;animation-timing-function:cubic-bezier(.2,.8,.2,1)}
@media (prefers-reduced-motion:reduce){::view-transition-group(*),::view-transition-old(*),::view-transition-new(*){animation:none!important}}

/* live updates (hall.json polled while the page is open): a short toast when the hall rebuilt itself */
.ndti-hall__toast{position:absolute;left:50%;top:14px;z-index:6;transform:translate(-50%,-8px);background:rgba(11,22,32,.85);color:#fff;font-size:13px;font-weight:700;padding:9px 14px;border-radius:999px;opacity:0;transition:opacity .35s ease,transform .35s ease;pointer-events:none;backdrop-filter:blur(8px)}
.ndti-hall__toast.is-on{opacity:1;transform:translate(-50%,0)}
.ndti-hall__toast b{color:#8fd694}
