/* FERVOR VESTIGE — light grey geography, thin lavender frame, violet accents. */
:root{
  --paper:#f4f2f7; --white:#ffffff; --ink:#111114; --ink-soft:#5b5763;
  --lav:#c9b6e4; --violet:#6c3fa4; --violet-deep:#532d84; --route:#7a4fb0;
  --radius:26px; --shadow:0 10px 30px rgba(40,20,70,.12);
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
/* every sheet, overlay and fallback is display:grid, which outranks the UA [hidden] rule */
[hidden]{display:none!important}
html,body{height:100%;margin:0}
body{
  background:var(--paper); color:var(--ink);
  font:16px/1.35 -apple-system,BlinkMacSystemFont,"Segoe UI",Inter,system-ui,sans-serif;
  overscroll-behavior:none;
}
h1{font-size:24px;font-weight:600;letter-spacing:-.02em;margin:0}
h2{font-size:18px;font-weight:600;margin:0 0 12px}
h3{font-size:16px;font-weight:600;margin:0 0 6px}
p{margin:0 0 10px}
.tiny{font-size:12px;color:var(--ink-soft);line-height:1.4}

/* ───────── the door ───────── */
.gate{position:fixed;inset:0;display:grid;place-items:center;padding:20px;background:var(--paper);z-index:50}
.gate-card{
  width:min(420px,100%);background:var(--white);border:1.5px solid var(--lav);
  border-radius:var(--radius);padding:26px;box-shadow:var(--shadow)
}
.gate-mark{
  width:44px;height:44px;border-radius:14px;display:grid;place-items:center;
  background:linear-gradient(145deg,#efe7fb,#d9c8f2);color:var(--violet-deep);
  font-weight:700;letter-spacing:.06em;margin-bottom:16px
}
.gate-sub{color:var(--ink-soft);font-size:14px;margin:6px 0 20px}
label{display:block;font-size:12px;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-soft);margin:14px 0 6px}
input,textarea,select{
  width:100%;padding:13px 14px;border:1.5px solid #e6e1ee;border-radius:14px;
  background:#fbfaff;color:var(--ink);font:inherit;font-size:16px;outline:none
}
input:focus,textarea:focus,select:focus{border-color:var(--violet);background:#fff}
textarea{resize:vertical;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:13px}
.code-row{display:flex;gap:8px}
.code-row input{letter-spacing:.35em;font-variant-numeric:tabular-nums}
button{font:inherit;cursor:pointer;border:none;border-radius:14px}
.primary{width:100%;margin-top:16px;padding:14px;background:var(--violet);color:#fff;font-weight:600}
.primary:active{background:var(--violet-deep)}
.ghost{padding:13px 16px;background:#fff;border:1.5px solid var(--lav);color:var(--violet-deep);font-weight:600;white-space:nowrap}
.ghost.small{padding:9px 12px;font-size:13px}
.linkish{background:none;color:var(--violet);font-weight:600;padding:10px 0;text-decoration:underline}
.gate-msg{font-size:13px;color:var(--violet-deep);margin-top:14px;min-height:18px}

/* ───────── the stage ───────── */
.app{position:fixed;inset:0}
.frame{
  position:absolute;inset:env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);
  padding:8px;border:1.5px solid var(--lav);border-radius:30px;margin:6px
}
.stage{position:relative;width:100%;height:100%;border-radius:24px;overflow:hidden}
.stage{background:#eceaf0}
.map{position:absolute;inset:0;background:#eceaf0}
.camera{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;background:#000}
.camera-fallback{
  position:absolute;inset:0;display:grid;place-items:center;gap:10px;padding:24px;text-align:center;
  background:repeating-linear-gradient(45deg,#f7f5fa,#f7f5fa 12px,#f1eef6 12px,#f1eef6 24px);color:var(--ink-soft)
}
.view-btn{
  position:absolute;top:14px;left:14px;z-index:420;width:64px;height:64px;border-radius:50%;
  background:var(--violet);color:#fff;display:grid;place-items:center;gap:0;box-shadow:0 6px 18px rgba(84,45,132,.35);
  font-size:10px;font-weight:700;letter-spacing:.08em
}
.view-btn span{margin-top:-2px}
.mode-switch{
  position:absolute;top:16px;right:14px;z-index:420;display:flex;background:rgba(255,255,255,.94);
  border:1.5px solid var(--lav);border-radius:999px;padding:3px
}
.mode{padding:8px 14px;border-radius:999px;background:none;color:var(--ink-soft);font-size:13px;font-weight:600}
.mode.active{background:var(--violet);color:#fff}
.corner{
  position:absolute;bottom:112px;right:14px;z-index:420;width:40px;height:40px;border-radius:50%;
  background:rgba(255,255,255,.94);border:1.5px solid var(--lav);color:var(--violet-deep);font-size:16px
}
.compass{
  position:absolute;top:96px;left:18px;z-index:420;display:flex;flex-direction:column;align-items:center;
  gap:2px;font-size:11px;color:var(--violet-deep);background:rgba(255,255,255,.9);
  border:1.5px solid var(--lav);border-radius:12px;padding:6px 8px
}
#compass-needle{display:block;transition:transform .2s ease;font-size:14px}

/* bottom panel */
.panel{
  position:absolute;left:10px;right:10px;bottom:10px;z-index:420;background:rgba(255,255,255,.97);
  border:1.5px solid var(--lav);border-radius:22px;padding:14px 16px;display:flex;justify-content:space-between;
  align-items:center;gap:12px;box-shadow:var(--shadow)
}
.stop-counter{font-size:11px;letter-spacing:.12em;color:var(--violet);font-weight:700}
.dest-name{font-size:16px;font-weight:600;margin-top:3px;line-height:1.25}
.dest-meta{font-size:12px;color:var(--ink-soft);margin-top:3px}
.panel-right{text-align:right;flex-shrink:0}
.distance{font-size:20px;font-weight:600;font-variant-numeric:tabular-nums}
.bearing{font-size:11px;color:var(--ink-soft)}

/* arrival */
.arrival{
  position:absolute;left:12px;right:12px;bottom:104px;z-index:421;background:#fff;border:1.5px solid var(--lav);
  border-radius:20px;padding:16px;box-shadow:var(--shadow)
}
.arrival-q{font-size:13px;color:var(--ink-soft)}
.arrival-actions{display:flex;gap:10px;margin:12px 0 6px}
.arrival-actions .primary{width:auto;flex:1;margin:0}
.arrival-actions .ghost{flex:1}

/* sheets */
.sheet{position:fixed;inset:0;z-index:60;background:rgba(24,16,38,.35);display:grid;place-items:end center;padding:12px}
.sheet-card{
  width:min(520px,100%);max-height:88vh;overflow:auto;background:#fff;border:1.5px solid var(--lav);
  border-radius:24px;padding:20px;box-shadow:var(--shadow)
}
.sheet-actions{display:flex;gap:10px;margin-top:14px}
.sheet-actions .primary{width:auto;flex:1;margin:0}

.toast{
  position:absolute;left:50%;transform:translateX(-50%);bottom:190px;z-index:430;background:rgba(17,17,20,.92);
  color:#fff;font-size:13px;padding:10px 16px;border-radius:999px;opacity:0;transition:opacity .25s;pointer-events:none
}
.toast.show{opacity:1}

/* map furniture, recoloured to the reference */
.leaflet-container{background:#eceaf0;font-family:inherit}
.leaflet-control-attribution{font-size:9px;background:rgba(255,255,255,.7)!important;color:#8b8794}
.leaflet-bar{border:1.5px solid var(--lav)!important;border-radius:12px!important;overflow:hidden;box-shadow:none!important}
.leaflet-top.leaflet-left{margin-top:86px;margin-left:12px}
.leaflet-control-attribution{background:rgba(255,255,255,.82)!important}
.leaflet-bar a{color:var(--violet-deep)!important;background:#fff!important}
.marker-you{
  width:16px;height:16px;border-radius:50%;background:#111114;border:3px solid #fff;
  box-shadow:0 0 0 6px rgba(108,63,164,.16)
}
.marker-stop{
  width:26px;height:26px;border-radius:50%;background:var(--violet);color:#fff;display:grid;place-items:center;
  font-size:12px;font-weight:700;border:2px solid #fff;box-shadow:0 3px 10px rgba(84,45,132,.35)
}
.marker-stop.selected{background:var(--ink);transform:scale(1.12)}
