

/* Layout: passport-notebook app — sticky header + tab bar, one column of rounded "pages" (map / diary / me) */
:root{
  --bg:#F4F1FA; --paper:#FFFFFF; --ink:#2F3352; --muted:#7A7F9E; --line:#E2DDF0;
  --sea:#C9E6F4; --sea2:#B3DAEC; --land:#FFFDF6; --landline:#DCCBAE;
  --accent:#5B6CFF; --accent-ink:#FFFFFF; --wish:#FF7EA3; --wish-bg:#FFE3EC; --plan:#FFB627; --plan-bg:#FFF1CC;
  --ok:#2BB673; --chip:#F0EDF9; --shadow:0 6px 24px rgba(60,50,120,.10);
  --f-display:"Chiron GoRound TC","Huninn","PingFang TC","Microsoft JhengHei",system-ui,sans-serif;
  --f-latin:"Fredoka","Chiron GoRound TC",system-ui,sans-serif;
  --f-body:"PingFang TC","Microsoft JhengHei","Noto Sans TC",system-ui,sans-serif;
}
@media (prefers-color-scheme: dark){:root:not([data-theme="light"]){
  --bg:#161829; --paper:#20233A; --ink:#ECEDF8; --muted:#A3A7C6; --line:#33375A;
  --sea:#1C3550; --sea2:#244465; --land:#2C3150; --landline:#4A5180;
  --accent:#8C98FF; --accent-ink:#121429; --wish:#FF8FB1; --wish-bg:#4A2538; --plan:#FFC24D; --plan-bg:#4A3A17;
  --ok:#4FD493; --chip:#2B2F4C; --shadow:0 6px 24px rgba(0,0,0,.35); color-scheme:dark}}
:root[data-theme="dark"]{
  --bg:#161829; --paper:#20233A; --ink:#ECEDF8; --muted:#A3A7C6; --line:#33375A;
  --sea:#1C3550; --sea2:#244465; --land:#2C3150; --landline:#4A5180;
  --accent:#8C98FF; --accent-ink:#121429; --wish:#FF8FB1; --wish-bg:#4A2538; --plan:#FFC24D; --plan-bg:#4A3A17;
  --ok:#4FD493; --chip:#2B2F4C; --shadow:0 6px 24px rgba(0,0,0,.35); color-scheme:dark}
*{box-sizing:border-box}
[hidden]{display:none!important}
body{background:var(--bg);color:var(--ink);font-family:var(--f-body);font-size:15px;line-height:1.55;
  padding-left:max(16px,env(safe-area-inset-left,0px));padding-right:max(16px,env(safe-area-inset-right,0px));padding-block:0 40px}
body::before{content:"";position:fixed;inset:0 0 auto;height:env(safe-area-inset-top,0px);z-index:10;background:var(--bg)}
.wrap{max-width:1120px;margin:0 auto}
button,input,textarea,select{font:inherit;color:inherit}
button{cursor:pointer}
:focus-visible{outline:3px solid var(--accent);outline-offset:2px}
header.top{position:sticky;top:env(safe-area-inset-top,0px);z-index:20;background:var(--bg);padding-block:14px 10px;display:flex;flex-wrap:wrap;align-items:center;gap:10px 16px}
.brand{display:flex;align-items:center;gap:10px;margin-right:auto}
.brand svg{flex:none}
.brand h1{font-family:var(--f-display);font-size:22px;margin:0;letter-spacing:.04em}
.brand small{display:block;font-family:var(--f-latin);font-size:11px;letter-spacing:.18em;color:var(--muted);text-transform:uppercase;margin-top:-2px}
nav.tabs{display:flex;gap:4px;background:var(--paper);border:1px solid var(--line);padding:4px;border-radius:999px}
nav.tabs button{border:0;background:transparent;padding:7px 16px;border-radius:999px;font-family:var(--f-display);font-weight:700;color:var(--muted)}
nav.tabs button[aria-selected="true"]{background:var(--accent);color:var(--accent-ink)}
.banner{display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px;background:var(--plan-bg);border:1px dashed var(--plan);border-radius:16px;padding:10px 14px;margin-bottom:14px;font-size:14px}
.banner b{font-family:var(--f-display)}
.banner .sp{flex:1;min-width:0}
.btn{border:0;border-radius:999px;padding:9px 16px;font-weight:700;font-family:var(--f-display);background:var(--chip);color:var(--ink);display:inline-flex;align-items:center;gap:6px;transition:transform .12s}
.btn:active{transform:scale(.96)}
.btn.pri{background:var(--accent);color:var(--accent-ink)}
.btn.sm{padding:6px 12px;font-size:13px}
.btn.ghost{background:transparent;border:1.5px solid var(--line)}
.btn.on-visit{background:var(--ok);color:#fff}
.btn.on-wish{background:var(--wish);color:#fff}
.btn.on-plan{background:var(--plan);color:#3a2a00}
.page{display:grid;gap:16px}
.card{background:var(--paper);border-radius:24px;padding:18px;box-shadow:var(--shadow);min-width:0}
.card h2{font-family:var(--f-display);font-size:19px;margin:0 0 10px;display:flex;align-items:center;gap:8px;text-wrap:balance}
.card h2 .cnt{font-family:var(--f-latin);font-size:14px;color:var(--muted);font-weight:600}
.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}
.stat{background:var(--chip);border-radius:18px;padding:10px 12px}
.stat b{display:block;font-family:var(--f-latin);font-size:28px;line-height:1.1;font-variant-numeric:tabular-nums}
.stat span{font-size:12.5px;color:var(--muted)}
@media (max-width:560px){.stats{grid-template-columns:repeat(2,1fr)}}
.maptools{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-bottom:12px}
.maptools .picker{flex:1;min-width:200px}
.mapbox{position:relative;border-radius:20px;overflow:hidden;background:var(--sea);touch-action:none}
.map{display:block;width:100%;height:auto;cursor:grab}
.map .c{fill:var(--land);stroke:var(--landline);stroke-width:.5;vector-effect:non-scaling-stroke;transition:fill .2s}
.map .c.click:hover{fill:var(--chip);stroke:var(--accent)}
.map .c.v{stroke:#fff;stroke-width:1.1}
.map .c.w{fill:url(#hatch)}
.map .c.p{fill:var(--plan-bg);stroke:var(--plan);stroke-width:1.4;stroke-dasharray:3 2}
.map .c.sel{stroke:var(--accent);stroke-width:2.2}
.map .sea{fill:var(--sea)}
.map .grat{fill:none;stroke:var(--sea2);stroke-width:.6;vector-effect:non-scaling-stroke}
.zoomer{position:absolute;right:10px;top:10px;display:flex;flex-direction:column;gap:6px}
.zoomer button{width:34px;height:34px;border-radius:12px;border:0;background:var(--paper);box-shadow:var(--shadow);font-family:var(--f-latin);font-size:18px;font-weight:700}
.legend{display:flex;flex-wrap:wrap;gap:8px 16px;margin-top:12px;font-size:13px;color:var(--muted);align-items:center}
.legend i{display:inline-block;width:20px;height:14px;border-radius:4px;vertical-align:-2px;margin-right:6px}
.lg-v{background:linear-gradient(90deg,#3D5AFE 33%,#fff 33% 66%,#FF5252 66%)}
.lg-w{background:repeating-linear-gradient(135deg,var(--wish) 0 3px,var(--wish-bg) 3px 6px)}
.lg-p{background:var(--plan-bg);border:1.5px dashed var(--plan)}
.legend .sp{flex:1}
.tip{position:absolute;pointer-events:none;background:var(--ink);color:var(--paper);font-size:12.5px;padding:4px 9px;border-radius:8px;white-space:nowrap;transform:translate(-50%,-130%);opacity:0;transition:opacity .1s}
/* picker */
.picker{position:relative}
.picker input{width:100%;border:1.5px solid var(--line);background:var(--paper);border-radius:999px;padding:9px 14px 9px 36px}
.picker::before{content:"";position:absolute;left:14px;top:50%;width:12px;height:12px;border:2px solid var(--muted);border-radius:50%;transform:translateY(-62%)}
.picker::after{content:"";position:absolute;left:25px;top:58%;width:6px;height:2px;background:var(--muted);transform:rotate(45deg)}
.picker ul{position:absolute;z-index:30;left:0;right:0;top:calc(100% + 6px);margin:0;padding:6px;list-style:none;background:var(--paper);border:1px solid var(--line);border-radius:16px;box-shadow:var(--shadow);max-height:280px;overflow:auto}
.picker li{display:flex;align-items:center;gap:10px;padding:7px 10px;border-radius:10px;cursor:pointer}
.picker li[aria-selected="true"],.picker li:hover{background:var(--chip)}
.picker li small{margin-left:auto;color:var(--muted);font-size:12px}
img.flag{width:28px;height:21px;border-radius:5px;object-fit:cover;box-shadow:0 0 0 1px rgba(0,0,0,.08);flex:none;background:var(--chip)}
img.flag.lg{width:64px;height:48px;border-radius:10px}
img.flag.sm{width:22px;height:16.5px;border-radius:4px}
/* sheet */
.sheet{position:fixed;z-index:40;right:max(16px,env(safe-area-inset-right,0px));bottom:calc(16px + env(safe-area-inset-bottom,0px));width:min(400px,calc(100% - 32px));background:var(--paper);border-radius:24px;box-shadow:0 18px 50px rgba(30,20,80,.25);padding:18px;max-height:min(70vh,560px);overflow:auto}
.sheet .hd{display:flex;gap:12px;align-items:center}
.sheet h3{font-family:var(--f-display);font-size:22px;margin:0;line-height:1.2}
.sheet .sub{font-size:13px;color:var(--muted)}
.sheet .x{margin-left:auto;align-self:flex-start;border:0;background:var(--chip);width:32px;height:32px;border-radius:50%;font-size:18px;line-height:1}
.sheet .acts{display:flex;flex-wrap:wrap;gap:8px;margin:14px 0 6px}
.sheet .row{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:8px;font-size:14px}
.mini{list-style:none;padding:0;margin:10px 0 0;display:grid;gap:8px}
.mini li{background:var(--chip);border-radius:14px;padding:8px 12px;font-size:13.5px}
.mini li b{font-family:var(--f-latin);font-weight:600}
input[type=date],.field input,.field textarea{border:1.5px solid var(--line);background:var(--paper);border-radius:12px;padding:8px 12px;width:100%}
/* diary */
.diary-grid{display:grid;grid-template-columns:minmax(0,380px) minmax(0,1fr);gap:16px;align-items:start}
@media (max-width:820px){.diary-grid{grid-template-columns:minmax(0,1fr)}}
.form{display:grid;gap:12px}
.field label{display:block;font-size:13px;font-weight:700;color:var(--muted);margin-bottom:4px;letter-spacing:.04em}
.two{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.chips{display:flex;flex-wrap:wrap;gap:6px}
.chip{display:inline-flex;align-items:center;gap:4px;background:var(--chip);border-radius:999px;padding:3px 10px;font-size:13px}
.chip button{border:0;background:none;padding:0 0 0 2px;color:var(--muted);font-size:15px;line-height:1}
.chip.city::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--wish)}
.picked{display:flex;align-items:center;gap:8px;font-size:14px;margin-top:6px}
.entries{display:grid;gap:14px}
.year{font-family:var(--f-latin);font-size:30px;font-weight:700;color:var(--muted);margin:4px 0 -4px;letter-spacing:.04em}
.entry{background:var(--paper);border-radius:22px;padding:16px 18px;box-shadow:var(--shadow);position:relative;overflow:hidden;min-width:0}
.entry::after{content:"";position:absolute;right:-18px;top:-18px;width:70px;height:70px;border-radius:50%;border:3px dashed var(--line);opacity:.8}
.entry .eh{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.entry h4{font-family:var(--f-display);font-size:18px;margin:0}
.entry .date{font-family:var(--f-latin);font-size:13.5px;color:var(--muted);font-weight:600}
.entry p{white-space:pre-wrap;margin:10px 0 0;overflow-wrap:anywhere}
.ephotos{display:grid;grid-template-columns:repeat(2,1fr);gap:6px;margin-top:10px}
.ephotos.n1{grid-template-columns:1fr}.ephotos.n3 img:first-child{grid-column:1/-1}
.ephotos img{width:100%;aspect-ratio:1;object-fit:cover;border-radius:12px;cursor:zoom-in;background:var(--chip);display:block}
.ephotos.n1 img,.ephotos.n3 img:first-child{aspect-ratio:4/3}
.ph-row{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.ph-th{position:relative;width:78px;height:78px;border-radius:12px;overflow:hidden;background:var(--chip)}
.ph-th img{width:100%;height:100%;object-fit:cover;display:block}
.ph-th button{position:absolute;top:3px;right:3px;width:24px;height:24px;border-radius:50%;border:0;background:rgba(0,0,0,.6);color:#fff;font-size:15px;line-height:1;padding:0}
.ph-th small{position:absolute;left:0;right:0;bottom:0;background:rgba(0,0,0,.55);color:#fff;font-size:11px;text-align:center;padding:1px 0}
.ph-add{width:78px;height:78px;border-radius:12px;border:2px dashed var(--line);background:none;color:var(--muted);font:inherit;font-size:13px;display:grid;place-items:center;cursor:pointer;line-height:1.3;text-align:center}
.ph-hint{font-size:12.5px;color:var(--muted);margin-top:6px}
.lb{position:fixed;inset:0;z-index:300;background:rgba(0,0,0,.88);display:flex;align-items:center;justify-content:center;padding:16px}
.lb img{max-width:100%;max-height:100%;object-fit:contain;border-radius:8px}
.lb button{position:absolute;border:0;background:rgba(255,255,255,.18);color:#fff;border-radius:50%;width:44px;height:44px;font-size:22px;cursor:pointer}
.lb .x{top:14px;right:14px}.lb .pv{left:10px;top:50%}.lb .nx{right:10px;top:50%}
.entry p.clamp{cursor:pointer}
.entry .ea{display:flex;gap:6px;margin-top:12px;flex-wrap:wrap;align-items:center}
.empty{border:2px dashed var(--line);border-radius:22px;padding:28px;text-align:center;color:var(--muted)}
/* me */
.profile{display:flex;gap:16px;align-items:center;flex-wrap:wrap}
.avatar{width:72px;height:72px;border-radius:50%;background:var(--accent);color:var(--accent-ink);display:grid;place-items:center;font-family:var(--f-display);font-size:30px;font-weight:700;flex:none}
.profile .nm{flex:1;min-width:200px}
.profile .nm input{font-family:var(--f-display);font-size:22px;font-weight:700;border:0;border-bottom:2px dashed var(--line);background:transparent;padding:4px 0;width:100%}
.flaggrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(112px,1fr));gap:10px}
.fg{display:flex;flex-direction:column;align-items:center;gap:6px;background:var(--chip);border-radius:16px;padding:12px 6px 8px;text-align:center;font-size:13px;border:0}
.fg img{width:48px;height:36px;border-radius:8px;object-fit:cover;box-shadow:0 0 0 1px rgba(0,0,0,.08)}
.fg small{color:var(--muted);font-size:11px;margin-top:-4px}
.emojiline{font-size:26px;line-height:1.4;word-break:break-all;margin:4px 0 8px;letter-spacing:2px}
.wishes{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:10px}
.wi{display:flex;align-items:center;gap:10px;border-radius:16px;padding:10px 12px;min-width:0}
.wi.plan{background:var(--plan-bg);border:1.5px dashed var(--plan)}
.wi.wish{background:var(--wish-bg)}
.wi .t{flex:1;min-width:0}
.wi .t b{display:block;font-family:var(--f-display)}
.wi .t span{font-size:12.5px;color:var(--muted)}
.wi .cd{font-family:var(--f-latin);font-weight:700;font-size:22px;line-height:1;text-align:right}
.wi .cd small{display:block;font-size:11px;color:var(--muted);font-weight:500}
.wi .rm{border:0;background:none;color:var(--muted);font-size:18px}
.addwish{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:12px}
.addwish .picker{flex:1;min-width:200px}
.addwish input[type=date]{width:auto}
.foot{display:flex;flex-wrap:wrap;gap:8px;align-items:center;font-size:13px;color:var(--muted)}
.dot{width:8px;height:8px;border-radius:50%;background:var(--muted);display:inline-block}
.dot.ok{background:var(--ok)}
/* export modal */
.modal{position:fixed;inset:0;z-index:50;background:rgba(20,18,40,.55);display:grid;place-items:center;padding:max(16px,env(safe-area-inset-top,0px)) max(16px,env(safe-area-inset-right,0px)) max(16px,env(safe-area-inset-bottom,0px)) max(16px,env(safe-area-inset-left,0px))}
.modal .box{background:var(--paper);border-radius:24px;padding:18px;width:min(920px,100%);max-height:100%;overflow:auto;display:grid;gap:12px}
.modal .box h2{font-family:var(--f-display);margin:0;font-size:20px}
.modal .prev{border-radius:16px;overflow:hidden;background:var(--chip);aspect-ratio:3/2;display:grid;place-items:center;color:var(--muted);max-width:100%}
.modal .prev img{width:100%;height:100%;object-fit:contain;display:block}
.modal .opts{display:flex;flex-wrap:wrap;gap:10px 16px;align-items:center}
.modal .opts input[type=text]{border:1.5px solid var(--line);border-radius:999px;padding:7px 14px;background:var(--paper);width:180px}
#shareFab{position:fixed;z-index:35;right:max(16px,env(safe-area-inset-right,0px));bottom:calc(20px + env(safe-area-inset-bottom,0px));display:inline-flex;align-items:center;gap:8px;border:0;border-radius:999px;padding:14px 22px;background:linear-gradient(135deg,#FF7EA3,#5B6CFF);color:#fff;font:inherit;font-size:17px;font-weight:700;box-shadow:0 10px 28px rgba(60,50,120,.40);cursor:pointer;-webkit-tap-highlight-color:transparent}
#shareFab:active{transform:scale(.97)}
#shareFab[hidden]{display:none}
.toast{position:fixed;left:50%;bottom:calc(20px + env(safe-area-inset-bottom,0px));transform:translateX(-50%);background:var(--ink);color:var(--paper);padding:9px 18px;border-radius:999px;font-size:14px;z-index:60}
.confirm{display:inline-flex;gap:6px;align-items:center;font-size:13px}
@media (prefers-reduced-motion:reduce){*{transition:none!important}}
/* ===== site additions ===== */
html{scroll-behavior:smooth}
a{color:var(--accent)}
.brand{text-decoration:none;color:inherit}
nav.tabs a{border:0;background:transparent;padding:7px 16px;border-radius:999px;font-family:var(--f-display);font-weight:700;color:var(--muted);text-decoration:none;white-space:nowrap}
nav.tabs a[aria-current="page"]{background:var(--accent);color:var(--accent-ink)}
.userbox{display:flex;gap:8px;align-items:center}
.subtabs{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:14px}
.subtabs button{border:1.5px solid var(--line);background:var(--paper);border-radius:999px;padding:7px 16px;font-family:var(--f-display);font-weight:700;color:var(--muted)}
.subtabs button[aria-selected="true"]{border-color:var(--accent);color:var(--accent);background:var(--chip)}
main{min-height:60vh}
.hero{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,1fr);gap:24px;align-items:center;background:var(--paper);border-radius:28px;padding:28px;box-shadow:var(--shadow);margin-bottom:18px;overflow:hidden}
.hero h2{font-family:var(--f-display);font-size:clamp(26px,4vw,40px);line-height:1.25;margin:0 0 10px;text-wrap:balance}
.hero p{color:var(--muted);margin:0 0 18px;max-width:34em}
.hero .mapprev{border-radius:20px;overflow:hidden;background:var(--sea)}
@media (max-width:760px){.hero{grid-template-columns:minmax(0,1fr);padding:20px}}
.section-h{font-family:var(--f-display);font-size:20px;margin:22px 0 12px;display:flex;align-items:center;gap:10px}
.section-h small{font-family:var(--f-body);font-size:13px;color:var(--muted);font-weight:400}
.feed{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:14px;align-items:start}
.travelers{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px}
.tcard{display:flex;flex-direction:column;gap:8px;background:var(--paper);border-radius:20px;padding:14px;box-shadow:var(--shadow);text-decoration:none;color:inherit;min-width:0}
.tcard .who{display:flex;gap:10px;align-items:center;min-width:0}
.tcard .who div{min-width:0}
.tcard b{font-family:var(--f-display);display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tcard span{font-size:12.5px;color:var(--muted)}
.miniflags{display:flex;gap:4px;flex-wrap:wrap}
.av{width:40px;height:40px;border-radius:50%;background:var(--accent);color:var(--accent-ink);display:grid;place-items:center;font-family:var(--f-display);font-weight:700;flex:none;font-size:17px}
.av{overflow:hidden}
.av img{width:100%;height:100%;object-fit:cover;display:block}
.av.big{width:84px;height:84px;font-size:34px}
.avrow{display:flex;gap:14px;align-items:center}
.av.sm{width:28px;height:28px;font-size:13px}
.author{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--muted);text-decoration:none;margin-bottom:8px}
.author b{color:var(--ink);font-family:var(--f-display)}
.entry .ea .like{border:0;background:var(--chip);border-radius:999px;padding:6px 12px;font-weight:700;font-family:var(--f-latin);display:inline-flex;gap:6px;align-items:center}
.entry .ea .like.on{background:var(--wish-bg);color:var(--wish)}
.entry .ea .sp{flex:1}
.thread{margin-top:12px;border-top:1.5px dashed var(--line);padding-top:10px;display:grid;gap:10px}
.cm{display:flex;gap:8px;align-items:flex-start;min-width:0}
.cm .bd{flex:1;min-width:0;background:var(--chip);border-radius:14px;padding:7px 12px;font-size:14px}
.cm .bd a{font-family:var(--f-display);font-weight:700;color:var(--ink);text-decoration:none;margin-right:6px}
.cm .bd p{margin:2px 0 0;white-space:pre-wrap;overflow-wrap:anywhere}
.cm .meta{font-size:11.5px;color:var(--muted);display:flex;gap:10px;margin-top:2px}
.cm .meta button{border:0;background:none;padding:0;color:var(--muted);font-size:11.5px;text-decoration:underline}
.cform{display:flex;gap:8px;align-items:flex-end}
.cform textarea{flex:1;min-width:0;border:1.5px solid var(--line);border-radius:14px;padding:8px 12px;background:var(--paper);resize:vertical;min-height:40px}
.phead{display:flex;gap:18px;align-items:center;flex-wrap:wrap}
.phead .av{width:84px;height:84px;font-size:34px}
.phead h2{font-family:var(--f-display);font-size:28px;margin:0;line-height:1.2}
.phead .handle{font-family:var(--f-latin);color:var(--muted);font-weight:600}
.phead .bio{margin:6px 0 0;max-width:40em}
.phead .acts{margin-left:auto;display:flex;gap:8px;flex-wrap:wrap}
.auth{max-width:420px;margin:24px auto;display:grid;gap:14px}
.auth .logo{display:grid;place-items:center;gap:8px;text-align:center}
.auth .logo h2{font-family:var(--f-display);margin:0}
.notice{background:var(--plan-bg);border-radius:14px;padding:10px 14px;font-size:14px}
.notice.err{background:var(--wish-bg);color:var(--ink)}
.switch{display:flex;align-items:center;gap:10px;cursor:pointer;font-size:14px}
.switch input{width:20px;height:20px;accent-color:var(--accent)}
.urlrow{display:flex;align-items:center;border:1.5px solid var(--line);border-radius:12px;overflow:hidden;background:var(--paper)}
.urlrow span{padding:8px 0 8px 12px;color:var(--muted);font-size:13.5px;white-space:nowrap}
.urlrow input{border:0!important;border-radius:0!important;padding-left:2px!important;min-width:0}
.center{display:grid;place-items:center;min-height:40vh;color:var(--muted);text-align:center;gap:10px}
.setup{max-width:640px;margin:30px auto}
.setup code{background:var(--chip);padding:2px 6px;border-radius:6px}
footer.site{margin-top:36px;display:flex;gap:10px;align-items:center;justify-content:center;color:var(--muted);font-size:13px;flex-wrap:wrap}
.clamp{display:-webkit-box;-webkit-line-clamp:5;-webkit-box-orient:vertical;overflow:hidden}
@media (max-width:640px){header.top nav.tabs{order:3;width:100%;justify-content:center}nav.tabs a{padding:7px 11px}}
/* 國旗牆：小國旗擠在一起，一目了然 */
.flagwall{display:flex;flex-wrap:wrap;gap:6px}
.flagwall button{border:0;padding:0;background:none;border-radius:6px;line-height:0;cursor:pointer}
.flagwall img{width:40px;height:30px;border-radius:6px;object-fit:cover;box-shadow:0 0 0 1px rgba(0,0,0,.1);transition:transform .12s;display:block}
.flagwall button:hover img,.flagwall button:focus-visible img{transform:scale(1.18)}
.flagwall button span{display:none}
.flagwall.named button{display:inline-flex;align-items:center;gap:6px;background:var(--chip);border-radius:999px;padding:3px 11px 3px 3px;line-height:1.3;font-size:13px}
.flagwall.named img{width:26px;height:19.5px;border-radius:999px 4px 4px 999px}
.flagwall.named button span{display:inline}
.flagwall.named button:hover img{transform:none}
.dfilter{gap:5px}
.dfilter img{width:32px;height:24px;border-radius:5px}
.dfilter button.on img{box-shadow:0 0 0 3px var(--accent)}
.dfilter button.all{line-height:1.2;font-size:12.5px;font-weight:700;padding:4px 10px;border-radius:999px;background:var(--chip);color:var(--muted);font-family:var(--f-display)}
.dfilter button.all.on{background:var(--accent);color:var(--accent-ink)}
.field .picker input{padding-left:36px}

.testtag{font-family:var(--f-latin);font-size:11px;font-weight:700;letter-spacing:.08em;background:var(--plan);color:#3a2a00;border-radius:999px;padding:2px 8px;margin-left:6px;vertical-align:3px}


/* 文字清單（依英文名稱排序，可直接勾選去過的國家） */
.lt-bar{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:10px}
.lt-bar input[type=search]{flex:1 1 200px;min-width:0;font:inherit;font-size:16px;padding:11px 14px;border-radius:14px;border:1px solid var(--line);background:var(--paper);color:var(--ink)}
.lt-seg{display:inline-flex;border:1px solid var(--line);border-radius:999px;overflow:hidden}
.lt-seg button{border:0;background:var(--paper);color:var(--muted);font:inherit;font-size:14px;padding:8px 14px;cursor:pointer}
.lt-seg button[aria-pressed=true]{background:var(--accent);color:var(--accent-ink);font-weight:700}
.lt-opt{display:flex;align-items:center;gap:6px;font-size:14px;color:var(--muted)}
.lt-sum{font-size:14px;color:var(--muted);margin:2px 0 8px}
.lt-sum b{color:var(--ink);font-size:18px}
.lt-idx{display:flex;flex-wrap:wrap;gap:4px;margin:6px 0 10px}
.lt-idx button{border:0;background:var(--chip);color:var(--ink);font-family:var(--f-latin);font-weight:600;font-size:14px;min-width:30px;height:30px;border-radius:9px;cursor:pointer}
.lt-head{font-family:var(--f-latin);font-weight:700;font-size:18px;color:var(--accent);padding:10px 4px 4px;scroll-margin-top:12px}
.lt-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:6px}
.lt-row{display:flex;align-items:center;gap:10px;width:100%;min-height:50px;padding:6px 12px;border-radius:14px;border:1px solid var(--line);background:var(--paper);color:var(--ink);font:inherit;text-align:left;cursor:pointer;-webkit-tap-highlight-color:transparent}
.lt-row:active{transform:scale(.99)}
.lt-chk{flex:none;width:26px;height:26px;border-radius:50%;border:2px solid var(--line);display:grid;place-items:center;font-size:15px;line-height:1;color:transparent}
.lt-row[aria-pressed=true]{background:color-mix(in srgb,var(--ok) 15%,var(--paper));border-color:var(--ok)}
.lt-row[aria-pressed=true] .lt-chk{background:var(--ok);border-color:var(--ok);color:#fff}
.lt-row .flag{flex:none}
.lt-n{flex:1;min-width:0;display:flex;flex-direction:column;line-height:1.25}
.lt-n b{font-family:var(--f-latin);font-weight:600;font-size:15px;overflow-wrap:anywhere}
.lt-n small{color:var(--muted);font-size:12.5px}
.lt-st{flex:none;font-size:12px;color:var(--muted)}
.lt-empty{padding:24px;text-align:center;color:var(--muted)}

/* 語言切換 */
.langbtn{order:2;font:600 13px var(--f-latin,inherit);color:var(--ink,#2F3352);background:transparent;border:1.5px solid currentColor;border-radius:999px;padding:5px 12px;cursor:pointer;opacity:.8}
.langbtn:hover{opacity:1}
header.top .userbox{order:2}
@media (max-width:640px){header.top{column-gap:8px}.langbtn{padding:4px 9px;font-size:12px}.brand{min-width:0}}
html[lang=en] .brand small{display:none}@media (max-width:640px){html[lang=en] .brand h1{font-size:19px}}
@media (max-width:640px){html[lang=en] .brand h1{font-size:17px!important}html[lang=en] .brand svg{width:34px;height:34px}.userbox .btn.sm{padding-inline:10px}}
@media (max-width:640px){header.top{column-gap:6px}.langbtn{padding:3px 7px}.brand{gap:8px}}

/* 輸入足跡 */
.addfp{display:flex;align-items:center;gap:14px;width:100%;margin:0 0 14px;padding:14px 18px;border:0;border-radius:22px;cursor:pointer;text-align:left;color:#fff;background:linear-gradient(135deg,#5B6CFF,#8A5BFF);box-shadow:0 8px 22px rgba(91,108,255,.28);font:inherit;transition:transform .12s,box-shadow .12s}
.addfp:hover{transform:translateY(-1px);box-shadow:0 10px 26px rgba(91,108,255,.36)}
.addfp:active{transform:translateY(0)}
.addfp .plus{flex:none;display:grid;place-items:center;width:44px;height:44px;border-radius:50%;background:rgba(255,255,255,.22);font-size:28px;font-weight:700;line-height:1}
.addfp b{display:block;font-size:19px;letter-spacing:.02em}
.addfp small{display:block;font-size:13px;opacity:.88;margin-top:2px}
.modal .af-box{display:flex;flex-direction:column;gap:12px;height:min(86vh,760px);width:min(560px,100%);overflow:hidden}
.af-box input[type=search]{font-size:16px}
.af-sum{font-size:13px;color:var(--muted)}
.af-list{flex:1;min-height:200px;overflow:auto;display:flex;flex-direction:column;gap:6px;padding-right:2px}
.af-row{display:flex;align-items:center;gap:12px;width:100%;padding:9px 12px;border:1.5px solid rgba(47,51,82,.12);border-radius:14px;background:#fff;cursor:pointer;text-align:left;font:inherit;color:inherit}
.af-row:hover{border-color:#5B6CFF}
.af-row.on{background:#EEF0FF;border-color:#5B6CFF}
.af-n{flex:1;min-width:0;display:flex;flex-direction:column}
.af-n small{color:var(--muted);font-size:12px}
.af-st{flex:none;font-size:13px;font-weight:700;color:#5B6CFF;white-space:nowrap}
.af-row:not(.on) .af-st{color:var(--muted)}
.af-hint{font-size:12.5px;color:var(--muted)}
#listCard{margin-top:16px}

#listCard.first{margin:0 0 16px}
.lt-first{margin:-2px 0 10px;padding:10px 14px;border-radius:14px;background:#EEF0FF;color:#3B47C9;font-size:14px;font-weight:600}

/* Google 登入 */
.gbtn{display:flex;align-items:center;justify-content:center;gap:10px;width:100%;padding:12px 16px;border-radius:999px;border:1.5px solid rgba(47,51,82,.18);background:#fff;color:#2F3352;font:600 15px var(--f-latin,inherit);cursor:pointer}
.gbtn:hover{border-color:#5B6CFF;background:#F7F8FF}
.gbtn:disabled{opacity:.6;cursor:wait}
.ordiv{display:flex;align-items:center;gap:10px;color:var(--muted);font-size:13px;margin:2px 0}
.ordiv::before,.ordiv::after{content:"";flex:1;height:1px;background:rgba(47,51,82,.14)}

/* 優化：國家清單不要把地圖擠到很下面 */
#ltBox{max-height:min(62vh,560px);overflow:auto;overscroll-behavior:contain;padding-right:2px;border-radius:14px}
#ltBox .lt-head{position:sticky;top:0;background:var(--paper);z-index:1}
/* 提示訊息不要被右下角「分享足跡」按鈕蓋住 */
.toast{bottom:calc(88px + env(safe-area-inset-bottom,0px));max-width:calc(100vw - 32px);text-align:center}
#ltBox{position:relative}

/* 分享連結 */
.sharelinks{border-top:1px dashed rgba(47,51,82,.16);padding-top:12px;display:grid;gap:8px}
.sl-h{font-weight:700;font-size:14px}
.sl-row{display:flex;flex-wrap:wrap;gap:8px}
.sl-btn{display:inline-flex;align-items:center;justify-content:center;min-width:84px;padding:9px 14px;border-radius:999px;border:0;background:var(--c);color:#fff;font:700 14px var(--f-latin,inherit);text-decoration:none;cursor:pointer}
.sl-btn:hover{filter:brightness(1.08)}
.sl-tip{font-size:12.5px;color:var(--muted)}
.sl-warn{font-size:13px;background:#FFF4D6;color:#7a5600;border-radius:12px;padding:8px 12px}
/* 加入主畫面 */
.a2hs{display:flex;align-items:center;gap:10px;margin:0 0 12px;padding:10px 12px;border-radius:18px;background:var(--paper);box-shadow:0 4px 16px rgba(47,51,82,.08)}
.a2hs[hidden]{display:none}
.a2hs-ic img{width:40px;height:40px;border-radius:10px;display:block}
.a2hs-t{flex:1;min-width:0;display:flex;flex-direction:column;line-height:1.3}
.a2hs-t b{font-size:14.5px}.a2hs-t small{font-size:12.5px;color:var(--muted)}
.a2hs-x{border:0;background:none;font-size:22px;line-height:1;color:var(--muted);cursor:pointer;padding:4px 6px}
.modal .a2hs-box{width:min(460px,100%)}
.a2hs-box ol{margin:4px 0 0;padding-left:22px;display:grid;gap:8px}
.a2hs-box p{margin:0}
.a2hs-note{font-size:13px;color:var(--muted);margin-top:8px!important}
.a2hs-share{display:inline-block;border:1.5px solid currentColor;border-radius:4px;padding:0 4px;font-size:12px}

.sl-btn{background:var(--c)}
.sl-row .sl-btn{flex:1 1 calc(33% - 8px);min-width:96px;padding:11px 12px}
.sl-link{font-size:13px;color:var(--muted);display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.sl-link .sl-warn{background:none;padding:0}

/* ===== 旅人名片（側邊） ===== */
.layout{display:block}
#side[hidden]{display:none}
.sidecard{background:var(--paper);border-radius:24px;padding:16px;box-shadow:var(--shadow,0 6px 24px rgba(47,51,82,.06));display:grid;gap:10px;margin-bottom:14px}
.sd-top{display:flex;align-items:center;gap:14px}
.sd-id{display:flex;flex-direction:column;min-width:0;line-height:1.35}
.sd-id b{font-size:18px;font-family:var(--f-display,inherit);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sd-id span{font-size:13px;color:var(--muted)}
.sd-n b{color:#5B6CFF;font-size:15px}
.sd-bio{margin:0;font-size:14px;color:#3c4064}
.sd-empty{margin:0;font-size:13px;color:var(--muted)}
.sd-acts{display:flex;gap:8px;flex-wrap:wrap}
.sd-avbtn{border:2px dashed #5B6CFF;background:#EEF0FF;color:#3B47C9;border-radius:14px;padding:9px 12px;font:700 14px inherit;font-family:inherit;cursor:pointer}
.sd-avbtn:hover{background:#E2E5FF}
/* 大頭照＋相機按鈕 */
.aved{position:relative;flex:none;width:84px;height:84px}
.aved .av.big{width:84px;height:84px}
.aved-btn{position:absolute;right:-4px;bottom:-4px;width:36px;height:36px;border-radius:50%;border:3px solid var(--paper);background:#5B6CFF;color:#fff;display:grid;place-items:center;cursor:pointer;box-shadow:0 4px 12px rgba(91,108,255,.4)}
.avbig{font-size:15px;padding:10px 18px}
/* 自我介紹 */
.intro{display:grid;gap:6px}
.iq{display:flex;flex-direction:column;background:#F6F5FD;border-radius:14px;padding:8px 12px}
.ik{font-size:12px;color:var(--muted)}
.iv{display:flex;align-items:center;gap:8px;font-weight:700;font-size:15px}
.soc{display:flex;gap:8px;flex-wrap:wrap}
.soc a{display:inline-flex;align-items:center;gap:6px;padding:7px 12px;border-radius:999px;text-decoration:none;font-weight:700;font-size:13.5px;color:#fff}
.soc-ig{background:linear-gradient(45deg,#F58529,#DD2A7B,#8134AF)}
.soc-fb{background:#1877F2}
.phead .intro{margin-top:10px;grid-template-columns:repeat(auto-fit,minmax(170px,1fr))}
.phead .soc{margin-top:10px}
.form-h{font-family:var(--f-display,inherit);font-size:16px;margin:8px 0 -4px}
.field small{font-weight:400;color:var(--muted)}
.cf-chip{display:flex;align-items:center;gap:10px;padding:9px 12px;border:1.5px solid #5B6CFF;background:#EEF0FF;border-radius:14px}
.cf-chip b{flex:1}
.cf-x{border:0;background:none;font-size:20px;line-height:1;cursor:pointer;color:var(--muted)}
/* 手機：名片精簡版放在頁面最上面 */
@media (max-width:999px){
  .sidecard{grid-template-columns:auto 1fr;align-items:center;padding:12px 14px;gap:8px 12px}
  .sidecard .sd-top{grid-column:1/-1}
  .sidecard .sd-avbtn{grid-column:1/-1}
  .sidecard .intro{grid-column:1/-1;grid-template-columns:1fr 1fr}
  .sidecard .sd-bio,.sidecard .sd-empty,.sidecard .soc,.sidecard .sd-acts{grid-column:1/-1}
  .sidecard .aved,.sidecard .aved .av.big{width:64px;height:64px}
  .sidecard .aved .av.big{font-size:26px}
  .sidecard .iq{padding:6px 10px}.sidecard .iv{font-size:14px}
}
/* 電腦：名片固定在左側 */
@media (min-width:1000px){
  .layout.has-side{display:grid;grid-template-columns:280px minmax(0,1fr);gap:22px;align-items:start}
  .layout.has-side #side{position:sticky;top:92px}
  .sidecard{margin-bottom:0}
}
/* 首次登入引導 */
.modal .ob-box{width:min(520px,100%);max-height:100%;overflow:auto}
.ob-step{display:inline-block;font-size:12px;font-weight:700;color:#5B6CFF;background:#EEF0FF;border-radius:999px;padding:3px 10px;margin-right:8px;vertical-align:3px}
.ob-box h2{margin:2px 0 0}
.ob-sub{margin:0;color:var(--muted);font-size:14px}
.ob-av{display:flex;align-items:center;gap:16px;flex-wrap:wrap;padding:6px 0}
.ob-acts{display:flex;gap:10px;justify-content:space-between;flex-wrap:wrap;position:sticky;bottom:-18px;background:var(--paper);padding:10px 0 4px}
.ob-acts .btn.pri{flex:1}
@media (max-width:999px){
  .sidecard .sd-avbtn,.sidecard .sd-bio,.sidecard .sd-empty,.sidecard .soc{display:none}
  .sidecard{grid-template-columns:1fr auto}
  .sidecard .sd-top{grid-column:1}
  .sidecard .sd-acts{grid-column:2;grid-row:1;flex-direction:column;align-self:center}
  .sidecard .sd-acts .btn{padding:6px 12px}
}
#afTitle .ob-step{display:block;width:max-content;margin:0 0 4px}
.ob-box>.ob-step{justify-self:start}

/* 代表圖 */
.avp{display:grid;grid-template-columns:repeat(6,1fr);gap:8px}
.avp-b{aspect-ratio:1;border-radius:50%;border:3px solid transparent;background:var(--bg);font-size:26px;display:grid;place-items:center;cursor:pointer;padding:0;line-height:1;box-shadow:inset 0 0 0 999px rgba(255,255,255,.0);transition:transform .1s}
.avp-b:hover{transform:scale(1.06)}
.avp-b.on{border-color:var(--ink,#2F3352);box-shadow:0 0 0 3px #fff inset}
.avp-lab{font-size:13px;color:var(--muted);margin:10px 0 6px}
.ob-sec{display:grid;gap:10px;background:#F6F5FD;border-radius:18px;padding:12px}
.ob-lab{font-weight:700}
.ob-av{padding:0}
.ob-avr{display:flex;flex-direction:column;gap:6px}
.ob-avr small{color:var(--muted);font-size:12.5px}
@media (max-width:420px){.avp-b{font-size:22px}}

/* 地圖全螢幕 */
.mapbox.fs{position:fixed;inset:0;z-index:55;border-radius:0;display:flex;align-items:center;justify-content:center;height:100vh;height:100dvh}
.mapbox.fs .map{width:100%;height:100%}
.mapbox.fs .zoomer{top:calc(12px + env(safe-area-inset-top,0px));right:calc(12px + env(safe-area-inset-right,0px))}
.mapbox.fs .zoomer button{width:44px;height:44px;font-size:22px}
body.map-fs{overflow:hidden}
body.map-fs #shareFab{display:none}
.sheet{z-index:60}
.zoomer button{display:grid;place-items:center;cursor:pointer;color:var(--ink)}

#dNote{resize:vertical;min-height:140px}

/* 邀請朋友 */
.invbtn{border:0;border-radius:14px;padding:10px 12px;background:linear-gradient(135deg,#06C755,#2BB673);color:#fff;font:700 14px inherit;font-family:inherit;cursor:pointer}
.invbtn:hover{filter:brightness(1.06)}
.modal .iv-box{width:min(460px,100%)}
.iv-sub{margin:0;color:var(--muted);font-size:14px}
.iv-url{display:flex;align-items:center;gap:8px;background:#F6F5FD;border-radius:14px;padding:8px 8px 8px 14px}
.iv-url span{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font:600 14px var(--f-latin,inherit)}
@media (max-width:999px){ .sidecard .invbtn{grid-column:1/-1;padding:8px 12px} }
.iv-msg{background:#F6F5FD;border-radius:14px;padding:12px 14px;font-size:14.5px;line-height:1.6;word-break:break-all}

/* App 內建瀏覽器提醒 */
.inapp{display:grid;gap:6px;padding:12px 14px;border-radius:14px;background:#FFF4D6;color:#5c4100;font-size:14px;line-height:1.55}
.inapp b:first-child{font-size:15px}
.inapp .btn{justify-self:start}
.inapp.shake{animation:shk .5s}
@keyframes shk{20%,60%{transform:translateX(-5px)}40%,80%{transform:translateX(5px)}}
@media (prefers-color-scheme:dark){.inapp{background:#3a2f10;color:#ffe2a0}}
/* Trip.com 浮動按鈕 */
.tripfab{position:fixed;z-index:34;left:max(16px,env(safe-area-inset-left,0px));bottom:calc(20px + env(safe-area-inset-bottom,0px));display:inline-flex;align-items:center;gap:8px;padding:9px 16px 9px 10px;border-radius:999px;background:linear-gradient(135deg,#287DFA,#0A5DD8);color:#fff;text-decoration:none;box-shadow:0 10px 26px rgba(10,93,216,.42);animation:tfp 2.6s ease-in-out infinite}
.tripfab .tf-ic{display:grid;place-items:center;width:34px;height:34px;border-radius:50%;background:rgba(255,255,255,.22);font-size:18px}
.tripfab .tf-t{display:flex;flex-direction:column;line-height:1.2}
.tripfab b{font-size:15px;letter-spacing:.02em}
.tripfab small{font-size:11px;opacity:.85}
.tripfab:hover{filter:brightness(1.08)}
@keyframes tfp{0%,100%{transform:translateY(0)}50%{transform:translateY(-3px)}}
@media (prefers-reduced-motion:reduce){.tripfab{animation:none}}
body.map-fs .tripfab{display:none}
/* 手機上兩顆浮動按鈕都在時，讓分享鈕縮小一點避免擠在一起 */
@media (max-width:420px){ .tripfab small{display:none} .tripfab{padding:8px 14px 8px 8px} .tripfab b{font-size:14px} #shareFab{padding:12px 16px;font-size:15px} }

/* 旅行好物：每個商品一顆小按鈕，直接連到蝦皮 */
.goods{display:grid;gap:8px;margin:6px 0 2px}
.gd-h{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.gd-h b{font-family:var(--f-display,inherit);font-size:17px}
.gd-h small{color:var(--muted);font-size:13px}
.gd-row{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:8px}
@media (max-width:560px){.gd-row{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;padding-bottom:4px;margin-right:calc(-1*max(16px,env(safe-area-inset-right,0px)))}.gd{flex:0 0 96px;scroll-snap-align:start}}
.gd{display:grid;justify-items:center;gap:6px;padding:10px 6px;border-radius:16px;background:var(--paper);border:1.5px solid rgba(47,51,82,.1);text-decoration:none;color:inherit;text-align:center}
.gd:hover{border-color:#EE4D2D;transform:translateY(-1px)}
.gd-i{display:grid;place-items:center;width:52px;height:52px;border-radius:14px;background:#FFF1EC}
.gd-i svg{width:42px;height:42px}
.gd-n{font-size:12.5px;font-weight:700;line-height:1.3}
.gd-note{margin:0;font-size:12px;color:var(--muted)}
