/* ================================================================
   CSS Variables
   ================================================================ */
:root{
  --canvas:#FFFDF7; --surface:#FFFFFF; --ink:#2D3436; --muted:#636E72; --border:#F0EDE5;
  --coral:#FF6B6B; --coral-light:#FFF0EE; --sky:#4ECDC4; --sky-light:#E8FAF8;
  --sun:#FFD93D; --sun-light:#FFF9E0; --mint:#A8E6CF; --mint-light:#EDF9F3;
  --lavender:#C8B6FF; --lavender-light:#F4F0FF; --rose:#FF8A80; --rose-light:#FFF0EF;
  --font-display:'PingFang SC','Microsoft YaHei','Noto Sans SC',sans-serif;
  --font-body:'PingFang SC','Microsoft YaHei','Hiragino Sans GB',sans-serif;
  --font-mono:'SF Mono','Cascadia Code','Consolas',monospace;
  --radius-card:16px; --radius-btn:12px; --radius-pill:9999px;
  --shadow-card:0 1px 4px rgba(180,160,140,0.10),0 1px 2px rgba(180,160,140,0.08);
  --shadow-elevated:0 6px 20px rgba(180,160,140,0.14);
  --ease-bounce:cubic-bezier(0.34,1.56,0.64,1);
  --ease-out:cubic-bezier(0.16,1,0.3,1);
  --top-h:56px; --bottom-h:64px;
}

/* ================================================================
   Reset & Base
   ================================================================ */
*,*::before,*::after{margin:0;padding:0;box-sizing:border-box;}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%;text-size-adjust:100%;}
body{touch-action:manipulation;font-family:var(--font-body);font-size:1rem;line-height:1.6;color:var(--ink);background:transparent;-webkit-font-smoothing:antialiased;overflow:hidden;height:100dvh;}
img{display:block;max-width:100%;height:auto;}
a{color:inherit;text-decoration:none;} ul{list-style:none;}
button{font:inherit;cursor:pointer;border:none;background:none;color:inherit;}
input{font:inherit;color:inherit;}

/* ================================================================
   Top Bar
   ================================================================ */
.top-bar{position:fixed;top:0;left:0;right:0;z-index:100;height:var(--top-h);background:rgba(255,253,247,0.9);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-bottom:1px solid var(--border);}
.top-bar-inner{max-width:1200px;margin:0 auto;padding:0 1rem;height:100%;display:flex;align-items:center;justify-content:space-between;}
.top-bar-brand{display:flex;align-items:center;gap:0.5rem;cursor:pointer;transition:opacity 0.2s;}
.top-bar-brand:hover{opacity:0.7;}
.top-bar-title{font-family:var(--font-display);font-size:1rem;font-weight:650;letter-spacing:-0.01em;}
/* Floating share button */
.fab-share{position:fixed;right:1rem;bottom:calc(var(--bottom-h) + 1rem);z-index:110;width:48px;height:48px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#FFF;background:var(--coral);box-shadow:0 4px 16px rgba(255,107,107,0.35);transition:all 0.25s var(--ease-bounce);cursor:pointer;}
.fab-share:hover{transform:scale(1.1);box-shadow:0 6px 24px rgba(255,107,107,0.45);}
.fab-share:active{transform:scale(0.9);}

/* ================================================================
   Landing Page (全屏进入页)
   ================================================================ */
.landing{position:fixed;inset:0;z-index:300;display:flex;align-items:center;justify-content:center;transition:transform 0.6s cubic-bezier(0.76,0,0.24,1);overflow-y:auto;-webkit-overflow-scrolling:touch;}
.landing.exit{transform:translateY(-100%);pointer-events:none;}

/* Background */
.landing-bg{position:absolute;inset:0;overflow:hidden;}
.landing-bg-gradient{position:absolute;inset:0;background:linear-gradient(160deg,#FFFDF7 0%,#E8FAF8 30%,#FFF0EE 60%,#F4F0FF 100%);}
.landing-bg-pattern{position:absolute;inset:0;background-image:radial-gradient(circle at 20% 30%,rgba(78,205,196,0.12) 0%,transparent 50%),radial-gradient(circle at 75% 60%,rgba(255,107,107,0.08) 0%,transparent 40%),radial-gradient(circle at 50% 80%,rgba(200,182,255,0.10) 0%,transparent 45%);}

/* Scrollable content */
.landing-content{position:relative;z-index:1;width:100%;max-width:480px;padding:3rem 1.25rem 2rem;display:flex;flex-direction:column;align-items:center;gap:1.5rem;min-height:100dvh;justify-content:center;}

/* Brand */
.landing-brand{text-align:center;}
.landing-logo{margin:0 auto 0.75rem;width:64px;height:64px;border-radius:20px;background:rgba(255,255,255,0.85);display:flex;align-items:center;justify-content:center;box-shadow:0 4px 16px rgba(180,160,140,0.08);}
.landing-title{font-family:var(--font-display);font-size:1.5rem;font-weight:750;color:var(--ink);letter-spacing:0.02em;margin-bottom:0.25rem;}
.landing-subtitle{font-size:0.85rem;color:var(--muted);font-weight:400;}

/* Chat Card */
.landing-card{width:100%;background:rgba(255,255,255,0.88);border:1.5px solid var(--border);border-radius:var(--radius-card);box-shadow:0 2px 12px rgba(180,160,140,0.08);overflow:hidden;transition:all 0.35s var(--ease-out);}
.landing-card-body{padding:1rem 1.15rem;max-height:420px;overflow-y:auto;-webkit-overflow-scrolling:touch;}
.landing-msg{display:flex;align-items:flex-start;gap:0.5rem;margin-bottom:0.75rem;animation:landMsgIn 0.4s var(--ease-out);}
@keyframes landMsgIn{from{opacity:0;transform:translateY(8px);}to{opacity:1;transform:translateY(0);}}
.landing-avatar{width:32px;height:32px;border-radius:50%;background:linear-gradient(135deg,var(--coral),var(--sky));display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:0.9rem;}
.landing-bubble{flex:1;background:var(--canvas);border:1.5px solid var(--border);border-radius:14px;border-top-left-radius:4px;padding:0.6rem 0.85rem;font-size:0.88rem;line-height:1.55;color:var(--ink);}
.landing-bubble p{margin:0;}

/* Options */
.landing-opts{display:flex;flex-wrap:wrap;gap:0.45rem;margin-bottom:0.5rem;animation:landMsgIn 0.4s var(--ease-out);}
.landing-opt{display:inline-flex;align-items:center;gap:0.35rem;padding:0.55rem 0.9rem;font-size:0.84rem;font-weight:550;border-radius:var(--radius-btn);border:1.5px solid var(--border);background:var(--surface);color:var(--ink);cursor:pointer;transition:all 0.2s var(--ease-bounce);white-space:nowrap;}
.landing-opt:hover{border-color:var(--coral);color:var(--coral);transform:translateY(-2px);box-shadow:var(--shadow-card);}
.landing-opt:active{transform:scale(0.95);}

/* Recommendation in landing */
.landing-rec{width:100%;background:var(--surface);border:2px solid var(--coral);border-radius:var(--radius-card);padding:0.85rem 1rem;animation:landMsgIn 0.4s var(--ease-out);position:relative;overflow:hidden;}
.landing-rec::before{content:'';position:absolute;top:0;left:0;right:0;height:3px;background:linear-gradient(90deg,var(--coral),var(--sky));}
.landing-rec-title{font-size:0.95rem;font-weight:650;margin-bottom:0.2rem;}
.landing-rec-desc{font-size:0.78rem;color:var(--muted);margin-bottom:0.65rem;line-height:1.5;}
.landing-rec-actions{display:flex;gap:0.5rem;flex-wrap:wrap;}
.landing-rec-go{display:inline-flex;align-items:center;gap:0.3rem;padding:0.45rem 1rem;font-size:0.8rem;font-weight:600;border-radius:var(--radius-btn);background:var(--coral);color:#FFF;cursor:pointer;transition:all 0.2s var(--ease-bounce);}
.landing-rec-go:hover{transform:scale(1.04);box-shadow:0 4px 12px rgba(255,107,107,0.3);}
.landing-rec-restart{font-size:0.78rem;color:var(--coral);font-weight:500;cursor:pointer;padding:0.45rem 0.75rem;border-radius:var(--radius-btn);background:var(--canvas);border:1.5px solid var(--border);transition:all 0.2s;}
.landing-rec-restart:hover{background:var(--coral-light);}

/* Shortcuts */
.landing-shortcuts{display:flex;gap:0.6rem;flex-wrap:wrap;justify-content:center;width:100%;}
.landing-sc{display:flex;flex-direction:column;align-items:center;gap:0.3rem;padding:0.65rem 1rem;background:rgba(255,255,255,0.75);border:1.5px solid var(--border);border-radius:var(--radius-card);font-size:0.72rem;font-weight:550;color:var(--ink);cursor:pointer;transition:all 0.2s var(--ease-bounce);min-width:70px;}
.landing-sc:hover{border-color:var(--coral);transform:translateY(-2px);box-shadow:var(--shadow-card);}
.landing-sc:active{transform:scale(0.93);}
.landing-sc-icon{font-size:1.3rem;}

/* Footer */
.landing-footer{text-align:center;width:100%;}
.landing-enter-btn{display:inline-flex;align-items:center;gap:0.35rem;padding:0.6rem 1.5rem;font-size:0.82rem;font-weight:550;color:var(--muted);background:transparent;border:1.5px solid var(--border);border-radius:var(--radius-pill);cursor:pointer;transition:all 0.2s;}
.landing-enter-btn:hover{color:var(--coral);border-color:var(--coral);}
.landing-enter-btn svg{transform:rotate(90deg);}

/* Landing responsive */
@media(max-width:640px){
  .landing-content{padding:2rem 1rem 1.5rem;gap:1rem;}
  .landing-title{font-size:1.25rem;}
  .landing-logo{width:52px;height:52px;border-radius:16px;}
  .landing-logo svg{width:36px;height:36px;}
  .landing-opt{font-size:0.78rem;padding:0.45rem 0.75rem;}
  .landing-card-body{padding:0.75rem 0.9rem;max-height:340px;}
  .landing-shortcuts{gap:0.4rem;}
  .landing-sc{padding:0.5rem 0.7rem;font-size:0.73rem;min-width:60px;}
  .landing-bubble{font-size:0.82rem;}
}
@media(min-height:800px){
  .landing-content{gap:2rem;}
}

/* ================================================================
   Main Content Area
   ================================================================ */
.main-content{position:fixed;top:var(--top-h);left:0;right:0;bottom:var(--bottom-h);overflow:hidden;}

.tab-panel{display:none;height:100%;overflow:hidden;}
.tab-panel.active{display:flex;flex-direction:column;}
.tab-scroll{flex:1;overflow-y:auto;overflow-x:hidden;padding:1rem 1rem 2rem;-webkit-overflow-scrolling:touch;background:rgba(255,253,247,0.75);backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);}

.panel-head{text-align:center;color:var(--muted);font-size:0.88rem;padding:0.5rem 0 1.5rem;}

/* ================================================================
   Bottom Tab Bar
   ================================================================ */
.tab-bar{position:fixed;bottom:0;left:0;right:0;z-index:100;height:var(--bottom-h);background:rgba(255,253,247,0.95);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-top:1px solid var(--border);display:flex;align-items:center;justify-content:space-around;padding:0 0.5rem;padding-bottom:env(safe-area-inset-bottom,0);}
.tab-bar-item{display:flex;flex-direction:column;align-items:center;gap:2px;padding:6px 12px;color:var(--muted);transition:color 0.2s,transform 0.2s var(--ease-bounce);min-width:56px;}
.tab-bar-item:active{transform:scale(0.85);}
.tab-bar-item.active{color:var(--coral);}
.tab-bar-label{font-size:0.7rem;font-weight:600;letter-spacing:0.02em;}

/* ================================================================
   Filter Pills
   ================================================================ */
.filter-pill{display:inline-flex;align-items:center;gap:0.3rem;padding:0.45rem 1rem;font-size:0.82rem;font-weight:500;color:var(--muted);background:var(--surface);border:1.5px solid var(--border);border-radius:var(--radius-pill);transition:all 0.2s var(--ease-bounce);white-space:nowrap;}
.filter-pill:hover{color:var(--coral);border-color:var(--coral);transform:scale(1.05);}
.filter-pill.active{color:#FFF;background:var(--coral);border-color:var(--coral);transform:none;}
.filter-dot{display:inline-block;width:8px;height:8px;border-radius:50%;}

/* ================================================================
   Campus Selector & Panels
   ================================================================ */
.campus-selector{display:flex;flex-wrap:wrap;gap:0.4rem;justify-content:center;margin-bottom:1.25rem;}
.campus-panel{display:none;animation:panelIn 0.35s var(--ease-out);}
.campus-panel.active{display:block;}
@keyframes panelIn{from{opacity:0;transform:translateY(8px);}to{opacity:1;transform:translateY(0);}}

.campus-hero-card{background:var(--surface);border-radius:var(--radius-card);overflow:hidden;border:1.5px solid var(--border);margin-bottom:1.5rem;}
.campus-hero-card img{width:100%;aspect-ratio:16/9;object-fit:cover;transition:transform 0.6s var(--ease-out);}
.campus-hero-card:hover img{transform:scale(1.04);}
.campus-hero-info{padding:1.25rem;}
.campus-hero-info h3{font-family:var(--font-display);font-size:1.2rem;font-weight:700;margin-bottom:0.3rem;}
.campus-addr{font-family:var(--font-mono);font-size:0.72rem;color:var(--coral);margin-bottom:0.5rem;}
.campus-brief{font-size:0.88rem;color:var(--muted);line-height:1.6;margin-bottom:0.75rem;}
.campus-tags{display:flex;flex-wrap:wrap;gap:0.4rem;}
.tag{display:inline-block;padding:0.2rem 0.7rem;font-family:var(--font-mono);font-size:0.72rem;font-weight:600;letter-spacing:0.04em;text-transform:uppercase;color:var(--coral);background:var(--coral-light);border-radius:var(--radius-pill);}

.campus-section-title{font-family:var(--font-display);font-size:1rem;font-weight:650;color:var(--coral);margin:1.25rem 0 0.75rem;padding-bottom:0.4rem;border-bottom:2px solid var(--coral-light);}
.campus-section-title.is-toggle{cursor:pointer;display:flex;align-items:center;justify-content:space-between;user-select:none;transition:color 0.2s;}
.campus-section-title.is-toggle:hover{color:#ff4444;}
.campus-section-title .toggle-chevron{flex-shrink:0;opacity:0.45;transition:all 0.3s var(--ease-out);}
.campus-section-title.is-toggle:hover .toggle-chevron{opacity:0.8;}
.campus-section-title.is-toggle.collapsed .toggle-chevron{opacity:0.25;transform:rotate(-90deg);}
.campus-section-title.is-toggle.collapsed:hover .toggle-chevron{opacity:0.5;}
.majors-grid{transition:max-height 0.4s var(--ease-out),opacity 0.3s var(--ease-out),margin 0.3s var(--ease-out);overflow:hidden;}
.majors-grid.collapsed{max-height:0!important;opacity:0;margin-top:0;margin-bottom:0;pointer-events:none;}
.btn-go-map{display:block;width:100%;margin-top:1.5rem;padding:0.75rem;text-align:center;font-size:0.9rem;font-weight:600;color:var(--coral);background:var(--coral-light);border-radius:var(--radius-btn);transition:all 0.2s;}
.btn-go-map:hover{background:var(--coral);color:#FFF;}

/* Facilities */
.facilities-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:0.5rem;}
@media(hover:hover){.facilities-grid:hover > .facility-item:not(:hover){filter:blur(2px);opacity:0.55;transform:scale(0.96);}}
.facility-item{display:flex;align-items:center;gap:0.5rem;padding:0.6rem 0.8rem;font-size:0.82rem;color:var(--ink);background:var(--canvas);border:1.5px solid var(--border);border-radius:var(--radius-btn);transition:all 0.2s var(--ease-bounce);}
.facility-item:hover{border-color:var(--coral);background:var(--coral-light);transform:translateX(4px);}
.fac-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0;}

/* ================================================================
   Majors Grid
   ================================================================ */
.majors-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:0.75rem;}
@media(hover:hover){.majors-grid:hover > .major-card:not(:hover){filter:blur(4px);transform:scale(0.94);opacity:0.7;}}
.major-card{padding:1rem 1.15rem;background:var(--surface);border:1.5px solid var(--border);border-radius:var(--radius-card);position:relative;overflow:hidden;transition:transform 0.2s var(--ease-bounce),box-shadow 0.2s;}
.major-card::before{content:'';position:absolute;top:0;left:0;right:0;height:3px;background:linear-gradient(90deg,var(--coral),var(--sky));}
.major-card:hover{transform:translateY(-3px) scale(1.02);box-shadow:var(--shadow-elevated);}
.major-card h5{font-family:var(--font-display);font-size:0.95rem;font-weight:650;margin-bottom:0.2rem;padding-top:0.15rem;}
.major-duration{font-family:var(--font-mono);font-size:0.7rem;color:var(--coral);margin-bottom:0.4rem;}
.major-desc{font-size:0.82rem;color:var(--muted);line-height:1.5;}

/* ================================================================
   Tour Map & List
   ================================================================ */
.tour-filters{display:flex;flex-wrap:wrap;gap:0.4rem;justify-content:center;margin-bottom:1rem;}
.tour-map-panel{display:none;}
.tour-map-panel.active{display:block;}
.tour-map{position:relative;background:#F4F2EE;border:1.5px solid var(--border);border-radius:var(--radius-card);overflow:hidden;margin-bottom:1rem;}
.tour-map img{width:100%;height:auto;display:block;}

.tour-list{display:flex;flex-direction:column;gap:0.5rem;}
.tour-list-item{display:flex;align-items:center;gap:0.75rem;padding:0.75rem 1rem;background:var(--canvas);border:1.5px solid var(--border);border-radius:var(--radius-card);cursor:pointer;transition:all 0.2s var(--ease-bounce);position:relative;overflow:hidden;}
.tour-list-item::before{content:'';position:absolute;left:0;top:8px;bottom:8px;width:3px;border-radius:0 3px 3px 0;background:var(--border);transition:background 0.2s,width 0.2s var(--ease-bounce);}
.tour-list-item:hover{border-color:var(--coral);box-shadow:var(--shadow-card);transform:translateX(3px);}
.tour-list-item:hover::before{width:4px;background:var(--coral);}
.tour-list-marker{width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;color:#FFF;font-size:0.7rem;font-weight:600;}
.tour-list-info h5{font-size:0.88rem;font-weight:600;}
.tour-list-info p{font-size:0.75rem;color:var(--muted);}

/* Marker colors */
.marker-teaching{background:var(--sky);}
.marker-canteen{background:var(--sun);color:var(--ink);}
.marker-dorm{background:var(--mint);color:var(--ink);}
.marker-sports{background:var(--coral);}
.marker-library{background:var(--lavender);color:var(--ink);}
.marker-medical{background:var(--rose);}

/* ================================================================
   Canteen Check-in
   ================================================================ */
.canteen-checkin{margin-top:1.5rem;padding-top:1.5rem;border-top:2px solid var(--sun-light);}
.canteen-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:0.75rem;}
@media(hover:hover){.canteen-grid:hover > .canteen-card:not(:hover){filter:blur(4px);transform:scale(0.94);opacity:0.7;}}
.canteen-card{background:var(--canvas);border:1.5px solid var(--border);border-radius:var(--radius-card);padding:1.25rem;text-align:center;position:relative;overflow:hidden;transition:transform 0.2s var(--ease-bounce),box-shadow 0.2s;}
.canteen-card::before{content:'';position:absolute;top:0;left:0;right:0;height:3px;background:var(--sun);}
.canteen-card:hover{transform:translateY(-3px);box-shadow:var(--shadow-elevated);}
.canteen-icon{width:40px;height:40px;margin:0 auto 0.75rem;border-radius:50%;background:var(--sun-light);display:flex;align-items:center;justify-content:center;}
.canteen-name{font-family:var(--font-display);font-size:1rem;font-weight:650;margin-bottom:0.2rem;}
.canteen-detail{font-size:0.78rem;color:var(--muted);margin-bottom:0.25rem;}
.canteen-count{font-family:var(--font-mono);font-size:0.7rem;color:var(--coral);margin-bottom:0.75rem;}
.btn-checkin{display:inline-flex;align-items:center;gap:0.3rem;padding:0.5rem 1.25rem;font-size:0.82rem;font-weight:600;color:var(--coral);background:var(--coral-light);border-radius:var(--radius-btn);transition:all 0.2s;}
.btn-checkin:hover{background:var(--coral);color:#FFF;transform:scale(1.05);}
.btn-checkin{position:relative;overflow:hidden;}
.btn-checkin:active{transform:scale(0.9);}
.btn-checkin.checked{background:var(--sky);color:#FFF;animation:checkinPop 0.6s var(--ease-bounce);}
@keyframes checkinPop{0%{transform:scale(1);}30%{transform:scale(1.25);}60%{transform:scale(0.9);}100%{transform:scale(1);}}
/* Ripple */
.btn-checkin .ripple{position:absolute;border-radius:50%;background:rgba(255,255,255,0.5);transform:scale(0);animation:rippleOut 0.6s ease-out forwards;pointer-events:none;}
@keyframes rippleOut{to{transform:scale(4);opacity:0;}}

/* ================================================================
   Guide Entry Cards (2x2)
   ================================================================ */
.guide-entry-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:0.85rem;perspective:900px;}
.guide-entry-card{
  background:var(--surface);border:2px solid var(--border);border-radius:var(--radius-card);
  padding:1.5rem;text-align:center;cursor:pointer;position:relative;overflow:hidden;
  transform-style:preserve-3d;
  transition:transform 0.5s ease-in-out,box-shadow 0.5s ease-in-out;
}
.guide-entry-card::before{content:'';position:absolute;top:0;left:0;right:0;height:3px;background:linear-gradient(90deg,var(--coral),var(--sky),var(--lavender));z-index:1;}
@media(hover:hover){.guide-entry-card:hover{
  transform:rotate3d(0.4,0.8,0,18deg);
  box-shadow:rgba(180,160,140,0.25) 0px 25px 30px -8px;
}}
.guide-entry-icon{
  width:56px;height:56px;border-radius:16px;display:flex;align-items:center;justify-content:center;
  margin:0 auto 0.75rem;position:relative;z-index:1;
  transform:translate3d(0,0,30px);transition:transform 0.5s ease-in-out;
}
.guide-entry-card:hover .guide-entry-icon{transform:translate3d(0,0,50px);}
.guide-entry-card h4{
  font-family:var(--font-display);font-size:1.05rem;font-weight:700;margin-bottom:0.25rem;
  position:relative;z-index:1;
  transform:translate3d(0,0,40px);transition:transform 0.5s ease-in-out;
}
.guide-entry-card:hover h4{transform:translate3d(0,0,60px);}
.guide-entry-card p{
  font-size:0.8rem;color:var(--muted);position:relative;z-index:1;
  transform:translate3d(0,0,20px);transition:transform 0.5s ease-in-out;
}
.guide-entry-card:hover p{transform:translate3d(0,0,45px);}

/* ================================================================
   Guide Detail Panel (full-screen overlay)
   ================================================================ */
.guide-detail{position:fixed;top:0;left:0;right:0;bottom:0;z-index:150;background:var(--canvas);transform:translateX(100%);transition:transform 0.3s var(--ease-out);display:flex;flex-direction:column;}
.guide-detail.open{transform:translateX(0);}
.guide-detail-head{display:flex;align-items:center;justify-content:space-between;padding:0.75rem 1rem;background:var(--surface);border-bottom:1px solid var(--border);height:var(--top-h);flex-shrink:0;}
.guide-detail-back{width:44px;height:44px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:var(--ink);transition:background 0.2s;}
.guide-detail-back:hover{background:var(--border);}
.guide-detail-title{font-family:var(--font-display);font-size:1rem;font-weight:650;}
.guide-detail-body{flex:1;overflow-y:auto;padding:1.25rem 1rem 2rem;-webkit-overflow-scrolling:touch;}

/* ================================================================
   Timeline, Dorm, Academic, Cert (reused in guide detail)
   ================================================================ */
.timeline{position:relative;padding-left:2.5rem;}
.timeline::before{content:'';position:absolute;left:14px;top:8px;bottom:8px;width:3px;background:var(--coral);opacity:0.25;border-radius:2px;}
.timeline-item{position:relative;margin-bottom:1.75rem;}
.timeline-item:last-child{margin-bottom:0;}
.timeline-marker{position:absolute;left:-2.5rem;top:0;width:30px;height:30px;border-radius:50%;background:var(--coral);color:#FFF;font-family:var(--font-mono);font-size:0.75rem;font-weight:700;display:flex;align-items:center;justify-content:center;z-index:1;}
.timeline-body h4{font-size:1rem;font-weight:650;margin-bottom:0.2rem;}
.timeline-body p{font-size:0.85rem;color:var(--muted);line-height:1.6;}

.dorm-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:1rem;margin-bottom:1.25rem;}
.dorm-card{padding:1.25rem;background:var(--surface);border:1.5px solid var(--border);border-radius:var(--radius-card);position:relative;overflow:hidden;}
.dorm-card::before{content:'';position:absolute;top:0;left:0;right:0;height:3px;background:linear-gradient(90deg,var(--mint),var(--sky));}
.dorm-card-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:0.75rem;padding-bottom:0.5rem;border-bottom:1px solid var(--border);}
.dorm-card-header h4{font-size:1.05rem;font-weight:650;}
.dorm-price{font-family:var(--font-mono);font-size:0.8rem;color:var(--coral);font-weight:600;}
.dorm-features li,.dorm-tips li{position:relative;padding-left:1rem;font-size:0.82rem;color:var(--muted);margin-bottom:0.35rem;line-height:1.5;}
.dorm-features li::before,.dorm-tips li::before{content:'';position:absolute;left:0;top:0.55em;width:6px;height:6px;border-radius:50%;}
.dorm-features li::before{background:var(--sky);}
.dorm-tips li::before{background:var(--sun);}
.dorm-tips{background:var(--surface);border:1.5px solid var(--border);border-radius:var(--radius-card);padding:1.25rem;}
.dorm-tips h4{font-size:1rem;font-weight:650;margin-bottom:0.75rem;}

.academic-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:1rem;}
.academic-card{padding:1.25rem;background:var(--surface);border:1.5px solid var(--border);border-radius:var(--radius-card);position:relative;overflow:hidden;}
.academic-card::before{content:'';position:absolute;top:0;left:0;right:0;height:3px;background:linear-gradient(90deg,var(--sky),var(--lavender));}
.academic-icon{width:40px;height:40px;border-radius:10px;background:var(--sky-light);display:flex;align-items:center;justify-content:center;margin-bottom:0.75rem;}
.academic-card h4{font-size:1rem;font-weight:650;margin-bottom:0.3rem;}
.academic-card p{font-size:0.82rem;color:var(--muted);line-height:1.55;}

.cert-table-wrapper{overflow-x:auto;border:1.5px solid var(--border);border-radius:var(--radius-card);}
.cert-table{width:100%;border-collapse:collapse;font-size:0.8rem;}
.cert-table th{font-family:var(--font-mono);font-size:0.72rem;font-weight:600;letter-spacing:0.05em;text-transform:uppercase;color:var(--muted);text-align:left;padding:0.7rem 1rem;background:var(--canvas);border-bottom:2px solid var(--border);}
.cert-table td{padding:0.65rem 1rem;border-bottom:1px solid var(--border);color:var(--muted);}
.cert-table tr:last-child td{border-bottom:none;}

/* ================================================================
   "Me" Tab
   ================================================================ */
.me-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:0.75rem;margin-bottom:1.5rem;}
.me-stat-card{background:var(--surface);border:1.5px solid var(--border);border-radius:var(--radius-card);padding:1rem 0.5rem;text-align:center;position:relative;overflow:hidden;transition:transform 0.2s var(--ease-bounce);}
.me-stat-card:hover{transform:translateY(-3px);}
.me-stat-card::after{content:'';position:absolute;top:-12px;right:-12px;width:48px;height:48px;border-radius:50%;opacity:0.12;pointer-events:none;}
.me-stat-card:nth-child(1)::after{background:var(--coral);}
.me-stat-card:nth-child(2)::after{background:var(--sky);}
.me-stat-card:nth-child(3)::after{background:var(--sun);}
.me-stat-num{display:block;font-family:var(--font-display);font-size:1.5rem;font-weight:700;color:var(--coral);margin-bottom:0.2rem;position:relative;z-index:1;}
.me-stat-label{font-size:0.7rem;color:var(--muted);position:relative;z-index:1;}
.me-section{margin-bottom:1.5rem;}
.me-section-title{font-family:var(--font-display);font-size:1rem;font-weight:650;margin-bottom:0.75rem;}
.me-history{display:flex;flex-direction:column;gap:0.5rem;}
.me-empty{text-align:center;color:var(--muted);font-size:0.85rem;padding:1rem 0;}
/* Empty state loader animation */
.me-loader{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:1.5rem 0 0.5rem;}
.me-loader-truck{width:100px;height:50px;position:relative;margin-bottom:1rem;}
.me-loader-truck svg{animation:truckBounce 0.8s ease-in-out infinite;}
@keyframes truckBounce{0%,100%{transform:translateY(0);}50%{transform:translateY(3px);}}
.me-loader-road{width:120px;height:2px;background:var(--border);position:relative;overflow:hidden;border-radius:2px;}
.me-loader-road::after{content:'';position:absolute;width:40px;height:100%;background:var(--muted);border-radius:2px;animation:roadDash 1s linear infinite;}
@keyframes roadDash{0%{transform:translateX(-40px);}100%{transform:translateX(120px);}}
.me-history-item{display:flex;justify-content:space-between;align-items:center;padding:0.75rem 1rem;background:var(--surface);border:1.5px solid var(--border);border-radius:var(--radius-card);font-size:0.85rem;}
.me-btn{display:block;width:100%;padding:0.7rem;text-align:center;font-size:0.85rem;font-weight:500;color:var(--rose);background:var(--rose-light);border-radius:var(--radius-btn);transition:all 0.2s;}
.me-btn:hover{background:var(--rose);color:#FFF;}
.me-footer{text-align:center;padding:1.5rem 0;color:var(--muted);font-size:0.72rem;line-height:1.8;}
.me-legal{margin-top:0.75rem;padding-top:0.75rem;border-top:1px solid var(--border);font-size:0.68rem;color:var(--muted);line-height:1.7;opacity:0.75;}

/* ================================================================
   New Student Tab (Tab 5)
   ================================================================ */
.ns-section{margin-bottom:2rem;}
.checklist-group{background:var(--surface);border:1.5px solid var(--border);border-radius:var(--radius-card);padding:1rem 1.25rem;margin-bottom:0.75rem;}
.checklist-group h5{font-family:var(--font-display);font-size:0.9rem;font-weight:650;margin-bottom:0.65rem;color:var(--coral);}
.check-item{display:flex;align-items:flex-start;gap:0.55rem;padding:0.35rem 0;cursor:pointer;font-size:0.85rem;color:var(--ink);transition:color 0.15s;}
.check-item:hover{color:var(--coral);}
.check-item input[type="checkbox"]{appearance:none;-webkit-appearance:none;width:22px;height:22px;border:2px solid var(--border);border-radius:4px;flex-shrink:0;margin-top:0;cursor:pointer;position:relative;transition:all 0.15s;}
.check-item input[type="checkbox"]:checked{background:var(--coral);border-color:var(--coral);}
.check-item input[type="checkbox"]:checked::after{content:'';position:absolute;left:5px;top:2px;width:5px;height:9px;border:solid #fff;border-width:0 2px 2px 0;transform:rotate(45deg);}
.check-item:has(input:checked) span{color:var(--muted);text-decoration:line-through;text-decoration-color:var(--coral-light);}

/* Food guide accordion in newstudent tab */
.ns-section .campus-section-title.is-toggle{cursor:pointer;display:flex;align-items:center;justify-content:space-between;user-select:none;margin-bottom:0.75rem;}
.ns-section .campus-section-title.is-toggle:hover{color:#ff4444;}
.ns-section .campus-section-title.is-toggle .toggle-chevron{flex-shrink:0;opacity:0.45;transition:all 0.3s var(--ease-out);}
.ns-section .campus-section-title.is-toggle.collapsed .toggle-chevron{opacity:0.25;transform:rotate(-90deg);}
.ns-section .campus-section-title.is-toggle + .majors-grid{transition:max-height 0.4s var(--ease-out),opacity 0.3s var(--ease-out);overflow:hidden;}
.ns-section .campus-section-title.is-toggle.collapsed + .majors-grid{max-height:0!important;opacity:0;margin-top:0;margin-bottom:0;pointer-events:none;}
.transit-panel{display:none;}
.transit-panel.active{display:block;}

/* Placeholder for missing content */
.placeholder-card{text-align:center;padding:2rem 1.5rem;background:var(--surface);border:2px dashed var(--border);border-radius:var(--radius-card);animation:fadeInUp 0.4s var(--ease-out);}
.placeholder-icon{font-size:3rem;margin-bottom:0.75rem;}
.placeholder-card h5{font-family:var(--font-display);font-size:1rem;font-weight:650;color:var(--ink);margin-bottom:0.4rem;}
.placeholder-card p{font-size:0.82rem;color:var(--muted);line-height:1.6;}
.placeholder-hint{margin-top:0.5rem;font-size:0.75rem;color:var(--coral);}
@keyframes fadeInUp{from{opacity:0;transform:translateY(10px);}to{opacity:1;transform:translateY(0);}}
/* Food guide cards */
.food-card{display:flex;align-items:center;gap:0.85rem;padding:1rem 1.15rem;background:var(--surface);border:1.5px solid var(--border);border-radius:var(--radius-card);cursor:pointer;margin-bottom:0.2rem;transition:all 0.2s var(--ease-bounce);}
.food-card:hover{border-color:var(--coral);box-shadow:var(--shadow-card);transform:translateY(-2px);}
.food-card.open{border-color:var(--coral);background:var(--coral-light);}
.food-card-icon{width:44px;height:44px;border-radius:12px;display:flex;align-items:center;justify-content:center;flex-shrink:0;}
.food-card-info{flex:1;}
.food-card-info h4{font-size:0.95rem;font-weight:650;margin-bottom:0.15rem;}
.food-card-info p{font-size:0.78rem;color:var(--muted);}
.food-card-arrow{color:var(--muted);transition:transform 0.3s var(--ease-out);flex-shrink:0;}
.food-card.open .food-card-arrow{transform:rotate(180deg);color:var(--coral);}

/* FAQ */
.faq-list{border-top:1.5px solid var(--border);}
.faq-item{border-bottom:1.5px solid var(--border);}
.faq-item.hidden{display:none;}
.faq-question{display:flex;justify-content:space-between;align-items:center;width:100%;padding:1rem 0;text-align:left;font-size:0.92rem;font-weight:550;color:var(--ink);transition:color 0.2s;}
.faq-question:hover{color:var(--coral);}
.faq-q-text{flex:1;padding-right:1rem;}
.faq-toggle{position:relative;width:24px;height:24px;flex-shrink:0;}
.faq-toggle::before,.faq-toggle::after{content:'';position:absolute;background:currentColor;border-radius:1px;transition:transform 0.3s var(--ease-out);}
.faq-toggle::before{width:10px;height:2px;top:9px;left:5px;}
.faq-toggle::after{width:2px;height:10px;top:5px;left:9px;}
.faq-question[aria-expanded="true"] .faq-toggle::after{transform:rotate(90deg);}
.faq-answer{max-height:0;overflow:hidden;transition:max-height 0.3s var(--ease-out);}
.faq-answer p{padding:0 0 1rem 0;font-size:0.85rem;color:var(--muted);line-height:1.7;}

/* ================================================================
   Modal
   ================================================================ */
.modal{display:none;position:fixed;inset:0;z-index:200;align-items:center;justify-content:center;padding:2rem;}
.modal.active{display:flex;}
.modal-backdrop{position:absolute;inset:0;background:rgba(0,0,0,0.35);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);}
.modal-content{position:relative;z-index:1;width:100%;max-width:480px;max-height:80dvh;overflow-y:auto;background:var(--surface);border-radius:var(--radius-card);box-shadow:0 20px 60px rgba(0,0,0,0.10);animation:modalIn 0.25s var(--ease-out);}
@keyframes modalIn{from{opacity:0;transform:translateY(12px) scale(0.97);}to{opacity:1;transform:translateY(0) scale(1);}}
.modal-close{position:absolute;top:0.6rem;right:0.6rem;width:44px;height:44px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:var(--muted);background:var(--canvas);transition:all 0.2s;z-index:2;}
.modal-close:hover{color:var(--ink);background:var(--border);}
.modal-body{padding:1.5rem;}
/* Emoji Banner — replaces building photos */
.modal-emoji-banner{height:180px;border-radius:var(--radius-card);display:flex;align-items:center;justify-content:center;margin-bottom:1rem;animation:emojiFloat 3s ease-in-out infinite;}
.modal-emoji-banner--teaching{background:linear-gradient(135deg,#667eea,#764ba2);}
.modal-emoji-banner--canteen{background:linear-gradient(135deg,#f093fb,#f5576c);}
.modal-emoji-banner--dorm{background:linear-gradient(135deg,#a8edea,#fed6e3);}
.modal-emoji-banner--library{background:linear-gradient(135deg,#ffecd2,#fcb69f);}
.modal-emoji-banner--sports{background:linear-gradient(135deg,#89f7fe,#66a6ff);}
.modal-emoji-banner--medical{background:linear-gradient(135deg,#d4fc79,#96e6a1);}
.modal-emoji{font-size:4rem;line-height:1;filter:drop-shadow(0 4px 8px rgba(0,0,0,0.15));}
@keyframes emojiFloat{0%,100%{transform:translateY(0);}50%{transform:translateY(-6px);}}
@media(prefers-reduced-motion:reduce){.modal-emoji-banner{animation:none;}}
.modal-body h3{font-family:var(--font-display);font-size:1.2rem;font-weight:700;margin-bottom:0.3rem;}
.modal-body .modal-tag{display:inline-block;font-family:var(--font-mono);font-size:0.72rem;font-weight:600;letter-spacing:0.06em;text-transform:uppercase;padding:0.15rem 0.55rem;border-radius:var(--radius-pill);margin-bottom:0.75rem;}
.modal-body p{font-size:0.85rem;color:var(--muted);line-height:1.6;margin-bottom:0.5rem;}

/* ================================================================
   WeChat Modal
   ================================================================ */
.wechat-overlay{display:none;position:fixed;inset:0;z-index:250;background:rgba(45,52,54,0.4);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);align-items:center;justify-content:center;padding:2rem;}
.wechat-overlay.active{display:flex;}
.wechat-card{position:relative;width:100%;max-width:320px;background:var(--surface);border-radius:20px;padding:2rem 1.5rem 1.5rem;text-align:center;box-shadow:0 20px 50px rgba(0,0,0,0.12);animation:wechatIn 0.35s var(--ease-out);}
@keyframes wechatIn{from{opacity:0;transform:translateY(16px) scale(0.95);}to{opacity:1;transform:translateY(0) scale(1);}}
.wechat-close{position:absolute;top:0.5rem;right:0.5rem;width:44px;height:44px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:var(--muted);transition:all 0.2s;}
.wechat-close:hover{background:var(--border);color:var(--ink);}
.wechat-avatar{width:64px;height:64px;border-radius:50%;background:linear-gradient(135deg,var(--coral-light),var(--sun-light));display:flex;align-items:center;justify-content:center;font-size:2rem;margin:0 auto 0.75rem;}
.wechat-title{font-family:var(--font-display);font-size:1.15rem;font-weight:700;color:var(--ink);line-height:1.5;margin-bottom:0.25rem;}
.wechat-desc{font-size:0.82rem;color:var(--muted);line-height:1.6;margin-bottom:1rem;}
.wechat-id-box{display:inline-flex;align-items:center;gap:0.5rem;padding:0.6rem 1rem;background:var(--canvas);border:1.5px solid var(--border);border-radius:var(--radius-btn);margin-bottom:0.85rem;font-family:var(--font-mono);font-size:0.9rem;color:var(--ink);}
.wechat-copy-btn{display:inline-flex;align-items:center;gap:0.4rem;padding:0.65rem 1.5rem;background:var(--coral);color:#FFF;border-radius:var(--radius-btn);font-size:0.85rem;font-weight:600;cursor:pointer;transition:all 0.2s var(--ease-bounce);}
.wechat-copy-btn:hover{transform:scale(1.04);box-shadow:0 4px 14px rgba(255,107,107,0.35);}
.wechat-copy-btn:active{transform:scale(0.95);}
.wechat-copy-btn.copied{background:var(--sky);}
.wechat-note{font-size:0.72rem;color:var(--muted);margin-top:0.75rem;}

/* ================================================================
   Share Panel, Poster, Toast
   ================================================================ */
.share-overlay{display:none;position:fixed;inset:0;z-index:200;background:rgba(45,52,54,0.35);backdrop-filter:blur(4px);}
.share-overlay.active{display:block;}
.share-panel{display:none;position:fixed;bottom:0;left:0;right:0;z-index:201;background:var(--surface);border-radius:20px 20px 0 0;padding:8px 20px 30px;box-shadow:0 -4px 24px rgba(0,0,0,0.10);animation:slideUp 0.3s var(--ease-out);}
.share-panel.active{display:block;}
@keyframes slideUp{from{transform:translateY(100%);}to{transform:translateY(0);}}
.share-panel-handle{width:36px;height:4px;background:var(--border);border-radius:2px;margin:8px auto 12px;}
.share-panel-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px;padding-bottom:10px;border-bottom:1.5px solid var(--border);}
.share-panel-header h4{font-size:1rem;font-weight:700;}
.share-panel-close{width:44px;height:44px;border-radius:50%;background:var(--canvas);display:flex;align-items:center;justify-content:center;font-size:13px;color:var(--muted);}
.share-actions{display:flex;justify-content:space-around;margin-bottom:8px;}
.share-action{display:flex;flex-direction:column;align-items:center;gap:6px;padding:8px;cursor:pointer;transition:transform 0.2s var(--ease-bounce);}
.share-action:hover{transform:scale(1.08);}
.share-action-icon{width:52px;height:52px;border-radius:14px;display:flex;align-items:center;justify-content:center;}
.sa-poster{background:linear-gradient(135deg,var(--coral-light),#FFD4D4);color:var(--coral);}
.sa-qrcode{background:linear-gradient(135deg,var(--mint-light),var(--mint));color:#2D6B5E;}
.sa-copy{background:linear-gradient(135deg,var(--sun-light),var(--sun));color:#8B6914;}
.sa-native{background:linear-gradient(135deg,var(--lavender-light),var(--lavender));color:#5B21B6;}
.share-action-label{font-size:0.7rem;color:var(--muted);font-weight:500;}
.share-qr-area{display:none;text-align:center;padding:14px;background:var(--canvas);border-radius:var(--radius-card);margin-top:8px;}
.share-qr-area.active{display:block;}
.share-qr-container{display:inline-block;padding:6px;background:#FFF;border-radius:8px;border:1.5px solid var(--border);}
.share-qr-hint{font-size:0.72rem;color:var(--muted);margin-top:8px;margin-bottom:6px;}
.share-qr-close-btn{font-size:0.78rem;color:var(--coral);font-weight:500;padding:4px 14px;border-radius:var(--radius-pill);}

.poster-overlay{display:none;position:fixed;inset:0;z-index:300;background:rgba(45,52,54,0.55);backdrop-filter:blur(6px);align-items:center;justify-content:center;padding:20px;}
.poster-overlay.active{display:flex;}
.poster-card{background:var(--surface);border-radius:16px;padding:14px;max-width:340px;width:100%;}
.poster-canvas{width:100%;border-radius:10px;display:block;}
.poster-btns{display:flex;gap:8px;margin-top:10px;}
.poster-btn{flex:1;padding:9px 14px;border-radius:var(--radius-btn);font-size:0.82rem;font-weight:600;cursor:pointer;}
.poster-btn:active{transform:scale(0.95);}
.poster-btn-dl{background:var(--coral);color:#FFF;}
.poster-btn-cancel{background:var(--canvas);color:var(--muted);border:1.5px solid var(--border);}

.toast{position:fixed;bottom:7rem;left:50%;transform:translateX(-50%) translateY(20px);z-index:400;background:var(--ink);color:#FFF;padding:10px 22px;border-radius:var(--radius-pill);font-size:0.82rem;font-weight:500;opacity:0;pointer-events:none;transition:opacity 0.25s,transform 0.25s;}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0);}

/* ================================================================
   Responsive
   ================================================================ */
@media(max-width:640px){
  /* Grids → single column */
  .majors-grid{grid-template-columns:1fr;}
  .canteen-grid{grid-template-columns:1fr;}
  .dorm-grid{grid-template-columns:1fr;}
  .academic-grid{grid-template-columns:1fr;}
  .me-stats{grid-template-columns:repeat(3,1fr);}@media(max-width:380px){.me-stats{grid-template-columns:repeat(3,1fr);gap:0.35rem;}}
  .guide-entry-grid{grid-template-columns:repeat(2,1fr);gap:0.75rem;}
  .guide-entry-card{padding:1.25rem 1rem;}
  .guide-entry-icon{width:44px;height:44px;border-radius:12px;}
  .guide-entry-card h4{font-size:0.95rem;}
  /* Touch feedback substitute for hover 3D */
  .guide-entry-card:active{transform:scale(0.96);}

  /* Landing — full mobile coverage */
  .landing-content{padding:2rem 1rem 1.5rem;gap:1rem;padding-bottom:calc(2rem + env(safe-area-inset-bottom,0px));}
  .landing-title{font-size:1.25rem;}
  .landing-subtitle{font-size:0.78rem;}
  .landing-logo{width:48px;height:48px;border-radius:14px;}
  .landing-logo svg{width:32px;height:32px;}
  .landing-card-body{padding:0.75rem 0.9rem;max-height:320px;}
  .landing-bubble{font-size:0.82rem;}
  .landing-opt{font-size:0.78rem;padding:0.45rem 0.75rem;}
  .landing-sc{font-size:0.73rem;padding:0.5rem 0.65rem;min-width:58px;}
  .landing-shortcuts{gap:0.35rem;}
  .landing-rec{padding:0.7rem 0.85rem;}
  .landing-rec-title{font-size:0.88rem;}
  .landing-rec-desc{font-size:0.74rem;}
  .landing-footer{padding-bottom:env(safe-area-inset-bottom,0px);}

  /* WeChat modal */
  .wechat-card{max-width:300px;padding:1.5rem 1.15rem 1.25rem;}
  .wechat-title{font-size:1.05rem;}
  .wechat-desc{font-size:0.78rem;}
  .wechat-id-box{font-size:0.82rem;padding:0.5rem 0.75rem;}

  /* Tour list */
  .tour-list-item{padding:0.65rem 0.85rem;gap:0.5rem;}
  .tour-list-info h5{font-size:0.82rem;}

  /* Modals */
  .modal-content{max-width:92vw;}
  .modal-emoji-banner{height:140px;}
  .modal-emoji{font-size:3rem;}
  .share-panel{padding:8px 16px 28px;}

  /* Cert table */
  .cert-table{font-size:0.72rem;}
  .cert-table th,.cert-table td{padding:0.5rem 0.65rem;}

  /* Food cards */
  .food-card{padding:0.85rem 1rem;}
  .food-card-info h4{font-size:0.88rem;}

  /* Tab bar */
  .tab-bar-item{padding:6px 8px;min-width:48px;}

  /* Placeholder & legal */
  .placeholder-card{padding:1.5rem 1rem;}
  .placeholder-icon{font-size:2.5rem;}
  .placeholder-card h5{font-size:0.92rem;}
  .me-legal{font-size:0.64rem;}
}

/* Safe area for fixed elements */
@supports(padding-bottom:env(safe-area-inset-bottom)){
  .tab-bar{padding-bottom:env(safe-area-inset-bottom,0px);}
  .fab-share{bottom:calc(var(--bottom-h) + 1rem + env(safe-area-inset-bottom,0px));}
}
@media(min-width:768px){
  .tab-scroll{max-width:600px;margin:0 auto;}
}

/* ================================================================
   Reduced Motion
   ================================================================ */
@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:0.01ms!important;animation-iteration-count:1!important;transition-duration:0.01ms!important;}
}
