/* 旅行：想去=睡莲蓝 已打卡=苔绿 阿墨=暖金虚线，颜色跟着清溪/深潭两套走 */
:root{ --tv-land: rgba(190,206,226,.13); --tv-line: rgba(210,222,240,.34); --tv-want: #7E9CC4; --tv-want2: #4F74A8;
  --tv-been: #7FA88A; --tv-amo: #D9BE7A; --tv-paper: #F7F2E6; --tv-ink: #3A4048; }
:root[data-theme="stream"]{ --tv-land: rgba(255,255,255,.45); --tv-line: rgba(52,92,104,.30); --tv-want: #8FAED4; --tv-want2: #5A7FB4;
  --tv-been: #6F9E7C; --tv-amo: #CFAE5E; }
.tv-page{ display:flex; flex-direction:column; }
.tv-page .profile-topbar{ display:flex; align-items:center; gap:10px; }
.tv-title{ font-size:17px; font-weight:600; letter-spacing:.02em; flex:1; }
.tv-seg{ width:118px; }
.tv-body{ flex:1; overflow-y:auto; padding: 4px 16px calc(28px + env(safe-area-inset-bottom)); -webkit-overflow-scrolling:touch; }
.tv-mapwrap{ position:relative; border-radius:20px; padding:28px 6px 30px; background: var(--glass-strong); border:1px solid var(--glass-edge);
  backdrop-filter: blur(16px) saturate(1.1); -webkit-backdrop-filter: blur(16px) saturate(1.1);
  box-shadow: inset 0 1px 0 var(--glass-hi), var(--card-shadow); }
.tv-map{ display:block; width:100%; aspect-ratio: 1.41; touch-action: manipulation; }
.tv-prov{ fill: var(--tv-land); stroke: var(--tv-line); stroke-width:.5; transition: fill .3s, opacity .3s; cursor:pointer; vector-effect: non-scaling-stroke; }
.tv-prov.world{ stroke-width:.35; }
.tv-prov:hover{ fill: rgba(160,180,200,.3); }
.tv-prov.want{ fill: color-mix(in srgb, var(--tv-want) 55%, transparent); }
.tv-prov.want2{ fill: color-mix(in srgb, var(--tv-want2) 70%, transparent); }
.tv-prov.been{ fill: color-mix(in srgb, var(--tv-been) 75%, transparent); }
.tv-prov.amo{ stroke: var(--tv-amo); stroke-dasharray: 3 2; stroke-width:1.1; }
.tv-prov.amo:not(.want):not(.want2):not(.been){ fill: color-mix(in srgb, var(--tv-amo) 35%, transparent); }
.tv-prov.dim{ opacity:.28; }
.tv-city{ fill:none; stroke: var(--tv-line); stroke-width:.6; vector-effect: non-scaling-stroke; pointer-events:none; }
.tv-cname{ font-size:2.1px; fill: var(--text-soft); text-anchor:middle; pointer-events:none; }
.tv-dot{ stroke: rgba(255,255,255,.9); stroke-width:.5; vector-effect: non-scaling-stroke; }
.tv-dot.want{ fill: var(--tv-want2); } .tv-dot.been{ fill: var(--tv-been); }
.tv-legend{ position:absolute; left:14px; bottom:9px; display:flex; gap:10px; font-size:10.5px; color: var(--text-faint); }
.tv-legend i{ display:inline-block; width:9px; height:9px; border-radius:3px; margin-right:4px; vertical-align:-1px; }
.tv-legend .want{ background: var(--tv-want); } .tv-legend .been{ background: var(--tv-been); }
.tv-legend .amo{ background: transparent; border:1.3px dashed var(--tv-amo); }
.tv-count{ position:absolute; left:14px; top:9px; font-size:10.5px; color: var(--text-faint); }
.tv-sheet{ margin-top:12px; padding:14px 16px; border-radius:18px; background: var(--glass-strong); backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px); border:1px solid var(--glass-edge);
  box-shadow: inset 0 1px 0 var(--glass-hi), var(--card-shadow); animation: tvUp .32s ease; }
.tv-sheet.hidden{ display:none; }
@keyframes tvUp{ from{ transform: translateY(10px); opacity:0; } to{ transform:none; opacity:1; } }
.tv-sh-head{ display:flex; align-items:center; justify-content:space-between; }
.tv-sh-head h3{ font-size:18px; font-weight:600; letter-spacing:.06em; margin:0; }
.tv-x{ border:0; background:none; color: var(--text-faint); font-size:22px; line-height:1; padding:2px 6px; cursor:pointer; }
.tv-sec{ margin:12px 0 4px; font-size:11.5px; letter-spacing:.16em; color: var(--text-faint); }
.tv-pls{ list-style:none; margin:0; padding:0; }
.tv-pl{ display:flex; align-items:center; gap:8px; padding:9px 2px; border-bottom:1px solid var(--hairline); font-size:14px; }
.tv-pl:last-child{ border-bottom:0; }
.tv-pl.been::before, .tv-pl.want::before{ content:""; width:8px; height:8px; border-radius:50%; flex:0 0 auto; }
.tv-pl.been::before{ background: var(--tv-been); } .tv-pl.want::before{ background: var(--tv-want); }
.tv-pl.been{ cursor:pointer; }
.tv-pl b{ font-weight:500; flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.tv-pl em{ font-style:normal; font-size:11.5px; color: var(--text-faint); font-variant-numeric: tabular-nums; }
.tv-mini i{ font-style:normal; font-size:10.5px; padding:2px 6px; margin-left:4px; border-radius:8px; background: var(--hairline); color: var(--text-soft); }
.tv-who i{ font-style:normal; display:inline-grid; place-items:center; width:21px; height:21px; margin-left:3px; border-radius:50%; font-size:11px;
  border:1px solid var(--glass-edge); color: var(--text-faint); cursor:pointer; }
.tv-who i.on{ background: var(--tv-want2); border-color: var(--tv-want2); color:#fff; }
.tv-more{ border:0; background:none; color: var(--text-faint); font-size:16px; padding:0 4px; cursor:pointer; }
.tv-empty{ color: var(--text-faint); font-size:12.5px; padding:8px 2px; list-style:none; }
.tv-empty.big{ text-align:center; padding:28px 12px; line-height:1.7; grid-column: 1 / -1; }
.tv-sh-act{ display:flex; gap:8px; margin-top:12px; }
.tv-sh-act .lp-btn{ flex:1; }
.tv-danger{ color:#C26B6B !important; }
.tv-tabs{ margin:16px 0 10px; }
.tv-filter{ font-size:12px; color: var(--text-soft); margin:-2px 2px 8px; }
.tv-filter.hidden{ display:none; }
.tv-filter button{ border:0; background: var(--hairline); color: var(--text-soft); border-radius:10px; padding:1px 7px; margin-left:4px; cursor:pointer; }
.tv-add{ display:flex; justify-content:flex-end; margin-bottom:10px; }
.tv-add .lp-btn{ padding:8px 14px; font-size:13px; }
/* 明信片盒 */
.tv-box{ display:grid; grid-template-columns: repeat(2, 1fr); gap:14px 12px; padding:4px 2px; }
.tv-card{ border:0; padding:6px 6px 8px; background: var(--tv-paper); border-radius:4px; cursor:pointer; transform: rotate(var(--r));
  box-shadow: 0 6px 16px rgba(0,0,0,.18); text-align:left; transition: transform .25s; }
.tv-card:active{ transform: rotate(0) scale(.98); }
.tv-card img{ display:block; width:100%; aspect-ratio: 3/2; object-fit:cover; border-radius:2px; background:#ddd; }
.tv-card span{ display:flex; justify-content:space-between; gap:4px; margin-top:6px; font-size:11.5px; color: var(--tv-ink); }
.tv-card em{ font-style:normal; opacity:.6; font-variant-numeric: tabular-nums; }
/* 奇遇：车票存根 */
.tv-stubs{ display:flex; flex-direction:column; gap:10px; }
.tv-stub{ position:relative; display:flex; background: var(--tv-paper); color: var(--tv-ink); border-radius:10px; overflow:hidden; box-shadow: 0 4px 12px rgba(0,0,0,.14); }
.tv-stub-l{ width:44px; flex:0 0 auto; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:6px;
  border-right: 2px dashed rgba(58,64,72,.18); background: rgba(127,168,138,.18); }
.tv-stub.bad .tv-stub-l{ background: rgba(126,156,196,.2); }
.tv-stub-l .k{ font-size:17px; } .tv-stub-l .w{ font-size:11px; opacity:.65; }
.tv-stub.amo .tv-stub-l .w{ color:#9C7B2E; opacity:1; }
.tv-stub-m{ flex:1; padding:11px 12px; min-width:0; }
.tv-stub-m .t{ font-size:13.5px; line-height:1.6; }
.tv-stub-m img{ display:block; max-width:100%; max-height:180px; margin-top:8px; border-radius:6px; }
.tv-stub-m .m{ margin-top:6px; font-size:10.5px; opacity:.55; letter-spacing:.04em; }
.tv-stub .tv-more{ position:absolute; top:4px; right:4px; color: rgba(58,64,72,.4); }
/* 弹窗 */
.tv-modal{ position:fixed; inset:0; z-index:200; display:flex; align-items:center; justify-content:center; padding:20px;
  background: rgba(10,16,26,.42); backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px); }
.tv-modal.hidden{ display:none; }
.tv-modal-in{ width:min(100%, 380px); max-height:88vh; overflow-y:auto; animation: tvUp .28s ease; }
.tv-form{ padding:18px 18px 16px; border-radius:20px; background: var(--glass-strong); border:1px solid var(--glass-edge); color: var(--text);
  backdrop-filter: blur(18px); -webkit-backdrop-filter: blur(18px); display:flex; flex-direction:column; gap:12px; }
.tv-form h3{ font-size:16px; font-weight:600; letter-spacing:.04em; margin:0; }
.tv-form label{ display:flex; flex-direction:column; gap:6px; font-size:12px; color: var(--text-faint); }
.tv-form .lp-input, .tv-form .lp-textarea{ width:100%; box-sizing:border-box; }
.tv-form-act{ display:flex; gap:8px; } .tv-form-act .lp-btn{ flex:1; }
.tv-pick{ cursor:pointer; }
.tv-pick span{ display:grid; place-items:center; min-height:120px; border:1.5px dashed var(--glass-edge); border-radius:14px; color: var(--text-faint); font-size:13px; overflow:hidden; }
.tv-pick.small span{ min-height:44px; }
.tv-pick img{ display:block; width:100%; max-height:220px; object-fit:cover; }
/* 明信片翻面 */
.tv-modal.pc .tv-modal-in{ width:min(100%, 420px); overflow:visible; }
.tv-pc{ perspective: 1200px; cursor:pointer; }
.tv-pc-in{ position:relative; width:100%; aspect-ratio: 3/2; transition: transform .7s cubic-bezier(.3,.7,.2,1); transform-style: preserve-3d; }
.tv-pc.flip .tv-pc-in{ transform: rotateY(180deg); }
.tv-pc-front, .tv-pc-back{ position:absolute; inset:0; backface-visibility:hidden; -webkit-backface-visibility:hidden; border-radius:6px; overflow:hidden;
  background: var(--tv-paper); box-shadow: 0 14px 34px rgba(0,0,0,.35); }
.tv-pc-front{ padding:8px; box-sizing:border-box; } .tv-pc-front img{ width:100%; height:100%; object-fit:cover; border-radius:3px; display:block; }
.tv-pc-back{ transform: rotateY(180deg); color: var(--tv-ink);
  background-image: linear-gradient(to right, transparent calc(58% - .5px), rgba(58,64,72,.18) calc(58% - .5px), rgba(58,64,72,.18) calc(58% + .5px), transparent calc(58% + .5px)); }
.tv-stamp{ position:absolute; top:12px; right:14px; width:48px; height:58px; filter: drop-shadow(0 1px 1px rgba(0,0,0,.15)); }
.tv-postmark{ position:absolute; top:20px; right:70px; width:56px; height:56px; border-radius:50%; border:1.5px solid rgba(160,70,70,.55);
  color: rgba(160,70,70,.75); display:flex; flex-direction:column; align-items:center; justify-content:center; transform: rotate(-14deg);
  font-size:9px; letter-spacing:.06em; box-sizing:border-box; }
.tv-postmark b{ font-size:8.5px; font-weight:500; margin-top:2px; border-top:1px solid rgba(160,70,70,.45); padding-top:2px; }
.tv-lines{ position:absolute; left:16px; right:16px; top:80px; bottom:12px; display:grid; grid-template-columns: 58% 42%; }
.tv-lines p{ margin:0; padding-right:12px; font-family: "Kaiti SC","STKaiti","KaiTi",serif; font-size:14px; line-height:1.6; display:flex; flex-direction:column; overflow:hidden; }
.tv-lines p.amo{ padding: 0 0 0 12px; }
.tv-lines small{ margin-top:auto; font-size:11px; opacity:.55; }
.tv-lines .faint{ opacity:.45; font-size:12.5px; }
.tv-pc-tip{ margin-top:14px; text-align:center; font-size:12px; color: rgba(255,255,255,.8); }
.tv-pc-tip button{ border:0; background:none; color:inherit; text-decoration: underline; font-size:12px; cursor:pointer; padding:0 2px; }

/* 旅行的阿墨（屹耳） */
.tv-amo-now{ fill: var(--tv-amo); stroke:#fff; stroke-width:.8; vector-effect: non-scaling-stroke; animation: tvBreath 2.4s ease-in-out infinite; transform-box: fill-box; transform-origin:center; }
@keyframes tvBreath{ 0%,100%{ opacity:1; transform: scale(1); } 50%{ opacity:.55; transform: scale(1.5); } }
.tv-eeyore{ width:100%; margin-top:12px; display:flex; align-items:center; gap:10px; padding:8px 14px 8px 8px; border-radius:18px; cursor:pointer; text-align:left;
  background: var(--glass-strong); border:1px solid var(--glass-edge); color: var(--text); font: inherit;
  backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px); box-shadow: inset 0 1px 0 var(--glass-hi), var(--card-shadow); }
.tv-eeyore.invite{ border-color: var(--tv-amo); box-shadow: 0 0 0 1px var(--tv-amo), var(--card-shadow); }
.tv-eeyore .tv-donkey{ width:66px; height:66px; flex:0 0 auto; }
.tv-ey-txt{ flex:1; min-width:0; display:flex; flex-direction:column; gap:2px; }
.tv-ey-txt b{ font-size:12px; font-weight:500; letter-spacing:.14em; color: var(--text-faint); }
.tv-ey-txt span{ font-size:14px; } .tv-ey-txt small{ font-size:11.5px; color: var(--text-faint); }
.tv-ey-go{ font-size:20px; color: var(--text-faint); }



@keyframes tvWalk{ 0%,100%{ transform: translateY(0); } 50%{ transform: translateY(-2px); } }
.tv-donkey .zz{ font-size:10px; fill: var(--text-faint); animation: tvZ 3s ease-in-out infinite; } .tv-donkey .zz.s{ font-size:7px; animation-delay: .8s; }
@keyframes tvZ{ 0%{ opacity:0; transform: translateY(4px); } 40%{ opacity:1; } 100%{ opacity:0; transform: translateY(-6px); } }
.tv-house{ align-items:stretch; }
.tv-house-top{ display:flex; justify-content:center; } .tv-house-top .tv-donkey{ width:150px; height:150px; }
.tv-house h3{ text-align:center; } .tv-house-st{ text-align:center; font-size:12.5px; color: var(--text-soft); margin-top:-6px; }
.tv-bag{ display:grid; grid-template-columns: repeat(4, 1fr); gap:8px; }
.tv-item{ border:1px solid var(--glass-edge); background: var(--glass); color: var(--text); border-radius:12px; padding:8px 2px 6px; font: inherit; font-size:12px;
  display:flex; flex-direction:column; align-items:center; gap:2px; cursor:pointer; transition: transform .15s, background .2s; }
.tv-item i{ font-style:normal; font-size:20px; } .tv-item small{ font-size:9.5px; color: var(--text-faint); }
.tv-item.on{ background: color-mix(in srgb, var(--tv-amo) 30%, transparent); border-color: var(--tv-amo); transform: translateY(-2px); }
.tv-letter.hidden{ display:none; }
.tv-bagrow{ display:flex; flex-wrap:wrap; gap:6px; } .tv-bagrow span{ font-size:12.5px; padding:4px 10px; border-radius:12px; background: var(--hairline); }
.tv-house-note{ font-size:12.5px; color: var(--text-soft); }
.tv-shelf{ display:flex; flex-direction:column; gap:8px; }
.tv-shelf div{ padding:9px 12px; border-radius:12px; background: var(--tv-paper); color: var(--tv-ink); }
.tv-shelf b{ font-weight:600; font-size:13.5px; } .tv-shelf small{ margin-left:6px; font-size:11px; opacity:.55; } .tv-shelf p{ margin:4px 0 0; font-size:12.5px; line-height:1.55; }
.tv-visited{ display:flex; flex-wrap:wrap; gap:6px; } .tv-visited span{ font-size:12px; padding:3px 9px; border-radius:10px; border:1px dashed var(--tv-amo); }
.tv-pc-front{ position:absolute; } .tv-pc-from{ position:absolute; left:16px; bottom:14px; font-size:11px; color:#fff; letter-spacing:.08em; text-shadow: 0 1px 3px rgba(0,0,0,.5); }
.tv-lines.from-amo p.amo{ padding: 0 12px 0 0; font-size:13.5px; } .tv-lines.from-amo p.momo{ padding: 0 0 0 12px; }

/* 屹耳（莫莫画的）会动：眨眼；头顶那撮毛晃；在家慢慢喘气打盹；出门一颠一颠、包包跟着甩；等收拾包包时原地蹦 */
.tv-donkey.pix g{ transform-box: view-box; }
.dk-all{ transform-origin: 280px 556px; animation: dkBreath 3.4s ease-in-out infinite; }
@keyframes dkBreath{ 0%,100%{ transform: scaleY(1); } 50%{ transform: scaleY(1.018); } }
.tv-donkey.away .dk-all{ animation: dkBob 1.4s ease-in-out infinite; }
@keyframes dkBob{ 0%,100%{ transform: translateY(0); } 50%{ transform: translateY(-6px); } }
.tv-donkey.invite .dk-all{ animation: dkHop 1.1s ease-in-out infinite; }
@keyframes dkHop{ 0%,100%{ transform: translateY(0); } 35%{ transform: translateY(-14px); } 60%{ transform: translateY(0); } }
.dk-tuft{ transform-origin: 270px 82px; animation: dkTuft 2.6s ease-in-out infinite; }
@keyframes dkTuft{ 0%,100%{ transform: rotate(0); } 50%{ transform: rotate(-7deg); } }
.dk-bag{ transform-origin: 410px 380px; animation: dkBag 1.4s ease-in-out infinite; }
@keyframes dkBag{ 0%,100%{ transform: rotate(0); } 50%{ transform: rotate(-4deg); } }
.tv-donkey.home .dk-bag{ animation: none; }
.dk-shut{ opacity:0; animation: dkBlinkShut 4.6s steps(1) infinite; }
.dk-open{ animation: dkBlinkOpen 4.6s steps(1) infinite; }
@keyframes dkBlinkShut{ 0%,92%{ opacity:0; } 93%,96%{ opacity:1; } 97%,100%{ opacity:0; } }
@keyframes dkBlinkOpen{ 0%,92%{ opacity:1; } 93%,96%{ opacity:0; } 97%,100%{ opacity:1; } }
.tv-donkey .zz{ font-size:44px; font-weight:700; fill:#8C93A8; } .tv-donkey .zz.s{ font-size:30px; }
@media (prefers-reduced-motion: reduce){ .tv-donkey *, .tv-donkey{ animation:none !important; } }
