:root{--ink:#31271c;--muted:#85735e;--paper:#f8f0e1;--paper2:#fffaf0;--line:#d8c7ac;--accent:#a84928;--deep:#234735;--gold:#c58a38}
*{box-sizing:border-box}html,body{margin:0;min-height:100%;overflow-x:hidden}body{font-family:"Songti SC","Noto Serif SC","STSong",Georgia,serif;color:var(--ink);background:var(--paper)}button{font:inherit;color:inherit}
.app{min-height:100dvh;background:var(--paper);position:relative;transition:background .35s,color .35s}.topbar{height:74px;padding:0 28px;display:flex;align-items:center;border-bottom:1px solid rgba(109,82,47,.18);background:rgba(251,245,234,.94);backdrop-filter:blur(15px);position:relative;z-index:50}.brand{border:0;background:none;display:flex;align-items:center;gap:18px;padding:0;cursor:pointer}.brand b{font-size:35px;letter-spacing:.08em;font-weight:700;position:relative}.brand b:after{content:"迹";position:absolute;right:-10px;bottom:0;background:var(--accent);color:white;font:8px/15px serif;width:14px;height:15px;text-align:center}.brand span{font-size:13px;color:#6f5d48;border-left:1px solid #baa98f;padding-left:18px}.desktop-nav{display:flex;align-self:stretch;gap:42px;margin:auto}.desktop-nav button{border:0;background:none;font-size:14px;color:#76654f;position:relative;padding:0 4px;cursor:pointer}.desktop-nav button.active{color:var(--deep);font-weight:700}.desktop-nav button.active:after{content:"";position:absolute;left:0;right:0;bottom:0;height:3px;background:var(--deep)}.mode{border:1px solid var(--line);background:var(--paper2);height:38px;border-radius:22px;padding:0 13px;display:flex;align-items:center;gap:7px;cursor:pointer;box-shadow:0 5px 18px rgba(63,43,22,.08)}.mode i{font-style:normal;font-size:18px}.mode span{font:600 11px system-ui,sans-serif}
.map-screen{height:calc(100dvh - 74px);min-height:650px;position:relative;overflow:hidden}.map-art{position:absolute;inset:0;background:url("./day-map.png") center/cover no-repeat,#e5ddc7;overflow:hidden}.map-art:after{content:"";position:absolute;inset:0;pointer-events:none;box-shadow:inset 0 0 100px rgba(86,59,30,.16)}.map-shade{position:absolute;inset:0;background:linear-gradient(180deg,rgba(255,249,236,.1),transparent 40%,rgba(65,43,22,.08));pointer-events:none}.city-label{position:absolute;color:#594d3d;font-weight:700;letter-spacing:.12em;text-shadow:0 1px 3px #f5ebd5;font-size:16px;z-index:1}.yuelu{left:15%;top:36%;font-size:26px}.river-label{left:39%;top:32%;writing-mode:vertical-rl;color:#51797a;font-size:21px}.kaifu{left:66%;top:24%}.tianxin{left:65%;top:68%}.orange{left:43%;top:53%;writing-mode:vertical-rl;font-size:13px}
.category-strip{position:absolute;left:20px;right:20px;top:18px;display:flex;gap:8px;z-index:12;overflow-x:auto;scrollbar-width:none;padding-bottom:5px}.category-strip::-webkit-scrollbar{display:none}.category-strip button{height:38px;flex:none;border:1px solid rgba(113,88,59,.35);background:rgba(255,250,240,.9);backdrop-filter:blur(8px);border-radius:22px;padding:0 15px;display:flex;align-items:center;gap:7px;font-size:12px;box-shadow:0 4px 14px rgba(56,39,21,.08);cursor:pointer}.category-strip button i{font-style:normal}.category-strip button.active{background:var(--deep);border-color:var(--deep);color:white}.category-strip .more-filter{margin-left:auto;background:rgba(255,250,240,.94)}
.filter-pop{position:absolute;right:22px;top:64px;z-index:20;width:270px;background:rgba(255,250,240,.97);border:1px solid var(--line);border-radius:17px;padding:14px;box-shadow:0 15px 40px rgba(45,31,18,.17)}.filter-pop div{display:flex;align-items:center;gap:6px;margin:4px 0 10px}.filter-pop div:last-child{margin-bottom:3px}.filter-pop b{width:38px;font-size:12px}.filter-pop button{border:1px solid var(--line);background:white;border-radius:14px;padding:6px 9px;font-size:10px}.filter-pop button.active{color:white;background:var(--accent);border-color:var(--accent)}
.map-pin{position:absolute;z-index:7;transform:translate(-50%,-50%);border:0;background:none;padding:0;cursor:pointer;filter:drop-shadow(0 4px 5px rgba(40,25,12,.3))}.map-pin>span{display:grid;place-items:center;width:45px;height:45px;border-radius:50% 50% 50% 7px;transform:rotate(-45deg);background:#b86e25;border:3px solid #fff1d8;color:white;font-weight:800;font-size:13px}.map-pin>span b{transform:rotate(45deg);font-weight:800}.map-pin>em{display:block;width:max-content;max-width:110px;transform:translate(-28%,-1px);background:rgba(255,249,236,.82);border-radius:5px;padding:2px 5px;font-style:normal;font-size:11px;font-weight:700;text-shadow:0 1px #fff}.map-pin.lit>span{box-shadow:0 0 0 5px rgba(218,162,68,.25),0 0 18px rgba(197,126,35,.5)}.pin-风景名胜>span{background:#a74f30}.pin-书店>span{background:#537057}.pin-餐厅甜品>span{background:#bd6334}.pin-展览场馆>span{background:#755379}.pin-公园>span{background:#55724b}.pin-夜间去处>span{background:#465673}.user-dot{position:absolute;left:50%;top:58%;width:56px;height:56px;border-radius:50%;background:rgba(38,126,220,.18);display:grid;place-items:center;z-index:4}.user-dot i{width:17px;height:17px;border:3px solid white;border-radius:50%;background:#2c82db;box-shadow:0 2px 9px #1d65a9}.map-tools{position:absolute;left:22px;bottom:28px;z-index:11;display:flex;flex-direction:column;border:1px solid var(--line);border-radius:17px;overflow:hidden;box-shadow:0 8px 22px rgba(45,31,17,.15)}.map-tools button{width:42px;height:42px;border:0;border-bottom:1px solid var(--line);background:rgba(255,250,240,.94);font-size:21px;cursor:pointer}.map-tools button:last-child{border:0}
.badge-summary{position:absolute;left:20px;top:82px;width:250px;background:rgba(255,249,238,.94);backdrop-filter:blur(9px);border:1px solid var(--line);border-radius:16px;padding:17px;z-index:10;box-shadow:0 13px 35px rgba(57,39,19,.13)}.badge-summary>div:first-child{display:flex;align-items:end;gap:7px}.badge-summary>div span{font-size:13px}.badge-summary strong{font-size:31px;line-height:1;color:var(--accent)}.badge-summary small{color:var(--muted)}.badge-summary p{font:11px system-ui,sans-serif;color:var(--muted);margin:8px 0 12px}.mini-badges{display:flex;gap:5px}.mini-badges i{width:29px;height:32px;display:grid;place-items:center;background:#aaa39a;color:#ece7df;font-style:normal;font-size:11px;clip-path:polygon(50% 0,90% 18%,100% 65%,50% 100%,0 65%,10% 18%)}.mini-badges i.lit{background:linear-gradient(145deg,#d7ad56,#86512f);color:#fff4d9}.badge-summary>button{width:100%;border:0;border-top:1px solid var(--line);background:none;margin-top:13px;padding:12px 0 0;display:flex;justify-content:space-between;font-size:11px;cursor:pointer}
.place-sheet{position:absolute;z-index:15;right:0;bottom:0;width:min(710px,58vw);height:310px;background:rgba(255,250,241,.97);border-radius:28px 0 0 0;padding:24px 24px 18px;box-shadow:-13px -10px 35px rgba(61,42,22,.12);transition:height .35s}.place-sheet.open{height:76%;overflow-y:auto}.sheet-handle{display:none}.sheet-title{display:flex;align-items:end;justify-content:space-between;margin-bottom:14px}.sheet-title small,.collection-top small,.profile-card small,.route-card small,.detail-copy>small{font:700 9px system-ui,sans-serif;letter-spacing:.17em;color:var(--accent)}.sheet-title h2{font-size:20px;margin:3px 0 0}.sheet-title>button{border:0;background:none;color:var(--accent);font-size:11px;cursor:pointer}.place-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:13px}.place-card{border:1px solid var(--line);border-radius:15px;background:#fffaf1;overflow:hidden;box-shadow:0 6px 18px rgba(59,42,22,.06)}.card-photo{width:100%;height:92px;border:0;position:relative;display:grid;place-items:center;color:white;overflow:hidden;cursor:pointer;background-size:cover}.card-photo:after,.detail-hero:after{content:"";position:absolute;inset:0;background:linear-gradient(160deg,transparent,rgba(27,15,7,.45))}.card-photo>span{position:absolute;left:9px;bottom:7px;z-index:2;font:9px system-ui,sans-serif}.card-photo>b{font-size:30px;z-index:1}.card-photo>em{position:absolute;left:0;top:0;z-index:2;font-style:normal;font-size:9px;background:var(--accent);padding:5px 9px}.photo-1{background:linear-gradient(140deg,#53705d,#c79056 48%,#39291e)}.photo-2{background:linear-gradient(140deg,#a38155,#443124 55%,#d8a961)}.photo-3{background:linear-gradient(140deg,#66827e,#b0714b 60%,#33241f)}.photo-4{background:linear-gradient(140deg,#9d7252,#534138 55%,#cf9661)}.photo-5{background:linear-gradient(140deg,#567058,#a9a174 60%,#3f4938)}.card-copy{padding:11px}.card-copy>small{color:var(--accent);font:9px system-ui,sans-serif}.card-copy h3{font-size:14px;margin:4px 0}.card-copy p{font:9px system-ui,sans-serif;color:var(--muted);margin:0 0 9px}.card-copy>div{display:flex;align-items:center;justify-content:space-between;gap:5px}.card-copy>div span{font:8px system-ui,sans-serif;color:var(--muted)}.card-copy>div button{border:1px solid #c27e5f;color:var(--accent);background:none;border-radius:9px;padding:5px 8px;font-size:9px}.empty{grid-column:1/-1;text-align:center;padding:45px}.empty b{display:block;margin-bottom:12px}.empty button{border:1px solid var(--line);background:white;border-radius:16px;padding:8px 15px}
.collection-screen,.profile-screen{min-height:calc(100dvh - 74px);padding:55px 7vw 90px;background:radial-gradient(circle at 50% 0,#fffaf0,var(--paper) 60%)}.collection-top{text-align:center;max-width:520px;margin:auto}.collection-top h1{font-size:37px;margin:10px 0}.collection-top p{font:13px/1.8 system-ui,sans-serif;color:var(--muted)}.collection-top .progress{width:280px;height:6px;border-radius:5px;background:#dfd3bf;margin:25px auto 8px;overflow:hidden}.collection-top .progress i{display:block;height:100%;background:linear-gradient(90deg,var(--accent),var(--gold))}.collection-top>b{font-size:12px;color:var(--accent)}.collection-filters{display:flex;justify-content:center;gap:8px;flex-wrap:wrap;margin:34px 0}.collection-filters button{border:1px solid var(--line);background:var(--paper2);border-radius:18px;padding:7px 13px;font-size:11px}.collection-filters button.active{background:var(--deep);border-color:var(--deep);color:white}.badge-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:28px 16px;max-width:980px;margin:auto}.badge-card{border:0;background:none;text-align:center}.badge-medal{width:104px;height:116px;margin:auto;display:grid;place-items:center;background:linear-gradient(145deg,#e2bd68,#825035);clip-path:polygon(50% 0,86% 13%,100% 48%,82% 88%,50% 100%,18% 88%,0 48%,14% 13%);filter:drop-shadow(0 5px 4px rgba(75,52,27,.22))}.badge-medal i{width:88px;height:98px;display:grid;place-items:center;background:linear-gradient(145deg,#cfdfc5,#f5d9aa);clip-path:inherit;font-style:normal;font-size:31px;color:#784531}.badge-card h3{font-size:13px;margin:9px 0 3px}.badge-card p{font:9px system-ui,sans-serif;color:var(--muted);margin:0}.badge-card.locked{filter:grayscale(1);opacity:.38}
.profile-screen{display:grid;grid-template-columns:minmax(330px,520px) minmax(300px,480px);justify-content:center;align-items:center;gap:45px}.profile-card{text-align:center;padding:45px;border:1px solid var(--line);border-radius:28px;background:rgba(255,250,240,.82);box-shadow:0 20px 50px rgba(67,46,23,.09)}.avatar{width:95px;height:95px;margin:0 auto 18px;border-radius:50%;display:grid;place-items:center;background:var(--accent);color:#fff3dd;border:6px double #e5c284;font-size:39px}.profile-card h1{font-size:31px;margin:8px}.profile-card>p{color:var(--muted);font-size:12px}.profile-stats{display:grid;grid-template-columns:repeat(3,1fr);margin-top:30px;border-block:1px solid var(--line);padding:20px 0}.profile-stats div{display:flex;flex-direction:column;border-right:1px solid var(--line)}.profile-stats div:last-child{border:0}.profile-stats b{font-size:20px}.profile-stats span{font:9px system-ui,sans-serif;color:var(--muted)}.route-card{padding:35px;border-radius:28px;background:linear-gradient(145deg,#ead6b3,#cdb68f);border:1px solid #bda47e}.route-card h2{font-size:28px}.route-card p,.route-card span{font:12px/1.8 system-ui,sans-serif;color:#675740}.route-card span{display:block}.route-card button{width:100%;margin-top:25px;border:0;border-radius:13px;background:var(--accent);color:white;padding:13px}
.mobile-nav{display:none}.modal{position:fixed;inset:0;z-index:100;background:rgba(33,24,16,.52);display:flex;align-items:flex-end;justify-content:center}.place-detail{width:min(470px,100%);max-height:94dvh;overflow:auto;border-radius:27px 27px 0 0;background:var(--paper2);box-shadow:0 -25px 70px rgba(26,18,12,.28);position:relative;animation:rise .25s ease-out}@keyframes rise{from{transform:translateY(30%);opacity:.4}}.close{position:absolute;right:14px;top:14px;z-index:5;width:36px;height:36px;border:0;border-radius:50%;background:rgba(255,248,235,.9);font-size:22px}.detail-hero{height:230px;display:flex;align-items:end;padding:20px;color:white;position:relative}.detail-hero>span{position:relative;z-index:2;font-size:12px}.large-pin{position:absolute;z-index:2;left:50%;top:43px;transform:translateX(-50%);width:88px;height:96px;display:grid;place-items:center;clip-path:polygon(50% 0,88% 15%,100% 62%,50% 100%,0 62%,12% 15%);background:linear-gradient(145deg,#e4bd68,#995535);font-size:31px}.detail-copy{padding:22px}.detail-copy h2{font-size:26px;margin:7px 0 12px}.tags{display:flex;gap:6px}.tags span{font:9px system-ui,sans-serif;padding:5px 8px;border-radius:11px;background:#eadcc5}.detail-copy>p{font:12px/1.8 system-ui,sans-serif;color:var(--muted)}.recommend{display:flex;justify-content:space-between;margin:15px 0;padding:14px;border:1px solid var(--line);background:#f2e4cd;border-radius:13px}.recommend span{font-size:11px}.recommend b{color:var(--accent)}.check-rule{font:10px/1.6 system-ui,sans-serif;color:#667355;background:#e9eddf;padding:10px;border-radius:10px}.detail-actions{display:flex;gap:9px;margin-top:15px}.detail-actions button{flex:1;border:1px solid #b66f51;border-radius:12px;background:none;color:var(--accent);padding:12px}.detail-actions .primary{color:white;background:var(--accent)}.toast{position:fixed;left:50%;bottom:88px;transform:translateX(-50%);z-index:150;width:max-content;max-width:90%;border:0;border-radius:24px;background:#33291f;color:#fff4e2;padding:12px 18px;font:12px system-ui,sans-serif;box-shadow:0 8px 30px rgba(0,0,0,.28)}
.theme-night{--ink:#f0dfbd;--muted:#9b9993;--paper:#07131c;--paper2:#0d1b25;--line:#34414a;--accent:#efa944;--deep:#d69b43;--gold:#f1be62;color:var(--ink);background:#07131c}.theme-night .topbar{background:rgba(5,13,20,.94);border-color:#28343c}.theme-night .brand span,.theme-night .desktop-nav button{color:#aa9c85}.theme-night .desktop-nav button.active{color:#efb455}.theme-night .desktop-nav button.active:after{background:#efb455}.theme-night .mode{background:#101e28;border-color:#394750}.theme-night .map-art{background-image:url("./night-map.png");background-color:#07131c}.theme-night .map-art:after{box-shadow:inset 0 0 130px #000}.theme-night .map-shade{background:radial-gradient(circle at 55% 50%,transparent,rgba(0,5,10,.26))}.theme-night .city-label{color:#d4bd90;text-shadow:0 2px 8px #000}.theme-night .river-label{color:#6f91a7}.theme-night .category-strip button{color:#d6c39e;background:rgba(10,23,32,.9);border-color:#3b464c;box-shadow:0 4px 16px rgba(0,0,0,.35)}.theme-night .category-strip button.active{color:#171d22;background:linear-gradient(135deg,#f3c369,#d88d34);border-color:#e8ab4f}.theme-night .filter-pop,.theme-night .badge-summary,.theme-night .place-sheet{background:rgba(8,20,29,.95);border-color:#39464e;box-shadow:0 15px 45px rgba(0,0,0,.45)}.theme-night .filter-pop button{background:#142530;border-color:#3b4a54}.theme-night .filter-pop button.active{color:#15202a;background:#efad4c}.theme-night .map-pin{filter:drop-shadow(0 0 9px rgba(239,169,67,.75))}.theme-night .map-pin>span{background:#a86b27;border-color:#f5ca73;box-shadow:0 0 0 5px rgba(238,173,72,.11),0 0 19px rgba(242,174,72,.65)}.theme-night .map-pin>em{color:#edd9b4;background:rgba(7,18,27,.86);text-shadow:none}.theme-night .map-pin.lit>span{box-shadow:0 0 0 6px rgba(242,182,83,.16),0 0 28px rgba(250,181,74,.9)}.theme-night .map-tools{border-color:#46515a;box-shadow:0 8px 25px #000}.theme-night .map-tools button{color:#e5bb70;background:rgba(9,24,34,.93);border-color:#3a4650}.theme-night .badge-summary p,.theme-night .card-copy p,.theme-night .card-copy>div span{color:#999b96}.theme-night .badge-summary>button{color:#edb159}.theme-night .mini-badges i{background:#313940}.theme-night .mini-badges i.lit{background:linear-gradient(145deg,#f0c36e,#8e542d);filter:drop-shadow(0 0 4px #d99139)}.theme-night .place-card{background:#0f202b;border-color:#33414a;box-shadow:0 7px 22px rgba(0,0,0,.25)}.theme-night .card-copy>small,.theme-night .sheet-title small{color:#edac50}.theme-night .card-copy>div button{color:#efb258;border-color:#9e733e}.theme-night .collection-screen,.theme-night .profile-screen{background:radial-gradient(circle at 50% 0,#142b39,#07131c 58%)}.theme-night .collection-filters button{color:#c9bc9e;background:#10212c}.theme-night .collection-filters button.active{color:#15202a;background:#edac4b}.theme-night .badge-medal{filter:drop-shadow(0 0 8px rgba(239,173,73,.5))}.theme-night .badge-medal i{background:linear-gradient(145deg,#17313e,#3a2a1f);color:#f2be60}.theme-night .profile-card{background:rgba(11,27,38,.85);box-shadow:0 20px 50px #000}.theme-night .route-card{background:linear-gradient(145deg,#162b37,#0b1821);border-color:#384852}.theme-night .route-card p,.theme-night .route-card span{color:#a3a39d}.theme-night .place-detail{background:#0b1923}.theme-night .close{color:#e9d5b0;background:rgba(7,19,28,.9)}.theme-night .tags span{background:#192d39}.theme-night .recommend{background:#18271f}.theme-night .check-rule{color:#abb48f;background:#17251e}.theme-night .toast{color:#17212a;background:#efb452}
@media(max-width:760px){
  .topbar{height:62px;padding:0 14px}.brand{gap:12px}.brand b{font-size:27px}.brand span{font-size:10px;padding-left:12px}.desktop-nav{display:none}.mode{margin-left:auto;width:38px;padding:0;justify-content:center}.mode span{display:none}
  .map-screen{height:calc(100dvh - 62px);min-height:610px}.map-art{background-position:center}.category-strip{left:10px;right:10px;top:10px;gap:6px}.category-strip button{height:34px;padding:0 11px;font-size:11px}.category-strip .more-filter{margin-left:0}.filter-pop{right:10px;top:54px;width:265px}
  .badge-summary{display:none}.city-label{font-size:11px}.yuelu{left:8%;top:32%;font-size:18px}.river-label{left:35%;top:31%;font-size:15px}.kaifu{left:67%;top:25%}.tianxin{left:67%;top:64%}.orange{left:40%;top:51%;font-size:10px}
  .map-pin>span{width:37px;height:37px;border-width:2px;font-size:10px}.map-pin>em{font-size:8px;max-width:80px}.map-pin:nth-of-type(n+8)>em{display:none}.user-dot{width:46px;height:46px}.user-dot i{width:15px;height:15px}.map-tools{left:12px;bottom:300px}.map-tools button{width:38px;height:38px}
  .place-sheet{left:0;right:0;width:100%;height:278px;border-radius:25px 25px 0 0;padding:8px 14px 74px;overflow:hidden}.place-sheet.open{height:76%;padding-bottom:78px}.sheet-handle{display:block;width:100%;height:18px;border:0;background:none}.sheet-handle i{display:block;width:44px;height:4px;margin:auto;border-radius:4px;background:#ad9b7f}.sheet-title{margin:1px 2px 10px}.sheet-title h2{font-size:18px}.place-grid{display:flex;gap:10px;overflow-x:auto;scrollbar-width:none}.place-sheet.open .place-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));overflow:visible}.place-card{min-width:184px}.card-photo{height:74px}.card-copy{padding:8px}.card-copy h3{font-size:12px}.card-copy>div span{max-width:105px}.empty{min-width:100%;padding:30px}
  .mobile-nav{height:66px;position:fixed;left:0;right:0;bottom:0;z-index:45;display:flex;border-top:1px solid var(--line);background:rgba(255,249,238,.97);backdrop-filter:blur(12px);padding:6px 38px 8px}.mobile-nav button{flex:1;border:0;background:none;color:#95856f;display:flex;flex-direction:column;align-items:center;gap:3px;font:10px system-ui,sans-serif}.mobile-nav button i{font-style:normal;font-size:20px}.mobile-nav button.active{color:var(--accent);font-weight:700}.theme-night .mobile-nav{background:rgba(5,15,23,.97);border-color:#2b3943}
  .collection-screen,.profile-screen{min-height:calc(100dvh - 62px);padding:35px 16px 90px}.collection-top h1{font-size:28px}.collection-filters{justify-content:flex-start;flex-wrap:nowrap;overflow-x:auto;margin:25px -2px 30px}.collection-filters button{flex:none}.badge-grid{grid-template-columns:repeat(3,1fr);gap:25px 7px}.badge-medal{width:88px;height:98px}.badge-medal i{width:74px;height:83px;font-size:27px}.badge-card h3{font-size:11px}.profile-screen{display:block}.profile-card{padding:30px 18px}.route-card{margin-top:20px;padding:24px}.route-card h2{font-size:23px}.modal{z-index:100}.detail-hero{height:210px}.toast{bottom:77px}
}

/* 实时定位与美食图片地标 */
.live-location{position:absolute;left:20px;top:76px;z-index:13;display:flex;align-items:center;gap:10px;max-width:320px;padding:11px 14px;border:1px solid rgba(113,88,59,.25);border-radius:16px;background:rgba(255,250,240,.94);box-shadow:0 8px 24px rgba(56,39,21,.13);backdrop-filter:blur(10px);font-family:system-ui,sans-serif}
.live-location>i{width:12px;height:12px;border-radius:50%;background:#2f88ed;box-shadow:0 0 0 6px rgba(47,136,237,.16);flex:none}
.live-location.loading>i{animation:locationPulse 1.2s infinite}
.live-location div{min-width:0}.live-location b,.live-location span{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.live-location b{font-size:12px}.live-location span{margin-top:2px;color:var(--muted);font-size:9px}
@keyframes locationPulse{50%{box-shadow:0 0 0 12px rgba(47,136,237,0)}}
.food-photo-pin>span{width:54px;height:54px;border-radius:50%;transform:none;background:#fff7e9;border:4px solid white;overflow:hidden;color:#37251a;font-size:24px}
.food-photo-pin>span b{width:100%;height:100%;display:grid;place-items:center;transform:none}
.food-photo-pin img{width:100%;height:100%;object-fit:cover}
.food-photo-pin>em{transform:none;margin:3px auto 0;max-width:120px;padding:3px 7px;border-radius:10px}
.user-dot.live{animation:userLocationPulse 1.8s infinite}

/* v8: real interactive map */
#real-map{position:absolute;inset:0;z-index:0;background:#e7e1d2;touch-action:pan-x pan-y}
.map-art{background:#e7e1d2!important}
.theme-night .map-art{background:#101820!important}
.leaflet-container{font-family:inherit}
.leaflet-control-zoom{margin-top:112px!important;margin-left:16px!important;border:0!important;box-shadow:0 6px 20px rgba(42,31,19,.18)!important}
.leaflet-control-zoom a{color:#7b4b24!important;background:rgba(255,250,240,.96)!important}
.leaflet-control-attribution{font-size:8px!important;margin-bottom:310px!important}
.food-marker-shell{background:none!important;border:0!important}
.real-food-pin{position:relative;width:54px;height:66px;border:0;background:none;padding:0;cursor:pointer;filter:drop-shadow(0 5px 6px rgba(35,25,15,.3))}
.real-food-pin>span,.real-food-pin>img{display:grid;place-items:center;width:46px;height:46px;border:3px solid #fff;border-radius:50%;background:#d87b2e;font-size:24px;object-fit:cover}
.real-food-pin:after{content:"";position:absolute;left:18px;top:39px;width:12px;height:12px;background:#d87b2e;transform:rotate(45deg);z-index:-1}
.real-food-pin em{position:absolute;left:50%;top:51px;transform:translateX(-50%);max-width:110px;width:max-content;padding:2px 6px;border-radius:7px;background:rgba(255,250,240,.94);color:#392b20;font:700 10px/1.4 system-ui,sans-serif;white-space:nowrap}
.live-location,.category-strip,.map-tools,.place-sheet{z-index:500}
.theme-night .leaflet-layer{filter:brightness(.68) contrast(1.12) saturate(.7)}
.theme-night .leaflet-control-zoom a{color:#efb258!important;background:rgba(9,24,34,.96)!important}
.theme-night .real-food-pin em{color:#f1dfbd;background:rgba(7,18,27,.92)}
@media(max-width:720px){
  .leaflet-control-zoom{margin-top:98px!important;margin-left:10px!important}
  .leaflet-control-attribution{margin-bottom:278px!important}
}
@keyframes userLocationPulse{50%{background:rgba(38,126,220,.07);transform:scale(1.18)}}
.theme-night .live-location{background:rgba(8,20,29,.95);border-color:#39464e}
.theme-night .food-photo-pin>span{background:#132630;border-color:#f0b65c;color:#fff}
@media(max-width:760px){
  .live-location{left:10px;right:10px;top:54px;max-width:none;padding:9px 12px}
  .live-location b{font-size:11px}
  .food-photo-pin>span{width:44px;height:44px;border-width:3px;font-size:20px}
  .food-photo-pin>em{font-size:8px;max-width:82px}
}

/* v9: account and AI controls */
.profile-card form{display:grid;gap:10px;margin-top:20px}
.profile-card input,.route-card input{width:100%;box-sizing:border-box;border:1px solid rgba(32,41,43,.14);border-radius:14px;background:rgba(255,255,255,.76);padding:13px 14px;color:#172025;font:inherit;outline:none}
.profile-card input:focus,.route-card input:focus{border-color:#d46b36;box-shadow:0 0 0 3px rgba(212,107,54,.12)}
.auth-actions{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.auth-actions button,.profile-card>button{border:0;border-radius:14px;padding:13px;background:#172025;color:#fff;font-weight:800;cursor:pointer}
.auth-actions button:last-child{background:#d46b36}
.theme-night .profile-card input,.theme-night .route-card input{background:#10212c;border-color:#34414a;color:#f0dfbd}

/* v15.3 AI tourism planner */
.travel-guide-screen{min-height:calc(100dvh - 74px);padding:50px max(18px,7vw) 110px;background:radial-gradient(circle at 20% 0,#fff8e8,var(--paper) 52%)}.guide-hero{max-width:850px;margin:0 auto 28px;text-align:center}.guide-hero small,.travel-result header small{font:800 10px system-ui,sans-serif;letter-spacing:.18em;color:var(--accent)}.guide-hero h1{margin:10px 0;font-size:clamp(30px,5vw,52px)}.guide-hero p{max-width:650px;margin:0 auto 18px;color:var(--muted);font:14px/1.8 system-ui,sans-serif}.guide-hero button{border:1px solid var(--accent);border-radius:18px;background:transparent;color:var(--accent);padding:10px 16px;font-weight:700}.travel-form{max-width:900px;margin:auto;display:grid;grid-template-columns:repeat(3,1fr);gap:13px;padding:22px;border:1px solid var(--line);border-radius:24px;background:rgba(255,250,241,.9);box-shadow:0 15px 40px rgba(58,40,20,.08)}.travel-form label{display:grid;gap:7px;color:var(--muted);font:11px system-ui,sans-serif}.travel-form input,.travel-form select{width:100%;box-sizing:border-box;border:1px solid var(--line);border-radius:12px;background:white;padding:12px;color:var(--ink)}.travel-form .wide{grid-column:1/-1}.travel-form .check{display:flex;align-items:center;gap:9px}.travel-form .check input{width:auto}.travel-form .generate{border:0;border-radius:14px;background:var(--accent);color:white;padding:14px;font-weight:800}.guide-empty{max-width:900px;margin:22px auto;padding:45px;text-align:center;border:1px dashed var(--line);border-radius:22px;color:var(--muted)}.guide-empty b,.guide-empty span{display:block}.guide-empty span{margin-top:8px;font-size:12px}.travel-result{max-width:900px;margin:25px auto 0}.travel-result>header{padding:24px;border-radius:22px;background:linear-gradient(135deg,#33291f,#7b4b2c);color:#fff5df}.travel-result header h2{margin:8px 0;font-size:28px}.travel-result header p{margin:0;color:#e8d9c1;font:13px/1.7 system-ui,sans-serif}.plan-day{margin-top:18px;padding:22px;border:1px solid var(--line);border-radius:22px;background:var(--paper2)}.plan-day h3{margin:0 0 18px;color:var(--accent)}.plan-stop{display:grid;grid-template-columns:62px 1fr;gap:15px;padding:0 0 22px;position:relative}.plan-stop:not(:last-child):after{content:"";position:absolute;left:30px;top:31px;bottom:0;border-left:2px dotted var(--line)}.plan-stop time{position:relative;z-index:1;align-self:start;border-radius:13px;background:#ead7b8;padding:8px 5px;text-align:center;color:#6d4327;font-weight:800}.plan-stop b,.plan-stop span{display:block}.plan-stop span{margin:4px 0;color:var(--muted);font-size:11px}.plan-stop p{margin:7px 0;font:13px/1.65 system-ui,sans-serif}.plan-stop button{border:1px solid var(--accent);border-radius:11px;background:transparent;color:var(--accent);padding:7px 11px}.plan-tips{display:grid;gap:7px;margin-top:18px;padding:20px;border-radius:18px;background:#e8eddf;color:#566346;font:12px/1.5 system-ui,sans-serif}.plan-tips small{margin-top:6px;color:#777}.theme-night .travel-guide-screen{background:radial-gradient(circle at 20% 0,#172d3a,#07131c 55%)}.theme-night .travel-form,.theme-night .plan-day{background:#0e202b}.theme-night .travel-form input,.theme-night .travel-form select{background:#142833;color:#f0dfbd}.theme-night .guide-empty{color:#a3a39d}.theme-night .plan-stop time{background:#614323;color:#f3ce86}.theme-night .plan-tips{background:#17251e;color:#abb48f}
.guide-hero em{font-style:normal;color:#d9804b}.guide-proofs{display:flex;justify-content:center;gap:10px;margin:25px auto 0}.guide-proofs span{display:grid;gap:3px;min-width:115px;padding:11px;border:1px solid var(--line);border-radius:15px;color:var(--muted);font:10px system-ui,sans-serif}.guide-proofs b{color:var(--ink);font-size:13px}.form-title{display:flex;align-items:center;justify-content:space-between;padding-bottom:7px}.form-title b{font-size:17px}.form-title span{color:var(--muted);font-size:10px}.quick{display:flex;gap:8px;flex-wrap:wrap}.quick button,.quick span{border:1px solid var(--line);border-radius:999px;background:#faf4e9;padding:8px 12px;font:11px system-ui,sans-serif}.source-check{padding:13px;border:1px solid #f2d7d2;border-radius:14px;background:#fff4f2}.source-check i{border-radius:7px;background:#ef554f;color:white;padding:6px;font-style:normal;font-weight:800}.source-check span{display:grid}.source-check small{color:#99746e;margin-top:3px}.travel-result>header i{display:block;margin-top:9px;color:#cbb9a5;font:10px system-ui,sans-serif}.result-sources{display:flex;gap:7px;margin-top:15px}.result-sources span{padding:6px 8px;border-radius:7px;background:#ffffff1c;font:9px system-ui,sans-serif}.result-sources .hot{background:#ef554f}.plan-day h3{display:flex;align-items:center;gap:10px}.plan-day h3 small{padding:5px 7px;border-radius:7px;background:var(--accent);color:#fff;font-size:8px}.stop-heading{display:flex;align-items:center;gap:8px}.stop-heading em{border-radius:6px;background:#fff0ee;color:#e64f49;padding:4px 6px;font:8px system-ui,sans-serif}.plan-stop p label{display:block;margin-bottom:3px;color:var(--accent);font-size:9px;font-weight:800}

/* v15.11: editorial city-guide visual language */
:root{--paper:#f3eee4;--paper2:#faf7f0;--ink:#29241f;--muted:#756d64;--accent:#aa4b31;--line:#dcd2c4}
.travel-guide-screen{background:var(--paper)}.guide-hero{text-align:left}.guide-hero small{letter-spacing:.1em}.guide-hero h1{max-width:620px;font-weight:650}.guide-hero p{margin-left:0}
.guide-proofs{justify-content:flex-start}.guide-proofs span,.travel-form,.guide-empty,.plan-day{border-radius:7px;box-shadow:none;background:var(--paper2)}
.quick button,.quick span,.travel-form input,.travel-form select,.source-check,.travel-form .generate,.plan-stop time,.plan-stop button,.plan-tips{border-radius:5px}
.travel-form .generate{background:#a84930}.travel-result>header{border-radius:7px;background:#403a33}.result-sources span,.result-sources .hot,.plan-day h3 small,.stop-heading em{border-radius:3px}
.collection-screen,.profile-screen{background:var(--paper)}.profile-card,.route-card,.place-card,.badge-summary,.place-sheet{border-radius:8px;box-shadow:none}
.topbar,.map-search,.filter-pop,.map-tools{box-shadow:none}
.travel-result>header i>b,.travel-result>header i>small{display:block}.travel-result>header i>b{margin-bottom:5px;color:#ffd2bd;font-style:normal}.travel-result>header i>small{margin-top:4px;color:#ae9b86;font-style:normal}
@media(max-width:760px){.travel-guide-screen{min-height:calc(100dvh - 62px);padding:30px 14px 90px}.travel-form{grid-template-columns:1fr 1fr;padding:16px}.travel-form label:nth-child(2),.travel-form label:nth-child(3){grid-column:1/-1}.guide-proofs span{min-width:0;flex:1}.travel-result header h2{font-size:23px}.plan-day{padding:17px}.plan-stop{grid-template-columns:55px 1fr;gap:10px}.plan-stop:not(:last-child):after{left:27px}.mobile-nav{padding-inline:14px}}
