
/* ===== Reset & Variables ===== */
*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent}
:root{
  --primary:#635BFF;--primary-dark:#4F46E5;--primary-light:#EDE9FE;
  --bg:#F6F9FC;--card:#FFFFFF;--text:#1A1F36;--text2:#697386;--text3:#A3A8B2;
  --border:#E3E8EE;--success:#009688;--warning:#F59E0B;--danger:#EF4444;
  --cat-attraction:#635BFF;--cat-food:#F59E0B;--cat-culture:#8B5CF6;--cat-shopping:#EC4899;
  --shadow-sm:0 1px 3px rgba(0,0,0,.06);--shadow:0 2px 8px rgba(0,0,0,.08);--shadow-lg:0 8px 32px rgba(0,0,0,.12);
  --radius:12px;--radius-sm:8px;--radius-lg:20px;
  --font:-apple-system,BlinkMacSystemFont,'Segoe UI','PingFang SC','Hiragino Sans GB','Microsoft YaHei',sans-serif;
}
html{font-size:16px}
body{font-family:var(--font);background:var(--bg);color:var(--text);line-height:1.6;overflow-x:hidden;-webkit-font-smoothing:antialiased}
a{color:var(--primary);text-decoration:none}
button{font-family:inherit;cursor:pointer;border:none;outline:none}
input,select,textarea{font-family:inherit;font-size:inherit;outline:none}
img{max-width:100%;display:block}

/* ===== Layout ===== */
.view{display:none;min-height:100vh;animation:fadeIn .4s ease}
.view.active{display:block}
@keyframes fadeIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}

/* ===== Bottom Nav ===== */
.bottom-nav{position:fixed;bottom:0;left:0;right:0;height:60px;background:var(--card);border-top:1px solid var(--border);display:flex;align-items:center;justify-content:space-around;z-index:100;max-width:520px;margin:0 auto;box-shadow:0 -2px 12px rgba(0,0,0,.06)}
.nav-item{display:flex;flex-direction:column;align-items:center;gap:2px;color:var(--text3);font-size:11px;padding:6px 16px;border-radius:8px;transition:.2s;cursor:pointer}
.nav-item.active{color:var(--primary)}
.nav-item svg{width:22px;height:22px}

/* ===== Container ===== */
.container{max-width:520px;margin:0 auto;padding:16px;padding-bottom:80px}
.container.wide{max-width:1200px}

/* ===== Login View ===== */
#view-login{background:linear-gradient(160deg,#635BFF 0%,#4F46E5 40%,#7C3AED 100%);min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px}
.login-card{background:var(--card);border-radius:24px;padding:40px 32px;width:100%;max-width:380px;box-shadow:0 20px 60px rgba(0,0,0,.2);text-align:center}
.login-logo{width:72px;height:72px;margin:0 auto 20px;background:linear-gradient(135deg,#635BFF,#7C3AED);border-radius:20px;display:flex;align-items:center;justify-content:center;font-size:36px}
.login-title{font-size:24px;font-weight:700;margin-bottom:8px}
.login-subtitle{font-size:14px;color:var(--text2);margin-bottom:32px}
.login-features{display:flex;flex-direction:column;gap:12px;margin-bottom:32px;text-align:left}
.login-feature{display:flex;align-items:center;gap:12px;font-size:14px;color:var(--text2)}
.login-feature-icon{width:36px;height:36px;background:var(--primary-light);border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:18px;flex-shrink:0}
.btn-wechat{width:100%;padding:14px;background:#07C160;color:#fff;border-radius:12px;font-size:16px;font-weight:600;display:flex;align-items:center;justify-content:center;gap:8px;transition:.2s}
.btn-wechat:active{transform:scale(.97)}
.btn-wechat svg{width:22px;height:22px}
.login-agreement{margin-top:16px;font-size:12px;color:var(--text3);line-height:1.5}
.login-agreement a{color:var(--primary)}

/* ===== Home View ===== */
.home-header{background:linear-gradient(135deg,#635BFF 0%,#7C3AED 100%);border-radius:0 0 24px 24px;padding:24px 20px 28px;color:#fff;margin-bottom:16px}
.home-header-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}
.home-user{display:flex;align-items:center;gap:10px}
.home-avatar{width:40px;height:40px;border-radius:50%;background:rgba(255,255,255,.2);display:flex;align-items:center;justify-content:center;font-size:20px}
.home-user-name{font-size:14px;font-weight:600}
.home-user-sub{font-size:11px;opacity:.8}
.home-title{font-size:22px;font-weight:700;margin-bottom:6px}
.home-desc{font-size:13px;opacity:.85}

.section-title{font-size:17px;font-weight:700;margin:20px 0 12px;display:flex;align-items:center;gap:8px}
.section-title::before{content:'';width:4px;height:18px;background:var(--primary);border-radius:2px}

/* Planning Form */
.form-card{background:var(--card);border-radius:var(--radius);padding:20px;box-shadow:var(--shadow);margin-bottom:16px}
.form-group{margin-bottom:16px}
.form-label{font-size:13px;font-weight:600;color:var(--text2);margin-bottom:6px;display:block}
.form-input,.form-select,.form-textarea{width:100%;padding:12px 14px;border:1.5px solid var(--border);border-radius:var(--radius-sm);font-size:15px;transition:.2s;background:var(--card)}
.form-input:focus,.form-select:focus,.form-textarea:focus{border-color:var(--primary);box-shadow:0 0 0 3px rgba(99,91,255,.1)}
.form-textarea{resize:none;min-height:80px}
.form-row{display:flex;gap:12px}
.form-row .form-group{flex:1}

.chip-group{display:flex;flex-wrap:wrap;gap:8px}
.chip{padding:8px 16px;border:1.5px solid var(--border);border-radius:20px;font-size:13px;color:var(--text2);cursor:pointer;transition:.2s;user-select:none}
.chip.active{background:var(--primary);color:#fff;border-color:var(--primary)}
.chip:active{transform:scale(.95)}

.btn-primary{width:100%;padding:14px;background:linear-gradient(135deg,#635BFF,#4F46E5);color:#fff;border-radius:12px;font-size:16px;font-weight:600;transition:.2s;box-shadow:0 4px 14px rgba(99,91,255,.3)}
.btn-primary:active{transform:scale(.97)}
.btn-primary:disabled{opacity:.5}

/* NLP Input */
.nlp-hint{font-size:12px;color:var(--text3);margin-top:8px;line-height:1.5}
.nlp-actions{display:flex;align-items:center;gap:10px;margin-top:10px;flex-wrap:wrap}
.nlp-recognize-btn{padding:8px 20px;background:var(--primary);color:#fff;border:none;border-radius:var(--radius-sm);font-size:14px;font-weight:600;cursor:pointer;transition:.2s;white-space:nowrap;box-shadow:0 2px 8px rgba(99,91,255,.3)}
.nlp-recognize-btn:active{transform:scale(.96);box-shadow:0 1px 4px rgba(99,91,255,.3)}
.nlp-recognize-btn:hover{box-shadow:0 4px 14px rgba(99,91,255,.4)}
.nlp-examples{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.nlp-example{padding:4px 10px;background:var(--primary-light);border-radius:12px;font-size:11px;color:var(--primary);cursor:pointer;transition:.2s}
.nlp-example:active{transform:scale(.95)}

/* ===== Ad View ===== */
#view-ad{position:fixed;inset:0;background:rgba(0,0,0,.92);z-index:1000;display:none;align-items:center;justify-content:center;flex-direction:column}
.ad-container{width:90%;max-width:400px;background:#1a1a2e;border-radius:16px;overflow:hidden;box-shadow:0 20px 60px rgba(0,0,0,.5)}
.ad-header{display:flex;align-items:center;justify-content:space-between;padding:10px 16px;background:rgba(255,255,255,.05)}
.ad-label{font-size:12px;color:rgba(255,255,255,.5);display:flex;align-items:center;gap:4px}
.ad-skip{font-size:13px;color:#fff;padding:4px 12px;border-radius:12px;opacity:.4}
.ad-skip.ready{background:rgba(255,255,255,.15);opacity:1;cursor:pointer}
.ad-body{padding:40px 24px;text-align:center;color:#fff}
.ad-body-icon{font-size:56px;margin-bottom:16px}
.ad-body-title{font-size:20px;font-weight:700;margin-bottom:8px}
.ad-body-desc{font-size:14px;color:rgba(255,255,255,.6);line-height:1.6}
.ad-countdown{width:56px;height:56px;margin:24px auto 0;position:relative}
.ad-countdown-ring{width:56px;height:56px;border-radius:50%;border:3px solid rgba(255,255,255,.15);border-top-color:var(--primary);animation:spin 1s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.ad-countdown-num{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:20px;font-weight:700;color:#fff}
.ad-footer{padding:12px 16px;font-size:11px;color:rgba(255,255,255,.3);text-align:center}

/* ===== Results View ===== */
.results-banner{background:linear-gradient(135deg,#635BFF 0%,#7C3AED 50%,#9333EA 100%);border-radius:0 0 24px 24px;padding:28px 20px 24px;color:#fff;position:relative;overflow:hidden}
.results-banner::before{content:'';position:absolute;top:-50%;right:-20%;width:300px;height:300px;background:rgba(255,255,255,.05);border-radius:50%}
.results-banner::after{content:'';position:absolute;bottom:-40%;left:-10%;width:200px;height:200px;background:rgba(255,255,255,.03);border-radius:50%}
.banner-content{position:relative;z-index:1}
.banner-tag{display:inline-block;padding:4px 12px;background:rgba(255,255,255,.15);border-radius:12px;font-size:11px;margin-bottom:12px;backdrop-filter:blur(10px)}
.banner-title{font-size:26px;font-weight:800;margin-bottom:6px;letter-spacing:-.5px}
.banner-sub{font-size:14px;opacity:.85;margin-bottom:16px}
.banner-badges{display:flex;gap:12px}
.banner-badge{text-align:center;background:rgba(255,255,255,.12);border-radius:14px;padding:10px 16px;backdrop-filter:blur(10px);min-width:70px}
.badge-num{font-size:22px;font-weight:800}
.badge-label{font-size:10px;opacity:.8;margin-top:2px}

/* Weather Strip */
.weather-strip{display:flex;gap:8px;overflow-x:auto;padding:12px 16px;background:var(--card);margin-bottom:16px;border-radius:var(--radius);box-shadow:var(--shadow-sm);scrollbar-width:none}
.weather-strip::-webkit-scrollbar{display:none}
.weather-day{flex-shrink:0;text-align:center;padding:8px 12px;border-radius:10px;min-width:64px;background:var(--bg)}
.weather-day.today{background:var(--primary-light)}
.weather-date{font-size:11px;color:var(--text2);margin-bottom:4px}
.weather-icon{font-size:24px;margin-bottom:2px}
.weather-temp{font-size:13px;font-weight:600}
.weather-desc{font-size:10px;color:var(--text2)}
.weather-day .weather-rain{font-size:9px;color:#3B82F6;margin-top:2px}
.weather-day .weather-uv{font-size:9px;color:var(--warning)}
.weather-day .weather-clothes{font-size:9px;color:var(--text3);margin-top:2px;line-height:1.3;max-width:64px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* ===== Weather Dashboard (integrated from weather-dashboard) ===== */
.wd-toggle{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow-sm);margin-bottom:12px;cursor:pointer;transition:.2s}
.wd-toggle:active{transform:scale(.98)}
.wd-toggle-left{display:flex;align-items:center;gap:8px;font-size:14px;font-weight:600}
.wd-toggle-icon{width:28px;height:28px;border-radius:8px;background:linear-gradient(135deg,#22d3ee,#3b82f6);display:flex;align-items:center;justify-content:center;font-size:14px}
.wd-toggle-arrow{transition:.3s;color:var(--text3)}
.wd-toggle-arrow.open{transform:rotate(180deg)}
.wd-panel{display:none;animation:fadeIn .4s ease}
.wd-panel.open{display:block}

/* City Weather Cards */
.wd-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:10px;margin-bottom:16px}
.wd-card{background:var(--card);border-radius:14px;padding:16px 14px;box-shadow:var(--shadow-sm);position:relative;overflow:hidden;transition:.2s;border-top:3px solid var(--primary)}
.wd-card:hover{box-shadow:var(--shadow)}
.wd-card::before{content:'';position:absolute;top:0;left:14px;right:14px;height:3px;border-radius:0 0 2px 2px}
.wd-card-accent0{border-top-color:#22d3ee}.wd-card-accent0::before{background:#22d3ee}
.wd-card-accent1{border-top-color:#a855f7}.wd-card-accent1::before{background:#a855f7}
.wd-card-accent2{border-top-color:#10b981}.wd-card-accent2::before{background:#10b981}
.wd-card-accent3{border-top-color:#f59e0b}.wd-card-accent3::before{background:#f59e0b}
.wd-card-accent4{border-top-color:#3b82f6}.wd-card-accent4::before{background:#3b82f6}
.wd-card-row{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}
.wd-card-name{font-size:14px;font-weight:700}
.wd-card-icon{font-size:22px}
.wd-card-temp{font-size:36px;font-weight:800;letter-spacing:-.03em;line-height:1;color:var(--text)}
.wd-card-feel{font-size:11px;color:var(--text3);margin-top:2px}
.wd-card-details{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin-top:10px}
.wd-detail-label{font-size:10px;color:var(--text3)}
.wd-detail-value{font-size:12px;font-weight:600}
.wd-card-clothes{margin-top:8px;padding:6px 8px;border-radius:8px;background:var(--bg);font-size:11px;color:var(--text2);display:flex;align-items:center;gap:4px;line-height:1.4}

/* Chart Panels */
.wd-chart-panel{background:var(--card);border-radius:var(--radius);padding:16px;box-shadow:var(--shadow-sm);margin-bottom:12px}
.wd-chart-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;flex-wrap:wrap;gap:6px}
.wd-chart-title{font-size:13px;font-weight:700}
.wd-chart-legend{display:flex;gap:8px;flex-wrap:wrap}
.wd-legend-item{display:flex;align-items:center;gap:4px;font-size:11px;color:var(--text2)}
.wd-legend-dot{width:8px;height:8px;border-radius:50%}
.wd-chart-canvas{width:100%;display:block}

/* Recommendation Panel */
.wd-rec{background:linear-gradient(135deg,#f0fdf4 0%,#ecfdf5 100%);border:1px solid #d1fae5;border-radius:var(--radius);padding:18px;margin-bottom:12px}
.wd-rec-badge{display:inline-flex;align-items:center;gap:4px;padding:3px 10px;border-radius:12px;background:rgba(16,185,129,.12);color:#059669;font-size:11px;font-weight:600;margin-bottom:8px}
.wd-rec-city{font-size:22px;font-weight:800;margin-bottom:4px}
.wd-rec-sub{font-size:12px;color:var(--text2);margin-bottom:10px}
.wd-rec-reasons{display:flex;flex-direction:column;gap:4px}
.wd-rec-reason{display:flex;align-items:flex-start;gap:6px;font-size:12px;color:var(--text2);line-height:1.5}
.wd-rec-reason-dot{width:6px;height:6px;border-radius:50%;background:#10b981;margin-top:6px;flex-shrink:0}
.wd-rec-scores{display:flex;flex-direction:column;gap:6px;margin-top:12px}
.wd-score-row{display:flex;align-items:center;gap:8px}
.wd-score-city{width:40px;font-size:12px;font-weight:600;text-align:right}
.wd-score-bar-wrap{flex:1;height:7px;background:var(--border);border-radius:4px;overflow:hidden}
.wd-score-bar{height:100%;border-radius:4px;transition:width 1s cubic-bezier(.16,1,.3,1)}
.wd-score-num{width:36px;font-size:12px;font-weight:700}

/* Tab Switcher */
.tab-switcher{display:flex;gap:6px;padding:0 16px;margin-bottom:16px;overflow-x:auto;scrollbar-width:none}
.tab-switcher::-webkit-scrollbar{display:none}
.tab-btn{flex-shrink:0;padding:8px 18px;background:var(--card);border:1.5px solid var(--border);border-radius:20px;font-size:13px;font-weight:600;color:var(--text2);transition:.2s}
.tab-btn.active{background:var(--primary);color:#fff;border-color:var(--primary);box-shadow:0 2px 8px rgba(99,91,255,.3)}

/* Results Layout */
.results-layout{display:flex;flex-direction:column;gap:16px;padding:0 16px 80px;max-width:600px;margin:0 auto}

/* Day Summary */
.day-summary{display:flex;gap:12px;padding:12px 16px;background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow-sm);margin-bottom:12px}
.day-summary-item{flex:1;text-align:center}
.day-summary-label{font-size:10px;color:var(--text3)}
.day-summary-value{font-size:14px;font-weight:700;color:var(--primary)}

/* POI Timeline */
.timeline{position:relative;padding-left:0}
.travel-note{display:flex;align-items:center;gap:8px;padding:8px 14px;background:#FFF7ED;border:1px dashed var(--warning);border-radius:10px;margin:8px 0;font-size:12px;color:#92400E}
.travel-note-icon{font-size:16px}
.poi-card{display:flex;gap:12px;padding:14px;background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow-sm);margin-bottom:10px;cursor:pointer;transition:.2s;border:2px solid transparent}
.poi-card:active{transform:scale(.98)}
.poi-card.active{border-color:var(--primary);box-shadow:0 4px 16px rgba(99,91,255,.2)}
.poi-dot{width:36px;height:36px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:700;color:#fff;flex-shrink:0;box-shadow:0 2px 6px rgba(0,0,0,.15)}
.poi-dot.attraction{background:var(--cat-attraction)}
.poi-dot.food{background:var(--cat-food)}
.poi-dot.culture{background:var(--cat-culture)}
.poi-dot.shopping{background:var(--cat-shopping)}
.poi-dot.hotel{background:var(--success)}
.poi-dot.transit{background:linear-gradient(135deg,#635BFF,#4F46E5);font-size:18px}
.poi-body{flex:1;min-width:0}
.poi-time{font-size:12px;color:var(--text3);font-weight:600}
.poi-name{font-size:15px;font-weight:700;margin:2px 0}
.poi-desc{font-size:12px;color:var(--text2);line-height:1.5}
.poi-meta{display:flex;align-items:center;gap:6px;margin-top:6px;flex-wrap:wrap}
.poi-tag{font-size:10px;padding:2px 8px;border-radius:8px;font-weight:600}
.poi-tag.attraction{background:#EDE9FE;color:var(--cat-attraction)}
.poi-tag.food{background:#FEF3C7;color:#92400E}
.poi-tag.culture{background:#F3E8FF;color:var(--cat-culture)}
.poi-tag.shopping{background:#FCE7F3;color:var(--cat-shopping)}
.poi-tag.hotel{background:#D1FAE5;color:var(--success)}
.poi-tag.transit{background:#EFF1FF;color:var(--primary)}
.transit-card{border:2px dashed var(--primary)!important;background:var(--primary-light)!important;cursor:default}
.transit-card:hover{transform:none!important;box-shadow:var(--shadow-sm)!important}
.poi-ticket{font-size:11px;padding:2px 8px;background:#F0FDF4;color:var(--success);border-radius:8px;font-weight:600}
.poi-ticket.paid{background:#FEF2F2;color:var(--danger)}
.poi-hours{font-size:10px;color:var(--text3)}
.poi-transport{font-size:11px;color:var(--text3);display:flex;align-items:center;gap:4px;margin-top:4px;padding:4px 8px;background:var(--bg);border-radius:6px}

/* Hotel Card */
.hotel-card{background:var(--card);border-radius:var(--radius);padding:16px;box-shadow:var(--shadow-sm);margin-bottom:12px}
.hotel-header{display:flex;align-items:center;gap:10px;margin-bottom:8px}
.hotel-icon{width:36px;height:36px;background:#D1FAE5;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:18px}
.hotel-name{font-size:15px;font-weight:700}
.hotel-level{font-size:11px;color:var(--success)}
.hotel-info{display:flex;gap:12px;font-size:12px;color:var(--text2);margin-top:6px}
.hotel-info span{display:flex;align-items:center;gap:4px}

/* Save Button */
.save-bar{position:sticky;bottom:70px;padding:12px 16px;background:linear-gradient(to top,var(--bg) 60%,transparent);z-index:50}
.btn-save{width:100%;padding:12px;background:var(--card);color:var(--primary);border:2px solid var(--primary);border-radius:12px;font-size:15px;font-weight:600;display:flex;align-items:center;justify-content:center;gap:8px;transition:.2s}
.btn-save:active{transform:scale(.97)}
.btn-save.saved{background:var(--success);color:#fff;border-color:var(--success)}

/* ===== Dashboard View ===== */
.dashboard-header{background:linear-gradient(135deg,#635BFF,#7C3AED);padding:24px 20px;color:#fff;border-radius:0 0 24px 24px;margin-bottom:16px}
.dashboard-title{font-size:22px;font-weight:700;margin-bottom:4px}
.dashboard-sub{font-size:13px;opacity:.85}
.trip-card{background:var(--card);border-radius:var(--radius);padding:16px;box-shadow:var(--shadow-sm);margin-bottom:12px;cursor:pointer;transition:.2s;border:1.5px solid transparent}
.trip-card:active{transform:scale(.98)}
.trip-card-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}
.trip-card-title{font-size:16px;font-weight:700}
.trip-card-date{font-size:12px;color:var(--text3)}
.trip-card-info{display:flex;gap:12px;font-size:12px;color:var(--text2)}
.trip-card-info span{display:flex;align-items:center;gap:3px}
.trip-card-desc{font-size:12px;color:var(--text2);margin-top:6px;line-height:1.5}
.trip-card-actions{display:flex;gap:8px;margin-top:10px}
.btn-small{padding:6px 14px;border-radius:8px;font-size:12px;font-weight:600;transition:.2s}
.btn-small.view{background:var(--primary-light);color:var(--primary)}
.btn-small.delete{background:#FEF2F2;color:var(--danger)}
.empty-state{text-align:center;padding:60px 20px;color:var(--text3)}
.empty-state-icon{font-size:56px;margin-bottom:12px}
.empty-state-text{font-size:14px;margin-bottom:16px}

/* ===== Profile View ===== */
.profile-header{background:linear-gradient(135deg,#635BFF,#7C3AED);padding:32px 20px;color:#fff;border-radius:0 0 24px 24px;text-align:center;margin-bottom:16px}
.profile-avatar{width:72px;height:72px;border-radius:50%;background:rgba(255,255,255,.2);display:flex;align-items:center;justify-content:center;font-size:36px;margin:0 auto 12px}
.profile-name{font-size:20px;font-weight:700}
.profile-sub{font-size:13px;opacity:.8;margin-top:4px}
.profile-stats{display:flex;justify-content:center;gap:24px;margin-top:16px}
.profile-stat{text-align:center}
.profile-stat-num{font-size:20px;font-weight:700}
.profile-stat-label{font-size:11px;opacity:.8}
.profile-menu{background:var(--card);border-radius:var(--radius);overflow:hidden;box-shadow:var(--shadow-sm)}
.profile-menu-item{display:flex;align-items:center;gap:12px;padding:14px 16px;border-bottom:1px solid var(--border);font-size:14px;cursor:pointer;transition:.2s}
.profile-menu-item:last-child{border-bottom:none}
.profile-menu-item:active{background:var(--bg)}
.profile-menu-icon{width:32px;height:32px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:16px;flex-shrink:0}
.profile-menu-arrow{margin-left:auto;color:var(--text3);font-size:14px}
.btn-logout{width:100%;padding:12px;background:#FEF2F2;color:var(--danger);border-radius:12px;font-size:14px;font-weight:600;margin-top:16px;transition:.2s}
.btn-logout:active{transform:scale(.97)}

/* ===== Loading ===== */
.loading-overlay{position:fixed;inset:0;background:rgba(255,255,255,.95);z-index:999;display:none;align-items:center;justify-content:center;flex-direction:column;gap:16px}
.loading-overlay.show{display:flex}
.loading-spinner{width:48px;height:48px;border:4px solid var(--border);border-top-color:var(--primary);border-radius:50%;animation:spin .8s linear infinite}
.loading-text{font-size:14px;color:var(--text2)}

/* ===== Toast ===== */
.toast{position:fixed;top:20px;left:50%;transform:translateX(-50%) translateY(-100px);background:var(--text);color:#fff;padding:10px 24px;border-radius:24px;font-size:14px;z-index:2000;transition:.3s;white-space:nowrap;box-shadow:var(--shadow-lg)}
.toast.show{transform:translateX(-50%) translateY(0)}

/* ===== Misc ===== */
.cat-legend{display:flex;gap:12px;padding:0 16px;margin-bottom:8px;flex-wrap:wrap}
.cat-legend-item{display:flex;align-items:center;gap:4px;font-size:11px;color:var(--text2)}
.cat-legend-dot{width:10px;height:10px;border-radius:50%}
.section-gap{height:8px}

/* ===== Recommendation Section (Home) ===== */
.rec-section{margin:20px 0}
.rec-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}
.rec-title{font-size:17px;font-weight:700;display:flex;align-items:center;gap:8px}
.rec-title::before{content:'';width:4px;height:18px;background:linear-gradient(180deg,#F59E0B,#EC4899);border-radius:2px}
.rec-badge{font-size:11px;color:#fff;background:linear-gradient(135deg,#F59E0B,#EC4899);padding:3px 10px;border-radius:12px;font-weight:600}
.rec-scroll{display:flex;gap:12px;overflow-x:auto;scrollbar-width:none;padding-bottom:4px}
.rec-scroll::-webkit-scrollbar{display:none}
.rec-card{flex-shrink:0;width:200px;background:var(--card);border-radius:var(--radius);overflow:hidden;box-shadow:var(--shadow-sm);cursor:pointer;transition:.2s;border:1.5px solid transparent}
.rec-card:active{transform:scale(.97)}
.rec-card:hover{border-color:var(--primary);box-shadow:0 4px 16px rgba(99,91,255,.15)}
.rec-card-img{height:80px;background:linear-gradient(135deg,var(--c1,#635BFF),var(--c2,#7C3AED));display:flex;align-items:flex-end;justify-content:flex-end;padding:8px;position:relative}
.rec-card-rank{position:absolute;top:8px;left:8px;width:24px;height:24px;background:rgba(255,255,255,.9);border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700;color:var(--primary)}
.rec-card-emoji{font-size:28px;opacity:.5;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}
.rec-card-hot{font-size:10px;color:#fff;background:rgba(0,0,0,.3);padding:2px 8px;border-radius:8px;backdrop-filter:blur(4px)}
.rec-card-body{padding:12px}
.rec-card-name{font-size:14px;font-weight:700;margin-bottom:4px}
.rec-card-desc{font-size:11px;color:var(--text2);line-height:1.4;margin-bottom:6px}
.rec-card-meta{display:flex;gap:6px;flex-wrap:wrap}
.rec-card-tag{font-size:10px;padding:2px 6px;background:var(--bg);border-radius:6px;color:var(--text2)}
.rec-card-stats{display:flex;gap:8px;margin-top:6px;font-size:10px;color:var(--text3)}
.rec-card-stats span{display:flex;align-items:center;gap:2px}

/* ===== Admin Views ===== */
#view-admin-login{background:linear-gradient(160deg,#0F172A 0%,#1E293B 50%,#334155 100%);min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px}
.admin-login-card{background:rgba(255,255,255,.08);backdrop-filter:blur(20px);border-radius:24px;padding:40px 32px;width:100%;max-width:380px;border:1px solid rgba(255,255,255,.1)}
.admin-login-logo{width:64px;height:64px;margin:0 auto 20px;background:linear-gradient(135deg,#635BFF,#7C3AED);border-radius:18px;display:flex;align-items:center;justify-content:center;font-size:30px}
.admin-login-title{font-size:22px;font-weight:700;color:#fff;text-align:center;margin-bottom:6px}
.admin-login-sub{font-size:13px;color:rgba(255,255,255,.5);text-align:center;margin-bottom:28px}
.admin-input-group{margin-bottom:16px}
.admin-input{width:100%;padding:14px 16px;background:rgba(255,255,255,.06);border:1.5px solid rgba(255,255,255,.1);border-radius:12px;font-size:15px;color:#fff;transition:.2s}
.admin-input:focus{border-color:var(--primary);background:rgba(255,255,255,.1)}
.admin-input::placeholder{color:rgba(255,255,255,.3)}
.btn-admin-login{width:100%;padding:14px;background:linear-gradient(135deg,#635BFF,#4F46E5);color:#fff;border-radius:12px;font-size:16px;font-weight:600;transition:.2s}
.btn-admin-login:active{transform:scale(.97)}
.admin-login-back{text-align:center;margin-top:16px}
.admin-login-back a{font-size:13px;color:rgba(255,255,255,.4)}

#view-admin{background:#0F172A;min-height:100vh;color:#E2E8F0}
.admin-topbar{position:sticky;top:0;z-index:50;background:rgba(15,23,42,.95);backdrop-filter:blur(12px);border-bottom:1px solid rgba(255,255,255,.06);padding:12px 20px;display:flex;align-items:center;justify-content:space-between}
.admin-topbar-left{display:flex;align-items:center;gap:12px}
.admin-topbar-logo{font-size:20px}
.admin-topbar-title{font-size:16px;font-weight:700;color:#fff}
.admin-topbar-right{display:flex;align-items:center;gap:12px}
.admin-topbar-btn{padding:6px 14px;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.1);border-radius:8px;font-size:12px;color:#E2E8F0;cursor:pointer;transition:.2s}
.admin-topbar-btn:hover{background:rgba(255,255,255,.12)}
.admin-topbar-btn.danger{color:#FCA5A5;border-color:rgba(239,68,68,.2)}
.admin-tabs{display:flex;gap:4px;padding:12px 20px;background:rgba(15,23,42,.95);border-bottom:1px solid rgba(255,255,255,.06);overflow-x:auto;scrollbar-width:none}
.admin-tabs::-webkit-scrollbar{display:none}
.admin-tab{flex-shrink:0;padding:8px 18px;background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.06);border-radius:10px;font-size:13px;font-weight:600;color:#94A3B8;cursor:pointer;transition:.2s}
.admin-tab.active{background:linear-gradient(135deg,#635BFF,#4F46E5);color:#fff;border-color:transparent}
.admin-tab:active{transform:scale(.95)}
.admin-content{padding:20px;max-width:1400px;margin:0 auto;padding-bottom:60px}
.admin-panel{display:none}
.admin-panel.active{display:block;animation:fadeIn .3s ease}

/* Data Dashboard */
.dash-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:12px;margin-bottom:20px}
.dash-stat-card{background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.06);border-radius:14px;padding:16px;position:relative;overflow:hidden}
.dash-stat-card::before{content:'';position:absolute;top:0;left:0;right:0;height:3px;background:var(--accent,#635BFF)}
.dash-stat-icon{font-size:20px;margin-bottom:6px}
.dash-stat-num{font-size:24px;font-weight:800;color:#fff}
.dash-stat-label{font-size:11px;color:#94A3B8;margin-top:2px}
.dash-stat-trend{font-size:10px;margin-top:4px;display:flex;align-items:center;gap:3px}
.dash-stat-trend.up{color:#34D399}
.dash-stat-trend.down{color:#F87171}

.dash-charts{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:16px;margin-bottom:20px}
.dash-chart-card{background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.06);border-radius:14px;padding:16px}
.dash-chart-title{font-size:14px;font-weight:700;color:#E2E8F0;margin-bottom:12px;display:flex;align-items:center;gap:6px}
.dash-chart-title::before{content:'';width:3px;height:14px;background:var(--primary);border-radius:2px}
.dash-chart-body{position:relative;height:220px}
.dash-chart-body.tall{height:280px}

/* Admin Tables */
.admin-table-wrap{background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.06);border-radius:14px;overflow:hidden}
.admin-table-scroll{overflow-x:auto}
.admin-table{width:100%;border-collapse:collapse;font-size:13px}
.admin-table th{background:rgba(255,255,255,.04);padding:12px 14px;text-align:left;font-weight:600;color:#94A3B8;font-size:12px;text-transform:uppercase;letter-spacing:.5px;white-space:nowrap}
.admin-table td{padding:10px 14px;border-top:1px solid rgba(255,255,255,.04);color:#E2E8F0;white-space:nowrap}
.admin-table tr:hover td{background:rgba(255,255,255,.02)}
.admin-table .col-city{font-weight:600}
.admin-table .col-num{color:var(--primary);font-weight:600}
.admin-table .col-date{color:#64748B;font-size:12px}
.admin-badge{display:inline-block;padding:2px 8px;border-radius:6px;font-size:10px;font-weight:600}
.admin-badge.family{background:rgba(99,91,255,.15);color:#A78BFA}
.admin-badge.couple{background:rgba(236,72,153,.15);color:#F9A8D4}
.admin-badge.friends{background:rgba(245,158,11,.15);color:#FCD34D}
.admin-badge.solo{background:rgba(0,150,136,.15);color:#5EEAD4}
.admin-badge.elder{background:rgba(59,130,246,.15);color:#93C5FD}
.admin-badge.economy{background:rgba(34,197,94,.15);color:#86EFAC}
.admin-badge.comfort{background:rgba(99,91,255,.15);color:#A78BFA}
.admin-badge.luxury{background:rgba(234,179,8,.15);color:#FDE68A}
.admin-search-bar{display:flex;gap:10px;margin-bottom:16px;flex-wrap:wrap}
.admin-search-input{flex:1;min-width:200px;padding:10px 14px;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.1);border-radius:10px;font-size:13px;color:#fff}
.admin-search-input::placeholder{color:rgba(255,255,255,.3)}
.admin-filter{padding:10px 14px;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.1);border-radius:10px;font-size:13px;color:#fff;cursor:pointer}
.admin-filter option{background:#1E293B}

/* Recommendation Management */
.rec-mgmt-card{background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.06);border-radius:14px;padding:16px;margin-bottom:12px}
.rec-mgmt-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}
.rec-mgmt-title{font-size:15px;font-weight:700;color:#fff}
.rec-mgmt-rank{font-size:12px;color:#FCD34D;font-weight:600}
.rec-mgmt-body{display:flex;gap:12px;flex-wrap:wrap}
.rec-mgmt-stat{font-size:12px;color:#94A3B8;display:flex;align-items:center;gap:4px}
.rec-mgmt-stat strong{color:#fff;font-size:14px}
.rec-mgmt-actions{display:flex;gap:8px;margin-top:10px}
.rec-mgmt-btn{padding:6px 14px;border-radius:8px;font-size:12px;font-weight:600;cursor:pointer;transition:.2s}
.rec-mgmt-btn.refresh{background:rgba(99,91,255,.15);color:#A78BFA}
.rec-mgmt-btn.disable{background:rgba(239,68,68,.1);color:#FCA5A5}
.rec-mgmt-btn.enable{background:rgba(34,197,94,.1);color:#86EFAC}
.rec-mgmt-pois{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}
.rec-mgmt-poi{font-size:11px;padding:3px 8px;background:rgba(255,255,255,.06);border-radius:6px;color:#94A3B8}

/* Heatmap */
.heatmap-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:3px;margin-top:8px}
.heatmap-cell{aspect-ratio:1;border-radius:4px;background:rgba(99,91,255,.05);display:flex;align-items:center;justify-content:center;font-size:9px;color:rgba(255,255,255,.3)}
.heatmap-cell.l1{background:rgba(99,91,255,.15)}
.heatmap-cell.l2{background:rgba(99,91,255,.3)}
.heatmap-cell.l3{background:rgba(99,91,255,.5)}
.heatmap-cell.l4{background:rgba(99,91,255,.7);color:rgba(255,255,255,.9)}
.heatmap-labels{display:flex;justify-content:space-between;margin-top:6px;font-size:9px;color:#64748B}

/* Responsive Admin */
@media(max-width:768px){
  .dash-charts{grid-template-columns:1fr}
  .dash-stats{grid-template-columns:repeat(2,1fr)}
  .admin-table{font-size:12px}
  .admin-table th,.admin-table td{padding:8px 10px}
}

/* ===== Login Page Tabs (multi-mode login) ===== */
.login-tabs{display:flex;gap:0;margin-bottom:28px;background:var(--bg);border-radius:12px;padding:4px}
.login-tab{flex:1;padding:10px 0;text-align:center;font-size:13px;font-weight:600;color:var(--text3);border-radius:8px;cursor:pointer;transition:all .25s}
.login-tab.active{background:#fff;color:var(--primary);box-shadow:0 2px 8px rgba(0,0,0,.06)}

.login-form-group{margin-bottom:18px;text-align:left}
.login-form-label{font-size:12px;font-weight:600;color:var(--text2);margin-bottom:6px;display:block}
.login-form-input{width:100%;height:46px;padding:0 14px;border:1.5px solid var(--border);border-radius:12px;font-size:15px;background:var(--card);transition:.2s}
.login-form-input:focus{border-color:var(--primary);box-shadow:0 0 0 3px rgba(99,91,255,.1)}
.login-form-input::placeholder{color:var(--text3)}

.login-code-row{display:flex;gap:10px}
.login-code-row .login-form-input{flex:1}
.login-code-btn{flex-shrink:0;padding:0 16px;height:46px;background:var(--primary-light);color:var(--primary);border:none;border-radius:12px;font-size:13px;font-weight:600;cursor:pointer;transition:.2s;white-space:nowrap}
.login-code-btn:active{transform:scale(.95)}
.login-code-btn:disabled{opacity:.5;cursor:not-allowed}

.btn-login-submit{width:100%;height:50px;background:linear-gradient(135deg,#635BFF,#4F46E5);color:#fff;border:none;border-radius:14px;font-size:16px;font-weight:600;cursor:pointer;transition:.2s;box-shadow:0 8px 24px rgba(99,91,255,.3)}
.btn-login-submit:active{transform:scale(.97)}

.login-wechat-notice{padding:12px 14px;background:#FFF7ED;border:1px solid #FED7AA;border-radius:10px;font-size:12px;color:#9A3412;line-height:1.5;margin-bottom:20px;text-align:left}
.login-wechat-notice strong{color:#7C2D12}
.login-wechat-notice .login-wx-status{display:inline-flex;align-items:center;gap:4px;font-weight:600}
.login-wx-dot{width:8px;height:8px;border-radius:50%;display:inline-block}
.login-wx-dot.on{background:#10B981}
.login-wx-dot.off{background:#F59E0B}

.login-switch-mode{text-align:center;font-size:13px;color:var(--text3);margin-top:16px}
.login-switch-mode a{color:var(--primary);font-weight:600;cursor:pointer}

.login-divider{display:flex;align-items:center;gap:12px;margin:24px 0}
.login-divider::before,.login-divider::after{content:'';flex:1;height:1px;background:var(--border)}
.login-divider span{font-size:12px;color:var(--text3)}

/* ===== Admin Config Panel ===== */
.config-section{background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.06);border-radius:14px;padding:20px;margin-bottom:16px}
.config-section-title{font-size:15px;font-weight:700;color:#fff;margin-bottom:4px;display:flex;align-items:center;gap:8px}
.config-section-desc{font-size:12px;color:#94A3B8;margin-bottom:16px}
.config-row{display:flex;align-items:center;gap:12px;margin-bottom:14px}
.config-row:last-child{margin-bottom:0}
.config-label{font-size:13px;color:#E2E8F0;min-width:100px;flex-shrink:0}
.config-input{flex:1;padding:10px 14px;background:rgba(255,255,255,.06);border:1.5px solid rgba(255,255,255,.1);border-radius:10px;font-size:14px;color:#fff;transition:.2s}
.config-input:focus{border-color:var(--primary);background:rgba(255,255,255,.1)}
.config-input::placeholder{color:rgba(255,255,255,.3)}
.config-input option{background:#1E293B}
.config-toggle{position:relative;width:44px;height:24px;background:rgba(255,255,255,.1);border-radius:12px;cursor:pointer;transition:.25s;flex-shrink:0}
.config-toggle.on{background:#10B981}
.config-toggle::after{content:'';position:absolute;top:2px;left:2px;width:20px;height:20px;background:#fff;border-radius:50%;transition:.25s}
.config-toggle.on::after{transform:translateX(20px)}
.config-status-badge{display:inline-flex;align-items:center;gap:6px;padding:4px 12px;border-radius:8px;font-size:12px;font-weight:600}
.config-status-badge.on{background:rgba(16,185,129,.15);color:#86EFAC}
.config-status-badge.off{background:rgba(245,158,11,.15);color:#FCD34D}
.config-save-btn{padding:10px 24px;background:linear-gradient(135deg,#635BFF,#4F46E5);color:#fff;border:none;border-radius:10px;font-size:14px;font-weight:600;cursor:pointer;transition:.2s}
.config-save-btn:active{transform:scale(.97)}
.config-info-box{padding:12px 14px;background:rgba(99,91,255,.08);border:1px solid rgba(99,91,255,.15);border-radius:10px;font-size:12px;color:#C4B5FD;line-height:1.6;margin-top:12px}
