/* ============================================================
   十日同行 · 统一设计系统 ui.css v9 · 中秋暮野
   底、光、字全部对齐主攻略（韩国自由行指南/index.html）的首屏语言：
   暮色渐层底 + 右上月亮暖光 + 左下济州海面的黄绿光 + 折线城市天际线 + 虚线航线与小飞机。
   橙金只做点缀（按钮/选中态/数字），不再整片铺橙——上一版被说"太黄"就是这个原因。
   ============================================================ */
:root{
  /* 底与字（= 攻略 hero 的 dusk ramp） */
  --bg:#1A1712; --bg-2:#221E17; --bg-deep:#141210; --card-bg:#26211A;
  --dusk-1:#2F2A20; --dusk-2:#27231B; --dusk-3:#1C1914; --dusk-4:#1A1712;
  --glass:rgba(247,242,232,.05); --glass-2:rgba(247,242,232,.072); --glass-3:rgba(247,242,232,.10);
  --ink:#F2EDE3; --ink-2:#C6BCAA; --ink-3:#9A917F;
  --line:rgba(242,237,227,.13); --line-2:rgba(242,237,227,.07);
  /* 暖主色：只做点缀 */
  --tang:#E89450; --tang-deep:#C9762F; --tang-soft:rgba(232,148,80,.15);
  --amber:#E0B558; --amber-deep:#B98F2E;
  --coral:#E0705A; --copper:#B4633A; --rose:#D9907E;
  --taupe:#A9927B; --stone:#8E8478; --coffee:#8A6F52;
  /* 攻略同款青绿：海面线、航线、实时脉冲——装饰性次色，不当状态色用 */
  --sea:#7FD4C8; --jeju:#4FB79E; --sea-soft:rgba(127,212,200,.14);
  --ok:#E0B558; --ok-soft:rgba(224,181,88,.15);
  --danger:#E0705A; --danger-soft:rgba(224,112,90,.14);
  --on-acc:#14100A;
  /* 渐变 */
  --g-brand:linear-gradient(120deg,#E0B558 0%,#E89450 48%,#C9762F 100%);
  --g-warm:linear-gradient(120deg,#E89450 0%,#E0B558 30%,#D9907E 64%,#B4633A 100%);
  --g-btn:linear-gradient(135deg,#F0BC72,#E89450 52%,#C9762F);
  --g-btn-warm:linear-gradient(135deg,#E89450,#C9762F 60%,#B4633A);
  --g-text:linear-gradient(100deg,#E8C070,#E89450 52%,#C9762F);
  --g-hair:linear-gradient(90deg,rgba(224,181,88,.5),rgba(232,148,80,.42) 52%,rgba(127,212,200,.4));
  --g-night:radial-gradient(88% 56% at 80% 8%,rgba(217,164,65,.15) 0%,rgba(217,164,65,0) 62%),
            radial-gradient(70% 46% at 6% 96%,rgba(24,148,136,.16) 0%,rgba(24,148,136,0) 66%),
            linear-gradient(180deg,var(--dusk-1) 0%,var(--dusk-2) 40%,var(--dusk-3) 76%,var(--dusk-4) 100%);
  --shadow-s:0 1px 0 rgba(255,247,235,.05) inset, 0 10px 26px -18px rgba(0,0,0,.75);
  --shadow-m:0 1px 0 rgba(255,247,235,.07) inset, 0 26px 54px -28px rgba(0,0,0,.85);
  --blur:saturate(135%) blur(18px);
  --r:18px; --r-s:12px; --fs:18px;
  --z-top:40; --z-tab:50; --z-scrim:55; --z-sheet:60;
  --sans:"Noto Sans SC",-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
  --serif:"Noto Serif SC","Songti SC","STSong","SimSun",serif;
  --disp:Fraunces,Georgia,"Noto Serif SC","Songti SC",serif;
  --mono:ui-monospace,"SF Mono","Cascadia Mono","Roboto Mono",Menlo,Consolas,monospace;
  --ease:cubic-bezier(.16,1,.3,1);
}
html.big{--fs:21px} html.huge{--fs:24px}
*{box-sizing:border-box}
body{margin:0;color:var(--ink);font-family:var(--sans);font-size:var(--fs);line-height:1.6;-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent;
  background:var(--g-night) fixed;background-color:var(--bg)}
a{color:var(--tang)}
h1,h2,h3{margin:0;font-family:var(--serif);font-weight:800;letter-spacing:-.01em;line-height:1.28}
h1{font-size:1.55em} h2{font-size:1.22em} h3{font-size:1.04em}
p{margin:0}
.wrap{max-width:1080px;margin:0 auto;padding:0 18px}
.wrap.narrow{max-width:640px}
.mono{font-family:var(--mono);font-variant-numeric:tabular-nums}
.dim{color:var(--ink-3)} .small{font-size:.82em}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.hr{height:1px;background:var(--line-2);margin:14px 0}
.rights{text-align:center;font-size:.74em;color:var(--ink-3);padding:26px 0 40px}

/* ---------- 背景：中秋夜空场景（月亮 / 星空 / 折线城市 / 虚线航线）+ 等高线暗纹 + 颗粒 ---------- */
.aurora{position:fixed;inset:0;z-index:-1;overflow:hidden;pointer-events:none}
.aurora .scene{position:absolute;inset:0;width:100%;height:100%;display:block;z-index:2}
/* 场景压在一层薄纱后面，家长端大字内容永远读得清 */
.aurora::after{content:"";position:absolute;inset:0;pointer-events:none;
  z-index:3;background:linear-gradient(180deg,rgba(26,23,18,.3) 0%,rgba(26,23,18,.5) 40%,rgba(26,23,18,.72) 74%,rgba(26,23,18,.84) 100%)}
.aurora .grain{position:absolute;inset:0;pointer-events:none;opacity:.5;z-index:4;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='g'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23g)' opacity='.05'/%3E%3C/svg%3E")}
.aurora i{position:absolute;display:block;border-radius:50%;filter:blur(104px);pointer-events:none;will-change:transform,opacity;z-index:0}
/* 只留三团光：右上月色暖光、左下济州海面黄绿光、中间一点极淡的暖斑 */
.aurora .a1{width:44vmax;height:44vmax;right:-12vmax;top:-14vmax;opacity:.42;background:radial-gradient(circle at 55% 45%,rgba(224,181,88,.42),transparent 66%);animation:drift2 22s var(--ease) infinite alternate}
.aurora .a2{width:52vmax;height:52vmax;left:-18vmax;bottom:-24vmax;opacity:.5;background:radial-gradient(circle at 50% 50%,rgba(24,148,136,.34),transparent 66%);animation:drift3 30s var(--ease) infinite alternate}
.aurora .a3{width:30vmax;height:30vmax;left:34vmax;top:36vmax;opacity:.26;background:radial-gradient(circle at 50% 50%,rgba(232,148,80,.3),transparent 66%);animation:drift1 26s var(--ease) infinite alternate}
.aurora .a4{display:none}
/* 等高线曲线 + 直线网格：暗纹本身也从纯金橙改成 金 → 珊瑚 → 青绿，避免整屏发黄 */
.aurora .lines{position:absolute;inset:0;pointer-events:none;opacity:.34;z-index:1;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1200 800' preserveAspectRatio='none'%3E%3Cdefs%3E%3ClinearGradient id='s' x1='0' y1='0' x2='1' y2='1'%3E%3Cstop offset='0' stop-color='%23E0B558'/%3E%3Cstop offset='.52' stop-color='%23E89450'/%3E%3Cstop offset='1' stop-color='%234FB79E'/%3E%3C/linearGradient%3E%3C/defs%3E%3Cg fill='none' stroke='url(%23s)' stroke-width='1.1'%3E%3Cpath d='M0 640C180 540 300 720 480 620S760 400 940 490 1140 580 1200 520'/%3E%3Cpath d='M0 545C200 445 320 625 520 525S800 305 980 395 1160 485 1200 425'/%3E%3Cpath d='M0 450C220 360 340 530 560 430S840 220 1020 310 1180 390 1200 330'/%3E%3Cpath d='M0 355C240 275 360 435 600 335S880 135 1060 225 1200 295 1200 235'/%3E%3Cpath d='M0 260C260 190 380 340 640 240S900 50 1080 140 1200 200 1200 140'/%3E%3C/g%3E%3Cg stroke='%23F2EDE3' stroke-width='.7' opacity='.06'%3E%3Cpath d='M0 100h1200M0 260h1200M0 420h1200M0 580h1200M0 740h1200'/%3E%3Cpath d='M150 0v800M300 0v800M450 0v800M600 0v800M750 0v800M900 0v800M1050 0v800'/%3E%3C/g%3E%3C/svg%3E");
  background-size:cover;background-position:center}
/* 星星闪烁 + 航线虚线流动（攻略同款节奏，reduced-motion 下全部停） */
@keyframes twinkle{0%,100%{opacity:1}50%{opacity:.2}}
@keyframes dashmove{to{stroke-dashoffset:-240}}
.aurora .scene .star{animation:twinkle 3.6s ease-in-out infinite}
.aurora .scene .star:nth-of-type(3n){animation-duration:4.8s;animation-delay:.9s}
.aurora .scene .star:nth-of-type(4n){animation-duration:2.9s;animation-delay:1.7s}
.aurora .scene .star:nth-of-type(7n){animation-duration:5.6s;animation-delay:2.4s}
.aurora .scene .fam-route .dash{stroke-dasharray:3 9;animation:dashmove 26s linear infinite}
@keyframes drift1{0%{transform:translate3d(0,0,0) scale(1)}100%{transform:translate3d(6vmax,4vmax,0) scale(1.12)}}
@keyframes drift2{0%{transform:translate3d(0,0,0) scale(1.06)}100%{transform:translate3d(-6vmax,5vmax,0) scale(.92)}}
@keyframes drift3{0%{transform:translate3d(0,0,0) scale(.95)}100%{transform:translate3d(5vmax,-5vmax,0) scale(1.1)}}
@keyframes riseIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}
@keyframes slideInR{from{opacity:0;transform:translateX(16px)}to{opacity:1;transform:translateX(0)}}
@keyframes slideInL{from{opacity:0;transform:translateX(-16px)}to{opacity:1;transform:translateX(0)}}
@keyframes breathe{0%,100%{transform:scale(1);opacity:1}50%{transform:scale(1.45);opacity:.5}}
.rise{animation:riseIn .4s var(--ease) both}

/* ---------- 暗玻璃组件 ---------- */
.glass,.card{position:relative;border:1px solid var(--line);border-radius:var(--r);
  background:linear-gradient(162deg,rgba(247,242,232,.072) 0%,rgba(38,33,26,.62) 52%,rgba(24,21,17,.66) 100%);
  backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur);box-shadow:var(--shadow-m)}
.glass{padding:24px 24px 20px}
.card{padding:16px;min-width:0;background:linear-gradient(160deg,rgba(255,247,235,.06),rgba(38,33,26,.55));box-shadow:var(--shadow-s)}
.card + .card{margin-top:14px}
.glass::before,.card::before{content:"";position:absolute;left:14px;right:14px;top:0;height:1px;background:var(--g-hair);opacity:.45;pointer-events:none}
@media(max-width:520px){.glass{padding:20px 18px 18px}.card{padding:14px}}
.card-h{display:flex;align-items:baseline;gap:10px;margin-bottom:10px}
.card-h .t{font-family:var(--serif);font-weight:800}
.card-h .r{margin-left:auto;font-size:.78em;color:var(--ink-3)}
.kicker{font-size:.74em;letter-spacing:.16em;text-transform:uppercase;font-weight:800;color:var(--tang)}

/* ---------- 顶部条 ---------- */
.top{position:sticky;top:0;z-index:var(--z-top);border-bottom:1px solid var(--line-2);
  background:linear-gradient(180deg,rgba(24,21,17,.9),rgba(26,23,18,.78) 62%,rgba(28,24,19,.82));
  backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur)}
.top .row{display:flex;align-items:center;gap:12px;padding:10px 0;min-height:60px}
.brand{display:flex;align-items:center;gap:10px;font-weight:800;font-family:var(--serif);color:var(--ink)}
.brand .dot{width:28px;height:28px;border-radius:9px;background:var(--g-brand);color:var(--on-acc);display:grid;place-items:center;font-size:.64em;font-weight:800;font-family:var(--mono);box-shadow:0 6px 16px -8px rgba(232,148,80,.75)}
.top nav{margin-left:auto;display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.updated{font-size:.74em;color:var(--ink-3)}

/* ---------- 按钮 / 表单 ---------- */
button,.btn{font:inherit;cursor:pointer;border-radius:var(--r-s);border:1px solid var(--line);background:var(--glass-3);color:var(--ink);
  padding:11px 15px;min-height:46px;transition:transform .12s var(--ease),box-shadow .2s var(--ease),border-color .2s var(--ease),filter .2s var(--ease)}
button:hover,.btn:hover{border-color:rgba(232,148,80,.45);box-shadow:0 10px 22px -16px rgba(0,0,0,.9)}
button:active,.btn:active{transform:scale(.985)}
button:focus-visible,.btn:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible,a:focus-visible{outline:3px solid var(--tang);outline-offset:2px}
.btn-p{background:var(--g-btn);border-color:transparent;color:var(--on-acc);font-weight:800;box-shadow:0 12px 26px -16px rgba(232,148,80,.8)}
.btn-c{background:var(--g-btn-warm);border-color:transparent;color:var(--on-acc);font-weight:800;box-shadow:0 12px 26px -16px rgba(180,99,58,.85)}
.btn-d{background:var(--danger);border-color:transparent;color:var(--on-acc);font-weight:800}
.btn-g{background:transparent;border-color:var(--line);color:var(--ink-2);min-height:40px;padding:8px 12px;border-radius:999px}
.btn-w{width:100%}
button[disabled]{cursor:not-allowed;background:rgba(242,237,227,.05)!important;color:var(--ink-3)!important;border-color:var(--line-2)!important;box-shadow:none!important;font-weight:700}
label{display:block;font-size:.84em;font-weight:700;color:var(--ink-2);margin:0 0 6px}
input,textarea,select{font:inherit;width:100%;padding:12px 13px;border-radius:var(--r-s);border:1px solid var(--line);background:rgba(20,18,16,.55);color:var(--ink)}
input::placeholder,textarea::placeholder{color:#8A8171}
textarea{min-height:88px;resize:vertical}
select{appearance:none;background-image:linear-gradient(45deg,transparent 50%,var(--ink-3) 50%),linear-gradient(135deg,var(--ink-3) 50%,transparent 50%);background-position:calc(100% - 18px) 21px,calc(100% - 13px) 21px;background-size:5px 5px;background-repeat:no-repeat;padding-right:38px}
option{background:#221E17;color:var(--ink)}
input:focus,textarea:focus,select:focus{border-color:rgba(232,148,80,.6);box-shadow:0 0 0 3px var(--tang-soft)}
.field{margin-bottom:12px}
.err{color:var(--danger);font-size:.84em;margin-top:6px;min-height:1.2em}
.remember{display:flex;align-items:center;gap:9px;margin-top:9px;font-size:.82em;font-weight:600;color:var(--ink-3);cursor:pointer;min-height:34px}
.remember input{width:20px;height:20px;flex:none;padding:0;appearance:none;-webkit-appearance:none;border-radius:7px;cursor:pointer;
  border:1px solid var(--line);background:rgba(20,18,16,.55);display:grid;place-items:center;transition:border-color .2s,background .2s,box-shadow .2s}
.remember input::after{content:"";width:10px;height:6px;border-left:2px solid var(--on-acc);border-bottom:2px solid var(--on-acc);
  transform:rotate(-45deg) scale(.4);opacity:0;transition:opacity .18s var(--ease),transform .18s var(--ease)}
.remember input:hover{border-color:rgba(232,148,80,.5)}
.remember input:checked{background:var(--g-btn);border-color:transparent;box-shadow:0 6px 16px -10px rgba(232,148,80,.9)}
.remember input:checked::after{opacity:1;transform:rotate(-45deg) scale(1)}
.remember:hover{color:var(--ink-2)}
.inp-wrap{position:relative}
.inp-wrap input{padding-right:76px}
.peek{position:absolute;right:5px;top:50%;transform:translateY(-50%);min-height:44px;min-width:58px;padding:8px 12px;font-size:13px;font-weight:800;color:var(--ink-2);background:rgba(242,237,227,.07);border:1px solid var(--line-2);border-radius:10px}
.peek:hover{color:var(--ink);border-color:rgba(232,148,80,.45)}

/* ---------- 标签 / 新鲜度（绿→金，红→珊瑚） ---------- */
.pill{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:999px;font-size:.76em;font-weight:800;background:var(--tang-soft);color:var(--tang)}
.pill.warm,.pill.clay{background:rgba(224,181,88,.16);color:var(--amber)}
.pill.dgr{background:var(--danger-soft);color:var(--danger)}
.pill.ok{background:var(--ok-soft);color:var(--amber)}
.pill.mute{background:rgba(242,237,227,.07);color:var(--ink-3)}
.fresh{display:inline-flex;align-items:center;gap:7px;font-weight:800;font-size:.9em}
.fresh i{width:11px;height:11px;border-radius:50%;background:var(--ink-3);flex:none}
.fresh.g i{background:var(--amber);animation:breathe 2.4s ease-in-out infinite}
.fresh.y i{background:var(--tang)} .fresh.r i{background:var(--danger)}
.fresh.g span{color:var(--amber)} .fresh.y span{color:var(--tang)} .fresh.r span{color:var(--danger)}
.meter{height:6px;border-radius:999px;background:rgba(242,237,227,.09);overflow:hidden;margin-top:9px}
.meter i{display:block;height:100%;width:100%;border-radius:999px;transform:scaleX(0);transform-origin:0 50%;transition:transform .7s var(--ease)}
.meter.g i{background:linear-gradient(90deg,#F0BC72,#E0B558)}
.meter.y i{background:linear-gradient(90deg,#E89450,#C9762F)}
.meter.r i{background:linear-gradient(90deg,#E08A72,#B4633A)}
.meter.mute i{background:rgba(242,237,227,.22)}

/* ---------- 人物卡 ---------- */
.cards{display:grid;gap:12px}
.grid2{display:grid;gap:14px}
@media(min-width:820px){.grid2{grid-template-columns:1fr 1fr}}
.cards > *,.grid2 > *,.map-and-cards > *,.tabs{min-width:0}
.person{position:relative;overflow:hidden;display:flex;gap:14px;align-items:flex-start;padding:15px 15px 15px 19px}
.person::after{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;z-index:2}
.person.p-a{background:linear-gradient(150deg,rgba(232,148,80,.15),rgba(255,247,235,.04) 62%)}
.person.p-a::after{background:linear-gradient(180deg,#F0BC72,#C9762F)}
.person.p-b{background:linear-gradient(150deg,rgba(217,144,126,.15),rgba(180,99,58,.09) 70%,rgba(255,247,235,.04))}
.person.p-b::after{background:linear-gradient(180deg,#D9907E,#B4633A)}
.person .av{width:54px;height:54px;border-radius:18px;flex:none;display:grid;place-items:center;background:rgba(20,18,16,.45);box-shadow:inset 0 0 0 1px var(--line),0 8px 18px -12px rgba(0,0,0,.9)}
.person .who{flex:1;min-width:0}
.person .nm{font-family:var(--serif);font-weight:800;font-size:1.12em}
.st{display:flex;align-items:center;gap:9px;flex-wrap:wrap}
.st .chip{padding:3px 10px;border-radius:999px;font-size:.76em;font-weight:800;background:rgba(20,18,16,.5);box-shadow:inset 0 0 0 1px var(--line)}
.person.p-a .chip{color:var(--tang)} .person.p-b .chip{color:var(--rose)}
.rows{display:grid;gap:6px;margin-top:8px}
.row{display:flex;gap:10px;align-items:baseline;font-size:.92em}
.row .k,.row .kk{color:var(--ink-3);flex:none;min-width:4.4em}
.row .v{min-width:0;word-break:break-word}
.note-line{margin-top:9px;padding:9px 11px;border-radius:10px;background:linear-gradient(100deg,rgba(224,181,88,.15),rgba(232,148,80,.06));border-left:3px solid var(--amber);color:var(--ink)}
.apart{display:flex;align-items:center;gap:14px;padding:14px 16px;border-radius:var(--r);border:1px solid var(--line);box-shadow:var(--shadow-s);
  background:linear-gradient(112deg,rgba(232,148,80,.16),rgba(224,181,88,.14) 48%,rgba(180,99,58,.16))}
.apart .v{font-family:var(--mono);font-size:1.7em;font-weight:800;line-height:1;background:var(--g-text);-webkit-background-clip:text;background-clip:text;color:transparent}

/* ---------- 当前地点（家长端人物卡第二行：地名是主角，距离只是小字） ---------- */
.where{display:flex;align-items:flex-start;gap:8px;margin-top:9px;min-width:0}
.where>svg{flex:none;margin-top:5px;color:var(--tang)}
.where .wl{min-width:0;display:flex;flex-wrap:wrap;align-items:baseline;gap:8px}
.where b{font-family:var(--serif);font-size:1.14em;font-weight:800;color:var(--ink);letter-spacing:0;line-height:1.35;overflow-wrap:anywhere}
.where .wd{font-size:.76em;color:var(--ink-3);white-space:nowrap}
.where.far>svg{color:var(--ink-3)}
.where.far b{color:var(--ink-2)}

/* ---------- 同步反馈：极细的一条线，不是"刷新中"文字 ---------- */
.syncbar{position:fixed;left:0;top:0;height:2px;width:0;z-index:70;background:var(--g-brand);
  box-shadow:0 0 12px rgba(232,148,80,.7);opacity:0;transition:width .5s var(--ease),opacity .3s;pointer-events:none}
.syncbar.on{width:82%;opacity:1;transition:width 1.1s cubic-bezier(.3,.8,.4,1)}
.syncbar.done{width:100%;opacity:0}
@keyframes flash{0%{box-shadow:0 0 0 0 rgba(224,181,88,.5),var(--shadow-s)}70%{box-shadow:0 0 0 6px rgba(224,181,88,0),var(--shadow-s)}100%{box-shadow:0 0 0 0 rgba(224,181,88,0),var(--shadow-s)}}
.card.flash{animation:flash 1.15s var(--ease) 1}

/* ---------- 时间轴 / 列表 ---------- */
.tl{position:relative;padding-left:20px;margin-top:8px}
.tl::before{content:"";position:absolute;left:6px;top:4px;bottom:4px;width:2px;border-radius:2px;background:linear-gradient(180deg,#E0B558,#E89450 55%,rgba(180,99,58,.6))}
.tl .it{position:relative;padding:8px 0 8px 4px;border-bottom:1px dashed var(--line-2)}
.tl .it:last-child{border-bottom:none}
.tl .it::before{content:"";position:absolute;left:-18px;top:15px;width:9px;height:9px;border-radius:50%;background:linear-gradient(140deg,#E89450,#C9762F);box-shadow:0 0 0 3px rgba(232,148,80,.18)}
.tl .it.done::before{background:linear-gradient(140deg,#E0B558,#B98F2E);box-shadow:0 0 0 3px rgba(224,181,88,.18)}
.tl .tm{font-family:var(--mono);font-size:.84em;font-weight:700;color:var(--tang)}
.tl .tx{margin-top:2px}
.dayline{display:flex;gap:12px;flex-wrap:wrap;align-items:center;padding:11px 0;border-bottom:1px solid var(--line-2)}
.dayline .d{font-family:var(--mono);font-weight:800;min-width:52px;color:var(--amber)}
.dayline .h{flex:1;min-width:180px;font-size:.94em}
.dayline.today{background:linear-gradient(100deg,rgba(232,148,80,.13),rgba(232,148,80,0));border-radius:12px;padding-left:8px;padding-right:8px}

/* ---------- 留言 / 提醒 ---------- */
.msg{border:1px solid var(--line-2);border-radius:var(--r-s);padding:12px;background:rgba(20,18,16,.42)}
.msg + .msg{margin-top:10px}
.msg .mh{display:flex;gap:8px;align-items:center;flex-wrap:wrap;font-size:.78em;color:var(--ink-3)}
.msg .mh b{color:var(--ink);font-size:1.05em;font-family:var(--serif)}
.msg .mx{margin-top:6px;white-space:pre-wrap;word-break:break-word}
.msg.to-child{border-left:4px solid var(--amber);background:linear-gradient(120deg,rgba(224,181,88,.1),rgba(20,18,16,.42))}
.msg.from-child{border-left:4px solid var(--tang);background:linear-gradient(120deg,rgba(232,148,80,.1),rgba(20,18,16,.42))}
.msg .seen{margin-left:auto;font-size:.9em;color:var(--amber);font-weight:700}
.alert{display:flex;gap:12px;align-items:flex-start;padding:14px;border-radius:var(--r);border:1px solid var(--line);background:var(--glass-2);box-shadow:var(--shadow-s)}
.alert + .alert{margin-top:10px}
.alert.warn{border-color:rgba(224,112,90,.36);background:linear-gradient(120deg,rgba(224,112,90,.14),rgba(20,18,16,.4))}
.alert.info{border-color:rgba(232,148,80,.34);background:linear-gradient(120deg,rgba(232,148,80,.13),rgba(20,18,16,.4))}
.alert svg{flex:none;margin-top:2px}
.alert .ax{min-width:0}
@keyframes nudge{0%,100%{transform:translateX(0)}20%{transform:translateX(-4px)}40%{transform:translateX(4px)}60%{transform:translateX(-2px)}80%{transform:translateX(2px)}}
.alert.warn svg{animation:nudge 2.6s var(--ease) infinite 2}

/* ---------- 地图 ---------- */
.map-wrap{position:relative;border:1px solid var(--line);border-radius:var(--r);overflow:hidden;box-shadow:var(--shadow-m);
  background:radial-gradient(120% 80% at 82% -10%,rgba(224,181,88,.12) 0%,rgba(224,181,88,0) 58%),radial-gradient(90% 70% at 8% 108%,rgba(24,148,136,.16) 0%,rgba(24,148,136,0) 62%),linear-gradient(166deg,#221E18 0%,#1D1A15 52%,#191612 100%)}
.map-wrap svg{display:block;width:100%;height:auto;max-height:min(76vh,540px);touch-action:pan-y}
/* 计划顺序那条虚线缓慢向前爬，读起来是"接下来往这走"，不是静态装饰 */
@keyframes routemove{to{stroke-dashoffset:-4.4}}
.map-wrap .route path{animation:routemove 3.4s linear infinite}
.map-wrap .pts .pt{cursor:pointer;transition:filter .18s var(--ease)}
.map-wrap .pts .pt:hover,.map-wrap .pts .pt:active{filter:brightness(1.25) drop-shadow(0 0 1.6px rgba(224,181,88,.8))}
.map-tools{position:absolute;top:10px;right:10px;display:flex;flex-direction:column;gap:6px}
.map-tools button{min-height:38px;padding:6px 10px;font-size:.8em;color:var(--ink);border-color:var(--line);background:rgba(26,23,18,.76);backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur)}
.map-legend{display:flex;flex-wrap:wrap;gap:12px;font-size:.76em;color:var(--ink-3);margin-top:8px}
.map-legend i{display:inline-block;width:10px;height:10px;border-radius:50%;margin-right:5px;vertical-align:middle}
.tipbox{position:absolute;left:12px;bottom:12px;right:12px;border:1px solid var(--line);border-radius:var(--r-s);padding:10px 12px;font-size:.84em;
  color:var(--ink);background:rgba(26,23,18,.9);backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur);box-shadow:var(--shadow-m);display:none}
.tipbox.on{display:block}

/* ---------- 今日横幅 / 分区 / tab ---------- */
.hero{position:relative;overflow:hidden;border-radius:20px;padding:18px 20px 44px;margin-top:16px;color:var(--ink);
  border:1px solid rgba(242,237,227,.12);box-shadow:0 22px 46px -26px rgba(0,0,0,.95),inset 0 1px 0 rgba(255,247,235,.12);
  background:radial-gradient(72% 120% at 88% -26%,rgba(240,214,158,.26) 0%,rgba(240,214,158,0) 58%),linear-gradient(158deg,#2B2419 0%,#3A2A18 44%,#1E1B16 100%)}
/* 底部一条折线城市天际线 + 青绿海面线，和攻略首屏同一套语言 */
.hero::after{content:"";position:absolute;left:0;right:0;bottom:0;height:46px;pointer-events:none;opacity:.5;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 600 58' preserveAspectRatio='none'%3E%3Cpath fill='%23141210' d='M0 58 V34 h26 v-9 h16 v9 h24 v-16 h18 v16 h26 v-8 h14 v8 h30 v-19 h20 v19 h24 v-11 h16 v11 h28 v-7 h18 v7 h26 v-15 h18 v15 h24 v-9 h16 v9 h30 v-13 h20 v13 h26 v-8 h14 v8 V58 Z'/%3E%3Cg fill='%23EFC063' opacity='.8'%3E%3Crect x='14' y='40' width='2' height='3'/%3E%3Crect x='70' y='30' width='2' height='3'/%3E%3Crect x='132' y='38' width='2' height='3'/%3E%3Crect x='196' y='28' width='2' height='3'/%3E%3Crect x='258' y='36' width='2' height='3'/%3E%3Crect x='322' y='31' width='2' height='3'/%3E%3Crect x='386' y='40' width='2' height='3'/%3E%3Crect x='450' y='30' width='2' height='3'/%3E%3Crect x='516' y='37' width='2' height='3'/%3E%3C/g%3E%3Cpath stroke='%237FD4C8' stroke-opacity='.42' stroke-width='1' d='M0 55h600'/%3E%3C/svg%3E");
  background-size:100% 46px;background-repeat:no-repeat}
.hero .hl{display:flex;align-items:center;gap:14px}
.hero .dn{font-family:var(--disp);font-size:2.7em;font-weight:800;line-height:.86;letter-spacing:-.04em;
  background:linear-gradient(160deg,#F7DDA8,#E89450 70%);-webkit-background-clip:text;background-clip:text;color:transparent}
.hero .dt{font-size:.76em;letter-spacing:.18em;text-transform:uppercase;opacity:.8;font-weight:800;color:var(--amber)}
.hero .hd{font-family:var(--serif);font-weight:800;font-size:1.08em;margin-top:4px;color:var(--ink)}
.hero .nx{margin-top:14px;display:flex;gap:10px;align-items:center;padding:11px 13px;border-radius:14px;
  background:rgba(20,16,10,.42);border:1px solid rgba(242,237,227,.14)}
.hero .nx .tm{font-family:var(--mono);font-weight:800;font-size:1.06em;color:var(--amber)}
.hero .nx .sm{font-size:.78em;color:var(--ink-3);letter-spacing:.08em}
.hero::before{content:"";position:absolute;width:40vmax;height:40vmax;right:-14vmax;top:-26vmax;border-radius:50%;
  background:radial-gradient(circle,rgba(232,148,80,.3),transparent 62%);animation:drift1 18s var(--ease) infinite alternate;pointer-events:none}
.tabhead{position:relative;padding-bottom:10px;margin:16px 0 12px}
.tabhead h2{font-size:1.18em}
.tabhead .r{margin-left:auto;font-size:.76em;color:var(--ink-3)}
.tabhead::after{content:"";position:absolute;left:0;bottom:0;width:64px;height:3px;border-radius:3px;background:var(--g-brand)}
.tabs{display:flex;gap:6px;overflow-x:auto;padding:2px 0 10px;-webkit-overflow-scrolling:touch;scrollbar-width:none}
.tabs::-webkit-scrollbar{display:none}
.tab{flex:none;min-height:42px;padding:8px 13px;border-radius:999px;border:1px solid var(--line);background:var(--glass);font-size:.86em;cursor:pointer;color:var(--ink-2)}
.tab[aria-selected="true"]{background:var(--g-brand);color:var(--on-acc);border-color:transparent;font-weight:800;box-shadow:0 8px 20px -12px rgba(232,148,80,.85)}
.tabs-shell{padding-bottom:calc(78px + env(safe-area-inset-bottom))}
.tabbar{position:fixed;left:0;right:0;bottom:0;z-index:var(--z-tab);display:grid;grid-template-columns:repeat(4,1fr);gap:4px;border-top:1px solid var(--line);
  background:linear-gradient(0deg,rgba(22,19,16,.94),rgba(26,23,18,.86));
  backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur);box-shadow:0 -14px 34px -24px rgba(0,0,0,1);padding:6px 6px calc(6px + env(safe-area-inset-bottom))}
.tabbar button{min-height:58px;border:none;background:transparent;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;border-radius:14px;color:var(--ink-3);font-size:12px;font-weight:700;padding:4px;position:relative;z-index:1}
.tabbar svg{width:22px;height:22px}
.tabbar button[aria-selected="true"]{color:var(--on-acc)}
.tabbar button:active{transform:scale(.97)}
/* 选中态是一块滑动的玻璃药丸，而不是四块各自亮起来的按钮 */
.tab-glide{position:absolute;top:6px;left:0;height:calc(100% - 12px - env(safe-area-inset-bottom));border-radius:14px;z-index:0;
  background:var(--g-brand);box-shadow:0 10px 22px -12px rgba(232,148,80,.85);opacity:0;
  transition:transform .42s var(--ease),width .42s var(--ease),opacity .3s}
.tab-glide.on{opacity:1}
.badge{min-width:18px;height:18px;border-radius:9px;background:var(--coral);color:var(--on-acc);font-size:11px;font-weight:800;display:inline-grid;place-items:center;padding:0 5px;position:absolute;top:2px;right:8px}
@media(min-width:900px){
  .tabs-shell{padding-bottom:40px}
  .tabbar{position:sticky;top:60px;bottom:auto;grid-template-columns:repeat(4,minmax(0,1fr));border-top:none;border-bottom:1px solid var(--line-2);box-shadow:none;padding:8px;gap:6px;max-width:1080px;margin:0 auto;
    background:linear-gradient(0deg,rgba(24,21,17,.9),rgba(28,24,19,.8))}
  .tabbar button{flex-direction:row;gap:8px;font-size:14px;min-height:46px}
  .tab-glide{top:8px;height:calc(100% - 16px)}
  .badge{position:static}
}
.view{display:none}
.view.on{display:block;animation:slideInR .38s var(--ease) both}
.view.on.back{animation-name:slideInL}
/* 卡片按顺序错峰浮现，只动 opacity/transform */
.view.on>*{animation:riseIn .46s var(--ease) both}
.view.on>*:nth-child(1){animation-delay:.02s}
.view.on>*:nth-child(2){animation-delay:.06s}
.view.on>*:nth-child(3){animation-delay:.1s}
.view.on>*:nth-child(4){animation-delay:.14s}
.view.on>*:nth-child(5){animation-delay:.18s}
.view.on>*:nth-child(6){animation-delay:.22s}
.view.on>*:nth-child(n+7){animation-delay:.26s}
.stat{display:flex;gap:8px;align-items:baseline}
.stat .sv{font-family:var(--disp);font-size:1.55em;font-weight:800;letter-spacing:-.02em;background:var(--g-text);-webkit-background-clip:text;background-clip:text;color:transparent}
.stat .sk{font-size:.78em;color:var(--ink-3)}
.next{display:flex;gap:12px;align-items:center;padding:13px;border-radius:var(--r-s);border:1px solid var(--line);
  background:linear-gradient(120deg,rgba(224,181,88,.14),rgba(232,148,80,.06))}
.next .tm{font-family:var(--mono);font-weight:800;color:var(--amber);font-size:1.12em;flex:none}
.quick{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}
.quick button{flex:1;min-width:132px;font-size:.9em}
.hint{font-size:.78em;color:var(--ink-3);line-height:1.65;margin-top:10px}

/* ---------- 今日状态时间线 ---------- */
.statcard{padding:14px 15px 12px}
.statcard + .statcard{margin-top:10px}
.statcard .sh{display:flex;align-items:baseline;gap:9px;margin-bottom:9px}
.statcard .sh .nm{font-family:var(--serif);font-weight:800;font-size:.98em}
.statcard .sh .cur{margin-left:auto;font-size:.76em;font-weight:800;white-space:nowrap}
.statband{position:relative;display:flex;align-items:flex-start;padding:8px 2px 4px;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch;min-width:0}
.statband::-webkit-scrollbar{display:none}
.statband .seg{position:relative;flex:1 0 auto;min-width:52px;text-align:center;padding-top:2px}
.statband .seg::before{content:"";position:absolute;top:10px;left:0;right:0;height:2px;background:linear-gradient(90deg,rgba(242,237,227,.1),rgba(242,237,227,.26));border-radius:2px}
.statband .seg:first-child::before{left:50%}
.statband .seg:last-child::before{right:50%}
.statband .dot{position:relative;z-index:1;display:block;width:15px;height:15px;margin:0 auto;border-radius:50%;background:var(--c,#E89450);border:2.5px solid #1A1712;box-shadow:0 2px 8px rgba(0,0,0,.85),inset 0 1px 1px rgba(255,255,255,.5)}
.statband .tm{display:block;font-family:var(--mono);font-size:.66em;font-weight:700;color:#BCB2A0;margin-top:5px;white-space:nowrap}
.statband .lb{display:block;font-size:.68em;font-weight:700;color:var(--ink-2);margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:64px;margin-left:auto;margin-right:auto}
.statband .seg.cur .dot{box-shadow:0 0 0 4px var(--c-soft,rgba(232,148,80,.22)),0 2px 10px rgba(0,0,0,.9);animation:breathe 2.4s ease-in-out infinite}
.statband .seg.cur .lb{color:var(--c,#E89450)}
.statcard .empty{display:flex;align-items:center;gap:9px;padding:9px 11px;border-radius:11px;font-size:.8em;color:var(--ink-3);
  background:linear-gradient(110deg,rgba(232,148,80,.1),rgba(224,181,88,.05));border:1px dashed rgba(232,148,80,.28)}

/* ---------- 登录 / 初始化 ---------- */
.stage{position:relative;min-height:100dvh;display:grid;place-items:center;padding:26px 18px 40px}
.stage > .inner{position:relative;z-index:1;width:100%;max-width:520px}
.word{font-family:var(--disp);font-size:clamp(34px,8vw,50px);line-height:1.06;font-weight:800;letter-spacing:-.02em;
  background:linear-gradient(100deg,#F0D08A,#E89450 55%,#C9762F);-webkit-background-clip:text;background-clip:text;color:transparent}
.route{font-size:.82em;color:var(--ink-2);letter-spacing:.02em;overflow-wrap:anywhere}
.route b{color:var(--ink);font-weight:800}
.route s{text-decoration:none;color:var(--ink-3);margin:0 7px}
.roles{display:grid;gap:10px;margin:18px 0 16px}
@media(min-width:560px){.roles{grid-template-columns:repeat(3,1fr)}}
.role{position:relative;text-align:left;display:flex;gap:11px;align-items:center;padding:14px;border-radius:16px;cursor:pointer;min-height:70px;font:inherit;color:var(--ink);
  background:var(--glass);border:1px solid var(--line);backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur);box-shadow:var(--shadow-s);
  transition:transform .16s var(--ease),box-shadow .22s var(--ease),border-color .22s var(--ease),background .22s var(--ease)}
.role:hover{transform:translateY(-2px);border-color:rgba(232,148,80,.45)}
.role:active{transform:scale(.985)}
.role[aria-pressed="true"]{background:linear-gradient(140deg,rgba(224,181,88,.22),rgba(232,148,80,.14) 58%,rgba(180,99,58,.16));border-color:rgba(232,148,80,.6);box-shadow:0 0 0 3px var(--tang-soft),var(--shadow-m)}
.role .av{width:42px;height:42px;border-radius:13px;flex:none;display:grid;place-items:center;font-weight:800;font-size:15px;font-family:var(--serif);background:var(--g-brand);color:var(--on-acc)}
.role[data-r="parent"] .av{background:linear-gradient(135deg,#D9907E,#B4633A);color:var(--on-acc)}
.role .rn{display:block;font-family:var(--serif);font-weight:800;font-size:1.02em}
.role .rd{display:block;font-size:.74em;color:var(--ink-3)}
.role .tick{position:absolute;top:10px;right:12px;width:18px;height:18px;border-radius:50%;background:var(--g-btn);color:var(--on-acc);display:none;place-items:center;font-size:11px;font-weight:800}
.role[aria-pressed="true"] .tick{display:grid}
.keybox{margin-top:16px;display:none}
.keybox.on{display:block;animation:riseIn .34s var(--ease) both}
.count{display:flex;gap:22px;flex-wrap:wrap;margin:16px 0 2px}
.count .c{min-width:96px}
.foot{margin-top:14px;display:flex;justify-content:space-between;gap:12px;font-size:.76em;color:var(--ink-3)}
.note{border:1px solid var(--line);border-radius:var(--r-s);padding:12px;font-size:.86em;
  background:linear-gradient(120deg,rgba(224,181,88,.12),rgba(20,18,16,.4))}

/* ---------- 底部弹层 ---------- */
.sheet{position:fixed;left:0;right:0;bottom:0;z-index:var(--z-sheet);border-top:1px solid var(--line);
  background:linear-gradient(160deg,rgba(26,23,18,.96),rgba(37,30,23,.95) 58%,rgba(42,33,24,.95));
  border-radius:20px 20px 0 0;box-shadow:0 -14px 44px -14px rgba(0,0,0,1);padding:16px;max-height:82vh;overflow:auto;
  backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur);transform:translateY(101%);transition:transform .34s var(--ease)}
.sheet.on{transform:translateY(0)}
.scrim{position:fixed;inset:0;z-index:var(--z-scrim);background:rgba(12,10,8,.62);backdrop-filter:blur(3px);opacity:0;pointer-events:none;transition:opacity .3s var(--ease)}
.scrim.on{opacity:1;pointer-events:auto}

@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.001s!important;animation-iteration-count:1!important;transition-duration:.001s!important;scroll-behavior:auto!important}
}
@media print{
  body{background:#fff;color:#111}
  .aurora,.top,.tabbar,.map-tools,.quick,.no-print{display:none!important}
  .card,.alert,.person,.msg,.glass{break-inside:avoid;box-shadow:none;background:#fff;border-color:#ddd}
}
