  @font-face{font-family:'Prompt';font-style:normal;font-weight:300;font-display:swap;src:url('fonts/Prompt-Light.woff2') format('woff2');}
  @font-face{font-family:'Prompt';font-style:normal;font-weight:400;font-display:swap;src:url('fonts/Prompt-Regular.woff2') format('woff2');}
  @font-face{font-family:'Prompt';font-style:normal;font-weight:500;font-display:swap;src:url('fonts/Prompt-Medium.woff2') format('woff2');}
  @font-face{font-family:'Prompt';font-style:normal;font-weight:600;font-display:swap;src:url('fonts/Prompt-SemiBold.woff2') format('woff2');}
  @font-face{font-family:'Prompt';font-style:normal;font-weight:700;font-display:swap;src:url('fonts/Prompt-Bold.woff2') format('woff2');}
  @font-face{font-family:'Prompt';font-style:normal;font-weight:800;font-display:swap;src:url('fonts/Prompt-ExtraBold.woff2') format('woff2');}

  :root{
    --bg:#0D0D0D;
    --bg-deep:#050505;
    --surface:#171717;
    --surface-2:#202020;
    --surface-3:#2B2B2B;
    --paper:#F6F1E4;
    --paper-dim:#EDE6D3;
    --ink:#182420;
    --ink-soft:#3C4B45;
    --gold:#E8A33D;
    --gold-dim:#B87F2C;
    --clay:#C1592B;
    --clay-dim:#9A461F;
    --leaf:#FFD84D;
    --leaf-dim:#D9A400;
    --muted:#B9B9B9;
    --line: rgba(246,241,228,0.14);
    --line-strong: rgba(246,241,228,0.26);
    --radius: 10px;
    --shadow: 0 10px 30px rgba(0,0,0,0.35);
    font-family:'Prompt','IBM Plex Mono',sans-serif;
  }
  *{box-sizing:border-box;}
  html,body{margin:0;padding:0;background:var(--bg);color:var(--paper);min-height:100vh;}
  body{
    background-image:
      radial-gradient(ellipse 900px 500px at 12% -10%, rgba(232,163,61,0.10), transparent 60%),
      radial-gradient(ellipse 700px 600px at 100% 10%, rgba(245,196,0,0.08), transparent 55%);
  }
  h1,h2,h3,.display{font-family:'Prompt',sans-serif;font-weight:600;letter-spacing:0.2px;}
  a{color:var(--gold);}
  button{font-family:inherit;cursor:pointer;}
  ::selection{background:var(--gold);color:var(--ink);}

  /* ---------- layout shell ---------- */
  .shell{max-width:1240px;margin:0 auto;padding:20px 20px 64px;}

  /* ---------- header ---------- */
  .topbar{
    display:flex;align-items:center;justify-content:space-between;gap:16px;
    padding:14px 4px 22px;flex-wrap:wrap;
  }
  .brand{display:flex;align-items:center;gap:12px;}
  .brand-mark{
    width:44px;height:44px;border-radius:50%;
    background:conic-gradient(from 210deg, var(--gold), var(--clay), var(--leaf), var(--gold));
    display:flex;align-items:center;justify-content:center;flex-shrink:0;
    box-shadow: inset 0 0 0 3px var(--bg-deep);
  }
  .brand-mark span{font-family:'Prompt',sans-serif;font-weight:600;font-size:15px;color:var(--ink);background:var(--paper);width:34px;height:34px;border-radius:50%;display:flex;align-items:center;justify-content:center;}
  .brand-text h1{font-size:22px;margin:0;line-height:1.1;color:var(--paper);}
  .brand-text p{margin:2px 0 0;font-size:12.5px;color:var(--muted);letter-spacing:0.3px;}
  .authbox{display:flex;align-items:center;gap:10px;}
  .pill-btn{
    border:1px solid var(--line-strong);background:transparent;color:var(--paper);
    padding:9px 16px;border-radius:999px;font-size:13.5px;font-weight:500;
    transition:all .15s ease;
  }
  .pill-btn:hover{border-color:var(--gold);color:var(--gold);}
  .pill-btn.solid{background:var(--gold);color:var(--ink);border-color:var(--gold);}
  .pill-btn.solid:hover{background:var(--gold-dim);border-color:var(--gold-dim);color:var(--ink);}
  .who{display:flex;align-items:center;gap:10px;font-size:13.5px;color:var(--muted);}
  .who b{color:var(--paper);font-weight:600;}

  /* ---------- campus switcher (bus-sign signature) ---------- */
  .route{
    display:flex;align-items:stretch;gap:0;margin:0 0 22px;
    border:1px solid var(--line);border-radius:14px;overflow:hidden;
    background:var(--surface);box-shadow:var(--shadow);
  }
  .flap{
    flex:1;padding:16px 20px;text-align:left;background:transparent;color:var(--muted);
    border:none;border-right:1px solid var(--line);position:relative;
    transition:background .18s ease, color .18s ease;
  }
  .flap:last-of-type{border-right:none;}
  .flap .tag{font-size:11px;letter-spacing:1.5px;text-transform:uppercase;font-family:'IBM Plex Mono',monospace;opacity:0.8;}
  .flap .name{display:block;font-family:'Prompt',sans-serif;font-size:19px;font-weight:600;margin-top:4px;color:inherit;}
  .flap .sub{display:block;font-size:11.5px;margin-top:3px;font-family:'IBM Plex Mono',monospace;opacity:0.75;}
  .flap.active{background:var(--surface-3);color:var(--paper);}
  .flap.active.kham{box-shadow:inset 4px 0 0 var(--leaf);}
  .flap.active.town{box-shadow:inset 4px 0 0 var(--clay);}
  .route-mid{
    width:120px;flex-shrink:0;display:flex;flex-direction:column;align-items:center;justify-content:center;
    background:var(--bg-deep);border-right:1px solid var(--line);border-left:1px solid var(--line);
    font-family:'IBM Plex Mono',monospace;color:var(--muted);padding:10px 6px;text-align:center;
  }
  .route-mid .km{font-size:16px;color:var(--gold);font-weight:500;}
  .route-mid .lbl{font-size:9.5px;letter-spacing:1px;text-transform:uppercase;margin-top:2px;}
  .route-mid .line{width:70%;height:1px;background:repeating-linear-gradient(90deg,var(--line-strong) 0 6px,transparent 6px 12px);margin:6px 0;}

  /* ---------- main grid ---------- */
  .grid{display:grid;grid-template-columns:1.55fr 1fr;gap:20px;align-items:start;}
  @media (max-width:900px){.grid{grid-template-columns:1fr;}}

  .card{
    background:var(--surface);border:1px solid var(--line);border-radius:14px;
    box-shadow:var(--shadow);overflow:hidden;
  }
  .card-pad{padding:18px 20px;}
  .card h2{font-size:16px;margin:0 0 4px;color:var(--paper);}
  .card .hint{font-size:12.5px;color:var(--muted);margin:0;}

  #map{height:520px;width:100%;background:var(--surface-2);}
  .map-caption{
    display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;
    padding:12px 18px;font-size:12px;color:var(--muted);border-top:1px solid var(--line);
    font-family:'IBM Plex Mono',monospace;
  }
  .map-caption .coord{color:var(--leaf);}
  .link-quiet{font-size:12px;color:var(--gold);text-decoration:none;border-bottom:1px dotted var(--gold-dim);}

  /* fact card */
  .facts{list-style:none;margin:14px 0 0;padding:0;display:grid;gap:10px;}
  .facts li{display:flex;justify-content:space-between;gap:10px;font-size:13px;padding:9px 0;border-top:1px solid var(--line);}
  .facts li:first-child{border-top:none;}
  .facts .k{color:var(--muted);}
  .facts .v{color:var(--paper);text-align:right;font-weight:500;}

  /* pin list */
  .pinlist{list-style:none;margin:12px 0 0;padding:0;max-height:230px;overflow-y:auto;}
  .pinlist li{
    display:flex;align-items:center;gap:10px;padding:10px 8px;border-radius:8px;cursor:pointer;
    border:1px solid transparent;
  }
  .pinlist li:hover{background:var(--surface-2);border-color:var(--line);}
  .pinlist .dot{width:10px;height:10px;border-radius:50%;flex-shrink:0;}
  .pinlist .meta{flex:1;min-width:0;}
  .pinlist .meta .n{font-size:13.5px;color:var(--paper);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;}
  .pinlist .meta .c{font-size:11px;color:var(--muted);}
  .pinlist .stars{font-size:11px;color:var(--gold);font-family:'IBM Plex Mono',monospace;flex-shrink:0;}
  .empty-note{padding:16px 8px;font-size:13px;color:var(--muted);line-height:1.6;}

  .addrow{margin-top:14px;padding-top:14px;border-top:1px solid var(--line);}
  select,input[type=text],input[type=password],textarea{
    width:100%;background:var(--bg-deep);border:1px solid var(--line-strong);color:var(--paper);
    padding:10px 12px;border-radius:8px;font-size:13.5px;font-family:inherit;
  }
  select:focus,input:focus,textarea:focus{outline:none;border-color:var(--gold);}
  label{font-size:12px;color:var(--muted);display:block;margin:10px 0 5px;}
  label:first-child{margin-top:0;}

  /* legend */
  .legend{display:flex;flex-wrap:wrap;gap:8px 14px;margin-top:12px;}
  .legend span{display:flex;align-items:center;gap:6px;font-size:11.5px;color:var(--muted);}
  .legend .dot{width:9px;height:9px;border-radius:50%;}

  /* modal */
  .overlay{
    position:fixed;inset:0;background:rgba(10,20,17,0.72);backdrop-filter: blur(2px);
    display:none;align-items:flex-start;justify-content:center;z-index:1000;padding:40px 16px;overflow-y:auto;
  }
  .overlay.show{display:flex;}
  .modal{
    background:var(--paper);color:var(--ink);border-radius:14px;max-width:560px;width:100%;
    box-shadow:0 30px 70px rgba(0,0,0,0.5);overflow:hidden;margin-bottom:40px;
  }
  .modal-head{
    padding:20px 22px;border-bottom:1px solid rgba(0,0,0,0.08);display:flex;justify-content:space-between;align-items:flex-start;gap:12px;
    background:var(--paper-dim);
  }
  .modal-head h3{margin:0 0 4px;font-size:19px;color:var(--ink);}
  .modal-head .tagline{font-size:12px;color:var(--ink-soft);font-family:'IBM Plex Mono',monospace;}
  .modal-close{background:none;border:none;font-size:20px;color:var(--ink-soft);line-height:1;padding:4px;}
  .modal-close:hover{color:var(--clay);}
  .modal-body{padding:20px 22px;}
  .modal-body label{color:var(--ink-soft);}
  .modal-body select,.modal-body input,.modal-body textarea{
    background:#fff;border:1px solid rgba(0,0,0,0.15);color:var(--ink);
  }
  .modal-body input:focus,.modal-body textarea:focus,.modal-body select:focus{border-color:var(--clay);}
  .modal-note{font-size:11.5px;color:var(--ink-soft);margin-top:12px;line-height:1.6;padding:10px 12px;background:rgba(193,89,43,0.08);border-radius:8px;border-left:3px solid var(--clay);}
  .btn-primary{
    width:100%;margin-top:16px;padding:11px;border:none;border-radius:8px;
    background:var(--clay);color:#fff;font-weight:600;font-size:14px;
  }
  .btn-primary:hover{background:var(--clay-dim);}
  .switch-line{margin-top:14px;font-size:12.5px;color:var(--ink-soft);text-align:center;}
  .switch-line a{color:var(--clay);cursor:pointer;text-decoration:underline;}
  .err-line{font-size:12.5px;color:#a3271f;margin-top:8px;min-height:1em;}

  /* pin detail modal */
  .rating-big{display:flex;align-items:baseline;gap:8px;margin-bottom:2px;}
  .rating-big .num{font-family:'Prompt',sans-serif;font-size:34px;font-weight:600;color:var(--ink);}
  .rating-big .stars-lg{color:var(--gold-dim);font-size:16px;letter-spacing:1px;}
  .rating-big .count{font-size:12px;color:var(--ink-soft);}
  .cat-badge{display:inline-block;font-size:10.5px;padding:3px 9px;border-radius:999px;font-weight:600;letter-spacing:0.3px;margin-top:8px;}
  .coord-line{font-family:'IBM Plex Mono',monospace;font-size:11.5px;color:var(--ink-soft);margin-top:6px;}

  .review{padding:14px 0;border-top:1px solid rgba(0,0,0,0.09);}
  .review:first-child{border-top:none;}
  .review-top{display:flex;justify-content:space-between;align-items:center;gap:8px;}
  .review-top .u{font-size:13px;font-weight:600;color:var(--ink);cursor:pointer;}
  .review-top .u:hover{text-decoration:underline;color:var(--clay);}
  .u-link{cursor:pointer;}
  .who .u-link:hover{color:var(--gold);text-decoration:underline;}
  .profile-meta{font-size:12.5px;color:var(--ink-soft);margin-top:2px;}
  .profile-stat{font-size:12.5px;color:var(--ink-soft);margin:10px 0 4px;}
  .review-stars{color:var(--gold-dim);font-size:12.5px;letter-spacing:1px;}
  .review-date{font-size:11px;color:var(--ink-soft);font-family:'IBM Plex Mono',monospace;}
  .review-text{font-size:13.5px;color:var(--ink);margin:6px 0 8px;line-height:1.6;}
  .helpful-btn{
    background:none;border:1px solid rgba(0,0,0,0.15);border-radius:999px;padding:4px 11px;
    font-size:11.5px;color:var(--ink-soft);
  }
  .helpful-btn.on{background:rgba(124,174,142,0.18);border-color:var(--leaf-dim);color:#2c5a41;font-weight:600;}
  .review-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:8px}.review-delete-btn{border:1px solid rgba(163,39,31,.28);background:#fff5f3;color:#a3271f;border-radius:999px;padding:4px 11px;font-size:11.5px;font-weight:700}.review-delete-btn:hover{background:#a3271f;color:#fff}
  .review-form{margin-top:16px;padding-top:16px;border-top:2px solid rgba(0,0,0,0.08);}
  .star-pick{display:flex;gap:4px;font-size:24px;margin:4px 0 2px;}
  .star-pick span{cursor:pointer;color:#d8d2be;transition:color .1s;}
  .star-pick span.active{color:var(--gold-dim);}
  textarea{resize:vertical;min-height:64px;}

  .footer-note{margin-top:26px;font-size:12px;color:var(--muted);line-height:1.7;text-align:center;}
  .footer-note a{color:var(--gold-dim);}

  .leaflet-popup-content-wrapper{background:var(--paper);color:var(--ink);border-radius:8px;}
  .leaflet-popup-tip{background:var(--paper);}
  .leaflet-popup-content{font-family:'Prompt',sans-serif;font-size:13px;margin:10px 12px;}
  .leaflet-popup-content b{font-family:'Prompt',sans-serif;}
  .pin-icon{
    width:24px;height:24px;border-radius:50% 50% 50% 0;transform:rotate(-45deg);
    border:2px solid var(--paper);box-shadow:0 2px 6px rgba(0,0,0,0.4);
  }
  .pin-icon.new-pick{
    width:26px;height:26px;border-radius:50%;border:2px dashed var(--gold);background:transparent!important;
  }

  /* ---------- avatars ---------- */
  .avatar{border-radius:50%;object-fit:cover;flex-shrink:0;background:var(--surface-3);display:inline-flex;align-items:center;justify-content:center;color:var(--paper);font-family:'Prompt',sans-serif;font-weight:600;overflow:hidden;}
  .avatar-sm{width:26px;height:26px;font-size:11px;}
  .avatar-lg{width:56px;height:56px;font-size:20px;}
  .avatar-xl{width:78px;height:78px;font-size:26px;}
  .avatar img{width:100%;height:100%;object-fit:cover;}
  .who{display:flex;align-items:center;gap:8px;font-size:13.5px;color:var(--muted);}
  .avatar-pick{display:flex;align-items:center;gap:14px;margin:4px 0 2px;}
  .avatar-pick label.file-btn{
    display:inline-block;width:auto;margin:0;padding:8px 14px;border-radius:8px;
    background:rgba(0,0,0,0.06);border:1px solid rgba(0,0,0,0.15);color:var(--ink-soft);
    font-size:12.5px;cursor:pointer;
  }
  .avatar-pick label.file-btn:hover{border-color:var(--clay);color:var(--clay);}
  .profile-view-head{display:flex;align-items:center;gap:14px;}

  /* ---------- contact/admin floating launcher ---------- */
  .contact-fab{
    position:fixed;right:22px;bottom:22px;z-index:900;
    background:var(--gold);color:var(--ink);border:none;border-radius:999px;
    padding:13px 20px;font-size:13.5px;font-weight:600;box-shadow:0 8px 24px rgba(0,0,0,0.4);
    display:flex;align-items:center;gap:8px;
  }
  .contact-fab:hover{background:var(--gold-dim);}
  .contact-fab .dot-badge{
    display:none;width:8px;height:8px;border-radius:50%;background:var(--clay);
    box-shadow:0 0 0 2px var(--ink);
  }
  .contact-fab.has-admin .dot-badge{display:inline-block;}

  /* ---------- chat panel ---------- */
  .chat-panel{
    position:fixed;right:22px;bottom:88px;z-index:900;width:340px;max-width:calc(100vw - 32px);
    background:var(--paper);color:var(--ink);border-radius:14px;box-shadow:0 24px 60px rgba(0,0,0,0.45);
    display:none;flex-direction:column;max-height:70vh;overflow:hidden;
  }
  .chat-panel.show{display:flex;}
  .chat-head{padding:14px 16px;background:var(--surface);color:var(--paper);display:flex;justify-content:space-between;align-items:center;flex-shrink:0;}
  .chat-head h4{margin:0;font-size:14.5px;font-family:'Prompt',sans-serif;}
  .chat-head p{margin:2px 0 0;font-size:11px;color:var(--muted);}
  .chat-body{padding:14px 16px;overflow-y:auto;flex:1;display:flex;flex-direction:column;gap:10px;}
  .chat-bubble{max-width:88%;padding:9px 12px;border-radius:12px;font-size:13px;line-height:1.55;}
  .chat-bubble.bot{background:var(--paper-dim);align-self:flex-start;border-bottom-left-radius:3px;}
  .chat-bubble.me{background:var(--clay);color:#fff;align-self:flex-end;border-bottom-right-radius:3px;}
  .chat-chips{display:flex;flex-direction:column;gap:6px;align-self:stretch;}
  .chat-chip{
    text-align:left;background:#fff;border:1px solid rgba(0,0,0,0.15);border-radius:9px;
    padding:8px 11px;font-size:12.5px;color:var(--ink);
  }
  .chat-chip:hover{border-color:var(--clay);color:var(--clay);}
  .chat-foot{padding:12px 16px;border-top:1px solid rgba(0,0,0,0.08);flex-shrink:0;background:var(--paper-dim);}
  .chat-foot textarea{min-height:44px;font-size:12.5px;}
  .chat-foot .btn-primary{margin-top:8px;}
  .chat-foot .hint{margin:0 0 6px;font-size:11px;color:var(--ink-soft);}
  .chat-link-reset{background:none;border:none;font-size:11.5px;color:var(--clay);text-decoration:underline;cursor:pointer;padding:0;margin-top:4px;align-self:flex-start;}

  /* ---------- admin panel ---------- */
  .admin-tabs{display:flex;gap:8px;margin-bottom:14px;}
  .admin-tab{flex:1;padding:8px;border-radius:8px;border:1px solid rgba(0,0,0,0.15);background:#fff;font-size:12.5px;color:var(--ink-soft);}
  .admin-tab.active{background:var(--clay);border-color:var(--clay);color:#fff;font-weight:600;}
  .inbox-item{border:1px solid rgba(0,0,0,0.12);border-radius:10px;padding:11px 13px;margin-bottom:10px;}
  .inbox-item .top{display:flex;justify-content:space-between;gap:8px;font-size:11px;color:var(--ink-soft);font-family:'IBM Plex Mono',monospace;}
  .inbox-item .msg{font-size:13px;margin:7px 0;line-height:1.55;}
  .status-pill{font-size:10.5px;padding:2px 8px;border-radius:999px;font-weight:600;letter-spacing:0.3px;}
  .status-pill.new{background:rgba(193,89,43,0.15);color:var(--clay);}
  .status-pill.read{background:rgba(184,127,44,0.15);color:var(--gold-dim);}
  .status-pill.resolved{background:rgba(90,138,109,0.18);color:var(--leaf-dim);}
  .inbox-actions{display:flex;gap:8px;margin-top:6px;}
  .inbox-actions button{flex:none;width:auto;margin:0;padding:5px 10px;font-size:11.5px;border-radius:6px;border:1px solid rgba(0,0,0,0.15);background:#fff;color:var(--ink-soft);}
  .inbox-actions button:hover{border-color:var(--clay);color:var(--clay);}
  .admin-note{font-size:11.5px;color:var(--ink-soft);}
  .user-row{display:flex;align-items:center;gap:10px;padding:8px 0;border-top:1px solid rgba(0,0,0,0.08);font-size:12.5px;}
  .user-row:first-child{border-top:none;}
  .user-row .n{flex:1;}
  .admin-badge{font-size:9.5px;background:var(--gold);color:var(--ink);padding:1px 6px;border-radius:999px;font-weight:700;}

  /* ---------- admin pin management ---------- */
  .admin-pin-actions{display:none;gap:10px;margin:14px 0 4px;padding:12px;background:rgba(193,89,43,.08);border:1px solid rgba(193,89,43,.18);border-radius:10px;}
  .admin-pin-actions.show{display:flex;}
  .admin-pin-actions button{flex:1;margin:0;padding:9px 10px;border-radius:8px;font-size:12.5px;font-weight:600;}
  .btn-edit-pin{background:#fff;border:1px solid rgba(0,0,0,.18);color:var(--ink);}
  .btn-edit-pin:hover{border-color:var(--gold-dim);color:var(--gold-dim);}
  .btn-delete-pin{background:var(--clay);border:1px solid var(--clay);color:#fff;}
  .btn-delete-pin:hover{background:var(--clay-dim);border-color:var(--clay-dim);}
  .coord-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;}
  .map-pick-admin{width:100%;margin-top:10px;padding:9px;border:1px dashed rgba(0,0,0,.25);background:#fff;border-radius:8px;color:var(--ink-soft);font-size:12.5px;}
  .map-pick-admin.active{border-color:var(--clay);color:var(--clay);background:rgba(193,89,43,.06);}

  /* ---------- pin approval workflow ---------- */
  .pin-status-card{border:1px solid rgba(0,0,0,.12);border-radius:10px;padding:12px 14px;margin-bottom:10px;background:#fff;}
  .pin-status-head{display:flex;justify-content:space-between;gap:10px;align-items:flex-start;}
  .pin-status-title{font-weight:700;font-size:13.5px;color:var(--ink);}
  .pin-status-meta{font-size:11.5px;color:var(--ink-soft);margin-top:4px;line-height:1.55;}
  .pin-status-reason{margin-top:8px;padding:8px 10px;border-radius:8px;background:rgba(193,89,43,.08);font-size:12px;color:var(--clay-dim);}
  .status-pill.pending{background:rgba(232,163,61,.18);color:#8a5b12;}
  .status-pill.approved{background:rgba(90,138,109,.18);color:#386849;}
  .status-pill.rejected{background:rgba(193,89,43,.16);color:#9a461f;}
  .admin-pin-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px;}
  .admin-pin-actions button{padding:6px 10px;border-radius:7px;border:1px solid rgba(0,0,0,.15);background:#fff;font-size:11.5px;}
  .admin-pin-actions .approve{background:#47785a;color:#fff;border-color:#47785a;}
  .admin-pin-actions .reject{background:var(--clay);color:#fff;border-color:var(--clay);}


  /* ---------- mobile floating add-pin button ---------- */
  .mobile-add-pin-fab{
    position:fixed;right:18px;bottom:84px;z-index:905;
    display:none;align-items:center;justify-content:center;gap:8px;
    min-height:50px;padding:12px 17px;border:none;border-radius:999px;
    background:var(--gold);color:var(--ink);font-size:14px;font-weight:700;
    box-shadow:0 8px 24px rgba(0,0,0,0.42);
    transition:transform .16s ease,background .16s ease,opacity .16s ease;
  }
  .mobile-add-pin-fab:hover{background:var(--gold-dim);transform:translateY(-2px);}
  .mobile-add-pin-fab:active{transform:translateY(0) scale(.98);}
  .mobile-add-pin-fab:disabled{opacity:.8;cursor:default;transform:none;}
  .mobile-add-pin-fab.is-picking{background:var(--clay);color:#fff;}

  @media (max-width:768px){
    #addPinBtn{display:none;}
    .mobile-add-pin-fab{display:flex;}
    .contact-fab{right:18px;bottom:18px;padding:12px 16px;}
    .chat-panel{right:16px;bottom:78px;max-height:72vh;}
  }

  @media (max-width:420px){
    .mobile-add-pin-fab{right:14px;bottom:78px;min-height:46px;padding:11px 14px;font-size:13px;}
    .contact-fab{right:14px;bottom:14px;min-height:46px;padding:11px 14px;font-size:13px;}
  }

  /* ---------- v4 discovery tools ---------- */
  body.light-mode{
    --bg:#FFFDF5;--bg-deep:#FFF7D6;--surface:#FFFFFF;--surface-2:#FFF9E8;--surface-3:#FFEAA3;
    --paper:#17211D;--paper-dim:#FFF3C4;--ink:#17211D;--ink-soft:#53605A;--muted:#6D756F;
    --gold:#F5C400;--gold-dim:#D7A900;--clay:#D39A00;--clay-dim:#A97800;--leaf:#7C8A83;--leaf-dim:#56645E;
    --line:rgba(45,38,0,.11);--line-strong:rgba(45,38,0,.22);--shadow:0 12px 32px rgba(91,72,0,.13);
    background-image:radial-gradient(ellipse 900px 500px at 12% -10%,rgba(245,196,0,.20),transparent 62%),radial-gradient(ellipse 700px 600px at 100% 8%,rgba(255,226,105,.20),transparent 58%);
  }
  body.light-mode .topbar{color:var(--ink)}
  body.light-mode .brand-text h1,body.light-mode .flap .name,body.light-mode .card h2,body.light-mode .facts .v,body.light-mode .pinlist .meta .n,body.light-mode .pill-btn,body.light-mode .icon-btn{color:var(--ink)}
  body.light-mode .brand-mark{box-shadow:inset 0 0 0 3px #fff;background:conic-gradient(from 210deg,#F5C400,#FFD94A,#FFF0A6,#F5C400)}
  body.light-mode .brand-mark span{background:#17211D;color:#F5C400}
  body.light-mode .route{background:#fff;border-color:rgba(45,38,0,.14)}
  body.light-mode .route-mid{background:#FFF3C4;color:#665A20;border-color:rgba(45,38,0,.12)}
  body.light-mode .flap.active{background:#F5C400;color:#17211D}
  body.light-mode .flap.active.kham,body.light-mode .flap.active.town{box-shadow:inset 4px 0 0 #17211D}
  body.light-mode .card{background:#fff;border-color:rgba(45,38,0,.12)}
  body.light-mode .modal{background:#fff;color:var(--ink)}
  body.light-mode .modal-head{background:#FFF3C4}
  body.light-mode .modal-body select,body.light-mode .modal-body input,body.light-mode .modal-body textarea{background:#fff}
  body.light-mode .contact-fab,body.light-mode .mobile-add-pin-fab{background:#F5C400;color:#17211D}
  body.light-mode .btn-primary,body.light-mode .admin-tab.active,body.light-mode .follow-btn{background:#D39A00;border-color:#D39A00}
  body.light-mode .map-caption{background:#FFF9E8}
  .top-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap;justify-content:flex-end}
  .icon-btn{width:40px;height:40px;border-radius:50%;border:1px solid var(--line-strong);background:transparent;color:var(--paper);font-size:17px}
  .icon-btn:hover{border-color:var(--gold);color:var(--gold)}
  .discovery{display:grid;grid-template-columns:1fr 180px 150px;gap:8px;margin:12px 0}
  .discovery input,.discovery select{margin:0}
  .pin-tools{display:flex;gap:8px;flex-wrap:wrap;margin:12px 0 16px}
  .pin-tool{flex:1;min-width:120px;border:1px solid rgba(0,0,0,.14);background:#fff;border-radius:9px;padding:9px 10px;font-size:12.5px;color:var(--ink)}
  .pin-tool.primary{background:var(--clay);border-color:var(--clay);color:#fff}
  .pin-tool.on{background:#fff3cf;border-color:#d39b2e;color:#8b5b00}
  .building-visit-card{display:none;margin:2px 0 14px;padding:13px 14px;border:1px solid rgba(211,154,0,.28);border-radius:12px;background:linear-gradient(135deg,#fff9e8,#fffdf7);color:var(--ink)}
  .building-visit-card.show{display:block}
  .building-code-line{display:flex;align-items:center;gap:10px;margin-bottom:10px}
  .building-code-label{font-size:11px;color:var(--ink-soft);white-space:nowrap}
  .building-code-value{display:inline-flex;align-items:center;min-height:32px;padding:5px 12px;border-radius:999px;background:var(--gold);color:#17211d;font-family:'IBM Plex Mono',monospace;font-size:14px;font-weight:800;overflow-wrap:anywhere}
  .building-visit-title{font-size:12.5px;font-weight:800;margin-bottom:5px}
  .building-visit-list{margin:0;padding-left:20px;color:var(--ink-soft);font-size:12px;line-height:1.65}
  .building-visit-note{margin-top:7px;font-size:10.5px;color:var(--muted)}
  .favorite-mini{border:none;background:transparent;color:var(--muted);font-size:17px;padding:2px 4px;flex-shrink:0}
  .favorite-mini.on{color:#e55b6c}
  .search-empty{font-size:12.5px;color:var(--muted);padding:10px 4px}
  .install-banner{display:none;align-items:center;justify-content:space-between;gap:10px;margin:0 0 14px;padding:10px 14px;border-radius:10px;background:rgba(232,163,61,.14);border:1px solid rgba(232,163,61,.28);font-size:12.5px}
  .install-banner.show{display:flex}
  .install-banner button{border:none;background:var(--gold);color:var(--ink);font-weight:700;border-radius:999px;padding:7px 12px}
  .toast{position:fixed;left:50%;bottom:24px;transform:translate(-50%,20px);z-index:3000;background:#111111;color:#fff;padding:10px 14px;border-radius:999px;font-size:12.5px;opacity:0;pointer-events:none;transition:.2s;box-shadow:var(--shadow)}
  .toast.show{opacity:1;transform:translate(-50%,0)}
  @media(max-width:680px){.discovery{grid-template-columns:1fr}.top-actions{width:100%;justify-content:flex-start}.install-banner{margin-top:-8px}.building-visit-card{padding:12px}.building-code-line{align-items:flex-start;flex-direction:column;gap:4px}.building-code-value{max-width:100%;font-size:13px}.building-visit-list{padding-left:18px;font-size:11.5px}}


  /* ---------- v6 social profiles ---------- */
  .profile-social-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:10px}
  .follow-btn{border:1px solid var(--clay);background:var(--clay);color:#fff;border-radius:999px;padding:8px 16px;font-weight:700;font-size:12.5px}
  .follow-btn.following{background:#fff;color:var(--clay)}
  .profile-stats-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:12px 0 14px}
  .profile-stat-card{border:1px solid rgba(0,0,0,.1);background:#fff;border-radius:10px;padding:10px 6px;text-align:center;cursor:pointer}
  .profile-stat-card:hover{border-color:var(--clay)}
  .profile-stat-card b{display:block;font-family:'Prompt',sans-serif;font-size:20px;color:var(--ink)}
  .profile-stat-card span{font-size:10.5px;color:var(--ink-soft)}
  .profile-tabs{display:flex;gap:6px;overflow:auto;margin:8px 0 12px;padding-bottom:2px}
  .profile-tab{white-space:nowrap;border:1px solid rgba(0,0,0,.14);background:#fff;color:var(--ink-soft);border-radius:999px;padding:7px 12px;font-size:11.5px}
  .profile-tab.active{background:var(--clay);border-color:var(--clay);color:#fff;font-weight:700}
  .social-user-row{display:flex;align-items:center;gap:10px;padding:10px 2px;border-bottom:1px solid rgba(0,0,0,.08)}
  .social-user-row .social-main{flex:1;min-width:0}.social-user-row .social-name{font-weight:700;font-size:13px;cursor:pointer}.social-user-row .social-meta{font-size:11px;color:var(--ink-soft);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .mini-follow-btn{border:1px solid rgba(0,0,0,.16);background:#fff;border-radius:999px;padding:5px 10px;font-size:10.5px;color:var(--clay)}
  .history-pin{border:1px solid rgba(0,0,0,.1);border-radius:10px;padding:11px 12px;margin-bottom:8px;cursor:pointer;background:#fff}.history-pin:hover{border-color:var(--clay)}
  @media(max-width:520px){.profile-stats-grid{grid-template-columns:repeat(2,1fr)}}

  /* ---------- v5 media, notifications ---------- */
  .badge-pill{display:inline-flex;align-items:center;gap:5px;padding:4px 9px;border-radius:999px;background:rgba(232,163,61,.16);border:1px solid rgba(232,163,61,.32);font-size:11px;font-weight:700;color:var(--gold-dim)}
  .name-badge{display:inline-flex;align-items:center;gap:3px;margin-left:5px;padding:1px 6px;border-radius:999px;font-size:9.5px;font-weight:800;line-height:1.45;vertical-align:middle;white-space:nowrap;border:1px solid rgba(0,0,0,.10);background:#fff;color:var(--ink-soft)}
  .name-badge.admin{background:#111111;color:#fff;border-color:#172d28}.name-badge.guide{background:#fff4d8;color:#8a5a00;border-color:#e8c66a}.name-badge.trusted{background:#eaf7ef;color:#20623d;border-color:#9fd0b2}.name-badge.expert{background:#eef3ff;color:#35549b;border-color:#b8c8ee}.name-badge.mapper{background:#fff0e8;color:#994b22;border-color:#edb896}.name-badge.reviewer{background:#f4efff;color:#6547a8;border-color:#cbbbea}.name-badge.member{background:#f1f3f2;color:#52615d;border-color:#cfd6d3}
  .profile-badge-section{margin-top:12px}.profile-badge-title{font-size:12px;font-weight:800;color:var(--ink);margin-bottom:8px}.profile-badge-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.profile-achievement{display:flex;gap:9px;align-items:flex-start;border:1px solid rgba(0,0,0,.09);background:#fff;border-radius:11px;padding:10px}.profile-achievement .ico{font-size:22px;line-height:1}.profile-achievement b{display:block;font-size:11.5px}.profile-achievement small{display:block;color:var(--ink-soft);font-size:9.5px;line-height:1.35;margin-top:2px}.profile-achievement.locked{opacity:.45;filter:grayscale(1)}
  @media(max-width:520px){.profile-badge-grid{grid-template-columns:1fr}.name-badge{font-size:9px;padding:1px 5px}}
  /* ---------- v6.16 unified name style engine ---------- */
  .styled-name{
    --effect-color:var(--name-color,currentColor);
    display:inline-block;font-weight:inherit;color:var(--effect-color);
    position:relative;isolation:isolate;vertical-align:baseline;
  }
  body:not(.light-mode) .styled-name{--effect-color:var(--name-dark-color,var(--name-color,#FFD84D));color:var(--effect-color)}
  .name-effect-glow{font-weight:800;text-shadow:0 0 3px var(--effect-color),0 0 9px var(--effect-color),0 0 19px var(--effect-color),0 1px 2px #000}
  .name-effect-neon{font-weight:800;text-shadow:0 0 2px #fff,0 0 6px var(--effect-color),0 0 13px var(--effect-color),0 0 25px var(--effect-color);filter:brightness(1.18)}
  .name-effect-pulse{font-weight:800;text-shadow:0 0 8px var(--effect-color);animation:namePulse 1.6s ease-in-out infinite}
  .name-effect-shimmer{
    background:linear-gradient(100deg,var(--effect-color) 0%,var(--effect-color) 28%,#fff 48%,var(--effect-color) 66%,var(--effect-color) 100%);
    background-size:240% auto;-webkit-background-clip:text;background-clip:text;
    -webkit-text-fill-color:transparent;color:transparent!important;animation:nameShimmer 2.2s linear infinite;
  }
  .name-effect-rainbow{
    background:linear-gradient(90deg,#ff4d4d,#ffb84d,#ffe34d,#6ee7b7,#60a5fa,#c084fc,#ff4d8d,#ff4d4d);
    background-size:320% auto;-webkit-background-clip:text;background-clip:text;
    -webkit-text-fill-color:transparent;color:transparent!important;animation:nameRainbow 3.2s linear infinite;
    filter:drop-shadow(0 0 5px rgba(255,255,255,.25));
  }
  @keyframes namePulse{0%,100%{opacity:1;filter:brightness(1);transform:scale(1)}50%{opacity:.72;filter:brightness(1.7);transform:scale(1.025)}}
  @keyframes nameShimmer{to{background-position:240% center}}
  @keyframes nameRainbow{to{background-position:320% center}}
  @media (prefers-reduced-motion:reduce){.name-effect-pulse,.name-effect-shimmer,.name-effect-rainbow{animation:none!important}}
  .admin-cosmetic-btn{border:1px solid rgba(0,0,0,.15);background:#fff;border-radius:8px;padding:6px 9px;font-size:11px;cursor:pointer}
  .badge-admin-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}.badge-admin-list{max-height:220px;overflow:auto;border:1px solid rgba(0,0,0,.1);border-radius:10px;padding:8px}.badge-admin-item{display:flex;align-items:center;gap:8px;padding:7px;border-bottom:1px solid rgba(0,0,0,.06)}.badge-admin-item:last-child{border-bottom:0}.badge-admin-item .grow{flex:1}.badge-admin-item button{padding:5px 8px;border-radius:7px;border:1px solid rgba(0,0,0,.15);background:#fff;font-size:10px}.badge-admin-item button.danger{color:#9b2c2c}.admin-preview{padding:12px;border-radius:10px;background:rgba(0,0,0,.05);margin:10px 0;text-align:center;font-size:18px;font-weight:800}
  @media(max-width:600px){.badge-admin-grid{grid-template-columns:1fr}}

  .notify-wrap{position:relative}.notify-count{position:absolute;right:-3px;top:-5px;display:none;min-width:18px;height:18px;padding:0 5px;border-radius:999px;background:#d94a4a;color:#fff;font-size:10px;font-weight:800;align-items:center;justify-content:center;border:2px solid var(--bg)}.notify-count.show{display:flex}
  .media-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:12px 0}.media-card{position:relative;aspect-ratio:4/3;border-radius:10px;overflow:hidden;background:var(--surface-2);border:1px solid var(--line)}.media-card img{width:100%;height:100%;object-fit:cover;display:block}.media-caption{position:absolute;left:0;right:0;bottom:0;padding:18px 7px 6px;background:linear-gradient(transparent,rgba(0,0,0,.75));color:#fff;font-size:10.5px}.media-delete{position:absolute;right:5px;top:5px;width:28px;height:28px;border:none;border-radius:50%;background:rgba(0,0,0,.72);color:#fff;font-size:14px}.gallery-main{width:100%;max-height:320px;object-fit:cover;border-radius:12px;margin:6px 0 10px;background:var(--surface-2)}
  .image-preview-row{display:flex;gap:8px;overflow:auto;margin:8px 0}.image-preview-item{position:relative;flex:0 0 92px;height:70px;border-radius:8px;overflow:hidden;border:1px solid var(--line)}.image-preview-item img{width:100%;height:100%;object-fit:cover}.image-preview-item button{position:absolute;right:3px;top:3px;border:none;border-radius:50%;width:22px;height:22px;background:rgba(0,0,0,.7);color:#fff}
  .review-image{display:block;width:min(100%,420px);max-height:280px;object-fit:cover;border-radius:10px;margin:9px 0;border:1px solid var(--line)}
  .leader-row{display:grid;grid-template-columns:40px 1fr auto;gap:10px;align-items:center;padding:12px 4px;border-bottom:1px solid var(--line)}.leader-rank{font-size:20px;text-align:center}.leader-name{font-weight:700;font-size:13.5px}.leader-meta{font-size:11.5px;color:var(--ink-soft);margin-top:3px}.leader-points{font-family:'IBM Plex Mono',monospace;font-weight:700;color:var(--clay)}
  .notification-item{padding:12px;border-bottom:1px solid var(--line);cursor:pointer}.notification-item.unread{background:rgba(232,163,61,.1)}.notification-title{font-weight:700;font-size:13px}.notification-msg{font-size:12px;color:var(--ink-soft);margin-top:4px;line-height:1.55}.notification-date{font-size:10.5px;color:var(--muted);margin-top:5px}
  .file-multi{display:block;width:100%;padding:10px;border:1px dashed var(--line-strong);border-radius:9px;background:var(--surface-2);font-size:12px}
  @media(max-width:560px){.media-grid{grid-template-columns:repeat(2,1fr)}.top-actions .pill-btn .hide-mobile{display:none}}


  /* ---------- v6.3 badge platform ---------- */
  .cosmetic-tabs{display:flex;gap:6px;overflow:auto;margin-bottom:12px}.cosmetic-tab{white-space:nowrap;border:1px solid rgba(0,0,0,.14);background:#fff;border-radius:999px;padding:7px 12px;font-size:11px}.cosmetic-tab.active{background:var(--clay);color:#fff;border-color:var(--clay)}
  .cosmetic-pane{display:none}.cosmetic-pane.active{display:block}.catalog-chip-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:7px}.catalog-chip{border:1px solid rgba(0,0,0,.13);background:#fff;border-radius:9px;padding:8px;font-size:11px;text-align:center}.catalog-chip.selected{border-color:var(--clay);box-shadow:inset 0 0 0 1px var(--clay)}
  .badge-select-row{display:grid;grid-template-columns:auto 36px 1fr auto;gap:9px;align-items:center;padding:9px;border-bottom:1px solid rgba(0,0,0,.07)}.badge-select-row input{width:auto}.badge-select-row .badge-icon{font-size:22px}.badge-kind{font-size:9px;padding:2px 6px;border-radius:999px;background:#eee}.badge-kind.achievement{background:#fff3cf;color:#805900}.badge-kind.manual{background:#eaf7ef;color:#276444}.expiry-row{display:grid;grid-template-columns:1fr 1fr;gap:8px}
  .title-preview{font-size:11px;margin-top:4px;color:var(--ink-soft)}.profile-title{display:inline-flex;gap:4px;align-items:center;font-size:10.5px;font-weight:800;margin-left:5px;padding:2px 7px;border-radius:999px;background:#fff5d8;border:1px solid #e7ca76;color:#805900;vertical-align:middle}
  .audit-row{padding:9px 4px;border-bottom:1px solid rgba(0,0,0,.08);font-size:11px}.audit-row b{font-size:11.5px}.audit-row small{display:block;color:var(--ink-soft);margin-top:2px}
  .badge-progress{height:5px;background:#e5e5e5;border-radius:999px;overflow:hidden;margin-top:5px}.badge-progress i{display:block;height:100%;background:var(--clay)}
  @media(max-width:600px){.catalog-chip-grid{grid-template-columns:repeat(2,1fr)}.expiry-row{grid-template-columns:1fr}}



  /* ---------- v6.12 admin-only badge & cosmetics ---------- */
  .dashboard-honor-card{background:linear-gradient(135deg,rgba(245,196,0,.16),var(--surface));border:1px solid rgba(245,196,0,.32);border-radius:16px;padding:18px;margin-bottom:16px}
  .dashboard-honor-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px}.dashboard-honor-head h3{margin:0;font-size:17px}.dashboard-honor-preview{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:14px;border-radius:13px;background:var(--surface-2);border:1px solid var(--line)}
  .dashboard-honor-name{font-size:20px;font-weight:800}.dashboard-honor-badges{margin-top:14px}.dashboard-honor-empty{font-size:12.5px;color:var(--muted);padding:14px 0}.dashboard-honor-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:14px}.dashboard-honor-actions button{border:1px solid var(--line-strong);background:var(--surface-2);color:var(--paper);border-radius:999px;padding:8px 13px;font-size:12px}.dashboard-honor-actions button:hover{border-color:var(--gold)}
  body.light-mode .dashboard-honor-actions button{color:var(--ink);background:#fff}.dashboard-panel .profile-badge-section{margin-top:0}.dashboard-panel .profile-achievement{background:var(--surface-2);border-color:var(--line)}body:not(.light-mode) .dashboard-panel .profile-achievement b{color:var(--paper)}body:not(.light-mode) .dashboard-panel .profile-achievement small{color:var(--muted)}

  /* ---------- v6.5 install guide popup ---------- */
  .install-guide-overlay{position:fixed;inset:0;z-index:5000;display:none;align-items:center;justify-content:center;padding:18px;background:rgba(10,18,15,.68);backdrop-filter:blur(5px)}
  .install-guide-overlay.show{display:flex}
  .install-guide-card{position:relative;width:min(520px,100%);max-height:min(86vh,720px);overflow:auto;border:1px solid rgba(245,196,0,.42);border-radius:22px;background:var(--surface);color:var(--ink);box-shadow:0 24px 70px rgba(0,0,0,.34)}
  .install-guide-hero{padding:24px 58px 18px 24px;background:linear-gradient(135deg,rgba(245,196,0,.24),rgba(245,196,0,.07));border-bottom:1px solid var(--line)}
  .install-guide-icon{width:54px;height:54px;display:grid;place-items:center;border-radius:16px;background:var(--gold);color:#17211D;font-size:28px;box-shadow:0 10px 24px rgba(245,196,0,.24);margin-bottom:12px}
  .install-guide-hero h2{margin:0 0 6px;font-size:21px;line-height:1.3;color:var(--ink)}
  .install-guide-hero p{margin:0;color:var(--ink-soft);font-size:13px;line-height:1.55}
  .install-guide-close{position:absolute;right:14px;top:14px;width:36px;height:36px;border:1px solid var(--line-strong);border-radius:50%;background:var(--surface);color:var(--ink);font-size:21px;line-height:1;cursor:pointer}
  .install-guide-body{padding:20px 24px 24px}
  .install-guide-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:16px}
  .install-guide-step{border:1px solid var(--line);border-radius:14px;padding:14px;background:var(--surface-2)}
  .install-guide-step b{display:block;margin-bottom:7px;font-size:13px;color:var(--ink)}
  .install-guide-step ol{margin:0;padding-left:18px;color:var(--ink-soft);font-size:12px;line-height:1.65}
  .install-guide-note{display:flex;gap:9px;align-items:flex-start;padding:11px 12px;border-radius:12px;background:rgba(245,196,0,.13);border:1px solid rgba(245,196,0,.28);font-size:11.5px;line-height:1.55;color:var(--ink-soft);margin-bottom:16px}
  .install-guide-option{display:flex;align-items:center;gap:10px;margin:0 0 16px;padding:11px 12px;border:1px solid var(--line);border-radius:12px;background:var(--surface-2);color:var(--ink);font-size:12.5px;cursor:pointer}
  .install-guide-option input{width:18px;height:18px;margin:0;accent-color:var(--gold);flex:0 0 auto}
  .location-pick-btn{width:100%;margin-top:10px;padding:10px 12px;border:1px dashed rgba(0,0,0,.25);background:#fff;border-radius:8px;color:var(--ink-soft);font-size:12.5px;font-weight:700}
  .location-pick-btn:hover{border-color:var(--clay);color:var(--clay)}
  .location-pick-btn:disabled{opacity:.65;cursor:wait}
  .location-status{font-size:11.5px;color:var(--ink-soft);margin-top:7px;line-height:1.5;min-height:1.5em}
  body:not(.light-mode) .location-pick-btn{background:#202020;color:#f2f2f2;border-color:rgba(255,255,255,.2)}
  .install-guide-confirm{width:100%;border:none;border-radius:999px;background:var(--gold);color:#17211D;padding:12px 18px;font-weight:800;font-size:14px;cursor:pointer}
  body:not(.light-mode) .install-guide-card{background:#171717;color:#f4f4f4;border-color:rgba(245,196,0,.34)}
  body:not(.light-mode) .install-guide-hero{background:linear-gradient(135deg,rgba(245,196,0,.17),rgba(5,5,5,.78));border-bottom-color:rgba(255,255,255,.08)}
  body:not(.light-mode) .install-guide-hero h2,body:not(.light-mode) .install-guide-step b{color:#f4f7f5}
  body:not(.light-mode) .install-guide-hero p,body:not(.light-mode) .install-guide-step ol,body:not(.light-mode) .install-guide-note{color:#cfcfcf}
  body:not(.light-mode) .install-guide-step{background:#202020;border-color:rgba(255,255,255,.09)}
  body:not(.light-mode) .install-guide-close{background:#202020;color:#fff;border-color:rgba(255,255,255,.15)}
  @media(max-width:560px){.install-guide-overlay{align-items:flex-end;padding:10px}.install-guide-card{border-radius:22px 22px 14px 14px;max-height:90vh}.install-guide-grid{grid-template-columns:1fr}.install-guide-hero{padding:20px 54px 15px 18px}.install-guide-body{padding:16px 18px 20px}}


  /* ---------- v6.9 inline app dashboard ---------- */
  #notificationsBtn,#favoritesBtn{display:none!important}
  .dashboard-overlay{position:fixed;inset:0;z-index:4500;display:none;background:var(--bg);color:var(--paper);overflow:hidden}
  #adminCosmeticOverlay{z-index:4700;background:rgba(10,18,15,.76);backdrop-filter:blur(5px)}
  #adminCosmeticOverlay .modal{max-height:92vh;overflow:auto}
  .dashboard-overlay.show{display:block}
  .dashboard-shell{height:100%;display:grid;grid-template-columns:260px 1fr}
  .dashboard-side{background:var(--bg-deep);border-right:1px solid var(--line);padding:22px 16px;overflow:auto}
  .dashboard-brand{display:flex;align-items:center;gap:10px;padding:0 8px 18px;border-bottom:1px solid var(--line);margin-bottom:14px}
  .dashboard-brand b{font-family:'Prompt',sans-serif;font-size:19px}
  .dashboard-profile{padding:12px;border-radius:14px;background:var(--surface);border:1px solid var(--line);margin-bottom:14px}
  .dashboard-profile-row{display:flex;align-items:center;gap:10px}.dashboard-profile-name{font-weight:800}.dashboard-profile-meta{font-size:11px;color:var(--muted);margin-top:2px}
  .dashboard-nav{display:grid;gap:6px}.dashboard-nav button{width:100%;text-align:left;border:1px solid transparent;background:transparent;color:var(--paper);border-radius:10px;padding:10px 12px;font-size:13px}
  .dashboard-nav button:hover,.dashboard-nav button.active{background:var(--surface-2);border-color:var(--line)}
  .dashboard-nav .danger{color:#ffb4aa}.dashboard-nav .admin-only{display:none}.dashboard-nav .admin-only.show{display:block}
  .dashboard-main{overflow:auto;padding:26px}
  .dashboard-top{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:22px}.dashboard-top h2{margin:0;font-size:28px}.dashboard-top p{margin:5px 0 0;color:var(--muted);font-size:13px}
  .dashboard-close{width:42px;height:42px;border-radius:50%;border:1px solid var(--line-strong);background:var(--surface);color:var(--paper);font-size:22px}
  .dashboard-stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:18px}.dashboard-stat{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:17px}.dashboard-stat span{display:block;color:var(--muted);font-size:11.5px}.dashboard-stat b{display:block;font-family:'Prompt',sans-serif;font-size:30px;color:var(--gold);margin-top:4px}
  .dashboard-grid{display:grid;grid-template-columns:1.2fr .8fr;gap:16px}.dashboard-card{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:18px}.dashboard-card h3{margin:0 0 12px;font-size:16px}.dashboard-actions{display:grid;grid-template-columns:repeat(2,1fr);gap:9px}.dashboard-action{border:1px solid var(--line);background:var(--surface-2);color:var(--paper);border-radius:11px;padding:13px;text-align:left}.dashboard-action:hover{border-color:var(--gold)}
  .dashboard-activity{display:grid;gap:8px}.dashboard-activity-item{padding:10px 0;border-top:1px solid var(--line);font-size:12.5px}.dashboard-activity-item:first-child{border-top:0}.dashboard-activity-item small{display:block;color:var(--muted);margin-top:3px}
  .dashboard-panel{display:none}.dashboard-panel.show{display:block}.dashboard-inline-head{display:flex;justify-content:space-between;align-items:flex-start;gap:14px;margin-bottom:16px;padding-bottom:14px;border-bottom:1px solid var(--line)}.dashboard-inline-head h3{margin:0;font-size:22px}.dashboard-inline-head p{margin:4px 0 0;color:var(--muted);font-size:12.5px}.dashboard-inline-back{border:1px solid var(--line-strong);background:var(--surface);color:var(--paper);border-radius:999px;padding:8px 13px;font-size:12px}.dashboard-inline-body>.modal-body{padding:0;background:transparent;color:inherit}.dashboard-inline-body .modal-note{color:var(--ink-soft)}body:not(.light-mode) .dashboard-inline-body .modal-body label,body:not(.light-mode) .dashboard-inline-body .admin-note{color:var(--muted)}body:not(.light-mode) .dashboard-inline-body .pin-status-card,body:not(.light-mode) .dashboard-inline-body .history-pin,body:not(.light-mode) .dashboard-inline-body .profile-stat-card,body:not(.light-mode) .dashboard-inline-body .social-user-row,body:not(.light-mode) .dashboard-inline-body .inbox-item{background:var(--surface-2);color:var(--paper);border-color:var(--line)}body:not(.light-mode) .dashboard-inline-body .pin-status-title,body:not(.light-mode) .dashboard-inline-body .review-text,body:not(.light-mode) .dashboard-inline-body .profile-stat-card b{color:var(--paper)}
  body.light-mode .dashboard-overlay{color:var(--ink)}body.light-mode .dashboard-side{background:#FFF7D6}body.light-mode .dashboard-nav button,body.light-mode .dashboard-close,body.light-mode .dashboard-action{color:var(--ink)}body.light-mode .dashboard-profile,body.light-mode .dashboard-stat,body.light-mode .dashboard-card{background:#fff}
  .dashboard-trigger{display:inline-flex;align-items:center;gap:8px}.dashboard-trigger .avatar{border:2px solid var(--gold)}
  @media(max-width:820px){.dashboard-shell{grid-template-columns:1fr}.dashboard-side{border-right:0;border-bottom:1px solid var(--line);padding:12px;max-height:245px}.dashboard-brand{padding-bottom:10px}.dashboard-nav{grid-template-columns:repeat(3,1fr)}.dashboard-nav button{text-align:center;padding:9px 6px;font-size:11px}.dashboard-main{padding:18px}.dashboard-stats{grid-template-columns:repeat(2,1fr)}.dashboard-grid{grid-template-columns:1fr}.dashboard-top h2{font-size:23px}}
  @media(max-width:480px){.dashboard-main{padding:14px}.dashboard-actions{grid-template-columns:1fr}.dashboard-nav{grid-template-columns:repeat(2,1fr)}.dashboard-stat{padding:13px}.dashboard-stat b{font-size:25px}.who-dashboard-label{display:none}}

  /* ---------- v6.14 black & gold dark theme ---------- */
  body:not(.light-mode){
    --bg:#0D0D0D;--bg-deep:#050505;--surface:#171717;--surface-2:#202020;--surface-3:#2B2B2B;
    --paper:#F5F5F5;--paper-dim:#D9D9D9;--ink:#171717;--ink-soft:#555;
    --gold:#F5C400;--gold-dim:#D9A400;--clay:#F5C400;--clay-dim:#C99F00;
    --leaf:#FFD84D;--leaf-dim:#D9A400;--muted:#B9B9B9;
    --line:rgba(255,255,255,.09);--line-strong:rgba(255,255,255,.17);
    --shadow:0 12px 34px rgba(0,0,0,.52);
    background-image:radial-gradient(ellipse 900px 500px at 12% -10%,rgba(245,196,0,.13),transparent 62%),radial-gradient(ellipse 700px 600px at 100% 8%,rgba(245,196,0,.07),transparent 58%);
  }
  body:not(.light-mode) .route-mid,body:not(.light-mode) select,body:not(.light-mode) input[type=text],body:not(.light-mode) input[type=password],body:not(.light-mode) textarea{background:#080808}
  body:not(.light-mode) .flap.active{background:#2A2300;color:#FFD84D}
  body:not(.light-mode) .flap.active.kham,body:not(.light-mode) .flap.active.town{box-shadow:inset 4px 0 0 #F5C400}
  body:not(.light-mode) .contact-fab,body:not(.light-mode) .mobile-add-pin-fab,body:not(.light-mode) .pill-btn.solid{background:#F5C400;color:#111;border-color:#F5C400}
  body:not(.light-mode) .contact-fab:hover,body:not(.light-mode) .mobile-add-pin-fab:hover,body:not(.light-mode) .pill-btn.solid:hover{background:#FFD84D;border-color:#FFD84D}
  body:not(.light-mode) .chat-head{background:#111}
  body:not(.light-mode) .chat-bubble.me,body:not(.light-mode) .btn-primary,body:not(.light-mode) .admin-tab.active,body:not(.light-mode) .follow-btn,body:not(.light-mode) .profile-tab.active,body:not(.light-mode) .cosmetic-tab.active{background:#F5C400;border-color:#F5C400;color:#111}
  body:not(.light-mode) .toast{background:#111;color:#fff;border:1px solid rgba(245,196,0,.35)}
  body:not(.light-mode) .notify-count{border-color:#0D0D0D}
  body:not(.light-mode) .dashboard-shell,body:not(.light-mode) .dashboard-sidebar,body:not(.light-mode) .dashboard-content{background:#111;color:#F5F5F5;border-color:rgba(255,255,255,.09)}
  body:not(.light-mode) .dashboard-nav-btn.active{background:#F5C400;color:#111}
  body:not(.light-mode) .install-guide-card{background:#171717!important;border-color:rgba(245,196,0,.42)!important}
  body:not(.light-mode) .install-guide-step,body:not(.light-mode) .install-guide-close{background:#202020!important}
  body:not(.light-mode) ::-webkit-scrollbar{width:10px;height:10px}
  body:not(.light-mode) ::-webkit-scrollbar-track{background:#0D0D0D}
  body:not(.light-mode) ::-webkit-scrollbar-thumb{background:#3A3200;border:2px solid #0D0D0D;border-radius:999px}
  body:not(.light-mode) ::-webkit-scrollbar-thumb:hover{background:#F5C400}


  /* ---------- v6.15 black & gold contrast / honors readability ---------- */
  body:not(.light-mode) .dashboard-honor-card{
    background:linear-gradient(135deg,#211b00 0%,#151515 48%,#101010 100%);
    border:1px solid rgba(245,196,0,.58);
    box-shadow:0 16px 38px rgba(0,0,0,.36),inset 0 1px 0 rgba(255,216,77,.07);
  }
  body:not(.light-mode) .dashboard-honor-head h3,
  body:not(.light-mode) .profile-badge-title{color:#FFFFFF}
  body:not(.light-mode) .dashboard-honor-preview{
    background:#1C1C1C;border-color:rgba(255,255,255,.13);
  }
  body:not(.light-mode) .dashboard-honor-name{color:#FFFFFF}
  body:not(.light-mode) .dashboard-honor-name .styled-name:not(.name-effect-shimmer):not(.name-effect-rainbow){
    padding:2px 5px;border-radius:6px;background:rgba(0,0,0,.28);
  }
  body:not(.light-mode) .dashboard-honor-name .styled-name:not(.name-effect-glow):not(.name-effect-neon):not(.name-effect-pulse):not(.name-effect-shimmer):not(.name-effect-rainbow){text-shadow:0 1px 2px #000}

  body:not(.light-mode) .dashboard-panel .profile-achievement,
  body:not(.light-mode) .dashboard-honor-badges .profile-achievement,
  body:not(.light-mode) .profile-achievement{
    background:#191919!important;
    border-width:1px!important;
    border-style:solid!important;
    border-color:rgba(245,196,0,.52)!important;
    box-shadow:inset 0 1px 0 rgba(255,255,255,.035),0 5px 14px rgba(0,0,0,.22);
    opacity:1;
  }
  body:not(.light-mode) .profile-achievement:hover{
    background:#232323!important;border-color:#FFD84D!important;
    transform:translateY(-1px);
  }
  body:not(.light-mode) .profile-achievement b{
    color:#FFFFFF!important;font-weight:800;font-size:12px;
  }
  body:not(.light-mode) .profile-achievement small{
    color:#CFCFCF!important;font-size:10px;line-height:1.5;
  }
  body:not(.light-mode) .profile-achievement .ico{
    filter:drop-shadow(0 0 7px rgba(245,196,0,.35));
  }
  body:not(.light-mode) .profile-achievement.locked{
    background:#111!important;border-color:rgba(255,255,255,.12)!important;
    opacity:.48;filter:grayscale(1);
  }
  body:not(.light-mode) .profile-title,
  body:not(.light-mode) .name-badge{
    background:#201B00;color:#FFD84D;border-color:rgba(245,196,0,.58);
  }
  body:not(.light-mode) .dashboard-inline-back,
  body:not(.light-mode) .dashboard-honor-actions button{
    background:#1B1B1B;color:#F5F5F5;border-color:rgba(255,255,255,.18);
  }
  body:not(.light-mode) .dashboard-inline-back:hover,
  body:not(.light-mode) .dashboard-honor-actions button:hover{
    color:#111;background:#F5C400;border-color:#F5C400;
  }
  body:not(.light-mode) .dashboard-honor-empty,
  body:not(.light-mode) .dashboard-panel .hint{color:#C7C7C7}
  body:not(.light-mode) .dashboard-panel,
  body:not(.light-mode) .dashboard-panel-body{color:#F5F5F5}
  body:not(.light-mode) .badge-pill{background:#211B00;border-color:rgba(245,196,0,.55);color:#FFD84D}
  body:not(.light-mode) .profile-stat-card,
  body:not(.light-mode) .history-pin,
  body:not(.light-mode) .social-user-row,
  body:not(.light-mode) .notification-item{
    background:#191919;color:#F5F5F5;border-color:rgba(255,255,255,.1);
  }
  body:not(.light-mode) .profile-stat-card b,
  body:not(.light-mode) .history-pin b,
  body:not(.light-mode) .social-name,
  body:not(.light-mode) .notification-title{color:#FFFFFF}
  body:not(.light-mode) .profile-stat-card span,
  body:not(.light-mode) .social-meta,
  body:not(.light-mode) .notification-msg,
  body:not(.light-mode) .notification-date{color:#BDBDBD}


  /* ---------- v6.17 review replies & reactions ---------- */
  .reaction-wrap{position:relative;display:inline-flex;align-items:center}
  .reaction-main{border:1px solid rgba(0,0,0,.15);background:transparent;border-radius:999px;padding:4px 10px;font-size:11.5px;color:var(--ink-soft)}
  .reaction-main.on{background:rgba(245,196,0,.14);border-color:var(--gold);color:var(--ink);font-weight:700}
  .reaction-menu{position:absolute;left:0;bottom:calc(100% + 7px);display:none;gap:4px;padding:7px;border-radius:999px;background:var(--surface);border:1px solid var(--line-strong);box-shadow:var(--shadow);z-index:50;white-space:nowrap}
  .reaction-wrap.open .reaction-menu{display:flex}
  .reaction-choice{width:34px;height:34px;border:none;background:transparent;border-radius:50%;font-size:21px;transition:transform .12s,background .12s}
  .reaction-choice:hover{transform:scale(1.25);background:var(--surface-2)}
  .reaction-summary{display:flex;gap:5px;align-items:center;flex-wrap:wrap;margin-top:7px;font-size:11px;color:var(--ink-soft)}
  .reaction-pill{border:1px solid var(--line);border-radius:999px;padding:2px 7px;background:var(--surface-2)}
  .reply-btn{border:none;background:transparent;color:var(--clay);font-size:11.5px;font-weight:700;padding:4px 6px}
  .reply-list{margin:10px 0 0 22px;padding-left:12px;border-left:2px solid rgba(245,196,0,.3)}
  .reply-item{padding:10px 0;border-top:1px solid rgba(0,0,0,.08)}
  .reply-item:first-child{border-top:none}
  .reply-head{display:flex;justify-content:space-between;gap:8px;align-items:center}
  .reply-author{font-size:12px;font-weight:800;cursor:pointer}
  .reply-text{font-size:12.5px;line-height:1.55;margin:4px 0;color:var(--ink)}
  .reply-actions{display:flex;gap:5px;align-items:center;flex-wrap:wrap}
  .reply-composer{display:none;margin-top:9px;padding:10px;border-radius:10px;background:var(--surface-2);border:1px solid var(--line)}
  .reply-composer.show{display:block}
  .reply-composer textarea{min-height:54px;margin:0;background:var(--surface)}
  .reply-composer-actions{display:flex;justify-content:flex-end;gap:7px;margin-top:7px}
  .reply-composer-actions button{border:1px solid var(--line-strong);border-radius:999px;padding:6px 11px;font-size:11px;background:var(--surface);color:var(--ink)}
  .reply-composer-actions .send{background:var(--gold);color:#111;border-color:var(--gold);font-weight:800}
  .reply-delete{border:none;background:transparent;color:#d94a4a;font-size:11px}
  body:not(.light-mode) .reaction-main{border-color:rgba(255,255,255,.18);color:#d5d5d5}
  body:not(.light-mode) .reaction-main.on{color:#fff}
  body:not(.light-mode) .reply-item{border-top-color:rgba(255,255,255,.08)}
  body:not(.light-mode) .reply-text,body:not(.light-mode) .reply-author{color:#f5f5f5}
  @media(max-width:520px){.reply-list{margin-left:9px;padding-left:9px}.reaction-menu{left:-20px}}



  /* ---------- v6.18 mobile UX & dark readability ---------- */
  body:not(.light-mode){
    --bg:#080808;--bg-deep:#030303;--surface:#151515;--surface-2:#1d1d1d;--surface-3:#292929;
    --paper:#f7f7f7;--paper-dim:#d7d7d7;--muted:#a9a9a9;
    --line:rgba(255,255,255,.10);--line-strong:rgba(255,255,255,.20);
  }
  body:not(.light-mode) .modal,
  body:not(.light-mode) .modal-head,
  body:not(.light-mode) .modal-body{
    background:#151515;color:#f7f7f7;border-color:rgba(255,255,255,.10)
  }
  body:not(.light-mode) .modal-head{background:#1d1d1d}
  body:not(.light-mode) .modal-head h3,
  body:not(.light-mode) .modal-body h3,
  body:not(.light-mode) .modal-body h4,
  body:not(.light-mode) .review-top .u,
  body:not(.light-mode) .review-text,
  body:not(.light-mode) .profile-meta,
  body:not(.light-mode) .profile-view-head,
  body:not(.light-mode) .social-name,
  body:not(.light-mode) .history-pin,
  body:not(.light-mode) .notification-title{color:#f7f7f7}
  body:not(.light-mode) .modal-head .tagline,
  body:not(.light-mode) .modal-body label,
  body:not(.light-mode) .switch-line,
  body:not(.light-mode) .coord-line,
  body:not(.light-mode) .review-date,
  body:not(.light-mode) .profile-stat,
  body:not(.light-mode) .social-meta,
  body:not(.light-mode) .notification-msg,
  body:not(.light-mode) .notification-date{color:#bdbdbd}
  body:not(.light-mode) .modal-body input,
  body:not(.light-mode) .modal-body textarea,
  body:not(.light-mode) .modal-body select,
  body:not(.light-mode) .review-form textarea,
  body:not(.light-mode) .reply-composer textarea{
    background:#0d0d0d!important;color:#fff!important;border-color:rgba(255,255,255,.22)!important;
    caret-color:#f5c400
  }
  body:not(.light-mode) input::placeholder,
  body:not(.light-mode) textarea::placeholder{color:#8f8f8f;opacity:1}
  body:not(.light-mode) .modal-body input:focus,
  body:not(.light-mode) .modal-body textarea:focus,
  body:not(.light-mode) .modal-body select:focus,
  body:not(.light-mode) .review-form textarea:focus,
  body:not(.light-mode) .reply-composer textarea:focus{
    border-color:#f5c400!important;box-shadow:0 0 0 3px rgba(245,196,0,.14)
  }
  body:not(.light-mode) .review,
  body:not(.light-mode) .reply-item{border-color:rgba(255,255,255,.10)}
  body:not(.light-mode) .helpful-btn,
  body:not(.light-mode) .reply-composer-actions button,
  body:not(.light-mode) .mini-follow-btn,
  body:not(.light-mode) .profile-tab,
  body:not(.light-mode) .profile-stat-card,
  body:not(.light-mode) .history-pin,
  body:not(.light-mode) .social-user-row{
    background:#1d1d1d;color:#f5f5f5;border-color:rgba(255,255,255,.14)
  }
  body:not(.light-mode) .helpful-btn.on{background:rgba(245,196,0,.16);border-color:#f5c400;color:#fff}
  body:not(.light-mode) .profile-tab.active{background:#f5c400;color:#111;border-color:#f5c400}
  body:not(.light-mode) .profile-stat-card b{color:#f5c400}
  body:not(.light-mode) .profile-achievement{background:#1d1d1d!important;border-color:rgba(255,255,255,.12)!important}
  body:not(.light-mode) .profile-achievement b{color:#fff!important}
  body:not(.light-mode) .profile-achievement small{color:#bdbdbd!important}
  body:not(.light-mode) .cat-badge{color:#111}
  body:not(.light-mode) .leaflet-popup-content-wrapper,
  body:not(.light-mode) .leaflet-popup-tip{background:#151515;color:#fff}
  body:not(.light-mode) .leaflet-popup-content b{color:#fff}

  @media(max-width:768px){
    .shell{padding:10px 10px 92px}
    .topbar{padding:8px 2px 12px;gap:10px}
    .brand-mark{width:38px;height:38px}.brand-mark span{width:30px;height:30px;font-size:13px}
    .brand-text h1{font-size:18px}.brand-text p{font-size:10.5px}
    .top-actions{gap:6px}.icon-btn{width:38px;height:38px}.pill-btn{padding:8px 11px;font-size:12px}
    .route{margin-bottom:12px;border-radius:12px}.flap{padding:12px 11px}.flap .name{font-size:16px}.flap .sub{font-size:9.5px}.route-mid{width:82px}.route-mid .km{font-size:13px}.route-mid .lbl{font-size:8px}
    #map{height:56vh;min-height:360px;max-height:540px}
    .card-pad{padding:15px}.grid{gap:12px}.discovery{gap:7px}
    .overlay{padding:0;align-items:flex-end}
    .modal{max-width:none!important;width:100%;max-height:92vh;margin:0;border-radius:20px 20px 0 0;overflow:auto}
    .modal-head{position:sticky;top:0;z-index:5;padding:16px 18px}
    .modal-body{padding:16px 18px 24px}
    .modal-close{width:38px;height:38px;border-radius:50%;background:rgba(0,0,0,.05)}
    .pin-tools{display:grid;grid-template-columns:1fr 1fr}.pin-tool{min-width:0}
    .profile-view-head{align-items:flex-start}.avatar-xl{width:64px;height:64px}
    .profile-stats-grid{grid-template-columns:repeat(2,1fr)}
    .review-actions{gap:6px}.helpful-btn,.reaction-main,.reply-btn{min-height:36px;padding:7px 11px}
    .review-form textarea{min-height:110px;font-size:16px}
    .reply-composer textarea{font-size:16px;min-height:82px}
    .reaction-menu{position:fixed;left:50%!important;bottom:18px;transform:translateX(-50%);z-index:7000;padding:10px 12px;gap:7px}
    .reaction-choice{width:42px;height:42px;font-size:27px}
    .reply-list{margin-left:6px;padding-left:10px}
    .dashboard-shell{display:block;height:100%;overflow:auto}
    .dashboard-side{position:sticky;top:0;z-index:20;max-height:none;padding:10px;background:var(--bg-deep)}
    .dashboard-brand{display:none}.dashboard-profile{margin-bottom:8px;padding:9px}
    .dashboard-nav{display:flex;overflow-x:auto;gap:6px;padding-bottom:2px;scrollbar-width:none}.dashboard-nav::-webkit-scrollbar{display:none}
    .dashboard-nav button{flex:0 0 auto;width:auto;white-space:nowrap;padding:9px 12px;font-size:11px}
    .dashboard-main{padding:14px 12px 28px;overflow:visible}
    .dashboard-top{margin-bottom:14px}.dashboard-top h2{font-size:22px}
    .dashboard-close{position:sticky;top:10px}
  }
  @media(max-width:420px){
    .route-mid{display:none}.flap{border-right:1px solid var(--line)!important}.flap:last-child{border-right:0!important}
    #map{height:52vh;min-height:330px}
    .pin-tools{grid-template-columns:1fr}
    .modal-body{padding-left:14px;padding-right:14px}
    .review-top{align-items:flex-start}.review-date{font-size:9.5px}
    .dashboard-stats{grid-template-columns:1fr 1fr;gap:8px}.dashboard-stat{padding:12px}.dashboard-stat b{font-size:23px}
  }


  /* ---------- v7.0 unified mobile-first UI/UX redesign ---------- */
  :root{
    --tap:44px;
    --focus-ring:0 0 0 3px rgba(245,196,0,.22);
  }
  .pin-tool,.btn-primary,.pill-btn,.helpful-btn,.reaction-main,.reply-btn,.review-delete-btn,
  .admin-pin-actions button,.inbox-actions button,.profile-tab,.mini-follow-btn{
    min-height:var(--tap);
  }
  .modal{border:1px solid var(--line-strong)}
  .modal-head{align-items:center}
  .modal-close{display:grid;place-items:center;min-width:40px;min-height:40px;border-radius:50%}
  .pin-tools{gap:10px}
  .pin-tool{display:flex;align-items:center;justify-content:center;gap:7px;font-weight:700;border-radius:12px}
  .review-form{border-top:1px solid var(--line);padding-top:22px}
  .review-form label{font-weight:700;margin-top:16px}
  .star-pick{gap:8px;font-size:32px;line-height:1;margin:10px 0 4px}
  .star-pick span{padding:3px;transform-origin:center;transition:transform .14s ease,color .14s ease}
  .star-pick span:hover,.star-pick span:focus-visible{transform:scale(1.15)}
  .review-form textarea,.reply-composer textarea{border-radius:12px;line-height:1.6}
  .file-multi{
    min-height:62px;border-width:2px;border-style:dashed;border-radius:14px;padding:10px 12px;
    display:flex;align-items:center;background:var(--surface-2);color:var(--ink-soft)
  }
  .file-multi::file-selector-button{
    border:0;border-radius:10px;background:var(--gold);color:#111;font-weight:800;
    padding:10px 14px;margin-right:12px;cursor:pointer
  }
  .review{padding:18px 0}
  .review-top .u{font-size:14px}
  .review-text{font-size:14px;line-height:1.7}
  .review-actions{padding-top:4px}
  .empty-review-state{
    margin:18px 0;padding:28px 18px;border:1px dashed var(--line-strong);border-radius:16px;
    text-align:center;background:var(--surface-2)
  }
  .empty-review-state .ico{font-size:36px;line-height:1;margin-bottom:10px}
  .empty-review-state b{display:block;color:var(--ink);font-size:15px;margin-bottom:4px}
  .empty-review-state span{color:var(--ink-soft);font-size:12.5px}

  body:not(.light-mode) .modal,
  body:not(.light-mode) .modal-head,
  body:not(.light-mode) .modal-body{background:#121212!important;color:#fff!important}
  body:not(.light-mode) .modal-head{background:#1b1b1b!important;border-bottom-color:#353535!important}
  body:not(.light-mode) .modal-head h3,
  body:not(.light-mode) .review-form label,
  body:not(.light-mode) .review-text,
  body:not(.light-mode) .review-top .u,
  body:not(.light-mode) .reply-author,
  body:not(.light-mode) .reply-text,
  body:not(.light-mode) .profile-view-head,
  body:not(.light-mode) .profile-view-head h3,
  body:not(.light-mode) .profile-meta,
  body:not(.light-mode) .social-name,
  body:not(.light-mode) .history-pin,
  body:not(.light-mode) .empty-review-state b{color:#f7f7f7!important}
  body:not(.light-mode) .coord-line,
  body:not(.light-mode) .review-date,
  body:not(.light-mode) .modal-head .tagline,
  body:not(.light-mode) .profile-stat,
  body:not(.light-mode) .social-meta,
  body:not(.light-mode) .empty-review-state span{color:#b9b9b9!important}
  body:not(.light-mode) .pin-tool,
  body:not(.light-mode) .helpful-btn,
  body:not(.light-mode) .reaction-main,
  body:not(.light-mode) .reply-btn,
  body:not(.light-mode) .review-delete-btn,
  body:not(.light-mode) .map-pick-admin,
  body:not(.light-mode) .admin-pin-actions button{
    background:#202020!important;color:#f5f5f5!important;border-color:#3c3c3c!important
  }
  body:not(.light-mode) .pin-tool:hover,
  body:not(.light-mode) .helpful-btn:hover,
  body:not(.light-mode) .reaction-main:hover,
  body:not(.light-mode) .reply-btn:hover{background:#2b2b2b!important;border-color:#f5c400!important}
  body:not(.light-mode) .pin-tool.primary,
  body:not(.light-mode) .btn-primary,
  body:not(.light-mode) .reply-composer-actions .send{
    background:#f5c400!important;color:#0b0b0b!important;border-color:#f5c400!important
  }
  body:not(.light-mode) .pin-tool:disabled,
  body:not(.light-mode) .pin-tool[disabled]{opacity:.48;color:#888!important}
  body:not(.light-mode) .review-form textarea,
  body:not(.light-mode) .reply-composer textarea,
  body:not(.light-mode) .modal-body input:not([type="checkbox"]):not([type="radio"]),
  body:not(.light-mode) .modal-body select{
    background:#0b0b0b!important;color:#fff!important;border:1px solid #3f3f3f!important
  }
  body:not(.light-mode) .review-form textarea::placeholder,
  body:not(.light-mode) .reply-composer textarea::placeholder,
  body:not(.light-mode) .modal-body input::placeholder{color:#929292!important}
  body:not(.light-mode) .file-multi{background:#0d0d0d!important;color:#d0d0d0!important;border-color:#505050!important}
  body:not(.light-mode) .file-multi::file-selector-button{background:#f5c400;color:#111}
  body:not(.light-mode) .empty-review-state{background:#191919;border-color:#414141}
  body:not(.light-mode) .review{border-top-color:#2d2d2d}
  body:not(.light-mode) .star-pick span{color:#777}
  body:not(.light-mode) .star-pick span.active{color:#f5c400;text-shadow:0 0 10px rgba(245,196,0,.28)}
  body:not(.light-mode) .profile-stat-card,
  body:not(.light-mode) .profile-achievement,
  body:not(.light-mode) .social-user-row,
  body:not(.light-mode) .history-pin,
  body:not(.light-mode) .notification-item{background:#1a1a1a!important;color:#f5f5f5!important;border-color:#343434!important}
  body:not(.light-mode) .profile-stat-card span,
  body:not(.light-mode) .profile-achievement small,
  body:not(.light-mode) .notification-msg,
  body:not(.light-mode) .notification-date{color:#b7b7b7!important}

  @media(max-width:768px){
    .overlay{background:rgba(0,0,0,.76);backdrop-filter:blur(4px)}
    .modal{max-height:94svh;border-radius:22px 22px 0 0}
    .modal-head{padding:14px 16px}.modal-body{padding:14px 16px calc(24px + env(safe-area-inset-bottom))}
    .modal-head h3{font-size:18px;line-height:1.35}
    .pin-tools{grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}
    .pin-tool{min-height:58px;padding:8px 5px;flex-direction:column;font-size:10.5px;line-height:1.2}
    .admin-pin-actions{grid-template-columns:1fr;display:grid!important;gap:8px}
    .admin-pin-actions:not(.show){display:none!important}
    .admin-pin-actions button{width:100%}
    .review-form{padding-top:18px}
    .star-pick{font-size:34px;justify-content:space-between;max-width:300px}
    .file-multi{font-size:12px}
    .review-actions{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:7px}
    .review-actions button{width:100%;padding-left:6px;padding-right:6px}
    .review-delete-btn{grid-column:1/-1}
    .reply-list{margin-left:0;padding-left:10px}
  }
  @media(max-width:430px){
    .pin-tools{grid-template-columns:repeat(2,minmax(0,1fr))}
    .pin-tool{flex-direction:row;min-height:48px;font-size:12px}
    .review-actions{grid-template-columns:1fr 1fr}
    .review-delete-btn{grid-column:1/-1}
    .modal-body{padding-left:13px;padding-right:13px}
  }



/* ---------- v8 campus intelligence ---------- */
.broadcast-banner{display:none;margin:0 0 14px;padding:12px 14px;border:1px solid rgba(245,196,0,.42);border-radius:12px;background:rgba(245,196,0,.14);color:var(--paper);gap:10px;align-items:flex-start}.broadcast-banner.show{display:flex}.broadcast-banner .broadcast-body{flex:1}.broadcast-banner b{display:block;color:var(--gold);margin-bottom:2px}.broadcast-banner p{margin:0;font-size:12.5px;line-height:1.55}.broadcast-banner button{border:0;background:transparent;color:inherit;font-size:18px}
.ai-summary-card{margin:14px 0;padding:14px;border:1px solid rgba(245,196,0,.32);border-radius:12px;background:rgba(245,196,0,.08)}.ai-summary-card h4{margin:0 0 7px;color:var(--ink);font-size:14px}.ai-summary-card p{margin:5px 0;color:var(--ink-soft);font-size:12.5px;line-height:1.6}.ai-summary-tags{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}.ai-summary-tags span{padding:4px 8px;border-radius:999px;background:var(--gold);color:#111;font-size:10.5px;font-weight:700}.checkin-status{font-size:11.5px;color:var(--ink-soft);margin-top:7px}.analytics-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:9px;margin:12px 0}.analytics-card{padding:12px;border:1px solid rgba(0,0,0,.11);border-radius:11px;background:#fff}.analytics-card span{display:block;font-size:10.5px;color:var(--ink-soft)}.analytics-card b{display:block;font-size:22px;margin-top:4px;color:var(--ink)}.analytics-chart{display:flex;align-items:flex-end;gap:7px;height:150px;padding:14px 8px 28px;border:1px solid rgba(0,0,0,.1);border-radius:11px;background:#fff}.analytics-bar-wrap{flex:1;height:100%;display:flex;align-items:flex-end;position:relative}.analytics-bar{width:100%;min-height:3px;background:var(--gold);border-radius:6px 6px 2px 2px}.analytics-bar-label{position:absolute;left:50%;bottom:-20px;transform:translateX(-50%);font-size:9px;color:var(--ink-soft)}.broadcast-item{border:1px solid rgba(0,0,0,.1);border-radius:10px;padding:10px 12px;margin-top:8px;background:#fff}.broadcast-item .top{display:flex;justify-content:space-between;gap:8px}.broadcast-item small{color:var(--ink-soft)}
body:not(.light-mode) .broadcast-banner{color:#f5f5f5;background:rgba(245,196,0,.12)}body:not(.light-mode) .ai-summary-card{background:#171400;border-color:#7d6500}body:not(.light-mode) .ai-summary-card h4{color:#fff}body:not(.light-mode) .ai-summary-card p,body:not(.light-mode) .checkin-status{color:#d4d4d4}body:not(.light-mode) .analytics-card,body:not(.light-mode) .analytics-chart,body:not(.light-mode) .broadcast-item{background:#171717;border-color:#383838}body:not(.light-mode) .analytics-card b,body:not(.light-mode) .broadcast-item{color:#fff}body:not(.light-mode) .analytics-card span,body:not(.light-mode) .analytics-bar-label,body:not(.light-mode) .broadcast-item small{color:#bdbdbd}
@media(max-width:650px){.analytics-grid{grid-template-columns:repeat(2,1fr)}.analytics-chart{height:130px}.broadcast-banner{margin:0 2px 12px}}


  /* ---------- v9 animated SVG avatar frames (game-style) ---------- */
  .avatar{position:relative;isolation:isolate;transition:box-shadow .2s ease,filter .2s ease}
  .avatar-frame-wrap{position:relative;display:inline-flex;flex:0 0 auto;vertical-align:middle}
  .avatar.avatar-frame{box-shadow:0 0 0 2px var(--surface),0 0 10px var(--frame-glow,rgba(245,196,0,.55))}
  .avatar-frame-fx{position:absolute;inset:-26%;pointer-events:none;z-index:3;overflow:visible;filter:drop-shadow(0 0 5px var(--frame-glow,rgba(245,196,0,.6)))}
  .avatar-frame-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-top:12px}
  .avatar-frame-card{border:1px solid var(--line-strong);background:var(--surface-2);color:var(--paper);border-radius:12px;padding:12px;text-align:center;cursor:pointer;min-height:116px}
  .avatar-frame-card:hover,.avatar-frame-card.selected{border-color:var(--gold);box-shadow:inset 0 0 0 1px var(--gold)}
  .avatar-frame-card.locked{opacity:.48;cursor:not-allowed;filter:grayscale(.8)}
  .avatar-frame-card .avatar-frame-wrap,.avatar-frame-card>.avatar{margin:0 auto 8px}.avatar-frame-card b{display:block;font-size:12px}.avatar-frame-card small{display:block;color:var(--muted);font-size:10px;margin-top:3px}
  body.light-mode .avatar-frame-card{background:#fff;color:var(--ink)}
  @media(max-width:560px){.avatar-frame-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
  @media(prefers-reduced-motion:reduce){.avatar-frame-fx animate,.avatar-frame-fx animateTransform{display:none}}



  /* ---------- v8.2 clearer add-pin UX ---------- */
  .map-card{position:relative;overflow:hidden}
  .map-pick-guide{
    position:absolute;left:50%;bottom:58px;top:auto;z-index:700;display:none;
    width:min(520px,calc(100% - 28px));transform:translateX(-50%);
    background:rgba(13,13,13,.95);color:#fff;border:1px solid rgba(245,196,0,.65);
    border-radius:16px;padding:12px 14px;box-shadow:0 14px 38px rgba(0,0,0,.46);
    backdrop-filter:blur(8px)
  }
  .map-pick-guide.show{display:flex;align-items:center;gap:12px;animation:pinGuideIn .2s ease-out}
  .map-pick-guide .guide-icon{width:42px;height:42px;display:grid;place-items:center;flex:0 0 auto;border-radius:13px;background:#F5C400;color:#111;font-size:21px}
  .map-pick-guide b{display:block;font-size:14px;color:#fff}.map-pick-guide small{display:block;margin-top:2px;color:#d7d7d7;font-size:11.5px;line-height:1.45}
  .map-pick-guide button{margin-left:auto;flex:0 0 auto;border:1px solid rgba(255,255,255,.22);background:#252525;color:#fff;border-radius:999px;padding:7px 11px;font-size:11px}
  .map-card.is-picking{outline:3px solid #F5C400;outline-offset:-3px}
  .map-card.is-picking #map{cursor:crosshair}
  .map-card.is-picking::after{content:'';position:absolute;inset:0;z-index:450;pointer-events:none;box-shadow:inset 0 0 0 4px rgba(245,196,0,.35);animation:mapPickPulse 1.25s ease-in-out infinite}
  .add-pin-cta{margin-top:14px;padding:14px;border-radius:14px;background:linear-gradient(135deg,rgba(245,196,0,.16),rgba(245,196,0,.05));border:1px solid rgba(245,196,0,.38)}
  .add-pin-cta-head{display:flex;gap:11px;align-items:flex-start;margin-bottom:12px}
  .add-pin-cta-icon{width:42px;height:42px;display:grid;place-items:center;flex:0 0 auto;border-radius:13px;background:#F5C400;color:#111;font-size:21px;box-shadow:0 8px 20px rgba(245,196,0,.18)}
  .add-pin-cta h3{font-family:'Prompt',sans-serif;font-size:14px;margin:0;color:var(--paper)}
  .add-pin-cta p{font-size:11.5px;line-height:1.55;margin:3px 0 0;color:var(--muted)}
  .add-pin-main-btn{width:100%;min-height:48px;border:none;border-radius:12px;background:#F5C400;color:#111;font-size:14px;font-weight:800;box-shadow:0 8px 20px rgba(245,196,0,.18);transition:.16s}
  .add-pin-main-btn:hover{background:#FFD84D;transform:translateY(-1px)}
  .add-pin-main-btn.is-picking{background:#242424;color:#fff;border:1px solid rgba(245,196,0,.65);box-shadow:none}
  .add-pin-steps{display:grid;grid-template-columns:repeat(3,1fr);gap:7px;margin-top:10px}
  .add-pin-step{padding:8px 6px;border-radius:9px;background:rgba(255,255,255,.04);border:1px solid var(--line);text-align:center;color:var(--muted);font-size:10.5px;line-height:1.35}
  .add-pin-step b{display:block;color:var(--gold);font-size:11px;margin-bottom:2px}
  @keyframes mapPickPulse{0%,100%{opacity:.45}50%{opacity:1}}
  @keyframes pinGuideIn{from{opacity:0;transform:translate(-50%,-8px)}to{opacity:1;transform:translate(-50%,0)}}
  body.light-mode .map-pick-guide{background:rgba(255,255,255,.97);color:#17211D}.light-mode .map-pick-guide b{color:#17211D}.light-mode .map-pick-guide small{color:#53605A}.light-mode .map-pick-guide button{background:#fff;color:#17211D;border-color:rgba(0,0,0,.16)}
  body.light-mode .add-pin-cta h3{color:var(--ink)}body.light-mode .add-pin-step{background:rgba(255,255,255,.72)}
  .desktop-map-add-btn{position:absolute;right:18px;top:18px;z-index:710;display:inline-flex;align-items:center;gap:9px;min-height:48px;padding:0 18px;border:1px solid rgba(17,17,17,.16);border-radius:14px;background:#F5C400;color:#111;font-size:14px;font-weight:900;box-shadow:0 12px 30px rgba(0,0,0,.32),0 0 0 1px rgba(255,255,255,.16);transition:transform .16s ease,background .16s ease,box-shadow .16s ease}
  .desktop-map-add-btn::before{content:'+';display:grid;place-items:center;width:27px;height:27px;border-radius:9px;background:rgba(0,0,0,.12);font-size:20px;line-height:1}
  .desktop-map-add-btn:hover{background:#FFD84D;transform:translateY(-2px);box-shadow:0 15px 34px rgba(0,0,0,.38),0 0 0 2px rgba(245,196,0,.24)}
  .desktop-map-add-btn.is-picking{background:#202020;color:#fff;border-color:rgba(245,196,0,.72)}
  .desktop-map-add-btn.is-picking::before{content:'×';background:rgba(255,255,255,.13)}
  .desktop-add-pin-note{display:block;margin-top:10px;padding:10px 11px;border-radius:10px;background:rgba(245,196,0,.08);border:1px solid rgba(245,196,0,.18);font-size:11.5px;color:var(--muted);line-height:1.5}
  @media(max-width:768px){
    .desktop-map-add-btn{display:none}
    .mobile-add-pin-fab{left:14px;right:14px;bottom:76px;width:auto;min-height:54px;justify-content:center;border-radius:15px;font-size:14px;box-shadow:0 12px 30px rgba(0,0,0,.5),0 0 0 1px rgba(245,196,0,.28)}
    .mobile-add-pin-fab::before{content:'+';display:grid;place-items:center;width:26px;height:26px;border-radius:9px;background:rgba(0,0,0,.13);font-size:20px;font-weight:900}
    .mobile-add-pin-fab.is-picking::before{content:'×';background:rgba(255,255,255,.14)}
    .contact-fab{bottom:16px}
    .map-pick-guide{bottom:54px;top:auto;padding:10px 11px;border-radius:13px}.map-pick-guide .guide-icon{width:36px;height:36px;border-radius:11px;font-size:18px}.map-pick-guide b{font-size:12.5px}.map-pick-guide small{font-size:10.5px}
    .add-pin-steps{grid-template-columns:1fr}.add-pin-step{text-align:left;padding:8px 10px}.add-pin-step b{display:inline;margin-right:5px}
  }



  /* ---------- v8.5 weekly popular pin ---------- */
  .weekly-popular-card{margin-top:16px;position:relative;overflow:hidden;background:linear-gradient(145deg,var(--surface) 0%,#1c1800 100%);border-color:rgba(245,196,0,.34)}
  .weekly-popular-card:before{content:"";position:absolute;right:-70px;top:-80px;width:190px;height:190px;border-radius:50%;background:radial-gradient(circle,rgba(245,196,0,.18),transparent 68%);pointer-events:none}
  .weekly-popular-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:14px}
  .weekly-popular-kicker{display:inline-flex;align-items:center;gap:6px;color:var(--gold);font-size:11px;font-weight:800;letter-spacing:.5px;text-transform:uppercase}
  .weekly-popular-head h2{font-size:20px;margin:3px 0 2px}.weekly-popular-period{font-size:11px;color:var(--muted)}
  .weekly-rank{width:48px;height:48px;display:grid;place-items:center;border-radius:15px;background:var(--gold);color:#111;font-size:23px;font-weight:900;box-shadow:0 8px 22px rgba(245,196,0,.2)}
  .weekly-popular-main{display:grid;grid-template-columns:1fr auto;gap:14px;align-items:center;padding:14px;border:1px solid var(--line);border-radius:13px;background:rgba(0,0,0,.2);cursor:pointer}
  .weekly-popular-main:hover{border-color:var(--gold)}
  .weekly-pin-name{font-size:17px;font-weight:800;color:var(--paper);margin-bottom:3px}.weekly-pin-cat{font-size:11px;color:var(--muted)}
  .weekly-rating{text-align:right}.weekly-rating b{display:block;color:var(--gold);font-size:20px}.weekly-rating span{font-size:10px;color:var(--muted)}
  .weekly-metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-top:10px}
  .weekly-metric{padding:10px 8px;border-radius:10px;background:var(--surface-2);border:1px solid var(--line);text-align:center}.weekly-metric b{display:block;font-size:17px;color:var(--paper)}.weekly-metric span{font-size:9.5px;color:var(--muted)}
  .weekly-top-review{margin-top:10px;padding:11px 12px;border-left:3px solid var(--gold);border-radius:8px;background:rgba(245,196,0,.08)}.weekly-top-review small{display:block;color:var(--gold);font-weight:700;margin-bottom:3px}.weekly-top-review p{margin:0;color:var(--paper);font-size:12px;line-height:1.55}.weekly-top-review .helpful{margin-top:5px;color:var(--muted);font-size:10.5px}
  .weekly-loading,.weekly-empty{padding:22px 8px;text-align:center;color:var(--muted);font-size:12.5px}.weekly-refresh-note{margin-top:10px;font-size:10.5px;color:var(--muted);text-align:center}
  body.light-mode .weekly-popular-card{background:linear-gradient(145deg,#fff,#fff8dc)}body.light-mode .weekly-popular-main{background:#fff}body.light-mode .weekly-pin-name,body.light-mode .weekly-metric b,body.light-mode .weekly-top-review p{color:var(--ink)}
  @media(max-width:560px){.weekly-popular-head h2{font-size:18px}.weekly-metrics{grid-template-columns:repeat(2,1fr)}.weekly-popular-main{grid-template-columns:1fr}.weekly-rating{text-align:left;display:flex;align-items:center;gap:7px}.weekly-rating b{display:inline}.weekly-rank{width:42px;height:42px}.weekly-popular-card{margin-top:12px}}


/* ---------- v9.1 mobile campus pins bottom sheet ---------- */
.campus-sheet-head{display:flex;align-items:center;justify-content:space-between;gap:12px}
.campus-sheet-title{min-width:0}
.campus-sheet-count{display:none}
.campus-sheet-handle,.campus-sheet-close{display:none}
@media (max-width:900px){
  body.mobile-sheet-open{overflow:hidden}
  .shell{padding-bottom:110px}
  #map{height:calc(100dvh - 255px);min-height:390px;max-height:620px}
  #campusPinsCard{
    position:fixed;left:0;right:0;bottom:0;z-index:850;
    height:min(88dvh,760px);margin:0!important;padding:0 16px 22px!important;
    border-radius:22px 22px 0 0;border-left:0;border-right:0;border-bottom:0;
    transform:translateY(calc(100% - 86px));
    transition:transform .28s cubic-bezier(.2,.8,.2,1),box-shadow .28s ease;
    box-shadow:0 -14px 40px rgba(0,0,0,.42);overflow:hidden;touch-action:none;
    will-change:transform;
  }
  #campusPinsCard.sheet-half{transform:translateY(48%)}
  #campusPinsCard.sheet-full{transform:translateY(0)}
  #campusPinsCard.sheet-dragging{transition:none}
  #campusPinsCard .campus-sheet-head{
    position:sticky;top:0;z-index:2;margin:0 -16px 0;padding:9px 16px 12px;
    background:var(--surface);border-bottom:1px solid var(--line);cursor:grab;
  }
  #campusPinsCard .campus-sheet-title h2{font-size:17px;margin-top:12px}
  #campusPinsCard .campus-sheet-title .hint{display:none}
  .campus-sheet-handle{display:block;position:absolute;top:7px;left:50%;transform:translateX(-50%);width:44px;height:5px;border:0;border-radius:999px;background:var(--line-strong);padding:0}
  .campus-sheet-count{display:inline-flex;align-items:center;justify-content:center;min-width:34px;height:28px;padding:0 9px;border-radius:999px;background:rgba(245,196,0,.14);color:var(--gold);font-size:12px;font-weight:700;margin-right:34px}
  .campus-sheet-close{display:flex;position:absolute;right:13px;top:27px;width:30px;height:30px;border:1px solid var(--line);border-radius:50%;align-items:center;justify-content:center;background:var(--surface-2);color:var(--paper);font-size:19px;line-height:1}
  #campusPinsCard .discovery{margin-top:14px}
  #campusPinsCard .legend{max-height:58px;overflow:auto}
  #campusPinsCard .pinlist{max-height:none;height:calc(100% - 310px);min-height:180px;overflow-y:auto;overscroll-behavior:contain;padding-bottom:12px;touch-action:pan-y}
  #campusPinsCard .addrow{padding-bottom:max(10px,env(safe-area-inset-bottom))}
  #campusPinsCard.sheet-collapsed .discovery,
  #campusPinsCard.sheet-collapsed .legend,
  #campusPinsCard.sheet-collapsed .pinlist,
  #campusPinsCard.sheet-collapsed .addrow{visibility:hidden;pointer-events:none}
  body.light-mode #campusPinsCard .campus-sheet-head{background:#fff}
}
@media (max-width:560px){
  .topbar{padding-bottom:14px}
  .route{margin-bottom:14px}
  #map{height:calc(100dvh - 225px);min-height:360px}
  #campusPinsCard{height:92dvh}
  #campusPinsCard.sheet-half{transform:translateY(44%)}
  #campusPinsCard .pinlist{height:calc(100% - 292px)}
}


/* ---------- v9.2 mobile map FAB: stays above the campus sheet ---------- */
@media (max-width:900px){
  :root{--campus-sheet-visible:86px}
  .mobile-add-pin-fab{
    left:auto!important;
    right:16px!important;
    bottom:calc(var(--campus-sheet-visible,86px) + 14px + env(safe-area-inset-bottom))!important;
    width:56px!important;
    min-width:56px!important;
    height:56px!important;
    min-height:56px!important;
    padding:0!important;
    border-radius:50%!important;
    z-index:905!important;
    gap:0!important;
    overflow:hidden;
    white-space:nowrap;
    box-shadow:0 10px 28px rgba(0,0,0,.38),0 0 0 1px rgba(255,255,255,.26)!important;
    transition:bottom .28s cubic-bezier(.2,.8,.2,1),width .2s ease,border-radius .2s ease,transform .16s ease,background .16s ease!important;
  }
  .mobile-add-pin-fab::before{
    content:'+'!important;
    width:auto!important;height:auto!important;
    border-radius:0!important;background:transparent!important;
    font-size:30px!important;line-height:1!important;font-weight:700!important;
  }
  .mobile-add-pin-fab > span{
    display:none;
    margin-left:8px;
    font-size:13px;
    font-weight:800;
  }
  .mobile-add-pin-fab.is-picking{
    width:min(238px,calc(100vw - 32px))!important;
    border-radius:18px!important;
    padding:0 17px!important;
    justify-content:center;
  }
  .mobile-add-pin-fab.is-picking::before{content:'×'!important;font-size:25px!important}
  .mobile-add-pin-fab.is-picking > span{display:inline!important}
  #campusPinsCard.sheet-dragging ~ .mobile-add-pin-fab{transition:none!important}
}
@media (max-width:420px){
  .mobile-add-pin-fab{right:14px!important;width:54px!important;min-width:54px!important;height:54px!important;min-height:54px!important}
  .mobile-add-pin-fab.is-picking{width:min(225px,calc(100vw - 28px))!important}
}




/* ---------- MSU Indoor 3.0 — อาคารเรียนเท่านั้น ---------- */
.indoor-admin-launch{width:100%;margin-top:10px}
.indoor-editor-overlay{z-index:99999;background:rgba(0,0,0,.82);backdrop-filter:blur(10px)}
.indoor-editor-shell{width:min(1320px,98vw);height:min(900px,96svh);display:flex;flex-direction:column;overflow:hidden;border-radius:22px;background:var(--surface);border:1px solid var(--line-strong)}
.indoor-editor-head{display:flex;align-items:center;gap:12px;padding:12px 16px;border-bottom:1px solid var(--line);background:var(--surface);flex:0 0 auto}.indoor-editor-head h3{margin:0}.indoor-editor-head .tagline{margin-top:2px}
.indoor-editor-actions{margin-left:auto;display:flex;gap:8px;flex-wrap:wrap}.indoor-editor-actions button{border:1px solid var(--line);border-radius:10px;padding:9px 12px;background:var(--surface-2);color:var(--paper);font-weight:800}.indoor-editor-actions .save{background:#F5C400;color:#111;border-color:#F5C400}
.indoor-editor-grid{display:grid;grid-template-columns:260px minmax(0,1fr) 300px;min-height:0;flex:1}.indoor-editor-left,.indoor-editor-right{padding:14px;overflow:auto;background:var(--surface-2)}.indoor-editor-left{border-right:1px solid var(--line)}.indoor-editor-right{border-left:1px solid var(--line)}
.indoor-editor-left label,.indoor-editor-right label{display:block;font-size:11px;font-weight:900;color:var(--muted);margin:10px 0 5px}.indoor-editor-left input,.indoor-editor-left select,.indoor-editor-right input,.indoor-editor-right select,.indoor-editor-right textarea{width:100%;border:1px solid var(--line-strong);background:var(--surface);color:var(--paper);border-radius:10px;padding:9px 10px}
.editor-floor-select{display:block;width:100%;margin-top:8px;border:1px solid var(--line-strong);border-radius:10px;background:var(--surface);color:var(--paper);padding:10px 34px 10px 11px;font-weight:800}
.editor-room-select{display:none;width:100%;border:1px solid var(--line-strong);border-radius:10px;background:var(--surface);color:var(--paper);padding:10px 34px 10px 11px;font-weight:800}
.indoor-editor-canvas{position:relative;overflow:auto;background-color:#d8d5cc;background-image:linear-gradient(rgba(0,0,0,.035) 1px,transparent 1px),linear-gradient(90deg,rgba(0,0,0,.035) 1px,transparent 1px);background-size:24px 24px;padding:26px;display:grid;place-items:center;min-width:0}.indoor-editor-svg{width:min(900px,100%);min-width:650px;height:auto;filter:drop-shadow(0 16px 30px rgba(0,0,0,.25));touch-action:none}.indoor-editor-svg .editor-bg{fill:#f7f2e5;stroke:#333;stroke-width:5}.indoor-editor-svg .editor-room{fill:#fff;stroke:#4c493f;stroke-width:3;cursor:move}.indoor-editor-svg .editor-room.selected{fill:#F5C400;stroke:#111;stroke-width:5}.indoor-editor-svg text{pointer-events:none;font-family:'Prompt',sans-serif;fill:#252525;font-weight:800;font-size:16px}.indoor-editor-svg image{pointer-events:none}
.editor-room-list{display:grid;gap:6px;margin-top:10px}.editor-room-item{border:1px solid var(--line);background:var(--surface);border-radius:9px;padding:8px;text-align:left;color:var(--paper)}.editor-room-item.active{border-color:#F5C400}.editor-mini-grid{display:grid;grid-template-columns:1fr 1fr;gap:7px}.editor-danger{width:100%;margin-top:12px;border:1px solid #ef4444!important;color:#ef4444!important;background:transparent!important}.editor-help{font-size:11px;line-height:1.55;color:var(--muted);margin-top:10px}.editor-status{font-size:11px;color:var(--muted);margin-top:8px}.editor-upload{display:block;border:1px dashed var(--line-strong);padding:10px;border-radius:10px;text-align:center;cursor:pointer;margin-top:8px}.editor-upload input{display:none}
.indoor-management-summary{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:9px;margin:14px 0}.indoor-management-stat{padding:13px;border:1px solid var(--line);border-radius:12px;background:var(--surface-2)}.indoor-management-stat span{display:block;font-size:10px;color:var(--muted)}.indoor-management-stat b{font-size:22px;color:#F5C400}.indoor-building-list{display:grid;gap:9px}.indoor-building-card{padding:13px;border:1px solid var(--line);border-radius:12px;background:var(--surface-2)}.indoor-building-head{display:flex;justify-content:space-between;gap:10px}.indoor-building-actions{display:flex;align-items:center;gap:7px}.indoor-building-head button{border:1px solid var(--line);border-radius:9px;background:var(--surface);color:var(--paper);padding:7px 10px}.indoor-building-head .indoor-delete-candidate{border-color:rgba(239,68,68,.38);color:#dc2626;background:rgba(239,68,68,.07)}.indoor-building-head .indoor-delete-candidate:hover{background:#dc2626;color:#fff;border-color:#dc2626}.indoor-progress-track{height:7px;background:rgba(127,127,127,.2);border-radius:99px;overflow:hidden;margin:9px 0 5px}.indoor-progress-track i{display:block;height:100%;background:#F5C400}.indoor-progress-meta{font-size:10.5px;color:var(--muted)}.indoor-status-badge{font-size:10px;font-weight:900;padding:4px 7px;border-radius:999px;background:rgba(148,163,184,.2)}.indoor-status-badge.published{background:rgba(34,197,94,.18);color:#22c55e}.editor-project-status{display:flex;gap:6px;align-items:center}.editor-project-status select{border:1px solid var(--line);border-radius:10px;padding:8px;background:var(--surface-2);color:var(--paper)}.editor-floor-tools{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin-top:7px}.editor-floor-tools button{border:1px solid var(--line);border-radius:8px;padding:7px;background:var(--surface);color:var(--paper);font-size:11px}.editor-floor-tools .wide{grid-column:1/-1}.editor-floor-tools .danger{color:#ef4444}
.indoor-registrar-import{display:grid;grid-template-columns:minmax(120px,1fr) auto auto;gap:7px;margin:12px 0;padding:11px;border:1px solid var(--line);border-radius:12px;background:var(--surface-2)}.indoor-registrar-import input,.indoor-registrar-import button{border:1px solid var(--line-strong);border-radius:9px;padding:9px;background:var(--surface);color:var(--paper)}.indoor-registrar-import button:last-of-type{background:#F5C400;color:#111;font-weight:900}.indoor-registrar-import small{grid-column:1/-1;color:var(--muted)}
.community-submit-btn{width:100%;margin-top:14px;border:1px solid #F5C400;border-radius:11px;padding:10px;background:rgba(245,196,0,.12);color:#F5C400;font-weight:900}.community-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px}.community-grid .wide{grid-column:1/-1}.community-form label{display:block;font-size:11px;font-weight:800;margin:10px 0 5px}.community-form input,.community-form select,.community-form textarea{width:100%;border:1px solid var(--line-strong);background:var(--surface-2);color:var(--paper);border-radius:10px;padding:10px}.community-form textarea{min-height:90px;resize:vertical}.community-status-tabs{display:flex;gap:7px;flex-wrap:wrap;margin:10px 0}.community-status-tabs button{border:1px solid var(--line);border-radius:999px;padding:7px 10px;background:var(--surface-2);color:var(--paper)}.community-status-tabs button.active{background:#F5C400;color:#111}.community-submission-list{display:grid;gap:10px}.community-submission-card{border:1px solid var(--line);border-radius:13px;padding:13px;background:var(--surface-2)}.community-submission-head{display:flex;justify-content:space-between;gap:10px}.community-submission-meta{font-size:10.5px;color:var(--muted);margin-top:4px}.community-compare{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:10px}.community-compare>div{border:1px solid var(--line);border-radius:9px;padding:9px;font-size:11px;white-space:pre-wrap}.community-compare b{display:block;margin-bottom:5px}.community-submission-actions{display:flex;gap:7px;margin-top:10px}.community-submission-actions button{flex:1;border:1px solid var(--line);border-radius:9px;padding:8px;background:var(--surface);color:var(--paper)}.community-submission-actions .approve{background:#15803d;color:#fff}.community-submission-actions .reject{background:#b91c1c;color:#fff}.community-submission-image{width:92px;height:68px;object-fit:cover;border-radius:8px;margin:8px 5px 0 0}.community-note{font-size:11px;color:var(--muted);line-height:1.55}.status-pill.approved{background:#dcfce7;color:#166534}.status-pill.rejected{background:#fee2e2;color:#991b1b}
.room-review-section{margin-top:18px;border-top:1px solid var(--line);padding-top:16px}.room-review-summary{display:flex;align-items:center;gap:12px;margin-bottom:12px}.room-review-score{font-size:36px;font-weight:900;color:#F5C400}.room-review-stars{color:#F5C400;letter-spacing:1px}.room-review-form{border:1px solid var(--line);border-radius:12px;padding:12px;background:var(--surface)}.room-review-form textarea,.room-review-form select,.room-review-form input{width:100%;border:1px solid var(--line-strong);background:var(--surface-2);color:var(--paper);border-radius:9px;padding:8px}.room-review-form textarea{min-height:76px;margin-top:8px}.room-review-ratings{display:grid;grid-template-columns:1fr 1fr;gap:7px;margin:9px 0}.room-review-ratings label{font-size:10px;color:var(--muted)}.room-review-ratings select{margin-top:3px}.room-review-list{display:grid;gap:10px;margin-top:13px}.room-review-card{border:1px solid var(--line);border-radius:12px;padding:12px;background:var(--surface)}.room-review-head{display:flex;justify-content:space-between;gap:9px}.room-review-meta{font-size:10px;color:var(--muted)}.room-review-text{margin:8px 0;white-space:pre-wrap}.room-review-image{max-width:100%;max-height:220px;border-radius:10px;object-fit:cover}.room-review-actions{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}.room-review-actions button{border:1px solid var(--line);border-radius:999px;padding:6px 9px;background:var(--surface-2);color:var(--paper);font-size:10.5px}.room-review-actions button.on{border-color:#F5C400;color:#F5C400}.room-review-replies{margin:9px 0 0 12px;border-left:2px solid var(--line);padding-left:9px}.room-review-reply{font-size:11px;margin-top:7px}.room-review-ai{padding:9px;border-radius:10px;background:rgba(245,196,0,.09);font-size:11px;line-height:1.55;margin-bottom:12px}
.global-indoor-search{position:absolute;z-index:900;left:50%;top:14px;transform:translateX(-50%)}.global-search-toggle{width:48px;height:48px;border:2px solid #fff;border-radius:50%;display:grid;place-items:center;background:#111;color:#F5C400;font-size:20px;cursor:pointer;box-shadow:0 8px 24px rgba(0,0,0,.35)}.global-search-toggle:hover,.global-search-toggle[aria-expanded="true"]{background:#F5C400;color:#111;border-color:#111}.global-search-panel{display:none;position:absolute;left:50%;top:58px;transform:translateX(-50%);width:min(520px,calc(100vw - 42px));padding:10px;background:rgba(17,17,17,.97);border:1px solid rgba(245,196,0,.48);border-radius:16px;box-shadow:0 16px 38px rgba(0,0,0,.42)}.global-indoor-search.open .global-search-panel{display:block;animation:popSearch .16s ease-out}.global-search-head{display:flex;align-items:center;justify-content:space-between;padding:2px 3px 9px;color:#fff;font-weight:900}.global-search-close{width:30px;height:30px;border:1px solid rgba(255,255,255,.18);border-radius:50%;background:#282828;color:#fff;cursor:pointer}.global-search-box{display:flex;gap:6px;padding:7px;background:#202020;border:1px solid rgba(255,255,255,.12);border-radius:12px}.global-search-box input{flex:1;min-width:0;border:0;background:transparent;color:#fff;padding:9px 10px;outline:0}.global-search-box select{max-width:132px;border:1px solid rgba(255,255,255,.15);background:#252525;color:#fff;border-radius:9px;padding:7px}.global-search-results{display:none;margin-top:7px;max-height:360px;overflow:auto;border-top:1px solid rgba(255,255,255,.1);padding:4px}.global-search-results.show{display:block}.global-search-group-title{font-size:10px;color:#F5C400;font-weight:900;letter-spacing:.1em;padding:7px 8px 4px}.global-search-result{display:flex;width:100%;align-items:center;justify-content:space-between;gap:12px;text-align:left;border:0;border-top:1px solid rgba(255,255,255,.08);background:transparent;color:#fff;padding:9px;border-radius:8px}.global-search-result:hover{background:rgba(245,196,0,.12)}.global-search-result b{display:block}.global-search-result small{color:#aaa}.global-search-result strong{flex:none;color:#F5C400;font-size:10px}.global-search-empty{padding:14px;color:#aaa;text-align:center;font-size:12px}@keyframes popSearch{from{opacity:0;transform:translateX(-50%) translateY(-8px) scale(.98)}to{opacity:1;transform:translateX(-50%)}}
@media(max-width:700px){.global-indoor-search{left:calc(50% - 22px);top:10px;transform:none}.global-search-toggle{width:44px;height:44px}.global-search-panel{position:fixed;left:10px;right:10px;top:68px;width:auto;transform:none}.global-indoor-search.open .global-search-panel{animation:none}.global-search-box{display:grid;grid-template-columns:1fr auto}.global-search-box select{max-width:110px}.global-search-results{max-height:52svh}}
@media(max-width:700px){.indoor-management-summary{grid-template-columns:1fr 1fr}.editor-project-status{width:100%;order:3}.editor-project-status select{flex:1}}
@media(max-width:700px){.indoor-registrar-import{grid-template-columns:1fr 1fr}.indoor-registrar-import input{grid-column:1/-1}}
@media(max-width:620px){.community-grid,.community-compare{grid-template-columns:1fr}.community-grid .wide{grid-column:auto}}
@media(max-width:900px){
 .indoor-editor-shell{width:100%;height:100svh;border:0;border-radius:0}
 .indoor-editor-head{padding:calc(8px + env(safe-area-inset-top)) 9px 8px;gap:7px;flex-wrap:wrap}
 .indoor-editor-head h3{font-size:15px}.indoor-editor-head .tagline{display:none}.indoor-back{width:38px;height:38px;flex:0 0 auto}
 .editor-project-status{order:3;width:100%;margin:0}.editor-project-status label{display:none}.editor-project-status select{width:100%;min-height:40px}
 .indoor-editor-actions{gap:6px}.indoor-editor-actions button{padding:8px 9px;font-size:11px}
 .indoor-editor-actions #editorNewFloor{display:none}.indoor-editor-actions #editorAddRoom,.indoor-editor-actions .save{display:block}
 .indoor-editor-grid{grid-template-columns:1fr;grid-template-rows:auto minmax(210px,1fr) minmax(84px,42svh)}
 .indoor-editor-left{border-right:0;border-bottom:1px solid var(--line);padding:8px 9px;display:grid;grid-template-columns:1fr 1fr;gap:7px}
 .indoor-editor-left label,.indoor-editor-left #editorBuildingCode,.indoor-editor-left .editor-floor-tools,.indoor-editor-left .editor-upload,.indoor-editor-left #editorClearBackground,.indoor-editor-left .editor-help,.indoor-editor-left #editorRoomList{display:none}
 .indoor-editor-left select{margin:0;min-width:0;min-height:42px}
 .indoor-editor-left .editor-floor-select{display:block}
 .indoor-editor-left .editor-room-select{display:block;grid-column:1/-1}
 .indoor-editor-canvas{padding:12px 8px;place-items:start center}.indoor-editor-svg{min-width:620px}
 .indoor-editor-right{border-left:0;border-top:1px solid var(--line);max-height:none;padding:10px 12px calc(16px + env(safe-area-inset-bottom));overflow:auto}
 .indoor-editor-right label{margin-top:8px}.editor-mini-grid{gap:6px}.editor-status{position:sticky;bottom:0;background:var(--surface-2);padding:6px 0}
}
@media(max-width:430px){
 .indoor-editor-head>div:nth-child(2){min-width:0;flex:1}.indoor-editor-head h3{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
 .indoor-editor-actions{margin-left:0}.indoor-editor-actions button{min-height:38px}
 .indoor-editor-grid{grid-template-rows:auto minmax(190px,1fr) minmax(96px,44svh)}
}

/* ---------- MSU Indoor 3.0 Phase 1 ---------- */
.indoor-launch{background:linear-gradient(135deg,#111,#282828)!important;color:#fff!important;border-color:#F5C400!important;box-shadow:inset 4px 0 0 #F5C400}
.indoor-launch[hidden]{display:none!important}
.indoor-overlay{z-index:2400;background:rgba(0,0,0,.78);backdrop-filter:blur(10px)}
.indoor-shell{width:min(1180px,96vw);height:min(860px,94svh);max-width:none!important;display:flex;flex-direction:column;overflow:hidden;border-radius:22px;background:var(--surface);border:1px solid var(--line-strong)}
.indoor-topbar{display:flex;align-items:center;gap:12px;padding:14px 18px;border-bottom:1px solid var(--line);background:var(--surface);flex:0 0 auto}
.indoor-back{border:0;background:var(--surface-2);color:var(--paper);width:42px;height:42px;border-radius:13px;font-size:20px}
.indoor-title{min-width:0;flex:1}.indoor-title h3{margin:0;font-size:18px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.indoor-title p{margin:3px 0 0;color:var(--muted);font-size:11.5px}
.indoor-source{display:inline-flex;align-items:center;gap:6px;border:1px solid rgba(245,196,0,.45);background:rgba(245,196,0,.12);color:#F5C400;padding:6px 9px;border-radius:999px;font-size:10.5px;font-weight:800}
.indoor-layout{display:grid;grid-template-columns:220px minmax(0,1fr) 300px;min-height:0;flex:1}
.indoor-sidebar,.indoor-info{padding:16px;overflow:auto;background:var(--surface-2)}
.indoor-sidebar{border-right:1px solid var(--line)}.indoor-info{border-left:1px solid var(--line)}
.indoor-side-label{font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--muted);font-weight:900;margin:4px 0 10px}
.indoor-floor-list{display:grid;gap:8px}.indoor-floor-btn{display:flex;align-items:center;justify-content:space-between;width:100%;border:1px solid var(--line);background:var(--surface);color:var(--paper);border-radius:12px;padding:11px 12px;text-align:left;font-weight:800}.indoor-floor-btn.active{border-color:#F5C400;background:rgba(245,196,0,.12);box-shadow:inset 3px 0 0 #F5C400}
.indoor-search{width:100%;border:1px solid var(--line-strong);background:var(--surface);color:var(--paper);border-radius:12px;padding:11px 12px;margin-bottom:10px}
.indoor-room-results{display:grid;gap:6px}.indoor-room-result{border:1px solid var(--line);background:var(--surface);color:var(--paper);border-radius:10px;padding:9px 10px;text-align:left}.indoor-room-result b{display:block}.indoor-room-result small{color:var(--muted)}
.indoor-route-box{margin-top:14px;padding:10px;border:1px solid rgba(245,196,0,.35);border-radius:12px;background:rgba(245,196,0,.07)}.indoor-route-box label{display:block;font-size:10px;color:var(--muted);margin:7px 0 4px}.indoor-route-box select{width:100%;border:1px solid var(--line-strong);background:var(--surface);color:var(--paper);border-radius:9px;padding:8px}.indoor-route-accessible{display:flex!important;align-items:center;gap:7px;margin:9px 0!important;color:var(--paper)!important}.indoor-route-accessible input{width:auto}.indoor-route-actions{display:grid;grid-template-columns:1fr auto;gap:6px}.indoor-route-actions button{border:1px solid var(--line);border-radius:9px;padding:8px;background:var(--surface);color:var(--paper);font-weight:800}.indoor-route-actions .start{background:#F5C400;color:#111;border-color:#F5C400}.indoor-route-status{margin-top:8px;font-size:10px;line-height:1.5;color:var(--muted)}.indoor-navigate-room{width:100%;margin-top:12px;border:0;border-radius:11px;padding:10px;background:#F5C400;color:#111;font-weight:900}
.indoor-canvas-wrap{position:relative;overflow:auto;display:grid;place-items:center;background-color:#d8d5cc;background-image:linear-gradient(rgba(0,0,0,.035) 1px,transparent 1px),linear-gradient(90deg,rgba(0,0,0,.035) 1px,transparent 1px);background-size:24px 24px;padding:28px;min-width:0}
.indoor-map-svg{width:min(900px,100%);height:auto;min-width:620px;filter:drop-shadow(0 18px 34px rgba(0,0,0,.24));touch-action:pan-x pan-y}
.indoor-map-svg .building-shell{fill:#f7f2e5;stroke:#343434;stroke-width:8}
.indoor-map-svg .corridor{fill:#e6dfca;stroke:#a39b86;stroke-width:2}
.indoor-map-svg .room{fill:#fff;stroke:#544f43;stroke-width:3;cursor:pointer;transition:fill .15s,transform .15s;transform-box:fill-box;transform-origin:center}
.indoor-map-svg .room:hover{fill:#fff2a8}.indoor-map-svg .room.selected{fill:#F5C400;stroke:#111;stroke-width:5}.indoor-map-svg .room.search-match{animation:indoorPulse 1s ease-in-out infinite}
.indoor-route-line{fill:none;stroke:#ef4444;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:18 10;animation:indoorRouteFlow .8s linear infinite}.indoor-route-point{fill:#fff;stroke:#ef4444;stroke-width:6}.indoor-route-label{font-size:13px!important;fill:#991b1b!important}.indoor-floor-btn.route-floor{box-shadow:inset 3px 0 0 #ef4444}.indoor-route-banner{position:absolute;top:14px;left:50%;transform:translateX(-50%);z-index:2;padding:8px 12px;background:rgba(17,17,17,.9);color:#fff;border-radius:999px;font-size:11px;white-space:nowrap}
.indoor-map-svg .facility{fill:#1f6f5d;stroke:#fff;stroke-width:2;cursor:pointer}.indoor-map-svg text{pointer-events:none;font-family:'Prompt',sans-serif;fill:#292929;font-size:18px;font-weight:800}.indoor-map-svg .minor{font-size:14px;font-weight:600;fill:#625e54}
@keyframes indoorPulse{50%{fill:#ffe472}}
@keyframes indoorRouteFlow{to{stroke-dashoffset:-28}}
.indoor-empty-info{display:grid;place-items:center;text-align:center;min-height:260px;color:var(--muted)}.indoor-empty-info .ico{font-size:44px;margin-bottom:10px}
.indoor-room-card h4{font-size:22px;margin:0 0 4px}.indoor-room-code{color:#F5C400;font-family:'IBM Plex Mono',monospace;font-weight:900}.indoor-room-meta{display:grid;gap:8px;margin:16px 0}.indoor-room-meta div{display:flex;justify-content:space-between;gap:12px;border-bottom:1px solid var(--line);padding-bottom:8px}.indoor-room-tags{display:flex;flex-wrap:wrap;gap:7px}.indoor-room-tag{font-size:11px;padding:6px 8px;background:var(--surface);border:1px solid var(--line);border-radius:999px}.indoor-review-placeholder{margin-top:16px;padding:12px;border:1px dashed var(--line-strong);border-radius:12px;color:var(--muted);font-size:12px;line-height:1.6}
.indoor-legend{position:absolute;left:16px;bottom:16px;background:rgba(255,255,255,.92);color:#222;padding:8px 10px;border-radius:10px;font-size:10px;box-shadow:0 6px 20px rgba(0,0,0,.15)}
body.light-mode .indoor-shell,body.light-mode .indoor-topbar,body.light-mode .indoor-floor-btn,body.light-mode .indoor-search,body.light-mode .indoor-room-result{color:#17211D}
@media(max-width:900px){
 .indoor-shell{width:100%;height:100svh;max-height:none;border-radius:0;border:0}
 .indoor-topbar{padding:10px 12px calc(10px + env(safe-area-inset-top))}.indoor-source{display:none}
 .indoor-layout{grid-template-columns:1fr;grid-template-rows:auto minmax(0,1fr) auto}
 .indoor-sidebar{padding:10px 12px;border-right:0;border-bottom:1px solid var(--line);overflow:visible}
 .indoor-side-label{display:none}.indoor-floor-list{display:flex;overflow-x:auto;gap:7px}.indoor-floor-btn{width:auto;min-width:78px;justify-content:center;padding:9px 12px}.indoor-floor-btn span:last-child{display:none}
 .indoor-search{margin:9px 0 0}.indoor-room-results{display:none}
 .indoor-canvas-wrap{padding:18px 12px;place-items:start center}.indoor-map-svg{min-width:650px}
 .indoor-info{position:absolute;left:0;right:0;bottom:0;max-height:46svh;border-left:0;border-top:1px solid var(--line);border-radius:20px 20px 0 0;box-shadow:0 -12px 40px rgba(0,0,0,.3);padding-bottom:calc(18px + env(safe-area-inset-bottom));transform:translateY(calc(100% - 76px));transition:transform .25s ease;z-index:3}.indoor-info.has-room{transform:translateY(0)}
 .indoor-info::before{content:'';display:block;width:42px;height:4px;border-radius:99px;background:var(--line-strong);margin:-6px auto 12px}.indoor-empty-info{min-height:42px;display:flex;gap:10px;text-align:left}.indoor-empty-info .ico{font-size:24px;margin:0}
 .indoor-legend{bottom:88px}
}

/* ---------- official/community map modes ---------- */
.pin-mode-switch{display:grid;grid-template-columns:1fr 1fr;gap:8px;width:min(560px,100%);margin:14px auto 16px;padding:6px;border:1px solid var(--line);border-radius:16px;background:var(--surface)}
.pin-mode-btn{display:flex;align-items:center;justify-content:center;gap:9px;min-height:48px;border:1px solid transparent;border-radius:11px;background:transparent;color:var(--paper);font-weight:900;cursor:pointer}
.pin-mode-btn small{font-size:10px;font-weight:600;color:var(--muted)}
.pin-mode-btn.active{border-color:#F5C400;background:#F5C400;color:#111;box-shadow:0 7px 18px rgba(245,196,0,.2)}
.pin-mode-btn.active small{color:#554500}
.pin-mode-lock-note{margin-bottom:12px;padding:10px 12px;border:1px solid rgba(245,196,0,.35);border-radius:11px;background:rgba(245,196,0,.08);font-size:12px;line-height:1.55}
body[data-pin-mode="official"] #addPinBtn,body[data-pin-mode="official"] #mobileAddPinBtn{display:none!important}
body[data-pin-mode="official"] .add-pin-cta{display:none}
body.light-mode .pin-mode-btn{color:var(--ink)}
body.light-mode .pin-mode-btn.active{color:#111}
@media(max-width:700px){
 .pin-mode-switch{position:sticky;top:6px;z-index:850;width:calc(100% - 20px);margin:8px auto 10px;padding:4px;border-radius:13px}
 .pin-mode-btn{min-height:42px;padding:6px 8px;font-size:12px}.pin-mode-btn small{display:none}
}

/* ---------- v9.1 motion & liveliness pass ---------- */
@keyframes fadeSlideUp{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}
@keyframes popIn{from{opacity:0;transform:scale(.92)}to{opacity:1;transform:scale(1)}}
@keyframes modalPop{from{opacity:0;transform:translateY(14px) scale(.97)}to{opacity:1;transform:translateY(0) scale(1)}}
@keyframes pinDrop{0%{opacity:0;transform:translateY(-14px) scale(.5)}60%{opacity:1;transform:translateY(2px) scale(1.12)}100%{transform:translateY(0) scale(1)}}
@keyframes toastPop{0%{opacity:0;transform:translate(-50%,16px) scale(.9)}60%{opacity:1;transform:translate(-50%,-3px) scale(1.03)}100%{opacity:1;transform:translate(-50%,0) scale(1)}}
@keyframes heartPop{0%{transform:scale(1)}35%{transform:scale(1.45)}60%{transform:scale(.9)}100%{transform:scale(1)}}
@keyframes softPulse{0%,100%{opacity:.55}50%{opacity:1}}
@keyframes dotPulse{0%{box-shadow:0 0 0 0 rgba(193,89,43,.55)}70%{box-shadow:0 0 0 8px rgba(193,89,43,0)}100%{box-shadow:0 0 0 0 rgba(193,89,43,0)}}
@keyframes brandGlow{0%,100%{box-shadow:inset 0 0 0 3px var(--bg-deep),0 0 0 0 rgba(232,163,61,.35)}50%{box-shadow:inset 0 0 0 3px var(--bg-deep),0 0 14px 3px rgba(232,163,61,.35)}}
@keyframes starPop{0%{transform:scale(1)}40%{transform:scale(1.35)}100%{transform:scale(1)}}
@keyframes slideDownIn{from{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}
@keyframes shimmerSweep{to{background-position:-200% 0}}

.overlay.show .modal{animation:modalPop .3s cubic-bezier(.2,.9,.3,1.05) both}
.install-guide-overlay.show .install-guide-card{animation:modalPop .32s cubic-bezier(.2,.9,.3,1.05) both}
.dashboard-overlay.show .dashboard-shell{animation:fadeSlideUp .28s ease both}

.pin-icon{animation:pinDrop .5s cubic-bezier(.34,1.56,.64,1) both}

.toast.show{animation:toastPop .4s cubic-bezier(.34,1.56,.64,1) both}

.favorite-mini.on{animation:heartPop .4s ease}

.install-banner.show{animation:slideDownIn .3s ease both}

.contact-fab .dot-badge{animation:none}
.contact-fab.has-admin .dot-badge{animation:dotPulse 1.8s ease-out infinite}

.brand-mark{animation:brandGlow 3.6s ease-in-out infinite}

.star-pick span{transition:transform .15s ease}
.star-pick span:hover{transform:scale(1.28)}
.star-pick span.active{animation:starPop .3s ease}

.weekly-loading{animation:softPulse 1.3s ease-in-out infinite}

/* card & row lift */
.card,.pin-status-card,.history-pin,.profile-stat-card,.profile-achievement,.dashboard-action,.dashboard-stat,.notification-item,.review,.inbox-item,.social-user-row{transition:transform .2s ease,box-shadow .2s ease,border-color .2s ease}
.card:hover{transform:translateY(-3px)}
.pin-status-card:hover,.history-pin:hover,.profile-stat-card:hover,.dashboard-action:hover,.notification-item:hover,.social-user-row:hover{transform:translateY(-2px);box-shadow:0 10px 22px rgba(0,0,0,.12)}
body:not(.light-mode) .pin-status-card:hover,body:not(.light-mode) .history-pin:hover,body:not(.light-mode) .profile-stat-card:hover,body:not(.light-mode) .dashboard-action:hover,body:not(.light-mode) .notification-item:hover,body:not(.light-mode) .social-user-row:hover{box-shadow:0 10px 24px rgba(0,0,0,.4)}

.pinlist li{transition:transform .16s ease,background .16s ease}
.pinlist li:hover{transform:translateX(3px)}

/* general button liveliness */
.pill-btn,.btn-primary,.icon-btn,.admin-tab,.pin-tool,.follow-btn,.mobile-add-pin-fab,.contact-fab,.mini-follow-btn,.dashboard-close,.modal-close,.favorite-mini,.chat-chip,.inbox-actions button,.helpful-btn,.profile-tab,.cosmetic-tab,.indoor-floor-btn,.indoor-route-actions button{transition:transform .14s ease,background .14s ease,color .14s ease,border-color .14s ease,box-shadow .14s ease}
.pill-btn:active,.btn-primary:active,.icon-btn:active,.admin-tab:active,.pin-tool:active,.follow-btn:active,.mini-follow-btn:active,.dashboard-close:active,.modal-close:active,.chat-chip:active,.inbox-actions button:active,.helpful-btn:active,.profile-tab:active,.cosmetic-tab:active,.indoor-floor-btn:active{transform:scale(.95)}

/* staggered entrance for freshly rendered lists (CSS-only, retriggers on each innerHTML render) */
.pinlist li,.review,.pin-status-card,.notification-item,.social-user-row,.history-pin{animation:fadeSlideUp .38s ease both}
.pinlist li:nth-child(1),.review:nth-child(1),.pin-status-card:nth-child(1),.notification-item:nth-child(1),.social-user-row:nth-child(1),.history-pin:nth-child(1){animation-delay:.01s}
.pinlist li:nth-child(2),.review:nth-child(2),.pin-status-card:nth-child(2),.notification-item:nth-child(2),.social-user-row:nth-child(2),.history-pin:nth-child(2){animation-delay:.05s}
.pinlist li:nth-child(3),.review:nth-child(3),.pin-status-card:nth-child(3),.notification-item:nth-child(3),.social-user-row:nth-child(3),.history-pin:nth-child(3){animation-delay:.09s}
.pinlist li:nth-child(4),.review:nth-child(4),.pin-status-card:nth-child(4),.notification-item:nth-child(4),.social-user-row:nth-child(4),.history-pin:nth-child(4){animation-delay:.13s}
.pinlist li:nth-child(5),.review:nth-child(5),.pin-status-card:nth-child(5),.notification-item:nth-child(5),.social-user-row:nth-child(5),.history-pin:nth-child(5){animation-delay:.17s}
.pinlist li:nth-child(n+6),.review:nth-child(n+6),.pin-status-card:nth-child(n+6),.notification-item:nth-child(n+6),.social-user-row:nth-child(n+6),.history-pin:nth-child(n+6){animation-delay:.2s}

.profile-badge-grid .profile-achievement{animation:popIn .3s ease both}
.profile-badge-grid .profile-achievement:nth-child(2){animation-delay:.04s}
.profile-badge-grid .profile-achievement:nth-child(3){animation-delay:.08s}
.profile-badge-grid .profile-achievement:nth-child(4){animation-delay:.12s}
.profile-badge-grid .profile-achievement:nth-child(n+5){animation-delay:.16s}

.name-badge,.badge-pill,.status-pill{transition:transform .15s ease}
.reaction-choice{transition:transform .12s ease}
.reaction-choice:hover{transform:scale(1.3)}

/* ---------- v9.2 current location & travel estimate ---------- */
.locate-btn{
  position:absolute;right:16px;bottom:16px;z-index:700;
  width:46px;height:46px;border-radius:50%;border:2px solid #fff;
  display:grid;place-items:center;font-size:19px;cursor:pointer;
  background:#111;color:#F5C400;box-shadow:0 8px 24px rgba(0,0,0,.35);
  transition:transform .15s ease,background .15s ease,color .15s ease;
}
.locate-btn:hover{background:#F5C400;color:#111;border-color:#111}
.locate-btn:active{transform:scale(.92)}
.locate-btn.loading{animation:locateSpin 1s linear infinite}
.locate-btn.active{background:#2563eb;color:#fff;border-color:#fff}
.locate-btn.active:hover{background:#1d4ed8}
@keyframes locateSpin{to{transform:rotate(360deg)}}

.user-location-dot{position:relative;width:18px;height:18px}
.user-location-dot .core{position:absolute;inset:3px;border-radius:50%;background:#2563eb;border:2px solid #fff;box-shadow:0 1px 4px rgba(0,0,0,.45)}
.user-location-dot .ring{position:absolute;inset:0;border-radius:50%;background:rgba(37,99,235,.35);animation:locatePulseRing 1.8s ease-out infinite}
@keyframes locatePulseRing{0%{transform:scale(.4);opacity:.9}100%{transform:scale(2.6);opacity:0}}

.distance-line{display:flex;align-items:center;gap:8px;min-height:0}
.distance-line:empty{display:none}
.distance-line .distance-value{color:var(--gold-dim);font-weight:700}
.distance-line .distance-locate-btn{border:none;background:none;color:var(--clay);text-decoration:underline;font-size:11.5px;cursor:pointer;padding:0;font-family:inherit}
body:not(.light-mode) .distance-line .distance-locate-btn{color:var(--gold)}

@media (prefers-reduced-motion:reduce){
  .overlay.show .modal,.install-guide-overlay.show .install-guide-card,.dashboard-overlay.show .dashboard-shell,.pin-icon,.toast.show,.favorite-mini.on,.install-banner.show,.contact-fab.has-admin .dot-badge,.brand-mark,.star-pick span.active,.weekly-loading,.pinlist li,.review,.pin-status-card,.notification-item,.social-user-row,.history-pin,.profile-badge-grid .profile-achievement,.locate-btn.loading,.user-location-dot .ring{animation:none!important}
  .card:hover,.pin-status-card:hover,.history-pin:hover,.profile-stat-card:hover,.dashboard-action:hover,.notification-item:hover,.social-user-row:hover,.pinlist li:hover{transform:none!important}
}

