:root{
  --ink:#202124; --ink2:#3c4043; --muted:#5f6368; --faint:#80868b;
  --blue:#1a73e8; --blue-d:#1765cc; --blue-bg:#e8f0fe; --blue-line:#d2e3fc;
  --g-red:#ea4335; --g-yellow:#f9ab00; --g-green:#188038;
  --red:#d93025; --red-bg:#fce8e6;
  --green-bg:#e6f4ea; --amber-bg:#fef7e0; --amber-ink:#b06000;
  --bg:#f6f7fa; --fill:#f8f9fa; --fill2:#f1f3f4;
  --line:#e3e6ec; --line2:#dadce0;
  --card:#ffffff;
  --radius:16px; --radius-lg:24px;
  --shadow-sm:0 1px 2px rgba(60,64,67,.08);
  --shadow-md:0 4px 16px rgba(60,64,67,.10);
  --shadow-lg:0 12px 40px rgba(60,64,67,.16);
  /* legacy var names used in app.js inline styles */
  --navy:#202124; --indigo:#1a73e8; --indigo-d:#1765cc; --amber:#f9ab00; --blue-l:#e8f0fe;
}
*{margin:0;padding:0;box-sizing:border-box}
body{font-family:"Inter","Google Sans","Segoe UI",Helvetica,Arial,sans-serif;background:var(--bg);color:var(--ink);line-height:1.6;-webkit-font-smoothing:antialiased}
.wrap{max-width:1100px;margin:0 auto;padding:0 24px}
a{color:var(--blue);text-decoration:none}
a:hover{text-decoration:underline}

/* ---------- Header ---------- */
.site-header{background:#fff;border-bottom:1px solid var(--line);position:sticky;top:0;z-index:50;backdrop-filter:saturate(180%) blur(8px)}
.header-inner{display:flex;align-items:center;justify-content:space-between;height:64px}
.brand{font-weight:700;font-size:20px;letter-spacing:-.5px;color:var(--ink)}
.brand:hover{text-decoration:none}
.brand .c1{color:#175c40} .brand .c2{color:#2f8f63} .brand .c3{color:#3fae74} .brand .c4{color:#34a853}
.main-nav{display:flex;gap:4px;align-items:center}
.main-nav a{color:var(--muted);padding:7px 12px;border-radius:12px;display:flex;flex-direction:column;align-items:center;line-height:1.3;flex-shrink:0}
.main-nav a:hover{color:var(--ink);background:var(--fill2);text-decoration:none}
.nv-zh{font-size:13.5px;font-weight:600;white-space:nowrap}
.nv-en{font-size:10px;font-weight:500;color:var(--faint);letter-spacing:.2px;white-space:nowrap}
.main-nav a.active{background:var(--blue)}
.main-nav a.active .nv-zh{color:#fff}
.main-nav a.active .nv-en{color:rgba(255,255,255,.75)}
.nav-user{color:var(--ink);font-weight:600;padding:7px 10px;font-size:13.5px;white-space:nowrap;flex-shrink:0}

/* ---------- Buttons ---------- */
.btn{display:inline-block;border:none;cursor:pointer;font-family:inherit;font-size:14px;font-weight:600;padding:11px 26px;border-radius:999px;background:var(--blue);color:#fff;transition:.18s;letter-spacing:.1px}
.btn:hover{background:var(--blue-d);text-decoration:none;box-shadow:var(--shadow-md)}
.btn-ghost{background:#fff;border:1px solid var(--line2);color:var(--blue)}
.btn-ghost:hover{background:var(--blue-bg);border-color:var(--blue-line);box-shadow:none}
.btn-amber{background:var(--g-yellow);color:var(--ink)}
.btn-amber:hover{background:#f29900;box-shadow:var(--shadow-md)}
.btn-sm{padding:7px 16px;font-size:13px}
.btn-danger{background:#fff;border:1px solid var(--line2);color:var(--red)}
.btn-danger:hover{background:var(--red-bg);border-color:#f6c6c2;box-shadow:none}
.btn[disabled]{opacity:.45;cursor:not-allowed}

/* ---------- Hero (Google-homepage minimal) ---------- */
.hero{text-align:center;padding:96px 24px 72px;max-width:920px;margin:0 auto;background:radial-gradient(120% 100% at 50% 0%,#e9f1fe 0%,rgba(233,241,254,0) 72%);border-radius:0 0 40px 40px}
.hero .kicker{font-size:13px;font-weight:600;letter-spacing:3.5px;color:var(--blue);text-transform:uppercase}
.hero h1{font-size:clamp(44px,7vw,76px);font-weight:700;letter-spacing:-3px;line-height:1.05;margin:14px 0 10px;color:var(--ink)}
.hero h1 .lt{display:inline-block;color:#3c4043;transition:translate .35s cubic-bezier(.2,1.7,.4,1),scale .35s cubic-bezier(.2,1.7,.4,1)}
.hero h1 .lt:hover{scale:1.18;translate:0 -8px}
.hero h1 .spar i{font-style:normal;display:inline-block;background-image:linear-gradient(100deg,#175c40 0%,#175c40 12%,#1f704d 14%,#2a8a5f 16%,#34a367 18%,#3fae74 20%,#3fae74 32%,#67c08e 34%,#8fd0a9 36%,#a9dfc0 38%,#bfe6cf 40%,#bfe6cf 52%,#9fd8c2 54%,#6cc4ab 56%,#3fa392 58%,#1f6e63 60%,#1f6e63 72%,#1e6a52 74%,#1c6349 76%,#175f44 78%,#175c40 80%,#175c40 92%,#1f704d 94%,#2a8a5f 96%,#34a367 98%,#3fae74 100%);background-size:500% 100%;background-repeat:no-repeat;-webkit-background-clip:text;background-clip:text;color:transparent;-webkit-text-fill-color:transparent;background-position:var(--sp) 0;animation:spar-flowp 12s ease-in-out infinite alternate,spar-wave 2.8s ease-in-out infinite}
@property --sp{syntax:'<percentage>';inherits:false;initial-value:0%}
@keyframes spar-flowp{0%{--sp:0%}100%{--sp:100%}}
@supports not (background:var(--sp)){.hero h1 .spar i{background-position:0% 0;animation:spar-flow 12s ease-in-out infinite alternate,spar-wave 2.8s ease-in-out infinite}}
.hero h1 .spar i:nth-child(1){animation-delay:0s,0s}
.hero h1 .spar i:nth-child(2){animation-delay:-4s,.15s}
.hero h1 .spar i:nth-child(3){animation-delay:-7s,.3s}
.hero h1 .spar i:nth-child(4){animation-delay:-10s,.45s}
@keyframes spar-flow{0%{background-position:0% 0%,100% 100%,0% 100%,100% 0%,0 0}100%{background-position:55% 45%,45% 55%,50% 60%,48% 42%,0 0}}
@keyframes spar-wave{0%,100%{transform:translateY(0)}50%{transform:translateY(-3px)}}
.hero p.sub{color:var(--muted);font-size:19px;font-weight:400;letter-spacing:-.2px}
.hero .ask{margin-top:52px;font-size:13px;letter-spacing:2.5px;color:var(--faint);text-transform:uppercase;font-weight:600}

.role-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;margin:24px auto 0}
.role-card{background:var(--card);border:1px solid var(--line);border-radius:20px;padding:30px 26px;text-align:left;color:inherit;cursor:pointer;transition:.2s;display:block}
.role-card:hover{border-color:transparent;text-decoration:none;transform:translateY(-4px);box-shadow:var(--shadow-lg)}
.role-card .num{font-size:12px;letter-spacing:2.5px;color:var(--blue);font-weight:600}
.role-card h3{font-size:21px;margin:8px 0 8px;color:var(--ink);font-weight:600;letter-spacing:-.3px}
.role-card p{font-size:14px;color:var(--muted)}
.role-card .go{margin-top:18px;font-weight:600;color:var(--blue);font-size:14px}
.hero-foot{margin-top:44px;color:var(--muted);font-size:14px}
.hero-foot a{color:var(--blue);font-weight:500}

/* ---------- Sections ---------- */
.section{padding:48px 0 56px}
.section-title{font-size:26px;font-weight:700;letter-spacing:-.6px}
.section-sub{color:var(--muted);margin-top:4px;font-size:15px}

/* ---------- Filter pills ---------- */
.pills{display:flex;gap:8px;flex-wrap:wrap;margin:22px 0}
.pill{border:1px solid var(--line2);background:#fff;border-radius:999px;padding:9px 20px;font-size:13.5px;font-weight:600;color:var(--ink2);cursor:pointer;font-family:inherit;transition:.15s}
.pill:hover{background:var(--fill)}
.pill.on{background:var(--blue);border-color:transparent;color:#fff;box-shadow:0 2px 8px rgba(26,115,232,.35)}

/* ---------- Day cards (aligned with motion-bank language) ---------- */
.day-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(310px,1fr));gap:16px}
.day-card{background:#fff;border:1px solid #E5E9E8;border-radius:12px;padding:0;overflow:hidden;display:block;color:inherit;transition:border-color .18s,box-shadow .18s}
a.day-card:hover,.day-card:hover{text-decoration:none;border-color:#C9D6D0;box-shadow:0 6px 20px rgba(20,40,30,.08)}
.day-head{display:flex;justify-content:space-between;align-items:baseline;background:#F8FAF9;border-bottom:1px solid #E5E9E8;padding:12px 16px}
.day-head .dow{font-size:11px;letter-spacing:1.8px;color:#889295;font-weight:600;text-transform:uppercase}
.day-head .date{font-size:16px;font-weight:700;letter-spacing:-.2px;color:#172124}
.day-time{color:#889295;font-size:12.5px;margin:0;padding:10px 16px 2px}
.day-time .cd{color:#2F8F63;font-weight:600}
.day-rooms{padding:4px 8px 10px}
.room-row{display:flex;justify-content:space-between;align-items:center;border-top:1px solid var(--fill2);padding:12px 0}
.room-row .rname{font-weight:600;font-size:14.5px}
.badge{display:inline-block;font-size:11px;font-weight:600;letter-spacing:.6px;padding:4px 12px;border-radius:999px;text-transform:uppercase}
.badge.open{background:#E6F4EC;color:#24714E}
.badge.full{background:#FCE8E6;color:#D93025}
.badge.closed{background:#F1F3F2;color:#889295}
.badge.wait{background:#FEF7E0;color:#B06000}
.seatbar{height:6px;background:#EDF1EF;border-radius:99px;overflow:hidden;margin-top:8px;width:100%}
.seatbar i{display:block;height:100%;background:linear-gradient(90deg,#3FAE74,#2F8F63);border-radius:99px;transition:width .3s}
.seatbar i.full{background:#D93025}

/* ---------- Room detail ---------- */
.room-hero{background:linear-gradient(135deg,#f8fbff 0%,#fff 70%);border:1px solid var(--blue-line);border-radius:var(--radius-lg);padding:32px 34px;margin-bottom:26px}
.room-hero .crumb{font-size:13.5px;font-weight:500}
.room-hero h2{font-size:32px;font-weight:700;letter-spacing:-1px;margin:6px 0 4px}
.room-hero .meta{color:var(--muted);font-size:14.5px}
.team-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:16px}
.team-card{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:18px 20px;transition:.15s}
.team-card:hover{box-shadow:var(--shadow-sm)}
.team-card .tlabel{font-weight:700;letter-spacing:1px;font-size:12px;color:var(--blue);text-transform:uppercase;display:flex;justify-content:space-between}
.team-card .tlabel .pos{color:var(--g-yellow)}
.seat{display:flex;justify-content:space-between;align-items:center;padding:11px 14px;border:1px dashed var(--line2);border-radius:12px;margin-top:12px;font-size:14px}
.seat.filled{border-style:solid;border-color:var(--blue-line);background:#fafcff}
.seat .who{font-weight:600}
.seat .pref{color:var(--muted);font-size:12.5px;text-align:right}
.seat .empty{color:#b3b7bb}
.side-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-top:22px}
.side-card{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:18px 20px}
.side-card h4{font-size:12px;letter-spacing:1.5px;text-transform:uppercase;color:var(--faint);font-weight:600;margin-bottom:12px}
.person{display:flex;justify-content:space-between;align-items:center;padding:8px 0;border-bottom:1px solid var(--fill2);font-size:14px}
.person:last-child{border-bottom:none}
.signup-cta{margin-top:28px;background:#fafcff;border:1px solid var(--blue-line);border-radius:var(--radius-lg);padding:24px 28px;display:flex;justify-content:space-between;align-items:center;gap:18px;flex-wrap:wrap}
.signup-cta .t{font-weight:700;font-size:17px;letter-spacing:-.2px}
.signup-cta .d{color:var(--muted);font-size:14px;margin-top:3px}

/* ---------- Forms ---------- */
.form-card{background:#fff;border:1px solid var(--line);border-radius:var(--radius-lg);box-shadow:var(--shadow-md);padding:36px;max-width:620px;margin:0 auto}
.form-card h2{margin-bottom:4px;letter-spacing:-.5px;font-size:24px}
.form-card .sub{color:var(--muted);margin-bottom:26px;font-size:14.5px}
.field{margin-bottom:18px}
.field label{display:block;font-size:13px;font-weight:600;margin-bottom:7px;color:var(--ink2)}
.field input[type=text],.field select,.field textarea{width:100%;padding:12px 15px;border:1px solid var(--line2);border-radius:10px;font-size:15px;font-family:inherit;background:#fff;color:var(--ink);transition:.15s}
.field input:focus,.field select:focus,.field textarea:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px rgba(26,115,232,.14)}
.field input[disabled]{background:var(--fill);color:var(--muted)}
.hint{font-size:12.5px;color:var(--muted);margin-top:6px}
.role-switch{display:flex;gap:8px;margin-bottom:22px}

/* ---------- My spars ---------- */
.booking{background:#fff;border:1px solid var(--line);border-left:4px solid var(--blue);border-radius:14px;padding:18px 22px;margin-bottom:12px;display:flex;justify-content:space-between;align-items:center;gap:14px;flex-wrap:wrap;transition:.15s}
.booking:hover{box-shadow:var(--shadow-sm)}
.booking.wait{border-left-color:var(--g-yellow)}
.booking .bmain{font-weight:600;letter-spacing:-.2px}
.booking .bmeta{color:var(--muted);font-size:13px;margin-top:3px}
.booking .actions{display:flex;gap:8px}

/* ---------- Admin ---------- */
.admin-tabs{display:flex;gap:2px;border-bottom:1px solid var(--line);margin-bottom:24px;flex-wrap:wrap}
.admin-tabs button{background:none;border:none;padding:12px 18px;font-size:14px;font-weight:600;color:var(--muted);cursor:pointer;border-bottom:3px solid transparent;margin-bottom:-1px;font-family:inherit}
.admin-tabs button:hover{color:var(--ink)}
.admin-tabs button.on{color:var(--blue);border-bottom-color:var(--blue)}
table.admin{width:100%;border-collapse:collapse;background:#fff;border:1px solid var(--line);border-radius:14px;overflow:hidden;font-size:14px}
table.admin th{background:var(--fill);color:var(--muted);text-align:left;padding:12px 16px;font-size:11.5px;letter-spacing:1px;text-transform:uppercase;font-weight:600;border-bottom:1px solid var(--line)}
table.admin td{padding:12px 16px;border-bottom:1px solid var(--fill2);color:var(--ink2)}
table.admin tr:last-child td{border-bottom:none}
table.admin tr:hover td{background:#fafbfc}
.log-entry{display:flex;gap:14px;padding:10px 0;border-bottom:1px solid var(--fill2);font-size:14px}
.log-entry .ts{color:var(--faint);font-size:12.5px;white-space:nowrap;width:150px;font-variant-numeric:tabular-nums}
.log-entry .actor{font-weight:600;color:var(--blue);white-space:nowrap}
.panel{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:24px;margin-bottom:20px}
.panel h3{font-size:16px;margin-bottom:16px;letter-spacing:-.2px}
.notice{background:var(--amber-bg);border:1px solid #fde293;border-radius:12px;padding:13px 18px;font-size:13.5px;color:var(--ink2);margin-bottom:18px}

/* ---------- Login ---------- */
.login-card{background:#fff;border:1px solid var(--line);border-radius:var(--radius-lg);box-shadow:var(--shadow-md);padding:40px 36px;max-width:440px;margin:44px auto;text-align:center}
.wx-btn{display:flex;align-items:center;justify-content:center;gap:10px;width:100%;background:#07c160;color:#fff;border:none;border-radius:999px;padding:13px;font-size:15.5px;font-weight:600;cursor:pointer;margin-top:18px;font-family:inherit;transition:.15s}
.wx-btn:hover{background:#06ad56;box-shadow:var(--shadow-md)}
.test-users{display:flex;flex-direction:column;gap:8px;margin-top:20px}
.test-users button{background:#fff;border:1px solid var(--line2);border-radius:999px;padding:11px;font-size:14px;font-weight:600;cursor:pointer;font-family:inherit;color:var(--ink2);transition:.15s}
.test-users button:hover{border-color:var(--blue);color:var(--blue);background:var(--blue-bg)}

.empty-state{text-align:center;color:var(--muted);padding:56px 20px}
.empty-state .big{font-size:44px;margin-bottom:10px}
.muted{color:var(--muted)}
.mt{margin-top:16px}.mb{margin-bottom:16px}
.toast{position:fixed;bottom:28px;left:50%;transform:translateX(-50%);background:#202124;color:#fff;padding:13px 26px;border-radius:10px;font-size:14px;font-weight:500;box-shadow:var(--shadow-lg);z-index:99;opacity:0;transition:.25s;pointer-events:none;max-width:88vw;text-align:center}
.toast.show{opacity:1}

.site-footer{border-top:1px solid var(--line);margin-top:40px;padding:26px 0;color:var(--faint);font-size:13px;background:var(--fill)}

@media(max-width:820px){
  .site-header .wrap{padding:0 12px}
  .header-inner{gap:6px}
  .brand{font-size:16px;white-space:nowrap;flex-shrink:0}
  .main-nav{overflow-x:auto;flex-wrap:nowrap;scrollbar-width:none;-webkit-overflow-scrolling:touch}
  .main-nav::-webkit-scrollbar{display:none}
  .main-nav a{padding:6px 10px}
  .nv-en{font-size:9.5px}
  .sync-dot{flex-shrink:0}
  .role-grid{grid-template-columns:1fr;gap:10px;margin-top:16px}
  .team-grid,.side-grid{grid-template-columns:1fr}
  .hero{padding:40px 16px 32px}
  .hero h1{margin:8px 0 6px}
  .hero .ask{margin-top:28px;letter-spacing:2px}
  .hero-foot{margin-top:22px;font-size:13px}
  .role-card{padding:16px 18px;border-radius:14px}
  .role-card h3{font-size:16.5px;margin:2px 0 2px}
  .btn-hero{padding:11px 22px;font-size:14.5px}
  #btn-tour{margin-top:14px!important}
  .hero-cta{margin-top:16px!important}
  .scroll-cue{margin-top:18px}
  .form-card{padding:26px 22px}
}

/* ---------- Chinese subtitle layer ---------- */
.zh{display:block;font-size:12.5px;color:var(--muted);font-weight:500;letter-spacing:.3px;margin-top:2px}
.zh-inline{font-size:12px;color:var(--muted);font-weight:500}
.hero-zh{color:#9aa0a6;font-size:15px;margin-top:12px;letter-spacing:1px}
.ask-zh{display:block;color:#9aa0a6;font-size:13px;letter-spacing:1.5px;margin-top:7px;text-transform:none;font-weight:500}
.role-card .zh{color:var(--faint);font-size:13px;margin:0 0 6px}
.section-title+.zh{margin:2px 0 8px}
.team-card .tlabel .pos{font-size:11px;letter-spacing:.5px}

/* ---------- scroll cue (hero -> week preview) ---------- */
.scroll-cue{display:flex;flex-direction:column;align-items:center;gap:7px;margin-top:38px;color:var(--faint);font-size:11.5px;letter-spacing:2.5px;text-transform:uppercase;font-weight:600}
.scroll-cue:hover{text-decoration:none;color:var(--muted)}
.scroll-cue .chev-wrap{animation:cue-bounce 1.8s ease-in-out infinite}
.scroll-cue .chev{display:block;width:17px;height:17px;border-right:2.5px solid currentColor;border-bottom:2.5px solid currentColor;transform:rotate(45deg)}
.scroll-cue .cue-zh{text-transform:none;letter-spacing:1px;font-weight:500;font-size:12px}
@keyframes cue-bounce{0%,100%{transform:translateY(0);opacity:.5}50%{transform:translateY(7px);opacity:1}}
#week-preview{scroll-margin-top:88px}

/* ---------- motion system (same restrained language as the scroll cue) ---------- */
.badge.urgent{background:var(--amber-bg);color:var(--amber-ink);animation:badge-pulse 1.6s ease-in-out infinite}
@keyframes badge-pulse{0%,100%{opacity:1}50%{opacity:.5}}
.signup-cta .btn{position:relative;overflow:hidden}
.signup-cta .btn::after{content:'';position:absolute;top:0;left:-60%;width:40%;height:100%;background:linear-gradient(100deg,transparent,rgba(255,255,255,.55),transparent);transform:skewX(-20deg);animation:btn-sheen 3.6s ease-in-out infinite}
@keyframes btn-sheen{0%{left:-60%}55%,100%{left:130%}}
.empty-state .big{animation:float-y 3s ease-in-out infinite}
@keyframes float-y{0%,100%{transform:translateY(0)}50%{transform:translateY(-8px)}}
@media (prefers-reduced-motion:reduce){
  .hero h1 .spar,.hero h1 .spar i,.badge.urgent,.signup-cta .btn::after,.empty-state .big,.scroll-cue .chev-wrap{animation:none}
}

/* ---------- partner deck (Tinder-style) ---------- */
.deck-card{max-width:420px;margin:0 auto;background:#fff;border:1px solid var(--line);border-radius:24px;box-shadow:var(--shadow-md);padding:28px;transition:transform .25s ease,opacity .25s ease}
.deck-card.swipe-right{transform:translateX(120px) rotate(8deg);opacity:0}
.deck-card.swipe-left{transform:translateX(-120px) rotate(-8deg);opacity:0}
.deck-avatar{width:72px;height:72px;border-radius:50%;color:#fff;font-size:32px;font-weight:700;display:flex;align-items:center;justify-content:center;margin-bottom:14px;box-shadow:var(--shadow-sm)}
.deck-card h3{font-size:22px;letter-spacing:-.3px;margin-bottom:14px}
.deck-sec{padding:10px 0;border-top:1px solid var(--fill2);font-size:14px}
.deck-sec b{display:block;font-size:12px;letter-spacing:1px;text-transform:uppercase;color:var(--faint);margin-bottom:4px}
.deck-sec p{color:var(--ink2);white-space:pre-wrap}
.deck-actions{display:flex;justify-content:center;gap:22px;margin-top:20px}
.deck-btn{width:58px;height:58px;border-radius:50%;border:1.5px solid var(--line2);background:#fff;font-size:23px;cursor:pointer;transition:.15s;display:flex;align-items:center;justify-content:center}
.deck-btn.pass{color:var(--red)} .deck-btn.pass:hover{background:var(--red-bg);border-color:#f6c6c2;transform:scale(1.08)}
.deck-btn.like{color:#e0245e} .deck-btn.like:hover{background:#fde8ef;border-color:#f5b8cd;transform:scale(1.08)}

/* ---------- tours calendar ---------- */
.tour-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:18px}
.tour-card{background:#fff;border:1px solid var(--line);border-radius:18px;overflow:hidden;box-shadow:var(--shadow-sm);transition:.18s;display:block}
.tour-card:hover{box-shadow:var(--shadow-md);transform:translateY(-2px)}
.tour-img{width:100%;height:150px;object-fit:cover;display:block}
.tour-img-ph{display:flex;align-items:center;justify-content:center;font-size:46px;background:linear-gradient(135deg,#e8f0fe,#fef7e0)}
.tour-body{padding:22px 24px 24px;display:flex;flex-direction:column}
.tour-body>*+*{margin-top:12px}
.tour-body>:first-child{margin-top:0}
.tour-name{font-weight:800;font-size:17.5px;letter-spacing:-.2px;color:#1F2A24;line-height:1.35}
.tour-date{color:var(--blue);font-weight:600;font-size:13.5px;margin:0}
.tour-tags{display:flex;flex-wrap:wrap;gap:6px;margin:0}
.tour-note{color:var(--muted);font-size:13px;line-height:1.7;margin:0}
.tour-body .btn,.tour-body .btn-ghost{align-self:flex-start;margin-top:14px}

/* ---------- mutual match: handshake moment ---------- */
.match-overlay{position:fixed;inset:0;z-index:300;display:flex;align-items:center;justify-content:center;background:rgba(32,33,36,.45);backdrop-filter:blur(3px);animation:mo-fade .25s ease;cursor:pointer}
@keyframes mo-fade{from{opacity:0}to{opacity:1}}
.match-card{background:#fff;border-radius:28px;padding:38px 52px 34px;text-align:center;box-shadow:var(--shadow-lg);animation:mo-pop .4s cubic-bezier(.2,1.4,.4,1);max-width:380px}
@keyframes mo-pop{from{transform:scale(.55);opacity:0}to{transform:scale(1);opacity:1}}
.match-hands{font-size:64px;display:inline-block;animation:hand-shake .7s ease .15s both}
@keyframes hand-shake{0%{transform:scale(.3);opacity:0}40%{transform:scale(1.18);opacity:1}62%{transform:scale(.94) rotate(-7deg)}82%{transform:scale(1.02) rotate(4deg)}100%{transform:scale(1) rotate(0)}}
.match-names{font-size:23px;font-weight:700;margin-top:14px;letter-spacing:-.3px}
.match-sub{color:var(--muted);font-size:13.5px;margin-top:6px}

/* ---------- cloud sync status dot ---------- */
.sync-dot{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:10px;vertical-align:middle}
.sync-dot.s-local{background:#c4c9cf}
.sync-dot.s-ok{background:#188038;box-shadow:0 0 0 3px rgba(24,128,56,.15)}
.sync-dot.s-syncing{background:#f9ab00;animation:badge-pulse 1.2s ease-in-out infinite}
.sync-dot.s-fail{background:#d93025;box-shadow:0 0 0 3px rgba(217,48,37,.15)}

/* ---------- motion bank ---------- */
.mb-filters{display:flex;gap:10px;flex-wrap:wrap;margin:20px 0}
.mb-filters select,.mb-filters input{padding:10px 14px;border:1px solid var(--line2);border-radius:10px;font-size:14px;font-family:inherit;background:#fff}
.mb-filters input{flex:1;min-width:200px}
.mb-group{font-size:13px;font-weight:700;letter-spacing:1.5px;text-transform:uppercase;color:var(--blue);margin:22px 0 10px;padding-top:14px;border-top:1px solid var(--line)}
.mb-item{display:flex;gap:12px;background:#fff;border:1px solid var(--line);border-radius:12px;padding:14px 16px;margin-bottom:8px}
.mb-round{flex-shrink:0;background:var(--blue-bg);color:var(--blue);font-weight:700;font-size:12px;border-radius:8px;padding:4px 10px;height:fit-content;white-space:nowrap}
.mb-motion{font-size:14.5px;line-height:1.6}
.mb-info-btn{margin-top:8px;background:none;border:none;color:var(--blue);font-size:12.5px;font-weight:600;cursor:pointer;font-family:inherit;padding:0}
.mb-info-btn.open{transform:rotate(0)}
.mb-info{display:none;margin-top:8px;background:var(--fill);border-left:3px solid var(--blue);border-radius:8px;padding:10px 14px;font-size:13.5px;color:var(--ink2);line-height:1.6}
.mb-info.open{display:block}

/* ---------- timekeeper ---------- */
.tk-card{background:#fff;border:1px solid var(--line);border-radius:24px;box-shadow:var(--shadow-md);padding:30px 26px 26px;margin-top:20px}
.tk-step{text-align:center;font-size:19px;font-weight:700;letter-spacing:-.2px;margin-bottom:18px}
.tk-ringwrap{position:relative;width:240px;height:240px;margin:0 auto}
.tk-ring{width:100%;height:100%;transform:rotate(-90deg)}
.tk-ring circle{fill:none;stroke-width:10;stroke-linecap:round}
.tk-ring-bg{stroke:var(--fill2)}
.tk-ring-fg{stroke:var(--blue);transition:stroke-dashoffset .25s linear}
.tk-time{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:56px;font-weight:700;letter-spacing:-1px;font-variant-numeric:tabular-nums}
.tk-time.over{color:var(--red)}
.tk-over{text-align:center;margin-top:8px;font-size:13px;font-weight:600;color:var(--red);letter-spacing:.2px}
.tk-controls{display:flex;justify-content:center;gap:10px;flex-wrap:wrap;margin-top:22px}
.tk-dots{display:flex;justify-content:center;gap:7px;margin-top:18px}
.tk-dot{width:9px;height:9px;border-radius:50%;background:var(--line2);cursor:pointer;transition:.15s}
.tk-dot.on{background:#2F8F63;transform:scale(1.3)}

/* ---------- hero slogan (kept from newer content) ---------- */
.hero .slogan-zh{font-size:23px;font-weight:600;letter-spacing:5px;margin-top:12px;color:var(--ink)}
.hero .slogan-en{font-size:15px;font-style:italic;color:var(--muted);margin-top:4px}
.hero .slogan-sub-zh{font-size:15px;font-weight:500;color:var(--ink2);margin-top:18px}
.hero .slogan-sub-en{font-size:12px;font-style:italic;color:var(--faint);margin-top:3px}

/* ---------- admin judge input (feature from later iterations) ---------- */
.judge-in{width:120px;padding:7px 10px;border:1px solid var(--line2);border-radius:8px;font-size:13px;font-family:inherit}
.judge-in:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 2px rgba(26,115,232,.12)}

/* ---------- LS monogram brand ---------- */
.brand{display:flex;align-items:center;gap:10px;text-decoration:none}
.brand:hover{text-decoration:none}
.brand-mark{width:38px;height:32px;flex-shrink:0}
.brand-text{font-size:19px;font-weight:700;letter-spacing:-.3px;color:var(--ink);line-height:1.15;text-align:left}
.brand-tag{display:block;font-size:8.5px;font-weight:600;letter-spacing:3.2px;color:var(--faint);margin-top:1px}
@media(max-width:820px){ .brand-tag{display:none} .brand-mark{width:32px;height:27px} .brand-text{font-size:17px} }

@media(max-width:820px){
  .match-card{padding:30px 26px;max-width:88vw}
  .match-hands{font-size:52px}
  .match-names{font-size:19px}
}

.brand-img{height:40px;display:block}
@media(max-width:820px){ .brand-img{height:32px} }

/* ---------- admin tables: contained, never break the page ---------- */
.panel{overflow-x:auto;-webkit-overflow-scrolling:touch}
table.admin{min-width:640px}
table.admin th:last-child,table.admin td:last-child{position:sticky;right:0;background:#fff;box-shadow:-6px 0 8px -6px rgba(0,0,0,.12);z-index:2}
table.admin th:last-child{background:var(--ice)}
td.det{max-width:280px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* ---------- entries: card list (no horizontal overflow) ---------- */
.entry-card{background:#fff;border:1px solid var(--line);border-radius:12px;padding:14px 16px;margin-bottom:10px}
.ec-row1{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:4px}
.ec-name{font-size:16.5px;font-weight:700;letter-spacing:-.2px}
.ec-meta{color:var(--muted);font-size:13.5px}
.ec-det{color:var(--ink2);font-size:13px;margin-top:5px}
.ec-del{margin-top:12px}
.badge.role-debater{background:var(--blue-bg);color:var(--blue-d)}
.badge.role-judge{background:var(--amber-bg);color:var(--amber-ink)}
.badge.role-observer{background:var(--fill2);color:var(--muted)}

/* ---------- batch selection toolbar ---------- */
.ec-tools{display:flex;align-items:center;gap:14px;background:var(--ice);border-radius:10px;padding:10px 14px;margin-bottom:14px;flex-wrap:wrap}
.ec-sel{display:flex;align-items:center;gap:6px;font-size:13.5px;font-weight:600;color:var(--ink2);cursor:pointer}
.ec-cb,.u-cb{width:17px;height:17px;accent-color:var(--blue);cursor:pointer;flex-shrink:0}

/* ---------- full-room info bubbles ---------- */
.info-bubbles{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:20px}
.info-bubble{background:#fff;border:1px solid var(--line);border-radius:14px;padding:16px 18px;transition:.15s}
.info-bubble:first-child{cursor:pointer}
.info-bubble:hover{border-color:var(--blue-line);box-shadow:var(--shadow-sm)}
.info-bubble .ib-label{font-size:11.5px;letter-spacing:1.5px;text-transform:uppercase;color:var(--faint);font-weight:600}
.info-bubble .ib-val{font-size:16px;font-weight:700;margin-top:5px;word-break:break-all}
.info-bubble .ib-val.tbd{color:var(--faint);font-weight:500}
.meeting-in{width:150px;padding:7px 10px;border:1px solid var(--line2);border-radius:8px;font-size:13px;font-family:inherit}
.meeting-in:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 2px rgba(26,115,232,.12)}
@media(max-width:820px){ .info-bubbles{grid-template-columns:1fr} }

/* ---------- micro-delights ---------- */
.btn:active{transform:scale(.96)}
.tk-time.over{animation:tk-over .8s ease-in-out infinite}
/* ==== Motion Bank 子面板统一（Practice / Build a Set） ==== */
.mbx-panel .mbx-head{margin-bottom:16px}
.mbx-title{font-size:16px;font-weight:600;letter-spacing:-.2px;color:#172124}
.mbx-panel .zh{margin-top:4px}
.mbx-label{font-size:13px;font-weight:600;color:#3C4A44;margin:0 0 8px}
.mbx-hint{font-weight:400;color:#889295;font-size:12px}
.mbx-pills{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:14px}
.mbx-row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.mbx-sel{height:38px;min-width:150px}
.mbx-check{display:flex;align-items:center;gap:6px;font-size:13px;color:#3C4A44;cursor:pointer;min-height:38px}
.mbx-check input{width:16px;height:16px;accent-color:#2F8F63;margin:0}
@keyframes tk-over{0%,100%{opacity:1}50%{opacity:.5}}

/* ---------- expired days ---------- */
.day-card.day-expired{opacity:.55}
.day-card.day-expired:hover{opacity:.8}
.day-card.day-expired .date{color:#889295}
.day-quick,.day-chev{display:none}

/* ---------- mobile: accordion week cards ---------- */
@media(max-width:820px){
  .day-card{padding:0}
  .day-head{margin-bottom:0}
  .day-quick{display:inline;margin-left:auto;font-size:12px;color:#889295;font-weight:600;white-space:nowrap}
  .day-chev{display:inline-block;margin-left:8px;color:#889295;transition:.2s}
  .day-card.open .day-chev{transform:rotate(180deg)}
  .day-rooms{display:none}
  .day-card.open .day-rooms{display:block}
  .day-card.open .day-quick,.day-card.open .day-chev{display:none}
  .day-time{padding:8px 16px 2px;font-size:12px}
}

/* ---------- live signup ticker ---------- */
.ticker{display:flex;align-items:center;gap:12px;background:#fff;border:1px solid var(--line);border-radius:12px;padding:11px 16px;margin:16px 0 4px;font-size:13.5px;box-shadow:var(--shadow-sm)}
.ticker-label{flex-shrink:0;font-weight:700;color:var(--ink)}
#ticker-text{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;transition:opacity .25s;color:var(--ink2)}
.ticker-count{flex-shrink:0;font-weight:700;color:var(--blue);font-size:13px;white-space:nowrap}
@media(max-width:820px){ .ticker{flex-wrap:wrap;row-gap:4px} }

/* ---------- site-wide notice bar & countdown ---------- */
.site-notice{background:#FDF3E3;border-bottom:1px solid #F5D9A8;padding:10px 0;font-size:13.5px;color:var(--ink2)}
.site-notice a{color:var(--ink)}
.day-cd{color:var(--blue);font-weight:600;font-size:12px}

/* ---------- letter tap feedback (touch devices) ---------- */
.hero h1 .lt.pop{scale:1.18;translate:0 -8px}
.hero h1 .spar i.pop{scale:1.22;translate:0 -9px}

/* ---------- signed-up name chips ---------- */
.room-chips{display:flex;flex-wrap:wrap;gap:6px;margin:4px 0 8px}
.chip{background:var(--blue-bg);color:var(--blue-d);font-size:12px;font-weight:600;padding:3px 11px;border-radius:999px}
.chip-more{background:var(--fill2);color:var(--muted)}

.chip-judge{background:var(--amber-bg);color:var(--amber-ink)}
.chip-obs{background:var(--fill2);color:var(--muted)}

/* ---------- mascot base (styles above kept) ---------- */
.m-bubble{position:absolute;left:80px;right:auto;bottom:20px;width:max-content;max-width:min(62vw,230px);white-space:normal;word-break:break-word;background:#fff;border:1px solid var(--line);border-radius:14px;padding:11px 30px 11px 14px;font-size:13px;line-height:1.55;color:var(--ink2);box-shadow:var(--shadow-md);opacity:0;transform:translateY(6px) scale(.96);transition:.25s;pointer-events:none}
.m-bubble.show{opacity:1;transform:none;pointer-events:auto}
.m-bubble::after{content:'';position:absolute;left:-6.5px;bottom:15px;width:12px;height:12px;background:#fff;border-left:1px solid var(--line);border-top:1px solid var(--line);transform:rotate(-45deg)}
#m-bubble-close{position:absolute;top:5px;right:9px;color:var(--faint);font-size:15px;line-height:1}
.m-menu{position:absolute;left:0;right:auto;bottom:96px;background:#fff;border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow-lg);padding:6px;min-width:172px;display:none;z-index:2}
.m-menu.open{display:block}
.m-menu button{display:block;width:100%;text-align:left;background:none;border:none;padding:9px 12px;border-radius:9px;font-size:13.5px;cursor:pointer;color:var(--ink2);font-family:inherit}
.m-menu button:hover{background:var(--fill2)}
#m-restore{position:fixed;left:22px;bottom:22px;right:auto;z-index:499;width:40px;height:40px;display:flex;align-items:center;justify-content:center;background:#fff;border:1px solid var(--line);border-radius:50%;box-shadow:var(--shadow-md);cursor:pointer;font-size:18px}
@media(max-width:820px){.mascot{width:56px;height:56px;left:14px;bottom:14px}.m-bubble{left:62px;max-width:min(66vw,200px);font-size:12.5px;padding:9px 26px 9px 12px}#m-restore{left:14px;right:auto}}
@media (prefers-reduced-motion:reduce){.m-blob,.m-flow{animation:none!important}}

/* ---------- mascot v2: alive system ---------- */
.m-sheen{position:absolute;inset:4%;border-radius:50%;pointer-events:none;
  background:radial-gradient(58% 42% at 34% 26%,rgba(255,255,255,.8),transparent 62%);
  animation:m-sheen 5.5s ease-in-out infinite alternate}
@keyframes m-sheen{0%{transform:translate(0,0) scale(1);opacity:.85}100%{transform:translate(7%,12%) scale(1.18);opacity:.55}}
.mascot.blink{--eye-h:2px}
.mascot.emo-happy{--eye-sy:.85}
.mascot.emo-happy .m-brow{transform:translateY(-2.5px)}
.mascot.emo-smug{--eye-sy:.6}
.mascot.emo-smug .m-brow.right{transform:translateY(-3px) rotate(-4deg)}
.mascot.emo-smug .m-blob{filter:saturate(1.08)}
.mascot.emo-surprised{--eye-s:1.12}
.mascot.emo-surprised .m-brow{transform:translateY(-3px)}
.mascot.emo-annoyed{--eye-sy:.55}
.mascot.emo-annoyed .m-brow.left{transform:rotate(16deg) translateY(2.5px)}
.mascot.emo-annoyed .m-brow.right{transform:rotate(-16deg) translateY(2.5px)}
.mascot.emo-annoyed{transform:rotate(-6deg)}
.mascot.emo-thinking{--eye-sy:.9}
.mascot.emo-thinking .m-brow.left{transform:translateY(-1px) rotate(-6deg)}
.mascot.emo-thinking .m-flow{filter:blur(13px) saturate(1.12)}
.mascot.b-tilt{transform:rotate(-11deg)}
.mascot.b-puff{transform:scale(1.16)}
.mascot.b-shrink{transform:scale(.9)}
.mascot.moving .m-blob{animation-duration:2.2s,1.7s}
.mascot.moving .m-flow{animation-duration:4.5s}
.mascot.b-away{opacity:0}


/* ---------- question-mark morph ---------- */
.mascot.b-question{transform:scaleY(1.14)}
.mascot.b-question .m-blob{border-radius:64% 36% 58% 42%/74% 62% 38% 28%;animation:m-wobble 2.2s ease-in-out infinite}
.mascot.b-question::after{content:'';position:absolute;left:50%;bottom:-10px;width:8px;height:8px;margin-left:-4px;background:#FDFDFB;border-radius:50%;box-shadow:0 0 12px rgba(95,179,161,.55);animation:m-anim 2s ease-in-out infinite}

/* ---------- mascot v3: props, expressions, privacy, ambient ---------- */
.m-mouth{display:none!important}
.m-prop{display:none;pointer-events:none}
.mascot.has-blanket .m-blanket{display:block;position:absolute;left:-7%;right:-7%;bottom:-5%;height:54%;
  background:repeating-linear-gradient(180deg,#D8EDE2 0 8px,#CBE6D9 8px 16px);
  border-radius:44% 44% 48% 48%;box-shadow:inset 0 2.5px 0 rgba(255,255,255,.7),0 3px 8px rgba(47,143,99,.18)}
.mascot.has-coffee .m-coffee{display:block;position:absolute;right:-16px;bottom:4px;width:15px;height:12px;
  background:#fff;border:1.6px solid #D8DDE2;border-radius:3px 3px 6px 6px;animation:m-sip 2.6s ease-in-out infinite}
.mascot.has-coffee .m-coffee::after{content:'';position:absolute;right:-6px;top:1px;width:6px;height:6px;border:1.6px solid #D8DDE2;border-left:none;border-radius:0 6px 6px 0}
.mascot.has-coffee .m-coffee::before{content:'';position:absolute;left:3px;top:-11px;width:2px;height:8px;background:rgba(150,170,180,.5);border-radius:2px;box-shadow:5px 1px 0 rgba(150,170,180,.4);animation:m-steam 2s ease-in-out infinite}
@keyframes m-sip{0%,100%{transform:rotate(0)}45%{transform:rotate(-16deg) translateY(-2px)}60%{transform:rotate(-12deg)}}
@keyframes m-steam{0%{transform:translateY(0);opacity:.6}100%{transform:translateY(-5px);opacity:0}}
.mascot.has-badge .m-badge{display:block;position:absolute;left:50%;bottom:-9px;transform:translateX(-50%) rotate(-3deg);
  background:#fff;border:1.5px solid var(--line);border-radius:7px;padding:2px 8px;font-size:9px;font-weight:800;color:#41639A;
  box-shadow:var(--shadow-sm);letter-spacing:.3px;white-space:nowrap}
.mascot.emo-crying{--eye-sy:.6}
.mascot.emo-crying .m-eye::after{content:'';position:absolute;top:115%;left:50%;width:4.5px;height:6.5px;margin-left:-2.2px;
  background:#A8CFE8;border-radius:50% 50% 62% 62%;animation:m-tear 1s ease-in infinite}
@keyframes m-tear{0%{transform:translateY(0);opacity:1}80%{opacity:.9}100%{transform:translateY(9px);opacity:0}}
.mascot.emo-annoyed .m-blob{animation:m-shake .38s ease 2,m-wobble 7s ease-in-out infinite}
@keyframes m-shake{0%,100%{transform:translateX(0)}25%{transform:translateX(-2.5px)}75%{transform:translateX(2.5px)}}
.mascot.freeze .m-blob,.mascot.freeze .m-flow,.mascot.freeze .m-sheen{animation-play-state:paused}
.mascot.windy{transform:rotate(7deg) translateY(-7px)}
.mascot.mimic .m-blob{border-radius:30% 30% 34% 34%/32% 32% 36% 36%}
.mascot.curl{transform:scale(.68)}
.mascot.shy .m-blob::before{content:'';position:absolute;left:-9%;right:-9%;top:24%;height:46%;
  background:linear-gradient(180deg,#F8FBF8,#EDF4EE);border-radius:48%;box-shadow:0 -2px 8px rgba(47,143,99,.12);transition:height .45s ease}
.mascot.shy2 .m-eye{--eye-h:2px}
.mascot.shy2{transform:rotate(16deg) translateX(5px)}
.mascot.shy3 .m-face{opacity:0}
.mascot.shy3{transform:rotate(24deg) translateX(10px)}
.mascot.emo-skeptical .m-brow.left{transform:translateY(-2px) rotate(-10deg)}
.mascot.emo-skeptical .m-brow.right{transform:translateY(1.5px) rotate(6deg)}
.mascot.emo-skeptical{--eye-sy:.9}
.mascot.emo-sleepy .m-eye{--eye-h:2.5px}
.mascot.emo-sleepy .m-brow{transform:translateY(2px)}

.mascot.blink .m-eye i,.mascot.emo-sleepy .m-eye i,.mascot.shy2 .m-eye i,.mascot.resting .m-eye i{opacity:0}

/* ---------- mascot v4: life props, touch fx, expressions ---------- */
.mascot.has-glasses .m-glasses{display:block;position:absolute;top:31%;left:12%;width:76%;height:15px;
  background:
   radial-gradient(circle at 24% 50%, transparent 6.5px, #31413A 7.5px, #31413A 9px, transparent 10px),
   radial-gradient(circle at 76% 50%, transparent 6.5px, #31413A 7.5px, #31413A 9px, transparent 10px),
   linear-gradient(#31413A,#31413A) center/18px 2.2px no-repeat}
.mascot.has-paper .m-paper{display:block;position:absolute;left:50%;bottom:-7px;width:64%;height:44%;transform:translateX(-50%) rotate(2deg);
  background:repeating-linear-gradient(180deg,#FFFFFF 0 5px,#E9EDEA 5px 6.5px);
  border:1px solid #DDE3DE;border-radius:3px 3px 6px 6px;box-shadow:0 3px 8px rgba(0,0,0,.12);animation:m-read 3.2s ease-in-out infinite}
@keyframes m-read{0%,100%{transform:translateX(-50%) rotate(2deg) translateY(0)}50%{transform:translateX(-50%) rotate(1deg) translateY(-2px)}}
.mascot.has-phones .m-phones{display:block;position:absolute;top:-9%;left:50%;width:64%;height:52%;transform:translateX(-50%);
  border:3.5px solid #31413A;border-bottom:none;border-radius:60px 60px 0 0}
.mascot.has-phones .m-phones::before{content:'';position:absolute;left:-7px;bottom:-8px;width:8px;height:12px;background:#31413A;border-radius:4px}
.mascot.has-phones .m-phones::after{content:'';position:absolute;right:-7px;bottom:-8px;width:8px;height:12px;background:#31413A;border-radius:4px}
.mascot.has-phone .m-phone{display:block;position:absolute;left:50%;bottom:-4px;width:34%;height:42%;transform:translateX(-50%) rotate(-4deg);
  background:linear-gradient(180deg,#3A4A43,#232F2A);border-radius:5px;border:1.5px solid #101815;animation:m-read 2.6s ease-in-out infinite}
.mascot.has-phone .m-phone::after{content:'';position:absolute;inset:3px;background:linear-gradient(180deg,rgba(140,220,200,.35),rgba(90,160,150,.12));border-radius:3px}
.mascot.has-snack .m-snack{display:block;position:absolute;right:-10px;bottom:0;width:13px;height:13px;
  background:radial-gradient(circle at 35% 35%,#F0D9A8,#D9B87C);border-radius:50%;animation:m-munch 1.4s ease-in-out infinite}
.mascot.has-snack .m-snack::after{content:'';position:absolute;top:3px;left:3px;width:2.5px;height:2.5px;background:#A8823F;border-radius:50%;box-shadow:5px 2px 0 #A8823F,3px 6px 0 #A8823F}
@keyframes m-munch{0%,100%{transform:translate(0,0) scale(1)}45%{transform:translate(-9px,-7px) scale(.94)}70%{transform:translate(-7px,-5px) scale(.9)}}
.m-touched{animation:m-touch 1.15s ease-out!important}
@keyframes m-touch{0%{box-shadow:0 0 0 0 rgba(95,179,161,.4)}100%{box-shadow:0 0 0 18px rgba(95,179,161,0)}}
.mascot.emo-excited{--eye-s:1.15}
.mascot.emo-excited .m-brow{transform:translateY(-3px)}
.mascot.emo-excited .m-blob{box-shadow:0 8px 28px rgba(47,143,99,.32),inset 0 0 0 1.5px rgba(255,255,255,.8),0 0 34px rgba(95,179,161,.5)}
.mascot.emo-shy{--eye-sy:.72}
.mascot.emo-shy .m-brow{transform:translateY(1.5px)}

/* ---------- reference-style emo marks & prop polish ---------- */
.m-mark{position:absolute;top:-15px;right:-8px;font-size:16px;font-weight:800;color:#5FB3A1;opacity:0;transform:scale(.4) rotate(-12deg);transition:.25s;pointer-events:none;line-height:1}
.mascot[class*=emo-] .m-mark{opacity:1;transform:scale(1) rotate(0);animation:m-markbob 1.6s ease-in-out infinite}
@keyframes m-markbob{0%,100%{transform:scale(1) translateY(0)}50%{transform:scale(1.08) translateY(-3px)}}
.mascot.emo-happy .m-mark::before{content:'\2726'}
.mascot.emo-surprised .m-mark::before{content:'\FF01'}
.mascot.emo-crying .m-mark::before{content:'\1F4A7'}
.mascot.emo-annoyed .m-mark::before{content:'\301C'}
.mascot.emo-thinking .m-mark::before,.mascot.emo-skeptical .m-mark::before{content:'\FF1F'}
.mascot.emo-sleepy .m-mark::before{content:'zZ'}
.mascot.emo-playful .m-mark::before{content:'\2665';color:#E88CA0}
.mascot.emo-smug .m-mark::before{content:'\2726'}
.mascot.emo-excited .m-mark::before{content:'\2726\2726';letter-spacing:2px}
.mascot.emo-playful .m-eye.left{--eye-h:3px}
.mascot.has-glasses .m-glasses{background:
   radial-gradient(circle at 22% 50%, transparent 6.5px, #A98B5F 7.5px, #A98B5F 9px, transparent 10px),
   radial-gradient(circle at 78% 50%, transparent 6.5px, #A98B5F 7.5px, #A98B5F 9px, transparent 10px),
   linear-gradient(#A98B5F,#A98B5F) center/20px 2.2px no-repeat}
.mascot.has-paper .m-paper::before{content:'CASE FILE';position:absolute;top:1px;left:0;right:0;text-align:center;font-size:5.5px;font-weight:800;letter-spacing:.6px;color:#7A838B}
.mascot.has-badge .m-badge::before{content:'\2696 JUDGE';font-size:9px}
.mascot.has-badge .m-badge{font-size:0}
.mascot.has-snack .m-snack{width:19px;height:13px;right:-13px;background:#fff;border-radius:3px 3px 10px 10px;box-shadow:0 2px 5px rgba(0,0,0,.12)}
.mascot.has-snack .m-snack::before{top:-5px;left:2px;width:6px;height:6px;background:radial-gradient(circle at 35% 35%,#F0D9A8,#D9B87C);border-radius:50%;box-shadow:5px -2px 0 #E8C88F,10px 0 0 #F0D9A8}
.mascot.has-snack .m-snack::after{top:8px;left:6px}
.mascot.has-laptop .m-laptop{display:block;position:absolute;left:50%;bottom:-6px;width:56%;height:34%;transform:translateX(-50%) perspective(40px) rotateX(18deg);
  background:linear-gradient(180deg,#F4F6F8,#DDE3E8);border:1px solid #C9D2D8;border-radius:4px;animation:m-read 3s ease-in-out infinite}
.mascot.has-laptop .m-laptop::before{content:'';position:absolute;top:3px;left:8%;right:8%;height:55%;background:repeating-linear-gradient(180deg,#EAF6F1 0 3px,#fff 3px 5px);border-radius:2px}
.mascot.has-laptop .m-laptop::after{content:'';position:absolute;top:-10px;right:-12px;width:14px;height:10px;background:#fff;border:1px solid #E1E7E3;border-radius:2px;box-shadow:0 2px 5px rgba(0,0,0,.08);transform:rotate(6deg)}

.room-link{display:block;color:inherit;text-decoration:none;border-radius:8px}
.room-link:hover .rname{color:var(--blue)}

/* ---------- v5: prop transitions, save btn, stat card, mb flash ---------- */
@keyframes m-propin{0%{opacity:0;transform:scale(.55)}100%{opacity:1;transform:scale(1)}}
.mascot.has-blanket .m-blanket{animation:m-propin .4s ease}
.mascot.has-coffee .m-coffee{animation:m-propin .4s ease}
.mascot.has-badge .m-badge{animation:m-propin .4s ease}
.mascot.has-glasses .m-glasses{animation:m-propin .4s ease}
.mascot.has-paper .m-paper{animation:m-propin .4s ease,m-read 3.2s ease-in-out .4s infinite}
.mascot.has-phones .m-phones{animation:m-propin .4s ease}
.mascot.has-phone .m-phone{animation:m-propin .4s ease}
.mascot.has-snack .m-snack{animation:m-propin .4s ease,m-munch 1.4s ease-in-out .4s infinite}
.mascot.has-laptop .m-laptop{animation:m-propin .4s ease,m-read 3s ease-in-out .4s infinite}
.m-prop{transition:opacity .28s ease}
.mascot.props-out .m-prop{opacity:0}
.save-btn{display:block!important;width:100%!important;margin-top:10px!important;border-radius:14px!important;padding:14px 20px!important;font-size:15px!important;background:linear-gradient(135deg,#202124,#3c4043)!important;letter-spacing:.5px;text-align:center}
.save-btn:hover{box-shadow:0 8px 24px rgba(32,33,36,.3)!important}
.stat-card{display:flex;align-items:center;gap:18px;background:linear-gradient(135deg,#F4FAF7,#EAF4EE);border:1px solid #D8EAE0;border-radius:16px;padding:16px 20px;margin:4px 0 18px;flex-wrap:wrap}
.sc-num{text-align:center;min-width:56px}
.sc-num b{display:block;font-size:26px;font-weight:800;letter-spacing:-.5px;background:linear-gradient(135deg,#175c40,#3fae74);-webkit-background-clip:text;background-clip:text;color:transparent}
.sc-num span{font-size:11px;color:var(--muted);letter-spacing:1px;font-weight:600}
#btn-sc-toggle{margin-left:auto;background:#fff;border:1px solid var(--line2);border-radius:999px;padding:8px 16px;font-size:12.5px;font-weight:700;cursor:pointer;color:#41639A;font-family:inherit;transition:.15s}
#btn-sc-toggle:hover{border-color:#41639A;background:var(--blue-bg)}
#sc-detail{background:#fff;border:1px solid var(--line);border-radius:12px;padding:12px 16px;margin:-8px 0 18px;font-size:13px;display:none}
#sc-detail.open{display:block;animation:m-propin .3s ease}
#sc-detail .sr{display:flex;justify-content:space-between;gap:10px;padding:7px 0;border-bottom:1px dashed var(--line)}
#sc-detail .sr:last-child{border-bottom:none}
.show-toggles{display:flex;flex-wrap:wrap;gap:8px 16px;background:var(--ice);border-radius:10px;padding:10px 14px;margin-bottom:14px}
.show-toggles label{display:flex;align-items:center;gap:6px;font-size:12.5px;font-weight:500;color:var(--ink2);cursor:pointer}
.mb-flash{animation:mbflash 1.6s ease 2!important;border-color:#64A99A!important}
@keyframes mbflash{0%,100%{box-shadow:0 0 0 0 rgba(100,169,154,0)}50%{box-shadow:0 0 0 6px rgba(100,169,154,.35)}}

/* ---------- bobo intro tour ---------- */
.m-intro{position:fixed;left:50%;bottom:88px;transform:translateX(-50%);width:min(330px,90vw);background:rgba(255,255,255,.55);-webkit-backdrop-filter:blur(22px) saturate(1.7);backdrop-filter:blur(22px) saturate(1.7);border:1px solid rgba(255,255,255,.5);border-radius:16px;padding:14px 18px;box-shadow:0 12px 44px rgba(32,33,36,.16);font-size:13.5px;line-height:1.65;color:var(--ink2);z-index:600;max-height:42vh;overflow-y:auto}
.m-intro b{color:var(--ink)}
.mi-btns{display:flex;gap:8px;margin-top:11px}
.m-intro button{border:none;border-radius:999px;padding:7px 15px;font-size:12.5px;font-weight:700;cursor:pointer;font-family:inherit;transition:.15s}
.mi-next{background:var(--ink);color:#fff}
.mi-next:hover{background:#000}
.mi-skip{background:var(--ice);color:var(--muted)}

@media(max-width:820px){.m-intro{bottom:74px;font-size:12.5px;padding:12px 14px}}

.m-intro{max-height:46vh;overflow-y:auto}

/* ---------- guided tour: flash targets & bubble CTA ---------- */
.guide-flash{animation:guideflash 1.4s ease-in-out infinite!important}
@keyframes guideflash{0%,100%{box-shadow:0 0 0 0 rgba(100,169,154,.55)}50%{box-shadow:0 0 0 7px rgba(100,169,154,0)}}
.mascot.self-flash .m-blob{animation:m-selfflash 1.4s ease-in-out infinite}
@keyframes m-selfflash{0%,100%{box-shadow:0 6px 22px rgba(47,143,99,.22),inset 0 0 0 1.5px rgba(255,255,255,.75),0 0 24px rgba(95,179,161,.32)}50%{box-shadow:0 6px 22px rgba(47,143,99,.3),inset 0 0 0 1.5px rgba(255,255,255,.8),0 0 40px rgba(95,179,161,.6)}}
.bubble-hint{font-size:11px;color:#41639A;font-weight:700;margin-top:7px;letter-spacing:.3px}
.m-bubble.cta{box-shadow:0 0 0 3px rgba(82,121,181,.28),var(--shadow-md)}

.m-menu.menu-left{left:auto;right:0}

/* ---------- site language mode ---------- */
html[data-lang=zh] .nv-en,html[data-lang=zh] .slogan-en,html[data-lang=zh] .cue-en{display:none}
html[data-lang=en] .nv-zh,html[data-lang=en] .slogan-zh,html[data-lang=en] .cue-zh{display:none}
html[data-lang] .main-nav a{justify-content:center}
.lang-toggle{font-size:12px!important;font-weight:800;letter-spacing:1px;color:var(--muted);border:1px solid var(--line2);border-radius:999px;padding:6px 10px!important;background:#fff;line-height:1.3!important;flex-direction:row!important;gap:2px!important}
.lang-toggle:hover{background:var(--ice);text-decoration:none}

/* ---------- drag & dizzy ---------- */
.mascot.grabbed .m-blob{animation-duration:1.5s,1s}
.mascot.dizzy-sway{animation:m-dizzy .95s ease}
@keyframes m-dizzy{0%{transform:rotate(0)}22%{transform:rotate(-13deg)}47%{transform:rotate(11deg)}72%{transform:rotate(-6deg)}100%{transform:rotate(0)}}
.mascot.spin{animation:m-spin .72s cubic-bezier(.3,.7,.4,1)}
@keyframes m-spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}
.mascot.emo-dizzy{--eye-sy:.5}
.mascot.emo-dizzy .m-mark::before{content:'\1F4AB'}

/* ---------- vomit ---------- */
.m-vomit{position:absolute;left:50%;top:58%;width:34px;height:26px;transform:translateX(-50%)}
.m-vomit i{position:absolute;left:50%;top:0;width:6.5px;height:6.5px;background:#93CDA0;border-radius:50%;opacity:0}
.m-vomit i:nth-child(1){--vx:-15px}
.m-vomit i:nth-child(2){--vx:0px;width:8px;height:8px}
.m-vomit i:nth-child(3){--vx:15px}
.mascot.vomiting .m-vomit i{animation:m-vomitfly .85s ease-out forwards}
.mascot.vomiting .m-vomit i:nth-child(2){animation-delay:.32s}
.mascot.vomiting .m-vomit i:nth-child(3){animation-delay:.6s}
@keyframes m-vomitfly{0%{opacity:1;transform:translate(0,0) scale(1)}100%{opacity:0;transform:translate(var(--vx),30px) scale(.55)}}

.mascot.vomiting .m-vomit{display:block}

/* ---------- payment QR ---------- */
.pay-box{margin-top:12px;background:var(--ice);border-radius:12px;padding:12px 14px}
.pay-t{font-size:12.5px;font-weight:700;color:var(--ink2);margin-bottom:8px}
.pay-imgs{display:flex;gap:14px;flex-wrap:wrap}
.pay-imgs figure{margin:0;text-align:center}
.pay-imgs img{height:120px;border-radius:10px;border:1px solid var(--line2);cursor:zoom-in;display:block;background:#fff}
.pay-imgs figcaption{font-size:11.5px;font-weight:700;color:var(--muted);margin-top:5px}
.pay-zoom{position:fixed;inset:0;z-index:800;background:rgba(29,29,31,.6);display:flex;align-items:center;justify-content:center;cursor:zoom-out;padding:20px}
.pay-zoom img{max-width:92vw;max-height:88vh;border-radius:14px;background:#fff;box-shadow:var(--shadow-lg)}

/* ---------- bubble smart placement ---------- */
.m-bubble.b-low{bottom:auto;top:calc(100% + 12px)}
.m-bubble.b-low::after{bottom:auto;top:-6.5px;transform:rotate(135deg)}
.m-bubble.b-left{left:auto;right:80px}
.m-bubble.b-left::after{left:auto;right:-6.5px;border-left:none;border-right:1px solid var(--line);transform:rotate(45deg)}
.m-bubble.b-left.b-low::after{transform:rotate(-135deg)}
@media(max-width:820px){
  .m-bubble.b-left{right:62px}
}

/* ---------- bobo per-item bubble menu ---------- */
.m-menu{position:fixed;z-index:660;display:none;flex-direction:column;gap:9px;background:none;border:none;box-shadow:none;padding:0;-webkit-backdrop-filter:none;backdrop-filter:none}
.m-menu.open{display:flex}
.m-menu.cols{display:grid;grid-template-columns:repeat(2,42px);align-items:start}
.m-menu button{position:static;display:flex;align-items:center;justify-content:center;gap:6px;width:42px;height:42px;min-width:42px;min-height:42px;background:rgba(255,255,255,.95);border:1px solid var(--line);border-radius:50%;box-shadow:var(--shadow-sm);padding:0;font-size:15px;color:var(--ink2);font-family:inherit;cursor:pointer;overflow:hidden;transition:width .18s ease,border-radius .18s ease,box-shadow .18s ease,background .18s ease;white-space:nowrap}
.m-menu button i{font-style:normal;display:inline-flex;align-items:center;justify-content:center;line-height:1}
.m-menu .wi-s{display:none}
.m-menu .wi-f{display:none;font-size:12px;font-weight:600}
.m-wlabel{position:fixed;z-index:661;display:none;background:rgba(255,255,255,.96);border:1px solid var(--line);border-radius:999px;padding:5px 13px;font-size:12px;font-weight:600;color:var(--ink2);box-shadow:var(--shadow-sm);pointer-events:none;white-space:nowrap}

/* ---------- mascot base (restored v2) ---------- */
.mascot{position:fixed;left:22px;bottom:22px;z-index:650;width:66px;height:66px;user-select:none;-webkit-user-select:none;touch-action:none;cursor:grab;transition:transform .5s cubic-bezier(.3,1.5,.5,1),opacity .4s}
.mascot:active{cursor:grabbing}
.m-blob{position:absolute;inset:0;overflow:hidden;background:linear-gradient(160deg,#FDFDFB,#EFF4EE);box-shadow:0 6px 22px rgba(47,143,99,.22),inset 0 0 0 1.5px rgba(255,255,255,.75),0 0 24px rgba(95,179,161,.32);border-radius:48% 52% 51% 49%/52% 47% 53% 48%;animation:m-anim 4.5s ease-in-out infinite,m-wobble 7s ease-in-out infinite;transition:box-shadow .3s,opacity .3s}
.m-flow{position:absolute;inset:-32%;border-radius:50%;background:radial-gradient(closest-side at 32% 34%,rgba(95,179,161,.9),transparent 62%),radial-gradient(closest-side at 68% 64%,rgba(63,174,116,.72),transparent 62%),radial-gradient(closest-side at 55% 22%,rgba(140,214,200,.55),transparent 60%);filter:blur(11px);animation:m-flowmove 9s ease-in-out infinite alternate}
@keyframes m-flowmove{0%{transform:translate(-6%,-4%) rotate(0deg)}100%{transform:translate(7%,6%) rotate(28deg)}}
@keyframes m-anim{0%,100%{transform:translateY(0) scale(1,1) rotate(0)}30%{transform:translateY(-6px) scale(1.035,.97) rotate(-1.4deg)}65%{transform:translateY(-2px) scale(.975,1.03) rotate(1.1deg)}}
@keyframes m-wobble{0%,100%{border-radius:48% 52% 51% 49%/52% 47% 53% 48%}20%{border-radius:52% 48% 50% 50%/50% 52% 48% 51%}45%{border-radius:49% 51% 54% 46%/52% 48% 53% 47%}70%{border-radius:53% 47% 48% 52%/48% 51% 49% 52%}85%{border-radius:50% 50% 52% 48%/51% 48% 52% 49%}}
@keyframes m-pop{0%{transform:scale(1)}30%{transform:scale(1.16,.84)}62%{transform:scale(.9,1.12)}100%{transform:scale(1)}}
@keyframes m-squash{0%{transform:scale(1)}35%{transform:scale(1.18,.8)}70%{transform:scale(.92,1.1)}100%{transform:scale(1)}}
.m-face{position:absolute;inset:0;pointer-events:none}
.m-eye{position:absolute;top:35%;width:9.5px;height:11.5px;background:#1F2321;border-radius:50%;transition:height .07s ease,transform .18s ease;height:var(--eye-h,11.5px);transform:translate(var(--lookx,0px),var(--looky,0px)) scale(var(--eye-s,1)) scaleY(var(--eye-sy,1))}
.m-eye i{position:absolute;top:2px;left:2px;width:4px;height:4px;background:#fff;border-radius:50%;box-shadow:5px 4px 0 -1.5px rgba(255,255,255,.85)}
.m-eye.left{left:22.5%}.m-eye.right{right:22.5%}
.m-brow{position:absolute;top:24.5%;width:11px;height:2.4px;background:rgba(32,33,36,.6);border-radius:50% 50% 50% 50%/70% 70% 70% 70%;transition:transform .25s ease,opacity .25s ease;opacity:0}
.m-brow.left{left:21%;transform:rotate(-7deg)}.m-brow.right{right:21%;transform:rotate(7deg)}
.mascot[class*="emo-"] .m-brow{opacity:1}
.m-mouth{display:none}
.mascot.curious .m-blob{box-shadow:0 8px 26px rgba(47,143,99,.3),inset 0 0 0 1.5px rgba(255,255,255,.8),0 0 30px rgba(95,179,161,.45)}
.mascot.thinking .m-flow{filter:blur(13px) saturate(1.12)}
.mascot.playful .m-blob{animation:m-squash .55s ease,m-wobble 7s ease-in-out infinite}
.mascot.pop .m-blob{animation:m-pop .38s ease}
.mascot.resting .m-blob{transform:scaleY(.72);opacity:.85;animation:m-wobble 9s ease-in-out infinite}
.mascot.resting .m-eye{height:3px;border-radius:3px}
.mascot.resting .m-flow{animation-duration:18s}
.mascot.quiet .m-blob{animation:m-wobble 9s ease-in-out infinite}
.mascot.quiet .m-flow{animation-duration:20s}
.m-menu{display:none}
.m-bubble::after{content:'';position:absolute;left:-6.5px;bottom:15px;width:12px;height:12px;background:#fff;border-left:1px solid var(--line);border-top:1px solid var(--line);transform:rotate(-45deg)}
#m-bubble-close{position:absolute;top:5px;right:9px;color:var(--faint);font-size:15px;line-height:1}
#m-restore{position:fixed;left:22px;bottom:22px;z-index:649;width:40px;height:40px;display:flex;align-items:center;justify-content:center;background:#fff;border:1px solid var(--line);border-radius:50%;box-shadow:var(--shadow-md);cursor:pointer;font-size:18px}
@media(max-width:820px){.mascot{width:56px;height:56px;left:14px;bottom:14px}#m-restore{left:14px}}
@media (prefers-reduced-motion:reduce){.m-blob,.m-flow{animation:none!important}}

/* ---------- bobo proud sparkle moment ---------- */
.mascot.grow{transform:scale(1.18)}
.m-spark{position:absolute;font-size:13px;pointer-events:none;animation:m-sparkle 1.5s ease-in-out infinite;z-index:5}
@keyframes m-sparkle{0%,100%{opacity:.15;transform:scale(.7) translateY(0)}50%{opacity:1;transform:scale(1.2) translateY(-5px)}}

/* ---------- bobo chat (restored) ---------- */
.m-chat{position:fixed;z-index:648;left:50%;bottom:96px;transform:translateX(-50%);width:min(300px,88vw);background:rgba(255,255,255,.82);-webkit-backdrop-filter:blur(16px) saturate(1.5);backdrop-filter:blur(16px) saturate(1.5);border:1px solid rgba(255,255,255,.6);border-radius:16px;box-shadow:0 12px 44px rgba(32,33,36,.18);display:none;flex-direction:column;overflow:hidden}
.m-chat.open{display:flex}
.m-chat-h{display:flex;align-items:center;gap:8px;padding:10px 14px;border-bottom:1px solid rgba(0,0,0,.06);font-size:12.5px;font-weight:700;color:var(--ink2)}
.m-chat-h button{margin-left:auto;background:none;border:none;font-size:15px;color:var(--faint);cursor:pointer}
.m-chat-log{flex:1;min-height:120px;max-height:220px;overflow-y:auto;padding:10px 12px;display:flex;flex-direction:column;gap:8px}
.m-chat-log .msg{max-width:82%;padding:8px 12px;border-radius:13px;font-size:12.5px;line-height:1.55;animation:m-propin .25s ease}
.m-chat-log .me{align-self:flex-end;background:#5279B5;color:#fff;border-bottom-right-radius:4px}
.m-chat-log .bobo{align-self:flex-start;background:#fff;border:1px solid var(--line);border-bottom-left-radius:4px}
.m-chat-in{display:flex;gap:6px;padding:8px 10px;border-top:1px solid rgba(0,0,0,.06)}
.m-chat-in input{flex:1;border:1px solid var(--line2);border-radius:999px;padding:8px 13px;font-size:12.5px;font-family:inherit;outline:none}
.m-chat-in button{border:none;background:var(--ink);color:#fff;border-radius:999px;padding:8px 14px;font-size:12px;font-weight:700;cursor:pointer;font-family:inherit}

html[data-lang=en] .lf-zh{display:none}
html[data-lang=zh] .lf-en{display:none}


.m-menu.closing{display:flex}

/* ---------- save button bulletproof ---------- */
.panel .save-btn{display:block!important;width:100%!important;max-width:100%!important;float:none!important;clear:both!important;flex:none!important;align-self:auto!important;height:auto!important;min-height:0!important;margin:12px 0 0!important;box-sizing:border-box!important;position:static!important}

/* ---------- room & lobby chat ---------- */
.chat-drawer{position:fixed;right:20px;bottom:20px;width:min(360px,94vw);max-height:70vh;background:rgba(255,255,255,.93);-webkit-backdrop-filter:blur(18px) saturate(1.5);backdrop-filter:blur(18px) saturate(1.5);border:1px solid rgba(255,255,255,.6);border-radius:18px;box-shadow:0 14px 50px rgba(32,33,36,.2);z-index:645;display:none;flex-direction:column;overflow:hidden}
.chat-drawer.open{display:flex;animation:m-propin .25s ease}
.cd-head{display:flex;align-items:center;gap:8px;padding:12px 16px;border-bottom:1px solid var(--line);font-size:13.5px}
.cd-head button{margin-left:auto;background:none;border:none;font-size:17px;color:var(--faint);cursor:pointer}
.cd-msgs{flex:1;overflow-y:auto;padding:12px 14px;display:flex;flex-direction:column;gap:10px;min-height:180px}
.cd-msg{display:flex;gap:8px;align-items:flex-end;cursor:default}
.cd-msg.mine{flex-direction:row-reverse}
.cd-b{max-width:78%;background:#fff;border:1px solid var(--line);border-radius:14px;border-bottom-left-radius:4px;padding:8px 12px;font-size:13px;line-height:1.55}
.cd-msg.mine .cd-b{background:#5279B5;color:#fff;border:none;border-bottom-left-radius:14px;border-bottom-right-radius:4px}
.cd-n{display:block;font-size:10.5px;font-weight:700;color:var(--muted);margin-bottom:2px}
.cd-msg.mine .cd-n{color:rgba(255,255,255,.85);text-align:right}
.cd-t{display:block;font-size:10px;opacity:.6;margin-top:3px}
.cd-read{padding:6px 16px;font-size:11px;color:var(--muted);border-top:1px dashed var(--line);background:rgba(248,249,250,.6)}
.cd-in{display:flex;gap:6px;padding:10px 12px;border-top:1px solid var(--line)}
.cd-in input{flex:1;border:1px solid var(--line2);border-radius:999px;padding:9px 14px;font-size:13px;font-family:inherit;outline:none;min-width:0}
.cd-in input:focus{border-color:var(--blue)}
.cd-in>button:not(.btn){border:1px solid var(--line2);background:#fff;border-radius:50%;width:38px;height:38px;cursor:pointer;font-size:15px;flex-shrink:0;display:flex;align-items:center;justify-content:center;padding:0}
.cd-card{margin:2px 6px;border:1px solid #D8EAE0;background:linear-gradient(135deg,#F4FAF7,#EAF4EE);border-radius:14px;padding:10px 14px;cursor:pointer;transition:.15s}
.cd-card:hover{transform:translateY(-1px);box-shadow:var(--shadow-sm)}
.cd-card.pinned{border-color:#F5D9A8;background:linear-gradient(135deg,#FDF6EC,#FBEFD9)}
.cdc-t{font-size:10.5px;font-weight:800;letter-spacing:1px;color:#2f6b52;text-transform:uppercase}
.cd-card.pinned .cdc-t{color:#B25E09}
.cdc-b{font-size:13.5px;font-weight:600;margin:4px 0;line-height:1.55}
.cdc-h{font-size:11px;color:var(--muted)}
.cd-card.timer{border-color:#D2E0F0;background:linear-gradient(135deg,#F2F7FD,#E7EFF8)}
.cd-card.timer .cdc-t{color:#41639A}
.bobo-mini{width:28px;height:28px;border-radius:50%;background:linear-gradient(160deg,#FDFDFB,#EFF4EE);box-shadow:0 2px 8px rgba(47,143,99,.3),0 0 10px rgba(95,179,161,.35);position:relative;flex-shrink:0;animation:m-wobble 4s ease-in-out infinite}
.bobo-mini i{position:absolute;top:38%;left:24%;width:4px;height:5px;background:#1F2321;border-radius:50%}
.bobo-mini u{position:absolute;top:38%;right:24%;width:4px;height:5px;background:#1F2321;border-radius:50%;text-decoration:none}
@media(max-width:820px){.chat-drawer{right:8px;left:8px;bottom:8px;width:auto;max-height:66vh}}

/* ---------- rsvp, tour comments, board ---------- */
.rsvp-row{display:flex;gap:8px;margin-top:12px}
.rsvp-btn{flex:1;border:1.5px solid var(--line2);background:#fff;border-radius:999px;padding:8px 10px;font-size:13px;font-weight:600;color:var(--ink2);cursor:pointer;font-family:inherit;transition:.15s}
.rsvp-btn b{color:var(--muted)}
.rsvp-btn.on{border-color:#64A99A;background:#EAF4F1;color:#2f6b52}
.rsvp-btn.on b{color:#2f6b52}
.going-line{font-size:12px;color:var(--muted);margin-top:8px}
.tc-box{margin-top:12px;border-top:1px dashed var(--line);padding-top:10px}
.tc-h{font-size:11.5px;font-weight:700;letter-spacing:1px;color:var(--faint);text-transform:uppercase;margin-bottom:8px}
.tc-row{display:flex;align-items:baseline;gap:8px;padding:6px 0;border-bottom:1px dashed var(--line2);font-size:13px;flex-wrap:wrap}
.tc-name{font-weight:700;color:#41639A;white-space:nowrap}
.tc-text{flex:1;min-width:120px;color:var(--ink2);word-break:break-word}
.tc-in{display:flex;gap:6px;margin-top:8px;align-items:center;flex-wrap:wrap}
.tc-in input{flex:1;min-width:120px;border:1px solid var(--line2);border-radius:999px;padding:7px 13px;font-size:12.5px;font-family:inherit;outline:none}
.tc-tag{display:flex;align-items:center;gap:4px;font-size:12px;color:var(--muted);cursor:pointer;white-space:nowrap}
.post-card .post-head{display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;align-items:baseline}
.post-title{font-size:16px;font-weight:700;color:#41639A}
.post-meta{font-size:12px;color:var(--muted);white-space:nowrap}
.post-desc{font-size:13.5px;color:var(--ink2);margin-top:6px}
.post-tools{display:flex;gap:8px;margin-top:10px;flex-wrap:wrap}
.post-cms{margin-top:10px;border-top:1px dashed var(--line);padding-top:8px}
.cd-dmhint{font-size:11px;color:#B25E09;background:#FDF3E3;border-radius:999px;padding:5px 11px;white-space:nowrap;align-self:center}

/* ---------- hero CTAs ---------- */
.hero-cta{display:flex;gap:12px;justify-content:center;flex-wrap:wrap;margin-top:26px}
.btn-hero{padding:15px 34px;font-size:16.5px;border-radius:999px}
.btn-hero.ghost{background:#fff;color:var(--ink);border:1.5px solid var(--line2)}
.btn-hero.ghost:hover{background:var(--ice);box-shadow:var(--shadow-md);color:var(--ink)}
@media(max-width:820px){.hero-cta{flex-direction:column;align-items:stretch;padding:0 12px}}

/* ---------- new room-link card ---------- */
.room-link{display:block;background:#fff;border:1px solid #E5E9E8;border-radius:10px;padding:12px 14px;margin-top:8px;color:inherit;transition:background .15s,border-color .15s,box-shadow .15s}
.room-link:hover{background:#F5F9F8;border-color:#C9D6D0;box-shadow:0 2px 8px rgba(20,40,30,.05);text-decoration:none}
.room-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px}
.room-tag{font-weight:800;font-size:14px}
.room-info{font-size:12.5px;color:var(--muted);margin-top:3px}
.room-btn{margin-top:10px}
.room-btn .btn{width:100%;text-align:center}

/* ---------- chat CTA glow ---------- */
.chat-cta{margin-top:8px;display:inline-flex;align-items:center;gap:6px;border:1.5px solid #64A99A;background:#EAF4F1;color:#2f6b52;border-radius:999px;padding:8px 18px;font-size:13.5px;font-weight:800;cursor:pointer;font-family:inherit;animation:ctaglow 1.5s ease-in-out 4}
@keyframes ctaglow{0%,100%{box-shadow:0 0 0 0 rgba(100,169,154,.5)}50%{box-shadow:0 0 0 8px rgba(100,169,154,0)}}

/* ---------- card stats (fig2 style) ---------- */
.seatbar.big{height:6px;margin:10px 0 4px}
.room-stats{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:6px}
.rs{display:flex;flex-direction:column}
.rs-l{font-size:11px;letter-spacing:1px;color:var(--faint);font-weight:600;text-transform:uppercase}
.rs-v{font-size:24px;font-weight:800;letter-spacing:-.5px;color:var(--ink);margin-top:2px}
.rs-s{font-size:11px;color:var(--muted)}
.room-btns{display:flex;gap:8px;margin-top:12px}
.room-btns .btn{flex:1;text-align:center}

/* ---------- refinements ---------- */
.btn-amber{background:var(--ink);color:#fff}
.btn-amber:hover{background:#000;box-shadow:var(--shadow-md)}
.cta-brand{background:var(--ink);color:#fff;border-radius:999px;padding:12px 30px;font-weight:700}
.cta-brand:hover{background:#000;box-shadow:var(--shadow-md)}
.room-tap{margin-top:12px;text-align:center;font-size:12px;font-weight:600;color:var(--faint);letter-spacing:.5px}
a.room-link{text-decoration:none}
a.room-link:hover .room-tap{color:#41639A}
.rc-en{font-size:31px}

/* ---------- jade CTA + pill emphasis ---------- */
.cta-brand{background:#2F8F63;color:#fff;border-radius:999px;padding:12px 30px;font-weight:700}
.cta-brand:hover{background:#267A54;box-shadow:0 6px 20px rgba(47,143,99,.35)}
.btn-amber{background:#2F8F63;color:#fff}
.btn-amber:hover{background:#267A54;box-shadow:var(--shadow-md)}
.role-switch .pill{padding:12px 24px;font-size:14.5px;font-weight:700;border-width:1.5px}
.role-switch .pill.on{background:#2F8F63;border-color:transparent;color:#fff;box-shadow:0 4px 14px rgba(47,143,99,.35)}

/* ---------- principles audit pass ---------- */
/* consistency: ONE action color (jade) across all primary buttons & selected states */
.btn{background:#2F8F63}
.btn:hover{background:#267A54;box-shadow:0 6px 20px rgba(47,143,99,.35)}
.pill.on{background:#2F8F63;box-shadow:0 3px 12px rgba(47,143,99,.3)}
.test-users button:hover{border-color:#2F8F63;color:#2F8F63;background:#EAF4F1}
.mb-info-btn{color:#2F6B52}
/* accessibility: contrast bump for secondary text (WCAG AA-ish) */
:root{--faint:#75757B}
/* touch targets: min 36px on small buttons */
.btn-sm{min-height:36px}
.cd-in>button:not(.btn){width:40px;height:40px}
/* usability: clearer click affordance on room cards */
.room-link{transition:border-color .15s,box-shadow .15s,transform .15s}
a.room-link:hover{transform:translateY(-2px);border-color:#BFE0D2;box-shadow:0 8px 24px rgba(47,143,99,.14)}
/* focus visibility for keyboard users */
a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,[tabindex]:focus-visible{outline:2.5px solid #2F8F63;outline-offset:2px;border-radius:8px}
.day-card:focus-visible{outline-offset:4px}

/* ---------- card v5 minimal ---------- */
.room-line{display:flex;justify-content:space-between;align-items:baseline}
.room-n{font-weight:800;font-size:15px;letter-spacing:-.2px}
.room-foot{display:flex;gap:8px;align-items:center;margin-top:10px}
.judge-chip{background:var(--ice);border:1px solid var(--line);border-radius:999px;padding:4px 12px;font-size:11.5px;font-weight:700;color:#41639A;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:60%}

/* ---------- hero button: flowing ink (SPAR style) ---------- */
.btn-hero,.btn-hero:hover{
  background-image:linear-gradient(100deg,
    #175c40 0%,#175c40 10%,
    #1f704d 16%,#2a8a5f 22%,#3fae74 30%,#3fae74 40%,
    #67c08e 46%,#8fd0a9 52%,#bfe6cf 58%,
    #3fae74 66%,#1f6e63 74%,#1f6e63 82%,#1c6349 88%,#175c40 100%);
  background-size:300% 100%;
  animation:hero-flow 8s ease-in-out infinite alternate;
}
@keyframes hero-flow{0%{background-position:0% 0}100%{background-position:100% 0}}
.btn-hero:hover{box-shadow:0 8px 26px rgba(47,143,99,.4)}

.btn-ghost{border:1.5px solid #A9C3EA;color:#1A73E8;font-weight:600}
.btn-ghost:hover{background:#E8F0FE;border-color:#A9C3EA;color:#1765CC}

/* ---------- ghost buttons: never transparent (was green-on-blue) ---------- */
.btn-ghost{background:#fff}
/* timer controls restored */
.tk-controls .btn{background:#2F8F63;color:#fff;border:none}
.tk-controls .btn:hover{background:#267A54}
.tk-controls .btn-ghost{background:#fff;color:var(--ink2);border:1.5px solid var(--line2)}
.tk-controls .btn-ghost:hover{background:var(--ice);border-color:var(--line2);color:var(--ink)}

/* ---------- CTA: material ripple ring (replaces sheen) ---------- */
.signup-cta .cta-brand::after{content:none}
.cta-brand{position:relative}
.cta-brand::before{content:'';position:absolute;inset:-2px;border-radius:inherit;border:2px solid rgba(47,143,99,.55);animation:ripple-ring 3s cubic-bezier(.25,.6,.3,1) infinite;pointer-events:none}
@keyframes ripple-ring{0%{transform:scale(.96);opacity:0}18%{opacity:.5}100%{transform:scale(1.32);opacity:0}}

/* ---------- hero button: silky slow ink drift ---------- */
.btn-hero,.btn-hero:hover{
  background-image:linear-gradient(115deg,
    #1D6B4A 0%,#2C7D58 9%,#3D9066 18%,#4FA374 27%,#5FB384 36%,#6CC193 45%,
    #78CFA2 50%,
    #6CC193 55%,#5FB384 64%,#4FA374 73%,#3D9066 82%,#2C7D58 91%,#1D6B4A 100%);
  background-size:400% 100%;
  animation:hero-flow 16s ease-in-out infinite alternate;
}
.btn-hero:hover{box-shadow:0 8px 26px rgba(47,143,99,.4)}

.mtag{display:inline-block;background:var(--blue-bg);color:#41639A;font-size:10.5px;font-weight:800;letter-spacing:.5px;border-radius:6px;padding:2px 8px;margin-right:8px;vertical-align:1px}
.mb-star{background:none;border:none;font-size:15px;color:#B6BDC4;cursor:pointer;float:right;padding:0 2px;line-height:1}
.mb-star.on{color:#F2B01E}
.mstat{margin-top:8px;font-size:12.5px;font-weight:600;color:#2f6b52;background:#F4FAF7;border-radius:8px;padding:7px 11px}

/* ---------- danger buttons restored (was green-on-red) ---------- */
.btn-danger{background:#FDECEA;border:1.5px solid #F1C4C0;color:#D70015}
.btn-danger:hover{background:#FBDDDA;border-color:#F1C4C0;box-shadow:none;color:#B00012}

/* ==== Motion Bank v2: classified tags (2026-10-22) ==== */
.mb-motion .mtag{background:#E7F4EC;color:#2F6B52}
.mtag-form{background:#E8F0FE;color:#1A56C4}
.mtag-sub{background:#F1F3F4;color:#5F6368}
.mtag-rev{background:#FEF3E2;color:#B06000;cursor:help}
.mstat{margin-top:10px;background:#E7F4EC;border-left:3px solid #2F8F63;border-radius:8px;padding:8px 12px;font-size:12.5px;color:#2F6B52;font-weight:600;line-height:1.5}
.mb-note{color:#8A9199;font-weight:400}
@media (max-width:640px){
  .mb-filters{gap:8px}
  .mb-filters select{flex:1;min-width:0;font-size:13px;padding:9px 10px}
}
/* ==== Motion Bank v2: multi-select tag clouds (2026-10-22) ==== */
.mb-cloud{display:flex;flex-wrap:wrap;gap:6px;max-height:118px;overflow-y:auto;margin:10px 0;padding:2px}
.cloud-pill{border:1.5px solid #DDE3E0;background:#fff;color:#3C4A44;font-size:12px;font-weight:600;padding:5px 11px;border-radius:999px;cursor:pointer;transition:all .15s;line-height:1.4}
.cloud-pill:hover{border-color:#2F8F63;color:#2F8F63}
.cloud-pill.on{background:#2F8F63;border-color:#2F8F63;color:#fff}
.mb-inline{display:flex;flex-wrap:wrap;gap:6px}
@media (max-width:640px){.mb-cloud{max-height:96px}}

/* ==== Video board (2026-10-22) ==== */
.vid-card{display:flex;gap:14px;flex-wrap:wrap;align-items:flex-start}
.vid-thumb{width:240px;aspect-ratio:16/9;object-fit:cover;border-radius:10px;background:#101418;flex-shrink:0}
.vid-thumb-ph{display:flex;align-items:center;justify-content:center;color:#fff;font-weight:700;font-size:15px;letter-spacing:.5px}
.vid-body{flex:1;min-width:220px}
.vid-playbtn{width:240px;aspect-ratio:16/9;border:none;border-radius:10px;background:linear-gradient(135deg,#1c1f24,#33383f);color:#fff;font-size:34px;cursor:pointer;flex-shrink:0;transition:transform .15s}
.vid-playbtn:hover{transform:scale(1.02)}
.vid-playbtn::before{content:'▶';display:block;text-shadow:0 2px 12px rgba(0,0,0,.6)}
.vid-playbtn{font-size:0}
.vid-playbtn::after{content:attr(data-vplay);display:none}
.vid-iframe{width:100%;aspect-ratio:16/9;border:none;border-radius:10px;margin-top:8px}
@media (max-width:640px){.vid-thumb,.vid-playbtn{width:100%}}

/* ==== Resume system (2026-10-22) ==== */
.u-nlink{cursor:pointer;border-bottom:1.5px dotted transparent;transition:border-color .15s}
.u-nlink:hover{border-bottom-color:currentColor}
.rs-thumb{display:block;max-width:200px;max-height:240px;border-radius:8px;border:1px solid #E3E8E5;object-fit:contain;background:#F6F8F7}
.rs-thumb.rs-s{max-width:150px;max-height:180px}
.rs-file{display:inline-flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;width:200px;height:120px;border-radius:8px;border:1.5px dashed #C8D2CC;background:#F6F8F7;color:#5F6368;font-weight:700;font-size:14px;letter-spacing:.5px}
.rs-file .rs-ico{font-size:34px}
.rs-file.rs-s{width:150px;height:90px}
.rs-doc{display:flex;flex-direction:column;align-items:center;gap:8px;padding:6px 0}
.rs-doc-name{font-size:12px;color:#5F6368;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#rs-pop{position:fixed;z-index:9999;width:232px;background:#fff;border:1px solid #E3E8E5;border-radius:14px;box-shadow:0 12px 40px rgba(20,40,30,.18);padding:12px;display:flex;flex-direction:column;gap:10px;align-items:center}
.rs-pop-head{font-size:13px;font-weight:700;color:#2F4A3E}
@media (max-width:640px){#rs-pop{width:200px}.rs-thumb{max-width:176px}}

/* ==== Tinder deck physics (2026-10-22) ==== */
.deck-card{position:relative;touch-action:pan-y;user-select:none;cursor:grab}
.deck-card.dragging{cursor:grabbing;transition:none;box-shadow:var(--shadow-lg)}
.deck-stack{position:relative;max-width:420px;margin:0 auto}
.deck-stack>.deck-card{margin:0}
.deck-peek{position:absolute;inset:0;transform:scale(.93) translateY(16px);filter:brightness(.94) saturate(.9);z-index:0;pointer-events:none}
.deck-peek>*{opacity:.55}
.deck-ghost{background:var(--fill2);box-shadow:none}
#deck-card{position:relative;z-index:1}
.stamp{position:absolute;top:26px;font-size:28px;font-weight:900;letter-spacing:2px;padding:5px 16px;border:4px solid;border-radius:10px;opacity:0;pointer-events:none;z-index:6;transition:opacity .08s linear}
.stamp-like{left:16px;color:#2F8F63;border-color:#2F8F63;transform:rotate(-14deg)}
.stamp-nope{right:16px;color:#E03131;border-color:#E03131;transform:rotate(14deg)}
.deck-card.swipe-right{transform:translateX(60vw) translateY(-30px) rotate(18deg);opacity:0;transition:transform .32s cubic-bezier(.3,.7,.4,1),opacity .32s}
.deck-card.swipe-left{transform:translateX(-60vw) translateY(-30px) rotate(-18deg);opacity:0;transition:transform .32s cubic-bezier(.3,.7,.4,1),opacity .32s}
.deck-btn{transition:transform .12s,box-shadow .12s}
.deck-btn:active{transform:scale(1.18)}
.deck-btn.like{box-shadow:0 4px 14px rgba(47,143,99,.25)}
.deck-btn.undo{color:#B06000}
@keyframes deck-pop{0%{transform:scale(.92);opacity:0}60%{transform:scale(1.02)}100%{transform:scale(1);opacity:1}}
#deck-card{animation:deck-pop .22s ease}

/* ==== Timer ring: flowing brand green (2026-10-22) ==== */
.tk-ring-fg{stroke:url(#tkg);stroke-width:12;filter:drop-shadow(0 0 7px rgba(47,143,99,.35))}
.tk-ring-bg{stroke:#EDF1EE;stroke-width:12}
/* ==== Timer idle state: quiet neutral ring (2026-11-01) ==== */
.tk-ringwrap.tk-idle .tk-ring-fg{stroke:#E4EAE6;filter:none}
.tk-ringwrap.tk-idle .tk-time{color:#A9B4AE}
.tk-ringwrap.tk-idle .tk-time.over{color:var(--red)}

/* ==== Bobo ambient peek-out (2026-10-22) ==== */
.amb-bubble{position:fixed;z-index:9998;background:#fff;border:1.5px solid #2F8F63;color:#2F4A3E;font-size:13px;font-weight:600;padding:7px 12px;border-radius:14px 14px 14px 4px;box-shadow:0 8px 24px rgba(20,40,30,.16);opacity:0;transform:translateY(6px);transition:all .25s;pointer-events:none;max-width:200px}
.amb-bubble.show{opacity:1;transform:none}
.amb-flee{animation:ambFlee .7s ease}
@keyframes ambFlee{0%{transform:scale(1)}30%{transform:scale(.88) rotate(-6deg)}60%{transform:scale(.96) rotate(4deg)}100%{transform:scale(1)}}
.amb-peekaboo{animation:ambWobble 2.4s ease-in-out infinite}
@keyframes ambWobble{0%,100%{transform:rotate(-3deg)}50%{transform:rotate(3deg)}}
.amb-detective .amb-mag{position:absolute;font-size:22px;right:-10px;top:2px;animation:ambInvest 2.2s ease-in-out infinite}
@keyframes ambInvest{0%,100%{transform:translate(0,0) rotate(0)}25%{transform:translate(-6px,4px) rotate(-18deg)}50%{transform:translate(2px,-3px) scale(1.25) rotate(6deg)}75%{transform:translate(-3px,2px) rotate(-10deg)}}
.amb-butterfly .amb-bfly{position:absolute;font-size:20px;animation:ambFly 3.2s ease-in-out infinite}
@keyframes ambFly{0%{transform:translate(-46px,-30px) rotate(0)}25%{transform:translate(6px,-58px) rotate(18deg)}50%{transform:translate(48px,-24px) rotate(-12deg)}75%{transform:translate(8px,2px) rotate(10deg)}100%{transform:translate(-46px,-30px) rotate(0)}}
.amb-butterfly .amb-bfly.flee{animation:ambFleeFly 1s ease forwards}
@keyframes ambFleeFly{to{transform:translate(120px,-140px) rotate(40deg);opacity:0}}
.amb-butterfly .amb-net{position:absolute;font-size:18px;right:-12px;top:14px;animation:ambSweep 1.6s ease-in-out infinite}
@keyframes ambSweep{0%,100%{transform:rotate(-14deg)}50%{transform:rotate(22deg)}}
.amb-fishing .amb-rod{position:absolute;font-size:24px;right:-14px;top:-4px;transform:rotate(-24deg)}
.amb-fishing .amb-bobber{position:absolute;right:-34px;top:34px;width:9px;height:9px;border-radius:50%;background:#E03131;box-shadow:0 0 0 2px #fff}
.amb-fishing .amb-bobber::after{content:'';position:absolute;left:50%;top:-30px;width:1.5px;height:30px;background:rgba(60,74,68,.4);transform:translateX(-50%)}
.amb-fishing .amb-bobber{animation:ambBob 1.8s ease-in-out infinite}
@keyframes ambBob{0%,100%{transform:translateY(0)}12%{transform:translateY(7px)}24%{transform:translateY(0)}56%{transform:translateY(0)}68%{transform:translateY(9px)}80%{transform:translateY(2px)}}
.amb-catch{position:absolute;right:-38px;top:26px;font-size:24px;animation:ambCatchPop .8s cubic-bezier(.2,1.4,.4,1)}
.amb-catch.amb-timer{animation:ambCatchPop .8s cubic-bezier(.2,1.4,.4,1), ambShake .5s .8s ease-in-out 2}
.amb-catch.amb-name{font-size:13px;font-weight:700;background:#fff;border:1.5px solid #B06000;color:#B06000;padding:3px 9px;border-radius:999px;white-space:nowrap}
@keyframes ambCatchPop{0%{transform:translateY(14px) scale(.4);opacity:0}100%{transform:none;opacity:1}}
@keyframes ambShake{0%,100%{transform:translateX(0) rotate(0)}25%{transform:translateX(-4px) rotate(-8deg)}75%{transform:translateX(4px) rotate(8deg)}}
.amb-frustrated{animation:ambShake .5s ease-in-out 3}
.amb-confused{animation:ambConfused 2s ease-in-out infinite}
@keyframes ambConfused{0%,100%{transform:rotate(0)}30%{transform:rotate(-7deg)}60%{transform:rotate(7deg)}}
.amb-garden .amb-can{position:absolute;font-size:20px;right:-12px;top:-2px;animation:ambWater 1.6s ease-in-out infinite}
@keyframes ambWater{0%,100%{transform:rotate(0)}40%{transform:rotate(24deg)}70%{transform:rotate(10deg)}}
.amb-garden .amb-can::after{content:'💧💧';position:absolute;left:14px;top:16px;font-size:11px;letter-spacing:3px;animation:ambDrops 1.6s linear infinite;opacity:0}
@keyframes ambDrops{0%{transform:translateY(-4px);opacity:0}30%{opacity:1}100%{transform:translateY(16px);opacity:0}}
.amb-plants span{position:absolute;bottom:-6px;font-size:16px;transform-origin:bottom;animation:ambGrow 2.6s ease-in-out infinite alternate}
.amb-plants .p1{right:26px}.amb-plants .p2{right:6px;animation-delay:.5s}.amb-plants .p3{right:-16px;animation-delay:1s}
@keyframes ambGrow{0%{transform:scale(.7)}100%{transform:scale(1.15)}}
.amb-harvest{right:-40px;top:-8px;font-size:24px}

/* ==== Bobo bubbles: compact (2026-10-22) ==== */
.amb-bubble{font-size:11.5px;padding:4px 10px;border-width:1px;max-width:150px;background:rgba(255,255,255,.9);backdrop-filter:blur(4px);box-shadow:0 3px 10px rgba(20,40,30,.12);border-radius:12px 12px 12px 3px}
.bubble-hint{font-size:11.5px;padding:5px 10px;background:rgba(255,255,255,.9);backdrop-filter:blur(4px);box-shadow:0 3px 10px rgba(20,40,30,.12);max-width:200px;line-height:1.4}

/* ==== Bobo ambient phase 1 scenes (2026-10-22) ==== */
/* 雨 */
.amb-rain .amb-cloud{position:absolute;font-size:26px;top:-34px;left:8px;filter:grayscale(.2)}
.amb-rain .amb-cloud::after{content:'💧 💧 💧';position:absolute;top:20px;left:2px;font-size:11px;letter-spacing:2px;animation:ambRainFall 1s linear infinite;opacity:.9}
.amb-rain .amb-cloud.harder::after{animation-duration:.45s;content:'💧💧💧💧💧'}
.amb-rain .amb-cloud.clearing{animation:ambCloudClear 1.6s ease forwards}
@keyframes ambRainFall{0%{transform:translateY(-6px);opacity:0}25%{opacity:1}100%{transform:translateY(26px);opacity:0}}
@keyframes ambCloudClear{to{transform:translateY(-30px);opacity:0}}
.amb-rain .amb-leaf{position:absolute;font-size:20px;top:-8px;right:-4px;transform:rotate(-18deg);animation:ambLeafSag 2s ease-in-out infinite}
@keyframes ambLeafSag{0%,100%{transform:rotate(-18deg) translateY(0)}50%{transform:rotate(-26deg) translateY(3px)}}
.amb-rainbow{position:absolute;font-size:26px;left:-46px;top:-30px;animation:ambCatchPop 1s cubic-bezier(.2,1.4,.4,1)}
/* 演唱会 */
.amb-dance{animation:ambSway .62s ease-in-out infinite}
@keyframes ambSway{0%,100%{transform:rotate(-7deg)}50%{transform:rotate(7deg)}}
.amb-headphone{position:absolute;font-size:20px;top:-10px;left:12px}
.amb-frozen{animation:none!important;transform:rotate(0)!important}
.amb-frozen .amb-headphone{animation:none}
/* 分身术 */
.amb-clone{position:absolute;top:6px;width:30px;height:30px;background:#FBFDFB;border:1.5px solid #DDE9E2;border-radius:46% 54% 52% 48%/52% 46% 54% 48%;animation:ambCloneAct 5.2s ease forwards}
.amb-clone i{position:absolute;top:11px;width:4px;height:6px;background:#2F4A3E;border-radius:50%}
.amb-clone.c1 i:first-child{left:8px}.amb-clone.c1 i:last-child{left:18px}
.amb-clone.c2 i:first-child{right:18px}.amb-clone.c2 i:last-child{right:8px}
.amb-clone.c1{left:-40px}
.amb-clone.c2{right:-40px}
@keyframes ambCloneAct{0%{transform:scale(0)}12%{transform:scale(1)}30%{transform:translateX(-14px)}45%{transform:translateX(-14px)}55%{transform:translateX(6px) scale(.92)}65%{transform:translateX(2px) scale(1.08,.9)}75%{transform:translateX(-4px) scale(.9)}85%{transform:scale(0)}100%{transform:scale(0)}}
.amb-clone.c2{animation-name:ambCloneAct2}
@keyframes ambCloneAct2{0%{transform:scale(0)}12%{transform:scale(1)}30%{transform:translateX(14px)}45%{transform:translateX(14px)}55%{transform:translateX(-6px) scale(.92)}65%{transform:translateX(-2px) scale(1.08,.9)}75%{transform:translateX(4px) scale(.9)}85%{transform:scale(0)}100%{transform:scale(0)}}
/* 辩题太长 */
.amb-dizzy{animation:ambDragged 2.4s ease-in-out infinite}
@keyframes ambDragged{0%,100%{transform:rotate(-5deg)}50%{transform:rotate(6deg) translateX(4px)}}
.amb-strip{position:absolute;right:-14px;top:10px;background:#FFFDF2;border:1px solid #E8E2C8;color:#8A8256;font-size:9px;letter-spacing:1px;white-space:nowrap;padding:4px 8px;border-radius:6px;max-width:0;overflow:hidden;animation:ambStripGrow 3.4s ease forwards}
@keyframes ambStripGrow{0%{max-width:0;opacity:0}15%{opacity:1}80%{max-width:230px}100%{max-width:230px}}
.amb-strip.rollback{animation:ambStripBack 1.2s ease forwards}
@keyframes ambStripBack{to{max-width:0;opacity:0}}
.amb-sushi{font-size:26px;right:-40px;top:22px}
/* 裁判 */
.amb-nod{animation:ambNod 1.6s ease-in-out infinite}
@keyframes ambNod{0%,100%{transform:rotate(0)}30%{transform:rotate(5deg) translateY(2px)}60%{transform:rotate(-3deg)}}
.amb-ia{position:absolute;right:-34px;top:-6px;font-size:22px}
.amb-ia b{position:absolute;left:7px;top:2px;font-size:9px;color:#fff;letter-spacing:.5px}
.amb-paper{position:absolute;right:-30px;top:26px;background:#fff;border:1px solid #E3E8E5;border-radius:6px;font-size:20px;font-weight:900;color:#B06000;width:34px;height:40px;display:flex;align-items:center;justify-content:center;transform:scale(.4) rotate(12deg);opacity:0}
.amb-paper.show{animation:ambCatchPop .7s cubic-bezier(.2,1.4,.4,1) forwards}
/* POI */
.amb-poi{position:absolute;right:-40px;top:-12px;font-size:24px;animation:ambPoiWave .9s ease-in-out infinite}
.amb-poi b{position:absolute;left:8px;top:4px;font-size:8px;color:#fff;letter-spacing:.3px}
@keyframes ambPoiWave{0%,100%{transform:rotate(-10deg)}50%{transform:rotate(14deg) translateY(-4px)}}
.amb-poi.down{animation:ambPoiDown 1s ease forwards}
@keyframes ambPoiDown{to{transform:rotate(70deg) translateY(20px);opacity:0}}
.amb-poihappy .amb-poi{animation:ambPoiWave .45s ease-in-out infinite}
/* 记忆：咖啡后遗症抖动 & 更大鱼竿 */
.amb-jitters{animation:ambJitter .5s linear 4}
@keyframes ambJitter{0%,100%{transform:translate(0,0)}25%{transform:translate(-2px,1px)}75%{transform:translate(2px,-1px)}}
.amb-bigrod .amb-rod{font-size:32px}
/* ==== Motion cards: unified with docs/videos (2026-10-22) ==== */
.mb-item{background:var(--panel,#fff);border:1px solid #E3E8E5;border-left-width:1px;border-radius:14px;box-shadow:none}
.mb-item:hover{transform:none;box-shadow:0 3px 10px rgba(31,64,48,.07)}
.mb-group{border-top:none;margin:22px 0 10px}
.mb-round{background:#F1F3F4;color:#5F6368}
/* ==== Motion counter (2026-10-22) ==== */
.mb-count{font-size:12px;font-weight:600;color:#8A9199;margin:2px 0 10px;letter-spacing:.3px}
/* ==== Fav star burst (2026-10-22) ==== */
.fav-burst{position:absolute;inset:-6px;pointer-events:none}
.fav-burst span{position:absolute;left:50%;top:50%;font-size:13px;color:#F4B400;transform:rotate(var(--a)) translateY(0);animation:favFly .7s ease-out forwards}
@keyframes favFly{0%{transform:rotate(var(--a)) translateY(0) scale(.4);opacity:1}100%{transform:rotate(var(--a)) translateY(-26px) scale(1.2);opacity:0}}
.mb-star{position:relative}
/* ==== Tour buttons: skip right-aligned (2026-10-22) ==== */
.mi-btns{display:flex;justify-content:space-between;gap:8px;width:100%}
.mi-btns .mi-next{flex:0 0 auto}
.mi-btns .mi-skip{margin-left:auto}
/* ==== Tour next arrow bubble (2026-10-22) ==== */
.mi-next{width:36px;height:36px;min-width:36px;border-radius:50%;border:none;background:#2F8F63;color:#fff;font-size:16px;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;box-shadow:0 3px 10px rgba(47,143,99,.35);transition:transform .15s,box-shadow .15s;padding:0}
.mi-next:hover{transform:scale(1.1);box-shadow:0 5px 16px rgba(47,143,99,.45)}
.mi-next.mi-start{width:auto;border-radius:999px;padding:0 16px;font-size:13.5px;font-weight:700;height:36px}
.mi-skip{background:none;border:none;color:#8A9199;font-size:12.5px;cursor:pointer;padding:6px 2px}
.mi-skip:hover{color:#5F6368;text-decoration:underline}
/* ==== Restore button label (2026-10-22) ==== */
#m-restore{width:auto;height:40px;border-radius:999px;padding:0 14px 0 10px;gap:6px;font-size:16px}
.m-restore-label{font-size:12px;font-weight:700;color:#2F4A3E}
.mb-item{cursor:pointer}
/* ==== Tour language buttons (2026-10-22) ==== */
.mi-lang{height:40px;min-width:88px;padding:0 22px;border-radius:999px;border:1.5px solid #2F8F63;background:#2F8F63;color:#fff;font-size:15px;font-weight:700;cursor:pointer;box-shadow:0 3px 10px rgba(47,143,99,.30);transition:transform .15s,box-shadow .15s;white-space:nowrap;letter-spacing:.5px}
.mi-lang:hover{transform:scale(1.05);box-shadow:0 5px 16px rgba(47,143,99,.42)}
.mi-pick{justify-content:flex-start;gap:10px;margin-top:12px}

/* ==== State-bound activities (2026-10-22) ==== */
.st-glass{position:absolute;top:-6px;right:-12px;display:inline-block;transition:transform .95s cubic-bezier(.35,.9,.35,1);will-change:transform}
.st-glass i{display:inline-block;font-style:normal;font-size:26px;animation:stGlassBob 2.2s ease-in-out infinite}
@keyframes stGlassBob{0%,100%{transform:rotate(-5deg)}50%{transform:rotate(5deg) translateY(2px)}}
.st-glass.done{animation:stGlassDone 1s ease}
@keyframes stGlassDone{0%{transform:rotate(180deg)}30%{transform:rotate(200deg) translateX(-4px)}60%{transform:rotate(160deg) translateX(4px)}100%{transform:rotate(180deg)}}
.amb-glassdone{animation:ambShake .5s ease-in-out 3}
.st-count{position:fixed;z-index:9001;background:#1F2A24;color:#fff;font-size:12px;font-weight:700;padding:6px 12px;border-radius:999px;box-shadow:0 4px 14px rgba(0,0,0,.25);cursor:pointer;display:flex;align-items:center;gap:4px;font-variant-numeric:tabular-nums}
.st-count:hover{background:#2F8F63}
.st-popcorn{position:absolute;font-size:22px;top:-8px;left:10px;animation:stSnack 1.4s ease-in-out infinite}
@keyframes stSnack{0%,100%{transform:translateY(0) rotate(-4deg)}50%{transform:translateY(-3px) rotate(5deg)}}
.st-doc{position:absolute;font-size:24px;right:-12px;top:-4px}
.st-doc.flip{animation:stDocFlip .8s ease}
@keyframes stDocFlip{0%{transform:rotateY(0)}50%{transform:rotateY(90deg) scale(.92)}100%{transform:rotateY(0)}}
.amb-yawn{animation:ambYawn 2.2s ease}
@keyframes ambYawn{0%,100%{transform:scale(1)}40%{transform:scale(1.08) translateY(3px)}60%{transform:scale(1.06) translateY(3px)}}
.amb-rubeyes{animation:ambRub .8s ease 2}
@keyframes ambRub{0%,100%{transform:translateX(0)}25%{transform:translateX(-3px) rotate(-4deg)}75%{transform:translateX(3px) rotate(4deg)}}
/* ==== Fav effect: full card (2026-10-22) ==== */
.mb-item{position:relative;overflow:visible}
.fav-flash{animation:favFlash .9s ease}
@keyframes favFlash{0%{box-shadow:0 0 0 0 rgba(244,180,0,0)}25%{box-shadow:0 0 0 5px rgba(244,180,0,.35);border-color:#F4B400}100%{box-shadow:0 0 0 10px rgba(244,180,0,0)}}
.fav-burst-wide{position:absolute;inset:-8px;pointer-events:none;z-index:5}
.fav-burst-wide span{position:absolute;font-size:15px;color:#F4B400;text-shadow:0 0 6px rgba(244,180,0,.65);animation:favFlyWide .85s cubic-bezier(.15,.8,.4,1) forwards;opacity:0}
.fav-burst-wide span:nth-child(3n){color:#2F8F63;text-shadow:0 0 6px rgba(47,143,99,.5);font-size:13px}
@keyframes favFlyWide{0%{transform:translate(0,0) scale(.5) rotate(0);opacity:0}18%{opacity:1}100%{transform:translate(var(--dx),var(--dy)) scale(1.25) rotate(40deg);opacity:0}}
/* ==== Tour intro title (2026-10-22) ==== */
.mi-title{font-size:17px;font-weight:800;color:#1F2A24;letter-spacing:.5px;margin-bottom:10px}
/* ==== Batch tour rows (2026-10-22) ==== */
.tp-row{display:flex;gap:8px;align-items:center;font-size:13.5px;padding:5px 0;border-bottom:1px dashed #EDF1EE;cursor:pointer}
.tp-row input{accent-color:#2F8F63}

/* ==== Tour tags + calendar (2026-10-22) ==== */
.tour-tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.ttag{display:inline-flex;align-items:center;font-size:11.5px;font-weight:600;background:#F1F6F2;color:#2F6B52;border:1px solid #DCE9E1;padding:3px 9px;border-radius:999px}
.t4grid{display:grid;grid-template-columns:1fr 1fr;gap:0 14px}
.cal-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px;font-size:15px}
.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}
.cal-dow span{text-align:center;font-size:11px;color:#8A9199;font-weight:700;padding:4px 0}
.cal-cell{position:relative;min-height:42px;border:1px solid #EDF1EE;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:13.5px;font-weight:600;color:#3C4A44;background:#fff}
.cal-cell.empty{background:transparent;border-color:transparent}
.cal-cell.today{border-color:#2F8F63;color:#2F8F63}
.cal-cell.has{cursor:pointer;background:#F6FBF8;border-color:#D5E8DC}
.cal-cell.has:hover{background:#E7F4EC}
.cal-dot{position:absolute;bottom:6px;width:7px;height:7px;border-radius:50%;background:#2F8F63}
.cal-dot.on{background:#1A56C4}
#cal-pop{position:absolute;z-index:20;width:248px;background:#fff;border:1px solid #E3E8E5;border-radius:14px;box-shadow:0 12px 36px rgba(20,40,30,.16);padding:10px;display:flex;flex-direction:column;gap:8px}
.cal-card{display:flex;flex-direction:column;gap:4px;padding:8px;border-radius:10px;background:#F8FBF9;text-decoration:none;color:inherit}
.cal-card:hover{background:#EEF6F1}
.cal-event-title{display:block;color:var(--blue);text-decoration:none}
.tour-unverified{align-self:flex-start;padding:2px 7px;border-radius:999px;background:#ECEFF1;color:#667085;font-size:11px;font-weight:600}
.tour-img-ph{background:linear-gradient(135deg,#F2F6F3,#E3EDE7)!important;color:#5F7368!important}
.tp-tpl{margin-top:8px;border:1px dashed #D5E0D8;border-radius:10px;padding:8px 12px;font-size:12.5px}
.tp-tpl summary{cursor:pointer;font-weight:700;color:#2F6B52}
.tp-pre{background:#F6F8F7;border-radius:8px;padding:8px;font-size:11px;overflow-x:auto;white-space:pre;margin-top:8px}
@media (max-width:640px){#cal-pop{position:fixed;left:12px!important;right:12px;width:auto;top:auto;bottom:12px}}

/* ==== LFM checkbox clarity (2026-10-22) ==== */
.tc-in input[type=checkbox]{flex:0 0 auto;width:15px;height:15px;accent-color:#B06000}
.tc-tag{background:#FEF3E2;border:1px solid #F0DDBE;color:#B06000;font-size:12px;font-weight:700;padding:5px 11px;border-radius:999px}
.tc-tag:hover{background:#FBE8CC}

/* ==== LFM checkbox: subtle (2026-10-22 v2) ==== */
.tc-in input[type=checkbox]{flex:0 0 auto;width:14px;height:14px;accent-color:#2F8F63}
.tc-tag{background:none;border:none;color:#8A9199;font-size:11.5px;font-weight:500;padding:0;margin-left:-2px}
.tc-tag:hover{color:#2F8F63}

/* ==== LFM bubble toggle (2026-10-22 v3) ==== */
.lfm-tg{flex:0 0 auto;height:30px;padding:0 11px;border-radius:999px;border:1.5px solid #2F8F63;background:#fff;color:#2F8F63;font-size:11.5px;font-weight:700;cursor:pointer;transition:all .15s;white-space:nowrap}
.lfm-tg:hover{background:#E7F4EC}
.lfm-tg.on{background:#2F8F63;color:#fff;box-shadow:0 2px 8px rgba(47,143,99,.35)}
/* ==== Tour card: no image slot (2026-10-22) ==== */
.tour-card{display:block;padding:16px 18px}

/* ==== Tour card interactions spacing (2026-10-22) ==== */
.tour-body .going-line{font-size:13px;color:#3C4A44;margin-top:14px;padding-top:12px;border-top:1px dashed #EDF1EE}
.tour-body .tc-list{margin-top:12px;display:flex;flex-direction:column;gap:8px}
.tour-body .tc-row{background:#F8FAF9;border-radius:10px;padding:8px 12px;font-size:13px;line-height:1.6}
.tour-body .tc-in{margin-top:12px;display:flex;gap:8px;align-items:center}

/* ==== Tour card v3: airy & compact (2026-10-22) ==== */
.tour-card{display:block;background:#fff;border:1px solid #E7ECE9;border-radius:16px;box-shadow:0 1px 3px rgba(20,40,30,.05);overflow:hidden}
.tour-card:hover{transform:none;box-shadow:0 4px 14px rgba(20,40,30,.09)}
.tour-body{padding:18px 20px 16px;display:block}
.tour-name{font-size:16.5px;font-weight:800;color:#1F2A24;letter-spacing:-.2px;line-height:1.4}
.tour-date{margin-top:5px;font-size:12.5px;color:#1A56C4;font-weight:600}
.tour-tags{margin-top:9px;display:flex;flex-wrap:wrap;gap:5px}
.tour-tags .ttag{font-size:11px;padding:2px 8px}
.tour-note{margin-top:7px;font-size:12.5px;color:#8A9199;line-height:1.65}
.tour-body a.mt{margin-top:10px}
.tour-body .btn-sm{height:30px;padding:0 13px;font-size:12.5px}
.rsvp-row{margin-top:12px;display:flex;gap:8px}
.rsvp-btn{height:27px;padding:0 12px;border-radius:999px;border:1.5px solid #DDE4E0;background:#fff;font-size:12px;font-weight:600;color:#5F6368;cursor:pointer;transition:all .15s}
.rsvp-btn b{font-weight:800;margin-left:2px}
.rsvp-btn:hover{border-color:#2F8F63;color:#2F8F63}
.rsvp-btn.on{background:#2F8F63;border-color:#2F8F63;color:#fff}
.going-line{margin-top:9px;font-size:12px;color:#5F6368;line-height:1.7;border-top:1px dashed #EDF1EE;padding-top:8px}
.tc-box{margin-top:10px;border-top:1px dashed #EDF1EE;padding-top:9px}
.tc-h{font-size:11.5px;font-weight:700;color:#8A9199;margin-bottom:7px}
.tc-box .tc-row{background:#F7F9F8;border-radius:9px;padding:6px 10px;font-size:12.5px;line-height:1.6;color:#3C4A44}
.tc-box .tc-row b{color:#1F2A24}
.tc-in{margin-top:8px}
.tc-in input{height:30px;font-size:12.5px}
.tc-send{height:30px;padding:0 12px;font-size:12px}
.lfm-tg{height:28px;padding:0 10px;font-size:11px}
.tc-box .hint{font-size:12px;color:#8A9199;margin-top:4px}

/* ==== Tour card v4: reference layout (2026-10-22) ==== */
.tour-body{padding:18px 20px 16px}
.tour-top{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}
.tour-name{font-size:17px;font-weight:800;color:#1F2A24;letter-spacing:-.2px;line-height:1.35}
.tour-ext{flex:0 0 auto;width:28px;height:28px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;color:#5F6368;text-decoration:none;font-size:15px;border:1px solid transparent}
.tour-ext:hover{background:#F1F6F2;color:#2F8F63;border-color:#DDE9E1}
.tour-date{margin-top:6px;font-size:12.5px;color:#1A56C4;font-weight:600}
.tour-date .badge{font-size:10.5px;padding:2px 8px}
.tour-meta{margin-top:9px;display:flex;flex-wrap:wrap;align-items:center;gap:5px}
.tour-note-inline{font-size:12px;color:#8A9199}
.tour-div{height:1px;background:#F0F3F1;margin:13px -20px 0}
.tour-actions{margin-top:11px;display:flex;align-items:center;justify-content:space-between;gap:10px}
.tour-det{font-size:13px;font-weight:700;color:#2F6B52;text-decoration:none}
.tour-det:hover{text-decoration:underline}
.rsvp-row{display:inline-flex;gap:8px;margin:0}
.rsvp-btn{height:26px;padding:0 11px;border-radius:999px;border:1.5px solid #E2E8E4;background:#fff;font-size:12px;font-weight:600;color:#5F6368;cursor:pointer;transition:all .15s}
.rsvp-btn b{font-weight:800}
.rsvp-btn:hover{border-color:#2F8F63;color:#2F8F63}
.rsvp-btn.on{background:#2F8F63;border-color:#2F8F63;color:#fff}
.going-line{margin-top:9px;font-size:12px;color:#5F6368;line-height:1.7}
.tc-box{margin-top:0;border-top:none;padding-top:0}
.tc-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:7px}
.tc-h{font-size:12px;font-weight:700;color:#8A9199;margin:0}
.tc-box .tc-row{background:#F7F9F8;border-radius:9px;padding:6px 10px;font-size:12.5px;line-height:1.6;color:#3C4A44;margin-bottom:6px}
.tc-in{margin-top:8px}
.tc-in input{height:32px;font-size:12.5px}
.tc-send{height:32px;padding:0 14px;font-size:12px;font-weight:700}
.lfm-tg{height:26px;padding:0 11px;font-size:11.5px}

/* ==== Tour card v5: Apple x Notion (2026-10-22) ==== */
.tour-card{background:#fff;border:1px solid #E9EEEB;border-radius:18px;box-shadow:0 1px 2px rgba(20,40,30,.04);overflow:hidden}
.tour-card:hover{transform:none;box-shadow:0 4px 16px rgba(20,40,30,.08)}
.tour-body{padding:22px 24px 20px}
.tour-top{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}
.tour-name{font-size:18px;font-weight:800;color:#1F2A24;letter-spacing:-.3px;line-height:1.3}
.tour-ext{flex:0 0 auto;width:30px;height:30px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;color:#8A9199;text-decoration:none;font-size:15px;transition:all .15s}
.tour-ext:hover{background:#F1F6F2;color:#2F8F63}
.tour-ext:focus-visible,.rsvp-btn:focus-visible,.lfm-tg:focus-visible,.tc-send:focus-visible{outline:2px solid #2F8F63;outline-offset:2px}
.tour-sub{margin-top:8px;display:flex;flex-wrap:wrap;align-items:center;gap:6px 14px;font-size:13px;color:#8A9199}
.tour-dt{font-weight:500}
.tour-loc{color:#5F6368}
.tour-tags{margin-top:10px;display:flex;flex-wrap:wrap;gap:6px}
.tour-tags .ttag{font-size:11px;padding:3px 9px;background:#F1F6F2;color:#2F6B52;border:none}
.tour-div{height:1px;background:#F0F3F1;margin:18px -24px 0}
.tour-actions{margin-top:14px;display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}
.tour-det{font-size:13px;font-weight:700;color:#2F6B52;text-decoration:none;letter-spacing:.2px}
.tour-det:hover{text-decoration:underline}
.rsvp-row{display:inline-flex;gap:4px;margin:0}
.rsvp-btn{height:28px;padding:0 11px;border-radius:999px;border:1px solid transparent;background:transparent;font-size:12.5px;font-weight:600;color:#5F6368;cursor:pointer;transition:all .15s;white-space:nowrap}
.rsvp-btn b{font-weight:800;margin-left:2px}
.rsvp-btn:hover{background:#F1F6F2;color:#2F8F63}
.rsvp-btn.on{background:#E7F4EC;color:#2F6B52}
.going-line{margin-top:10px;font-size:12.5px;color:#5F6368;line-height:1.7}
.tc-box{margin-top:0;border-top:none;padding-top:0}
.tc-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}
.tc-h{font-size:12.5px;font-weight:700;color:#8A9199;margin:0}
.tc-box .tc-row{background:#F7F9F8;border-radius:10px;padding:7px 12px;font-size:12.5px;line-height:1.6;color:#3C4A44;margin-bottom:6px}
.tc-box .tc-row b{color:#1F2A24}
.lfm-tg{height:26px;padding:0 11px;border-radius:999px;border:1px solid #E2E8E4;background:#fff;font-size:11.5px;font-weight:700;color:#5F6368;cursor:pointer;transition:all .15s}
.lfm-tg:hover{border-color:#2F8F63;color:#2F8F63}
.lfm-tg.on{background:#2F8F63;border-color:#2F8F63;color:#fff}
.tc-in{margin-top:10px;display:flex;align-items:center;gap:6px;background:#F4F6F5;border-radius:12px;padding:5px 5px 5px 14px;border:1px solid transparent;transition:border-color .15s}
.tc-in:focus-within{border-color:#2F8F63;background:#fff}
.tc-in input{flex:1;min-width:0;height:32px;border:none;background:transparent;font-size:13px;color:#1F2A24;padding:0}
.tc-in input:focus{outline:none}
.tc-send{flex:0 0 auto;height:32px;padding:0 16px;border-radius:999px;border:none;background:#2F8F63;color:#fff;font-size:12.5px;font-weight:700;cursor:pointer;transition:background .15s}
.tc-send:hover{background:#2A7A55}
.tc-box .hint{font-size:12.5px;color:#8A9199;margin-top:8px}
@media (max-width:640px){
  .tour-body{padding:18px 16px 16px}
  .tour-div{margin:16px -16px 0}
  .tour-actions{gap:8px}
  .rsvp-btn{height:32px;padding:0 12px}
  .tc-send{padding:0 14px}
}

/* ==== Tour card v6: pixel spec (2026-10-22) ==== */
.tour-card{background:#FFFFFF;border:1px solid #E5E5E7;border-radius:20px;box-shadow:none}
.tour-card:hover{box-shadow:0 2px 8px rgba(0,0,0,.04);transform:none}
.tour-body{padding:20px 20px 18px}
@media(min-width:768px){.tour-body{padding:24px}}
.tour-name{font-size:22px;font-weight:700;color:#1D1D1F;letter-spacing:-.4px;line-height:1.3}
.tour-ext{width:32px;height:32px;color:#86868B;font-size:16px}
.tour-ext:hover{background:#F5F6F7;color:#1D1D1F}
.tour-sub{margin-top:10px;display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;font-size:14px;color:#86868B}
.tour-dt{font-weight:400}
.tour-loc{display:inline-flex;align-items:center;gap:8px}
.tour-mode{display:inline-flex;align-items:center;gap:4px;background:#EDF7F3;color:#2D8F69;font-size:12px;font-weight:600;border-radius:999px;padding:5px 10px;line-height:1}
.tour-mode.off{background:#F5F6F7;color:#6E6E73}
.tour-region{color:#86868B;font-weight:400}
.tour-tags{margin-top:10px;display:flex;flex-wrap:wrap;gap:6px}
.tour-tags .ttag{font-size:12px;padding:4px 10px;background:#F5F6F7;color:#6E6E73;border:none;font-weight:500}
.tour-div{height:1px;background:#E5E5E7;margin:16px -20px 0}
@media(min-width:768px){.tour-div{margin:16px -24px 0}}
.tour-actions{margin-top:14px;display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}
.tour-det{font-size:14px;font-weight:600;color:#1D1D1F}
.tour-det:hover{color:#2D8F69;text-decoration:none}
.rsvp-row{display:inline-flex;gap:16px;margin:0}
.rsvp-btn{height:auto;padding:6px 10px;font-size:13.5px;font-weight:500;color:#6E6E73;border-radius:10px;border:1px solid transparent;background:transparent;cursor:pointer;transition:all .15s;white-space:nowrap}
.rsvp-btn b{font-weight:600;margin-left:2px}
.rsvp-btn:hover{background:#F5F6F7;color:#1D1D1F}
.rsvp-btn.on{background:#EDF7F3;color:#2D8F69}
.going-line{margin-top:10px;font-size:13px;color:#6E6E73;line-height:1.7}
.tc-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}
.tc-h{font-size:13.5px;font-weight:600;color:#86868B;margin:0}
.tc-box .tc-row{background:#F9FAFA;border-radius:10px;padding:8px 12px;font-size:13px;line-height:1.6;color:#3C4A44;margin-bottom:6px}
.tc-box .tc-row b{color:#1D1D1F}
.lfm-tg{height:auto;padding:5px 11px;border:1px solid #CBE7DC;background:#EDF7F3;color:#2D8F69;font-size:12px;font-weight:600;border-radius:999px;cursor:pointer;transition:all .15s}
.lfm-tg:hover{background:#DCEFE7;color:#2D8F69;border-color:#CBE7DC}
.lfm-tg.on{background:#2D8F69;border-color:#2D8F69;color:#fff}
.tc-in{margin-top:10px;display:flex;align-items:center;gap:6px;background:#F5F6F7;border-radius:12px;padding:6px 6px 6px 16px;min-height:46px;border:1px solid transparent;transition:all .15s}
.tc-in:focus-within{border-color:#2D8F69;background:#fff}
.tc-in input{flex:1;min-width:0;height:34px;border:none;background:transparent;font-size:13.5px;color:#1D1D1F;padding:0}
.tc-in input:focus{outline:none}
.tc-in input::placeholder{color:#A1A1A6}
.tc-send{flex:0 0 auto;height:34px;padding:0 16px;border-radius:10px;border:none;background:#2D8F69;color:#fff;font-size:13px;font-weight:600;cursor:pointer;margin:0 0 0 2px;transition:background .15s}
.tc-send:hover{background:#257A5C}
.tc-box .hint{font-size:13px;color:#A1A1A6;margin-top:8px}
@media (max-width:640px){
  .tour-body{padding:18px 16px 16px}
  .tour-div{margin:14px -16px 0}
  .tour-name{font-size:19px}
  .rsvp-btn{padding:8px 10px}
  .tc-send{padding:0 14px}
}
/* ==== Tour list: single comfortable column (2026-10-22) ==== */
.tour-grid{display:grid;grid-template-columns:1fr;gap:16px;max-width:780px;margin:0 auto}
@media(min-width:1100px){.tour-grid{max-width:860px}}
/* ==== Tour grid: 2-up (2026-10-22) ==== */
.tour-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:16px;max-width:1080px;margin:0 auto}
@media(max-width:860px){.tour-grid{grid-template-columns:1fr;max-width:780px}}

/* ==== Tour card v7: Google Material (2026-10-22) ==== */
.tour-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:16px;max-width:1120px;margin:0 auto}
@media(max-width:880px){.tour-grid{grid-template-columns:1fr;max-width:720px}}
.tour-card{background:#FFFFFF;border:1px solid #E8EAED;border-radius:16px;box-shadow:none;transition:box-shadow .18s,transform .18s}
.tour-card:hover{transform:none;box-shadow:0 1px 2px 0 rgba(60,64,67,.3),0 1px 3px 1px rgba(60,64,67,.15)}
.tour-body{padding:20px}
@media(min-width:768px){.tour-body{padding:24px}}
.tour-name{font-size:20px;font-weight:600;color:#202124;letter-spacing:.1px;line-height:1.4}
.tour-ext{width:32px;height:32px;border-radius:50%;color:#5F6368;font-size:15px}
.tour-ext:hover{background:#F1F3F4;color:#202124}
.tour-sub{margin-top:8px;gap:6px 12px;font-size:13px;color:#5F6368}
.tour-mode{background:#E6F4EA;color:#188038;font-size:12px;font-weight:500;padding:4px 10px}
.tour-mode.off{background:#F1F3F4;color:#5F6368}
.tour-region{color:#80868B}
.tour-tags{margin-top:10px;gap:6px}
.tour-tags .ttag{background:#F1F3F4;color:#5F6368;font-size:11.5px;font-weight:500;padding:4px 10px;border-radius:999px}
.tour-div{height:1px;background:#E8EAED;margin:16px -20px 0}
@media(min-width:768px){.tour-div{margin:16px -24px 0}}
.tour-actions{margin-top:12px;gap:8px}
.tour-det{font-size:13.5px;font-weight:500;color:#1A73E8}
.tour-det:hover{text-decoration:underline;color:#1765CC}
.rsvp-row{gap:4px}
.rsvp-btn{height:32px;padding:0 12px;border-radius:999px;font-size:13px;font-weight:500;color:#5F6368}
.rsvp-btn:hover{background:#F1F3F4;color:#202124}
.rsvp-btn.on{background:#E6F4EA;color:#188038}
.rsvp-btn b{font-weight:600}
.going-line{margin-top:10px;font-size:12.5px;color:#5F6368}
.tc-h{font-size:13px;font-weight:500;color:#5F6368}
.tc-box .tc-row{background:#F8F9FA;border:1px solid #F1F3F4;border-radius:12px;padding:8px 12px;font-size:12.5px;color:#3C4043;margin-bottom:6px}
.tc-box .tc-row b{color:#202124}
.lfm-tg{height:auto;padding:5px 12px;border:1px solid #CEEAD6;background:#FFFFFF;color:#188038;font-size:12px;font-weight:500;border-radius:999px}
.lfm-tg:hover{background:#E6F4EA}
.lfm-tg.on{background:#188038;border-color:#188038;color:#fff}
.tc-in{margin-top:10px;background:#F1F3F4;border-radius:12px;padding:4px 4px 4px 16px;min-height:48px;border:2px solid transparent}
.tc-in:focus-within{background:#FFFFFF;border-color:#1A73E8}
.tc-in input{height:38px;font-size:14px;color:#202124}
.tc-in input::placeholder{color:#80868B}
.tc-send{height:38px;padding:0 18px;border-radius:999px;background:#1A73E8;font-size:13.5px;font-weight:500;margin:0}
.tc-send:hover{background:#1765CC;box-shadow:0 1px 2px rgba(60,64,67,.3),0 1px 3px 1px rgba(60,64,67,.15)}
.tc-box .hint{font-size:12.5px;color:#80868B}
@media (max-width:640px){
  .tour-body{padding:16px}
  .tour-div{margin:14px -16px 0}
  .tour-name{font-size:18px}
}

/* ==== Tour card v8: expand roster + 3-up (2026-10-22) ==== */
.tour-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;max-width:1340px;margin:0 auto}
@media(max-width:1100px){.tour-grid{grid-template-columns:repeat(2,1fr);max-width:1080px}}
@media(max-width:720px){.tour-grid{grid-template-columns:1fr;max-width:720px}}
.tour-more-toggle{margin-top:14px;display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:12.5px;font-weight:500;color:#5F6368;cursor:pointer;padding:8px 10px;margin-left:-10px;margin-right:-10px;border-radius:10px;transition:background .15s;user-select:none}
.tour-more-toggle:hover{background:#F1F3F4;color:#202124}
.tour-more-toggle .tm-arrow{transition:transform .18s;font-size:11px}
.tour-more-toggle.open .tm-arrow{transform:rotate(180deg)}
.tour-more{margin-top:4px}
.roster-line{font-size:12.5px;color:#3C4043;line-height:1.8;background:#F8F9FA;border:1px solid #F1F3F4;border-radius:10px;padding:8px 12px;margin-bottom:6px}
.roster-line b{color:#202124;font-weight:600;margin-right:4px}

/* ==== Tour actions row v9: bulletproof (2026-10-22) ==== */
.tour-actions{display:flex;flex-wrap:nowrap;align-items:center;justify-content:space-between;gap:8px;margin-top:12px}
.tour-det{flex:0 1 auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:13px;font-weight:500;color:#1A73E8;text-decoration:none}
.tour-det:hover{text-decoration:underline;color:#1765CC}
.rsvp-row{flex:0 0 auto;display:inline-flex;align-items:center;gap:6px;margin:0}
.rsvp-btn{display:inline-flex;align-items:center;gap:5px;height:30px;padding:0 11px;border-radius:999px;border:1px solid #E8EAED;background:#FFFFFF;font-size:12.5px;font-weight:500;color:#5F6368;cursor:pointer;white-space:nowrap;line-height:1;transition:background .15s,border-color .15s,color .15s}
.rsvp-btn b{font-weight:600;font-size:12.5px;color:#202124}
.rsvp-btn:hover{background:#F1F3F4;border-color:#DADCE0;color:#202124}
.rsvp-btn.on{background:#E6F4EA;border-color:#CEEAD6;color:#188038}
.rsvp-btn.on b{color:#188038}
@media (max-width:520px){
  .tour-actions{flex-wrap:wrap;row-gap:6px}
  .rsvp-btn{height:32px;padding:0 12px;font-size:13px}
}
/* ==== Tour loc row standalone (2026-10-23) ==== */
.tour-loc-row{margin-top:8px;display:flex;flex-wrap:wrap;align-items:center;gap:6px}
/* ==== Changelog (2026-10-23) ==== */
.cl-list{margin-top:16px;display:flex;flex-direction:column;gap:18px}
.cl-group{background:#fff;border:1px solid #E9EEEB;border-radius:16px;padding:18px 20px;box-shadow:0 1px 3px rgba(20,40,30,.05)}
.cl-head{display:flex;align-items:baseline;gap:10px;margin-bottom:10px}
.cl-ver{font-size:15px;font-weight:800;color:#2F8F63;letter-spacing:.3px}
.cl-date{font-size:12.5px;color:#8A9199;font-weight:600}
.cl-items{margin:0;padding-left:18px;display:flex;flex-direction:column;gap:7px}
.cl-items li{font-size:13.5px;line-height:1.7;color:#3C4A44}
.cl-items li::marker{color:#2F8F63}
/* ==== Changelog expandable (2026-10-23 v2) ==== */
.cl-head{cursor:pointer;user-select:none;margin-bottom:0}
.cl-head:hover .cl-ver{text-decoration:underline}
.cl-arrow{display:inline-block;width:16px;color:#2F8F63;font-size:12px;transition:transform .18s;flex:0 0 auto}
.cl-group.open .cl-arrow{transform:rotate(90deg)}
.cl-count{margin-left:auto;font-size:11.5px;color:#8A9199;font-weight:600;background:#F1F6F2;border-radius:999px;padding:2px 9px}
.cl-items{display:none;margin:12px 0 2px}
.cl-group.open .cl-head{margin-bottom:10px}
/* ==== Judge bubble upgrade (2026-10-23) ==== */
.judge-chip{display:inline-flex;align-items:center;gap:4px;background:#EDF7F3;color:#188038;font-size:12px;font-weight:600;border-radius:999px;padding:5px 11px;border:1px solid #CEEAD6}
.judge-chip:hover{background:#DCEFE7}
/* ==== Week calendar as auxiliary strip (2026-10-23) ==== */
#week-cal-wrap{max-width:560px;margin:0 0 16px}
#week-cal-wrap .cal-cell{min-height:36px;font-size:12.5px}
#week-cal-wrap .cal-head{margin-bottom:8px;font-size:14px}
/* ==== Recruitment board (2026-10-23) ==== */
.wk-top{display:flex;gap:20px;align-items:flex-start;flex-wrap:wrap;margin-bottom:16px}
#week-cal-wrap{flex:0 0 560px;max-width:560px;margin:0}
#recruit-board{flex:1;min-width:300px;background:#fff;border:1px solid #E9EEEB;border-radius:16px;padding:16px 18px;box-shadow:0 1px 3px rgba(20,40,30,.05)}
.rc-title{font-size:14px;font-weight:800;color:#1F2A24;margin-bottom:10px}
.rc-card{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:10px;background:#F8FAF9;margin-bottom:6px;flex-wrap:wrap}
.rc-card.sys{background:#EDF7F3;border:1px solid #CEEAD6}
.rc-tag{flex:0 0 auto;font-size:11px;font-weight:800;color:#188038;background:#fff;border:1px solid #CEEAD6;border-radius:999px;padding:2px 9px}
.rc-main{flex:1;min-width:0;font-size:13px;color:#3C4A44}
.rc-go{flex:0 0 auto;height:26px;padding:0 11px;border-radius:999px;border:1px solid #2F8F63;background:#fff;color:#2F8F63;font-size:12px;font-weight:600;cursor:pointer;white-space:nowrap}
.rc-go:hover{background:#2F8F63;color:#fff}
.rc-del{color:#D70015;text-decoration:none;font-weight:700;padding:0 4px}
.rc-form{display:flex;gap:8px;margin-top:12px;padding-top:12px;border-top:1px dashed #EDF1EE;flex-wrap:wrap}
.rc-form select{flex:0 0 auto;width:auto;font-size:12.5px;padding:8px 10px}
.rc-form input{flex:1;min-width:180px;height:36px;font-size:12.5px}
.rc-form .btn{height:36px}
.rc-note{font-size:12.5px;color:#8A9199;margin-top:10px}
@media(max-width:980px){
  #week-cal-wrap{flex:1 1 100%;max-width:560px}
  #recruit-board{flex:1 1 100%}
}
/* ==== Judge chip on room line (2026-10-23) ==== */
.room-line{display:flex;align-items:center;gap:8px}
.room-line .room-tag{flex:0 0 auto}
.room-line .judge-chip{flex:0 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
.room-line .room-n{margin-left:auto;flex:0 0 auto}
/* ==== Recruit chips + week card align (2026-10-23) ==== */
.rc-tags{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-top:8px}
.rc-chip{height:24px;padding:0 11px;border-radius:999px;border:1px solid #E2E8E4;background:#fff;font-size:11.5px;font-weight:600;color:#5F6368;cursor:pointer}
.rc-chip:hover{border-color:#2F8F63;color:#2F8F63}
.rc-chip.on{background:#2F8F63;border-color:#2F8F63;color:#fff}
.rc-form select{display:none}
#recruit-board{max-width:none}
.week-grid .day-card,.day-grid .day-card{display:flex;flex-direction:column}
.week-grid .room-card,.day-grid .room-card{display:flex;flex-direction:column;gap:8px;flex:1}
.week-grid .room-line,.day-grid .room-line{display:flex;align-items:center;gap:8px;min-height:28px}
.week-grid .room-foot,.day-grid .room-foot{margin-top:auto;display:flex;align-items:center;min-height:28px}
/* ==== Calendar-first signup (2026-10-28) ==== */
.wk-cal2{display:flex;gap:20px;align-items:flex-start;flex-wrap:wrap}
#wk-cal{flex:0 0 420px;max-width:420px}
#wk-day{flex:1;min-width:300px;background:#fff;border:1px solid #E9EEEB;border-radius:16px;padding:16px 18px;box-shadow:0 1px 3px rgba(20,40,30,.05);min-height:280px}
.wk-day-head{display:flex;align-items:baseline;gap:10px;margin-bottom:12px}
.wk-day-head b{font-size:19px;font-weight:800;color:#1F2A24}
.cal-cell.past{color:#C4CCC7;background:#FAFBFA;cursor:not-allowed}
.cal-cell.past:hover{background:#FAFBFA}
.cal-cell.sel{outline:2px solid #2F8F63;outline-offset:-2px;font-weight:800;color:#2F6B52}
.wk-spar{display:flex;flex-direction:column;gap:6px;background:#F8FAF9;border:1px solid #E9EEEB;border-radius:12px;padding:12px 14px;margin-bottom:10px;text-decoration:none;color:inherit;transition:transform .15s,box-shadow .15s}
.wk-spar:hover{transform:translateY(-1px);box-shadow:0 4px 12px rgba(20,40,30,.08)}
.wk-spar.pop{animation:wkPop .34s cubic-bezier(.2,1.2,.4,1) backwards}
@keyframes wkPop{0%{opacity:0;transform:translateX(28px) scale(.97)}100%{opacity:1;transform:none}}
.wk-day-empty{font-size:13px;color:#8A9199;padding:14px 0}
@media(max-width:900px){#wk-cal{flex:1 1 100%;max-width:480px}#wk-day{flex:1 1 100%}}

/* ==== Mobile text overflow guards (2026-10-28) ==== */
.amb-bubble,.badge,.ttag,.judge-chip,.cl-count,.rc-tag,.lfm-tg,.cloud-pill{overflow-wrap:anywhere;word-break:break-word;max-width:100%}
.m-bubble{max-width:160px;overflow-wrap:anywhere;word-break:break-word}
.stamp{white-space:nowrap}
.tour-name,.room-tag{overflow-wrap:anywhere}
/* ==== Motion video link (2026-10-30) ==== */
.mb-vid-btn{margin-top:8px;background:#EDF7F3;border:1px solid #CEEAD6;color:#188038;font-size:12px;font-weight:600;padding:5px 11px;border-radius:999px;cursor:pointer}
.mb-vid-btn:hover{background:#DCEFE7}
.mb-vid{margin-top:8px}
.mb-vid .vid-iframe{width:100%;aspect-ratio:16/9;border:none;border-radius:12px}
/* ==== Motion Explorer 3.0 (2026-10-30) ==== */
.mb-searchwrap{margin:12px 0 4px}
.mb-searchwrap input{width:100%;height:48px;border-radius:14px;border:1.5px solid #E5E5E7;background:#F5F6F7;padding:0 18px;font-size:15px;color:#1D1D1F}
.mb-searchwrap input:focus{outline:none;background:#fff;border-color:#2F8F63}
.mb-text{font-size:14.5px;line-height:1.65;color:#1D1D1F;margin-top:7px;font-weight:500}
.mb-meta{font-size:12px;color:#86868B;margin-top:5px}
.mb-motion{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.mb-motion .mb-star{margin-left:auto}
/* ==== Matchmaking widgets (2026-10-30) ==== */
.day-chip{width:44px;height:36px;border-radius:10px;border:1.5px solid #E2E8E4;background:#fff;font-size:12.5px;font-weight:600;color:#5F6368;cursor:pointer;transition:all .15s}
.day-chip:hover{border-color:#2F8F63;color:#2F8F63}
.day-chip.on{background:#2F8F63;border-color:#2F8F63;color:#fff}
.rsvp-btn{height:30px;padding:0 14px;border-radius:999px;border:1.5px solid #E2E8E4;background:#fff;font-size:12.5px;font-weight:600;color:#5F6368;cursor:pointer}
.rsvp-btn.on{background:#E6F4EA;border-color:#CEEAD6;color:#188038}
/* ==== Explorer layout polish (2026-10-31) ==== */
.mb-filters{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:6px 0}
.mb-filters select{height:34px;font-size:12.5px;max-width:100%}
.mb-filters .pill{height:30px}
#mb-morebox .mb-filters{margin:6px 0}
.mb-cloud{margin:8px 0}
.mb-item{padding:12px 14px}
@media (max-width:640px){.mb-filters select{flex:1;min-width:0}}
/* ==== Rank distribution bar (2026-10-31) ==== */
.distbar{display:flex;height:22px;border-radius:7px;overflow:hidden;margin-top:8px;font-size:11px;font-weight:700;color:#fff}
.db-seg{display:flex;align-items:center;justify-content:center;min-width:0;overflow:hidden;white-space:nowrap}
.db1{background:#F4B400}
.db2{background:#9AA0A6}
.db3{background:#CD7F32}
.db4{background:#C9CECB}
/* ==== Region mini-map (2026-10-31) ==== */

/* ==== Motion Bank UI v2.0 (2026-10-31 spec) ==== */
.mb-page{max-width:1120px;margin:0 auto}
.mb-searchwrap{position:relative;margin:14px 0 10px}
.mb-searchwrap input{width:100%;height:52px;border-radius:12px;border:1px solid #E5E9E8;background:#fff;padding:0 44px;font-size:15px;color:#172124}
.mb-searchwrap input:focus{outline:none;box-shadow:0 0 0 2px rgba(47,143,99,.22);border-color:#2F8F63}
.mb-sicon{position:absolute;left:16px;top:50%;transform:translateY(-50%);font-size:15px;opacity:.55;pointer-events:none}
.mb-clear{position:absolute;right:10px;top:50%;transform:translateY(-50%);width:26px;height:26px;border:none;border-radius:50%;background:#EDF1EF;color:#667178;font-size:15px;cursor:pointer;line-height:1}
.mb-seg{display:inline-flex;gap:4px;background:#F4F6F5;border-radius:10px;padding:3px;max-width:420px;margin-bottom:14px}
.mb-seg button{height:36px;padding:0 14px;border:none;background:transparent;border-radius:8px;font-size:13px;font-weight:500;color:#667178;cursor:pointer}
.mb-seg button.on{background:#E8F6F2;color:#172124;font-weight:600}
.mb-bar{display:flex;gap:8px;flex-wrap:wrap;margin:4px 0 0}
.bar-sel,.bar-btn{height:38px;border:1px solid #E5E9E8;border-radius:9px;background:#fff;font-size:13px;color:#172124;padding:0 10px;cursor:pointer;max-width:100%}
.bar-btn{color:#2F6B52;font-weight:600}
.bar-sel:hover,.bar-btn:hover{background:#F5F9F8}
.chip-row{display:flex;gap:6px;flex-wrap:wrap;margin:10px 0 0}
.fchip{height:26px;padding:0 10px;border:none;border-radius:7px;background:#E8F6F2;color:#2F6B52;font-size:12px;font-weight:600;cursor:pointer}
.mb-mask{position:fixed;inset:0;background:rgba(20,40,30,.25);z-index:900}
.mb-drawer{position:fixed;top:0;right:0;height:100dvh;width:420px;max-width:94vw;background:#fff;z-index:901;border-left:1px solid #E5E9E8;box-shadow:-6px 0 18px rgba(20,40,30,.08);transform:translateX(105%);transition:transform .22s ease;display:flex;flex-direction:column}
.mb-drawer.open{transform:none}
.dr-head{flex:0 0 64px;display:flex;justify-content:space-between;align-items:center;padding:0 20px 0 24px;border-bottom:1px solid #E5E9E8}
.dr-head b{font-size:18px;font-weight:600;line-height:26px;color:#172124}
.dr-x{width:40px;height:40px;border:none;background:transparent;font-size:22px;line-height:1;color:#667178;cursor:pointer;border-radius:10px}
.dr-x:hover{background:#F4F6F5;color:#172124}
.dr-body{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;padding:12px 24px 24px}
.dr-foot{flex:0 0 auto;min-height:76px;display:flex;gap:12px;align-items:center;padding:14px 24px;border-top:1px solid #E5E9E8;background:#fff}
.dr-btn-ghost{flex:0 0 35%;height:44px;border:1px solid #E5E9E8;border-radius:9px;background:#fff;font-size:14px;font-weight:600;color:#3C4A44;cursor:pointer}
.dr-btn-ghost:hover{background:#F5F9F8}
.dr-btn-solid{flex:1;height:44px;border:none;border-radius:9px;background:#2F8F63;color:#fff;font-size:14px;font-weight:600;cursor:pointer}
.dr-btn-solid:hover{background:#2A8059}
.dr-sec{padding:16px 0;border-bottom:1px solid #EEF0EF}
.dr-sec:first-child{padding-top:4px}
.dr-sec:last-child{border-bottom:none}
.dr-sechead{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:10px}
.dr-title{font-size:14px;font-weight:600;line-height:20px;color:#172124}
.dr-lab{margin-bottom:8px}
.dr-hint{font-size:12px;font-weight:400;line-height:18px;color:#889295}
.dr-tsearch{width:100%;height:42px;border:1px solid #E5E9E8;border-radius:9px;padding:0 12px;font-size:13px;line-height:20px;color:#172124;background:#fff;box-sizing:border-box}
.dr-tsearch:focus{outline:none;border-color:#2F8F63;box-shadow:0 0 0 2px rgba(47,143,99,.18)}
.dr-tagsel{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px}
.dr-tagsel:empty{display:none}
.dtag{height:28px;padding:0 10px;border:none;border-radius:7px;background:#E8F6F2;color:#2F6B52;font-size:12px;font-weight:500;line-height:18px;cursor:pointer}
.dtag:hover{background:#DCF0E6}
.dr-tlist{margin-top:8px;max-height:240px;overflow-y:auto;overflow-x:hidden;border:1px solid #EEF0EF;border-radius:9px}
.trow{display:flex;align-items:center;gap:12px;min-height:40px;padding:0 12px;font-size:13px;line-height:20px;color:#3C4A44;cursor:pointer}
.trow:hover{background:#F8FAF9}
.trow.on{background:#F0F8F4}
.trow input{width:17px;height:17px;accent-color:#2F8F63;flex:0 0 auto;margin:0}
.trow span{overflow-wrap:anywhere;min-width:0}
.dr-fgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.dr-fgrid button{height:40px;border:1px solid #E5E9E8;border-radius:8px;background:#fff;font-size:12.5px;font-weight:500;color:#3C4A44;cursor:pointer}
.dr-fgrid button:hover{border-color:#2F8F63;color:#2F8F63}
.dr-fgrid button.on{background:#E8F6F2;border-color:#2F8F63;color:#2F6B52;font-weight:600}
.dr-sel{width:100%;height:44px;border:1px solid #E5E9E8;border-radius:9px;background:#fff url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="12" height="8" viewBox="0 0 12 8"><path d="M1 1.5l5 5 5-5" fill="none" stroke="%23667178" stroke-width="1.6" stroke-linecap="round"/></svg>') no-repeat right 12px center;padding:0 34px 0 12px;font-size:13px;line-height:20px;color:#172124;appearance:none;-webkit-appearance:none;cursor:pointer;box-sizing:border-box;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}
.dr-sel:focus{outline:none;border-color:#2F8F63;box-shadow:0 0 0 2px rgba(47,143,99,.18)}
.dr-2col{display:grid;grid-template-columns:1fr 1fr;gap:12px;align-items:start}
.dr-checks .cbrow{display:flex;align-items:center;gap:12px;min-height:40px;font-size:13px;line-height:20px;color:#3C4A44;cursor:pointer;border-radius:8px;margin:0 -8px;padding:0 8px}
.dr-checks .cbrow+.cbrow{margin-top:4px}
.dr-checks .cbrow:hover{background:#F8FAF9}
.dr-checks .cbrow input{width:18px;height:18px;accent-color:#2F8F63;flex:0 0 auto;margin:0}
@media (max-width:767px){
  .mb-drawer{top:auto;bottom:0;left:0;right:0;width:100%;max-width:100%;height:auto;max-height:100dvh;border-left:none;border-top:1px solid #E5E9E8;border-radius:16px 16px 0 0;transform:translateY(105%)}
  .mb-drawer.open{transform:none}
  .dr-head{padding:0 12px 0 16px}
  .dr-body{padding:12px 16px 24px}
  .dr-foot{padding:14px 16px calc(14px + env(safe-area-inset-bottom))}
}
#mb-list .mb-item{margin:0 0 10px;padding:12px 14px}
#mb-list .mb-text{font-size:16px;font-weight:550;line-height:25px;color:#172124;margin-top:6px}
#mb-list .mb-meta{font-size:12.5px;line-height:19px;color:#889295;margin-top:6px}
#mb-list .mb-motion{margin-top:2px}
#mb-list .mtag{font-size:11px;font-weight:500;line-height:18px;background:#F4F6F5;color:#667178;border:none}
#mb-list .mtag-form{background:#EDF3EF;color:#4A6B57}
#mb-list .mb-group{font-size:14px;font-weight:600;line-height:22px;color:#172124;border-top:1px solid #E5E9E8;padding-top:14px;margin:16px 0 10px}
@media (max-width:920px){
  .bar-sel{flex:1;min-width:0}
  .bar-btn{width:auto!important;flex:1}
  .mb-page{padding:0 12px}
}
/* ==== Motion rows grid + detail (v2.0 final) ==== */
#mb-list{border:1px solid #E5E9E8;border-radius:12px;overflow:hidden;background:#fff;margin-top:12px}
#mb-list .mb-item{display:grid;grid-template-columns:64px minmax(0,1fr) 40px;gap:16px;padding:16px 20px;border-bottom:none;border-radius:0;margin:0;box-shadow:none;background:#fff;transition:background .15s;cursor:default}
#mb-list .mb-swipe{border-bottom:1px solid #E5E9E8}
#mb-list .mb-swipe:last-child{border-bottom:none}
#mb-list .mb-item:hover{background:#F5F9F8}
#mb-list .mb-round{font-size:12px;color:#889295;line-height:19px;overflow-wrap:break-word}
#mb-list .mb-body{min-width:0}
#mb-list .mb-text{font-size:16px;font-weight:550;line-height:25px;color:#172124;overflow-wrap:break-word;cursor:pointer}
#mb-list .mb-text:hover{color:#2F6B52}
#mb-list .mb-meta{font-size:12.5px;line-height:19px;color:#889295;margin-top:4px}
#mb-list .mb-tags{margin-top:6px}
#mb-list .mb-tags:empty{display:none}
#mb-list .mtag{height:22px;display:inline-flex;align-items:center;font-size:11px;font-weight:500;line-height:18px;background:#F4F6F5;color:#667178;border:none;border-radius:6px;padding:0 8px;margin:0 6px 0 0}
#mb-list .mb-fav-ind{margin-left:0;justify-self:end;align-self:start}
#mb-list .mb-group{font-size:14px;font-weight:600;line-height:22px;color:#172124;background:#F8FAF9;border-bottom:1px solid #E5E9E8;padding:10px 20px;margin:0}
.mb-count{display:flex;justify-content:space-between;align-items:center;height:28px;font-size:12.5px;color:#667178;margin-top:12px}
.mb-detail{position:fixed;top:0;right:0;bottom:0;width:500px;max-width:94vw;background:#fff;z-index:9502;box-shadow:-8px 0 30px rgba(20,40,30,.14);display:flex;flex-direction:column}
#mb-detail-mask{z-index:9501}
.dt-motion{font-size:18px;font-weight:600;line-height:26px;color:#172124}
.dt-info{white-space:pre-wrap;font-size:13.5px;line-height:1.75;color:#3C4A44;background:#F8FAF9;border:1px solid #E5E9E8;border-radius:10px;padding:14px 16px}
body.mx-open #mascot{display:none}
@media (max-width:767px){
  #mb-list .mb-item{grid-template-columns:minmax(0,1fr) 44px;padding:14px 12px}
  #mb-list .mb-round{grid-column:1;font-size:11px}
  #mb-list .mb-text{grid-column:1;font-size:15px;line-height:23px}
  #mb-list .mb-meta{grid-column:1}
  #mb-list .mb-tags{grid-column:1}
  #mb-list .mb-fav-ind{grid-column:2;grid-row:1}
  .mb-detail{width:100vw;max-width:100vw}
}
/* ==== Swipe-right to star + card pop (2026-11-01) ==== */
.mb-swipe{position:relative;overflow:hidden}
.mb-swipe-bg{position:absolute;inset:0;display:flex;align-items:center;gap:8px;padding-left:22px;background:linear-gradient(90deg,#E7F4EC 0%,#F6FBF8 75%);color:#2F8F63;opacity:0;transition:opacity .12s}
.mb-swipe-star{font-size:22px;line-height:1;color:#C3D2CA;transform:scale(.65);transition:transform .15s cubic-bezier(.2,1.4,.4,1),color .15s}
.mb-swipe-txt{font-size:12px;font-weight:700;letter-spacing:.6px;color:#4E7A66;opacity:0;transform:translateX(-6px);transition:opacity .15s,transform .15s}
.mb-swipe.swiping .mb-swipe-bg{opacity:1}
.mb-swipe.swiping .mb-swipe-txt{opacity:.9;transform:none}
.mb-swipe.reach .mb-swipe-star{transform:scale(1.25);color:#2F8F63}
.mb-swipe .mb-item{position:relative;z-index:1;touch-action:pan-y;-webkit-user-select:none;user-select:none}
.mb-swipe .mb-item.spring{transition:transform .3s cubic-bezier(.2,1.4,.4,1)}
.mb-fav-ind{justify-self:end;align-self:start;width:40px;height:40px;display:flex;align-items:flex-start;justify-content:center;font-size:19px;line-height:1.4;color:#F2B01E;pointer-events:auto;border:0;background:transparent;cursor:pointer;border-radius:50%}
.mb-fav-ind:hover,.mb-fav-ind:focus-visible{background:#FFF7DF;outline:none}
.swipe-fav-hint{margin:8px 0 12px;padding:8px 12px;border-radius:9px;background:#F3F8F5;color:#4E6D5E;font-size:12.5px;font-weight:600}
.swipe-fav-hint button{float:right;border:0;background:transparent;color:#4E6D5E;font-size:17px;line-height:1;cursor:pointer}
.mb-item.fav-pop{animation:favPop .62s cubic-bezier(.2,1.2,.4,1)}
@keyframes favPop{0%{background:#E7F4EC;box-shadow:inset 0 0 0 2px #2F8F63}35%{transform:translateY(-3px) scale(1.012);background:#EFF9F3;box-shadow:inset 0 0 0 2px #2F8F63}100%{transform:none;background:#fff;box-shadow:inset 0 0 0 0 rgba(47,143,99,0)}}
#mb-list .mb-info-inline{grid-column:2/4;padding:0 20px 14px}
.mb-info-btn2{background:none;border:none;color:#1A73E8;font-size:12px;font-weight:600;cursor:pointer;padding:2px 0}
.mb-info-btn2.open{transform:rotate(0)}
.mb-info2{display:none;white-space:pre-wrap;font-size:13px;line-height:1.75;color:#3C4A44;background:#F8FAF9;border:1px solid #E5E9E8;border-radius:10px;padding:12px 14px;margin-top:6px}
.mb-info-inline.open .mb-info2{display:block;animation:infoIn .2s ease}
@keyframes infoIn{0%{opacity:0;transform:translateY(-4px)}100%{opacity:1;transform:none}}
.mb-item.fav-row{animation:rowFlash .9s ease}
@keyframes rowFlash{0%{background:#FFF8E6}45%{background:#F3FBF4}100%{background:#fff}}
@media (max-width:767px){
  #mb-list .mb-info-inline{grid-column:1/3;padding:0 12px 12px}
}

/* ==== Resources + community architecture (2026-11-02) ==== */
.app-page{max-width:1120px;margin:0 auto}
.timer-page .tk-card{max-width:620px;margin:22px auto 0}
.resource-subnav{display:flex;gap:4px;border-bottom:1px solid var(--line);margin:18px 0 22px}
.resource-subnav a{padding:11px 18px;color:var(--muted);font-weight:650;text-decoration:none;border-bottom:3px solid transparent}
.resource-subnav a.on{color:var(--blue);border-bottom-color:var(--blue)}
.library-tools{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:16px}
.submission-panel{margin:16px 0 22px}
.community-card{margin:14px 0}
.community-head{display:flex;justify-content:space-between;gap:12px;align-items:flex-start}
.community-type{font-size:11px;font-weight:800;color:#2F6B52;background:#E8F6F2;border-radius:999px;padding:3px 9px}
.community-actions,.moderation-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}
.community-links{margin-top:12px;padding:10px 12px;background:#F8FAF9;border-radius:9px;font-size:13px}
.community-comments{margin-top:10px;border-top:1px solid var(--line);padding-top:10px}
.rich-toolbar{display:flex;align-items:center;gap:6px;flex-wrap:wrap;padding:8px;border:1px solid var(--line);border-bottom:0;border-radius:10px 10px 0 0;background:#F8FAF9}
.rich-toolbar button{border:1px solid var(--line);background:#fff;border-radius:7px;height:30px;padding:0 10px;cursor:pointer}
.rich-toolbar label{font-size:12px;color:var(--muted);display:flex;align-items:center;gap:6px}
.rich-toolbar input[type=color]{width:28px;height:26px;padding:0;border:0;background:none}
.rich-editor{min-height:220px;border:1px solid var(--line);border-radius:0 0 10px 10px;padding:16px;line-height:1.7;outline:none;margin-bottom:14px}
.rich-editor:empty:before{content:attr(data-placeholder);color:var(--faint)}
.rich-editor:focus{border-color:#2F8F63;box-shadow:0 0 0 2px rgba(47,143,99,.12)}
.rich-output{line-height:1.75;margin-top:14px;overflow-wrap:anywhere}
.rich-output img,.rich-editor img{max-width:100%;height:auto;border-radius:10px}
.rich-output table,.rich-editor table{width:100%;border-collapse:collapse;margin:12px 0}
.rich-output th,.rich-output td,.rich-editor th,.rich-editor td{border:1px solid var(--line);padding:8px;text-align:left}
.association-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}
.contribution-card{margin:16px 0;background:linear-gradient(135deg,#F4FBF7,#fff)}
.points-total{display:flex;align-items:baseline;gap:9px;margin:8px 0}
.points-total b{font-size:34px;color:#1E7B45}.points-total span{color:var(--muted);font-weight:700}
@media(max-width:720px){.association-grid{grid-template-columns:1fr}.resource-subnav a{flex:1;text-align:center;padding:10px 8px}.timer-page .tk-controls{grid-template-columns:1fr 1fr}}

/* ==== Tour card v7: align with motion bank language (2026-11-01) ==== */
.tour-grid{gap:16px}
.tour-card{background:#fff;border:1px solid #E5E9E8;border-radius:12px;box-shadow:0 1px 3px rgba(20,40,30,.05)}
.tour-card:hover{border-color:#C9D6D0;box-shadow:0 6px 20px rgba(20,40,30,.08);transform:none}
.tour-body{padding:18px 20px 16px}
@media(min-width:768px){.tour-body{padding:20px 20px 16px}}
.tour-name{font-size:17px;font-weight:700;color:#172124;letter-spacing:-.2px;line-height:1.35}
.tour-ext{width:28px;height:28px;color:#889295}
.tour-ext:hover{background:#F5F9F8;color:#2F8F63}
.tour-sub{margin-top:8px;font-size:12.5px;color:#889295}
.tour-dt{font-weight:500}
.tour-mode{background:#E6F4EC;color:#24714E}
.tour-mode.off{background:#F1F3F2;color:#889295}
.tour-region{color:#889295}
.tour-tags{margin-top:9px}
.tour-tags .ttag{background:#F4F6F5;color:#667178;border:none;font-weight:500}
.tour-div{background:#E5E9E8;margin:14px -20px 0}
@media(min-width:768px){.tour-div{margin:14px -20px 0}}
.tour-actions{margin-top:12px}
.tour-det{color:#2F6B52;font-size:13px}
.tour-det:hover{color:#2F8F63}
.rsvp-btn{color:#667178;border-radius:999px}
.rsvp-btn:hover{background:#F5F9F8;color:#2F8F63}
.rsvp-btn.on{background:#E6F4EC;color:#24714E}
.going-line{color:#667178}
.tc-h{color:#889295}
.tc-box .tc-row{background:#F8FAF9;color:#3C4A44}
.tc-box .tc-row b{color:#172124}
.tc-name{color:#2F6B52}
.lfm-tg{border:1.5px solid #2F8F63;background:#fff;color:#2F8F63}
.lfm-tg:hover{background:#E7F4EC;color:#2F8F63;border-color:#2F8F63}
.lfm-tg.on{background:#2F8F63;border-color:#2F8F63;color:#fff}
.tc-in{background:#F4F6F5}
.tc-in:focus-within{border-color:#2F8F63;background:#fff}
.tc-in input{color:#172124}
.tc-send{background:#2F8F63;border-radius:999px}
.tc-send:hover{background:#2A7A55}
.tc-box .hint{color:#889295}
.tour-more-toggle{color:#667178;border-radius:10px}
.tour-more-toggle:hover{background:#F5F9F8;color:#172124}
.cal-cell{border-color:#E5E9E8}
#cal-pop{border-color:#E5E9E8;border-radius:12px}
.cal-card{background:#F8FAF9}
.cal-card:hover{background:#F5F9F8}
@media (max-width:640px){
  .tour-name{font-size:16px}
  .tour-div{margin:14px -16px 0}
}
