/* Shared site chrome: loading screen, WhatsApp button, first-visit hint, toast.
   Loaded by index.html, studio.html, showroom.html, area.html (with site.js). */

/* ---------- loading screen (3D pages) ---------- */
#load{position:fixed;inset:0;z-index:30;display:grid;place-items:center;overflow:hidden;background:#efe9de;transition:opacity .5s;--img:url(img/hero.jpg)}
#load.hide{opacity:0;pointer-events:none}
#load::before{content:'';position:absolute;inset:-8px;background:var(--img) center/cover;filter:blur(3px) saturate(1.05)}
#load::after{content:'';position:absolute;inset:0;background:linear-gradient(180deg,rgba(20,18,14,.55),rgba(20,18,14,.72))}
#load .lbox{position:relative;z-index:1;display:grid;justify-items:center;gap:10px;text-align:center;padding:0 24px;color:#fff}
#load .e{font:800 10px/1 'Nunito',system-ui,sans-serif;letter-spacing:.18em;text-transform:uppercase;color:rgba(255,255,255,.75)}
#load b{font:400 clamp(26px,5vw,40px)/1.1 'Playfair Display',Georgia,serif}
#load .bar{width:170px;height:3px;border-radius:999px;background:rgba(255,255,255,.25);overflow:hidden}
#load .bar i{display:block;width:40%;height:100%;border-radius:999px;background:#ff700f;animation:klec-bar 1.2s ease-in-out infinite}
@keyframes klec-bar{0%{transform:translateX(-110%)}100%{transform:translateX(260%)}}
#load small{font:600 12px 'Nunito',system-ui,sans-serif;color:rgba(255,255,255,.8)}

/* ---------- floating enquiry button ---------- */
.klec-cta{position:fixed;z-index:12;right:calc(16px + env(safe-area-inset-right));bottom:calc(var(--bar,28px) + 16px);display:flex;align-items:center;gap:8px;height:48px;padding:0 18px 0 14px;border-radius:999px;background:#ff700f;color:#fff;font:800 14px 'Nunito',system-ui,sans-serif;text-decoration:none;box-shadow:0 8px 24px rgba(0,0,0,.22)}
.klec-cta svg{width:22px;height:22px;flex:none;fill:#fff}
body.walking .klec-cta,body.noui .klec-cta{display:none}
@media (max-width:760px),(max-height:520px){
  .klec-cta{height:44px;padding:0 16px 0 12px;font-size:13px;gap:6px}
  .klec-cta svg{width:20px;height:20px}
}

/* ---------- first-visit control hint ---------- */
.klec-hint{position:fixed;inset:0;z-index:28;display:grid;place-items:center;padding:20px;background:rgba(20,18,14,.55);backdrop-filter:blur(3px)}
.klec-hint .box{width:min(340px,100%);background:#FAF7F1;border:1px solid #E3DCCF;border-radius:18px;padding:18px 18px 16px;box-shadow:0 20px 50px rgba(0,0,0,.3);font-family:'Nunito',system-ui,sans-serif;color:#1C1C1A}
.klec-hint .e{font-size:10px;letter-spacing:.18em;text-transform:uppercase;color:#7C7A70;font-weight:800}
.klec-hint h3{font:400 24px 'Playfair Display',Georgia,serif;margin:6px 0 10px}
.klec-hint ul{margin:0;padding:0;list-style:none;display:grid;gap:8px;font-size:14px}
.klec-hint li{display:flex;gap:10px;align-items:flex-start}
.klec-hint li b{flex:none;min-width:74px;font-weight:800;color:#0b5b42}
.klec-hint button{margin-top:14px;width:100%;min-height:46px;border:0;border-radius:999px;background:#ff700f;color:#fff;font:800 15px 'Nunito',system-ui,sans-serif}

/* ---------- toast ---------- */
.klec-toast{position:fixed;z-index:40;left:50%;bottom:calc(var(--bar,28px) + 76px);transform:translate(-50%,8px);opacity:0;transition:.2s;background:rgba(28,28,26,.94);color:#fff;font:700 13px 'Nunito',system-ui,sans-serif;padding:10px 16px;border-radius:999px;pointer-events:none}
.klec-toast.show{opacity:1;transform:translate(-50%,0)}

/* ---------- language pill (EN · BM · 中文) ---------- */
.klec-lang{display:inline-flex;gap:2px;padding:3px;border-radius:999px;background:rgba(250,247,241,.92);border:1px solid #E3DCCF;backdrop-filter:blur(10px)}
.klec-lang button{font:800 12px/1 'Nunito','Noto Sans SC','PingFang SC',system-ui,sans-serif;padding:8px 10px;border:0;border-radius:999px;background:transparent;color:#7C7A70;cursor:pointer;touch-action:manipulation}
.klec-lang button.on{background:#0b5b42;color:#fff}
.klec-lang.fixed{position:fixed;z-index:7;top:14px;right:240px}            /* desktop 3D pages: left of the views panel */
body.walking .klec-lang.fixed,body.noui .klec-lang.fixed{display:none}
@media (max-width:760px),(max-height:520px){
  /* phones: the fixed pill collapses to one 42px chip showing the current language; tapping it cycles EN → BM → 中文 */
  .klec-lang.fixed{top:var(--top,8px);right:calc(56px + env(safe-area-inset-right));padding:0;background:transparent;border:0;backdrop-filter:none}
  .klec-lang.fixed button{display:none}
  .klec-lang.fixed button.on{display:grid;place-items:center;width:42px;height:42px;padding:0;font-size:12px;border:1px solid #0b5b42}
  body.has-lang header{right:calc(108px + env(safe-area-inset-right))}         /* title keeps its room beside the chip */
  /* phone: tooltip sits to the right of the Walk control, not over the 3D thumbnail */
  .klec-walk.right .tip{left:calc(100% + 30px);bottom:auto;top:50%;transform:translateY(-50%)}
  .klec-walk.right .tip::after{left:-7px;bottom:auto;top:calc(50% - 7px)}
}

/* ---------- walk-in click hint (once per device) ---------- */
.klec-walk{position:fixed;z-index:9;pointer-events:none}
.klec-walk .ring{position:absolute;left:50%;top:50%;width:72px;height:72px;margin:-36px 0 0 -36px;border-radius:50%;border:3px solid #ff700f;animation:klec-pulse 1.4s ease-out infinite}
.klec-walk .ring.r2{animation-delay:.5s}
@keyframes klec-pulse{0%{transform:scale(.45);opacity:1}100%{transform:scale(1.25);opacity:0}}
.klec-walk svg{position:absolute;left:50%;top:50%;width:34px;height:34px;margin:-6px 0 0 -2px;filter:drop-shadow(0 3px 6px rgba(0,0,0,.45));animation:klec-tap 1.4s ease-in-out infinite}
@keyframes klec-tap{0%,100%{transform:translate(0,0)}50%{transform:translate(-4px,-5px) scale(.94)}}
.klec-walk .tip{position:absolute;left:50%;bottom:calc(100% + 30px);transform:translateX(-30%);background:#0b5b42;color:#fff;font:800 14px 'Nunito','Noto Sans SC','PingFang SC',system-ui,sans-serif;padding:10px 14px;border-radius:12px;box-shadow:0 8px 22px rgba(0,0,0,.28);white-space:nowrap}
.klec-walk .tip::after{content:'';position:absolute;left:30%;bottom:-7px;width:14px;height:14px;background:#0b5b42;transform:rotate(45deg)}
.klec-walk.left .tip{left:auto;right:calc(100% + 26px);bottom:auto;top:50%;transform:translateY(-50%)}   /* desktop: tooltip to the left of the button */
.klec-walk.left .tip::after{left:auto;right:-7px;bottom:auto;top:calc(50% - 7px)}
.klec-walk.hide{opacity:0;transition:opacity .3s}

/* ---------- fixture-label password gate (staff only) ---------- */
.klec-gate{position:fixed;inset:0;z-index:30;display:grid;place-items:center;padding:20px;background:rgba(20,18,14,.55);backdrop-filter:blur(3px)}
.klec-gate form{width:min(340px,100%);background:#FAF7F1;border:1px solid #E3DCCF;border-radius:18px;padding:18px;box-shadow:0 20px 50px rgba(0,0,0,.3);font-family:'Nunito','Noto Sans SC','PingFang SC',system-ui,sans-serif;color:#1C1C1A}
.klec-gate .e{margin:0 0 12px;font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:#7C7A70;font-weight:800}
.klec-gate label{display:block;font-size:13px;font-weight:800}
.klec-gate input{display:block;width:100%;margin-top:6px;font:700 16px 'Nunito',system-ui,sans-serif;padding:12px 14px;border:1px solid #E3DCCF;border-radius:10px;background:#fff}
.klec-gate input:focus{outline:2px solid #0b5b42;outline-offset:1px}
.klec-gate .err{margin:10px 0 0;color:#a32d2d;font-size:13px;font-weight:700}
.klec-gate .row{display:flex;gap:8px;margin-top:14px}
.klec-gate button{flex:1;min-height:46px;border:0;border-radius:999px;font:800 15px 'Nunito','Noto Sans SC','PingFang SC',system-ui,sans-serif;cursor:pointer}
.klec-gate button[type=submit]{background:#ff700f;color:#fff}
.klec-gate button.x{background:transparent;border:1px solid #E3DCCF;color:#1C1C1A}
