/* ══════════════════════════════════════════════════════════
   tool-kit.css — 工具箱设计系统
   便签待办 · 计算器 · 随机决定器 · 日历放大视图 共用
   与个人中心 v3 同一套：发丝边 + 玻璃面 + 樱粉 / 紫 / 金点缀
   ══════════════════════════════════════════════════════════ */
:root{
  --tk-bg:linear-gradient(180deg,rgba(31,25,46,.97),rgba(18,14,28,.98));
  --tk-solid:#17121F;
  --tk-bg-2:rgba(255,255,255,.035);
  --tk-bg-3:rgba(255,255,255,.065);
  --tk-bg-4:rgba(255,255,255,.1);
  --tk-line:rgba(255,255,255,.075);
  --tk-line-2:rgba(255,255,255,.14);
  --tk-ink:#F2EDF8;
  --tk-ink-2:rgba(242,237,248,.66);
  --tk-ink-3:rgba(242,237,248,.40);
  --tk-petal:#F7A8C8;
  --tk-violet:#A98BFF;
  --tk-gold:#F5C563;
  --tk-mint:#5DE0A6;
  --tk-sky:#8AB4FF;
  --tk-red:#FB7185;
  --tk-grad:linear-gradient(135deg,#F28CB5,#B07BFF);
  --tk-spring:cubic-bezier(.16,1,.3,1);
  --tk-bounce:cubic-bezier(.34,1.56,.64,1);
  --tk-num:"SF Pro Display","Segoe UI Variable Display","Segoe UI",system-ui,-apple-system,"PingFang SC","Microsoft YaHei",sans-serif;
  --tk-shadow:0 34px 80px -28px rgba(0,0,0,.78),0 0 0 1px rgba(255,183,197,.06);
}
body.theme-light{
  --tk-bg:linear-gradient(180deg,rgba(255,252,254,.98),rgba(255,245,250,.98));
  --tk-solid:#FFF8FB;
  --tk-bg-2:rgba(120,60,95,.04);
  --tk-bg-3:rgba(120,60,95,.075);
  --tk-bg-4:rgba(120,60,95,.12);
  --tk-line:rgba(90,40,70,.09);
  --tk-line-2:rgba(90,40,70,.17);
  --tk-ink:#2E1F2A;
  --tk-ink-2:rgba(46,31,42,.68);
  --tk-ink-3:rgba(46,31,42,.44);
  --tk-petal:#D9467E;
  --tk-violet:#7453DB;
  --tk-gold:#B7790C;
  --tk-mint:#0F8A62;
  --tk-sky:#3D6FD9;
  --tk-red:#DC2F55;
  --tk-shadow:0 30px 70px -30px rgba(120,50,90,.4),0 0 0 1px rgba(200,120,150,.12);
}

/* ── 通用零件 ──────────────────────────────────────────── */
.tk-pop svg.ico,#bigcal svg.ico,#rnd-modal svg.ico{width:16px;height:16px;flex:none}
.tk-sp{flex:1 1 auto;min-width:4px}
.tk-head{display:flex;align-items:center;gap:8px;padding:12px 12px 10px 14px;flex:none;position:relative}
.tk-head-ic{width:30px;height:30px;border-radius:10px;display:grid;place-items:center;flex:none;color:var(--tk-petal);
  background:linear-gradient(145deg,rgba(247,168,200,.2),rgba(169,139,255,.12));box-shadow:inset 0 0 0 1px rgba(247,168,200,.22)}
.tk-head-t{font-size:14px;font-weight:650;letter-spacing:.02em;color:var(--tk-ink)}

.tk-seg{display:inline-flex;gap:2px;padding:3px;border-radius:12px;background:var(--tk-bg-2);box-shadow:inset 0 0 0 1px var(--tk-line)}
.tk-seg button{position:relative;border:0;background:none;cursor:pointer;padding:6px 12px;border-radius:9px;font:inherit;font-size:12.5px;font-weight:600;
  color:var(--tk-ink-2);display:inline-flex;align-items:center;gap:6px;transition:color .18s,background .18s}
.tk-seg button:hover{color:var(--tk-ink)}
.tk-seg button.on{color:#fff;background:var(--tk-grad);box-shadow:0 6px 16px -8px rgba(242,140,181,.9)}
.tk-seg button em{font-style:normal;font-size:10.5px;font-weight:700;min-width:16px;padding:0 4px;height:16px;line-height:16px;border-radius:8px;text-align:center;
  background:var(--tk-bg-3);color:var(--tk-ink-2);font-variant-numeric:tabular-nums}
.tk-seg button em:empty{display:none}
.tk-seg button.on em{background:rgba(255,255,255,.25);color:#fff}
.tk-seg.sm button{padding:5px 9px;font-size:12px}

.tk-icon-btn{width:32px;height:32px;border-radius:10px;border:0;cursor:pointer;display:inline-grid;place-items:center;flex:none;
  background:transparent;color:var(--tk-ink-2);transition:background .16s,color .16s,transform .16s var(--tk-spring)}
.tk-icon-btn:hover{background:var(--tk-bg-3);color:var(--tk-ink)}
.tk-icon-btn:active{transform:scale(.9)}
.tk-icon-btn.sm{width:28px;height:28px;border-radius:8px}
.tk-icon-btn.sm svg.ico{width:15px;height:15px}
.tk-icon-btn.on{color:var(--tk-petal);background:rgba(247,168,200,.12)}
.tk-icon-btn.danger:hover{color:var(--tk-red);background:rgba(251,113,133,.12)}
.tk-icon-btn:focus-visible,.tk-btn:focus-visible,.tk-seg button:focus-visible{outline:2px solid var(--tk-petal);outline-offset:2px}

.tk-btn{height:34px;padding:0 13px;border-radius:11px;border:0;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:6px;flex:none;
  font:inherit;font-size:13px;font-weight:650;color:#fff;background:var(--tk-grad);box-shadow:0 10px 22px -12px rgba(242,140,181,.95);
  transition:transform .16s var(--tk-spring),filter .16s,box-shadow .16s}
.tk-btn:hover{filter:brightness(1.07);transform:translateY(-1px)}
.tk-btn:active{transform:scale(.96)}
.tk-btn.sm{height:30px;padding:0 11px;font-size:12.5px;border-radius:9px}
.tk-btn.ghost{color:var(--tk-ink);background:var(--tk-bg-3);box-shadow:inset 0 0 0 1px var(--tk-line-2)}
.tk-btn.ghost:hover{background:var(--tk-bg-4);filter:none}
.tk-link{border:0;background:none;cursor:pointer;padding:4px 6px;border-radius:7px;font:inherit;font-size:12px;font-weight:600;color:var(--tk-violet);display:inline-flex;align-items:center;gap:4px}
.tk-link svg.ico{width:13px;height:13px}
.tk-link:hover{background:var(--tk-bg-3)}
.tk-link.danger{color:var(--tk-ink-3)}
.tk-link.danger:hover{color:var(--tk-red)}

.tk-search{flex:1;min-width:0;height:34px;display:flex;align-items:center;gap:7px;padding:0 11px;border-radius:11px;cursor:text;
  background:var(--tk-bg-2);box-shadow:inset 0 0 0 1px var(--tk-line);color:var(--tk-ink-3);transition:box-shadow .18s}
.tk-search:focus-within{box-shadow:inset 0 0 0 1px var(--tk-petal),0 0 0 4px rgba(247,168,200,.12);color:var(--tk-petal)}
.tk-search input{flex:1;min-width:0;border:0;outline:0;background:none;color:var(--tk-ink);font:inherit;font-size:13px;padding:0;height:100%}
.tk-search input::placeholder{color:var(--tk-ink-3)}

.tk-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;text-align:center;padding:30px 18px;color:var(--tk-ink-3)}
.tk-empty>svg{width:120px;height:90px;color:var(--tk-petal);margin-bottom:4px}
.tk-empty>svg.ico{width:26px;height:26px;color:var(--tk-ink-3)}
.tk-empty b{font-size:13.5px;font-weight:650;color:var(--tk-ink-2)}
.tk-empty span{font-size:12px;line-height:1.6;max-width:240px}
.tk-empty .tk-btn{margin-top:8px}
.tk-empty.sm{padding:18px 10px}

/* 面板内提示条 */
.tk-snack{position:absolute;left:12px;right:12px;bottom:12px;z-index:20;display:flex;align-items:center;gap:10px;padding:9px 9px 9px 14px;border-radius:13px;
  font-size:12.5px;color:#fff;background:rgba(22,17,32,.96);box-shadow:0 16px 36px -12px rgba(0,0,0,.7),inset 0 0 0 1px rgba(255,255,255,.1);
  opacity:0;transform:translateY(10px) scale(.98);transition:opacity .2s,transform .26s var(--tk-spring)}
.tk-snack.in{opacity:1;transform:none}
/* 淡出后必须真的收起来：站里没有全局的 [hidden]{display:none}，
   否则这条透明的提示条会一直盖在面板底部，把下面的按钮点击全吞掉 */
.tk-snack[hidden]{display:none}
.tk-snack:not(.in){pointer-events:none}
.tk-snack span{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tk-snack button{border:0;cursor:pointer;display:inline-flex;align-items:center;gap:5px;height:28px;padding:0 10px;border-radius:9px;font:inherit;font-size:12px;font-weight:650;
  color:#FFD2E3;background:rgba(247,168,200,.16)}
.tk-snack button svg.ico{width:14px;height:14px}
.tk-snack button:hover{background:rgba(247,168,200,.28)}
body.theme-light .tk-snack{background:rgba(46,31,42,.95)}

/* ── 导航栏弹出面板（便签 / 计算器）的外壳 ──────────────── */
#note-panel.tk-pop,#calc-panel.tk-pop{
  padding:0;display:flex;flex-direction:column;overflow:hidden;color:var(--tk-ink);
  background:var(--tk-bg);border:1px solid var(--tk-line-2);border-radius:20px;
  box-shadow:var(--tk-shadow);backdrop-filter:blur(26px) saturate(1.4);-webkit-backdrop-filter:blur(26px) saturate(1.4);
  max-height:min(660px,calc(100dvh - 88px));
}
#note-panel.tk-pop{width:392px}
#calc-panel.tk-pop{width:336px}
@media (max-width:768px){
  #note-panel.tk-pop,#calc-panel.tk-pop{padding:0 0 env(safe-area-inset-bottom) !important;max-height:90dvh !important;overflow:hidden !important}
  #note-panel.tk-pop::before,#calc-panel.tk-pop::before{margin:8px auto 0 !important;opacity:.6}
  #note-panel.tk-pop{min-height:62dvh}
}

/* ══ 便签 ═════════════════════════════════════════════════ */
.nt-root .nt-tabs{margin-left:2px}
.nt-view{display:flex;flex-direction:column;min-height:0;flex:1 1 auto}
.nt-view[hidden]{display:none}
.nt-toolbar{display:flex;gap:8px;padding:0 14px 10px;flex:none}
.nt-list{flex:1 1 auto;min-height:210px;overflow-y:auto;padding:2px 14px 16px;display:flex;flex-direction:column;gap:9px;overscroll-behavior:contain;scrollbar-width:thin}
.nt-group{display:flex;align-items:center;gap:5px;font-size:11px;font-weight:700;letter-spacing:.08em;color:var(--tk-ink-3);padding:4px 2px 0}
.nt-group svg.ico{width:12px;height:12px}
.nt-card{position:relative;padding:12px 12px 8px 16px;border-radius:14px;cursor:pointer;text-align:left;outline:0;
  background:linear-gradient(135deg,color-mix(in srgb,var(--nc) 12%,transparent),color-mix(in srgb,var(--nc) 4%,transparent)),var(--tk-bg-2);
  box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--nc) 18%,var(--tk-line));
  transition:transform .2s var(--tk-spring),box-shadow .2s;animation:tkIn .32s var(--tk-spring) both}
@supports not (background:color-mix(in srgb,red 10%,transparent)){.nt-card{background:var(--tk-bg-3);box-shadow:inset 0 0 0 1px var(--tk-line)}}
.nt-card::before{content:'';position:absolute;left:0;top:12px;bottom:12px;width:3px;border-radius:0 3px 3px 0;background:var(--nc)}
.nt-card:not(.editing):hover{transform:translateY(-1px);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--nc) 38%,var(--tk-line)),0 12px 24px -16px color-mix(in srgb,var(--nc) 70%,transparent)}
.nt-card:focus-visible{box-shadow:inset 0 0 0 2px var(--nc)}
.nt-card h4{margin:0 0 3px;font-size:14px;font-weight:650;line-height:1.4;color:var(--tk-ink);word-break:break-word}
.nt-card p{margin:0;font-size:12.8px;line-height:1.65;color:var(--tk-ink-2);white-space:pre-wrap;word-break:break-word;
  display:-webkit-box;-webkit-line-clamp:6;-webkit-box-orient:vertical;overflow:hidden}
.nt-card p.nt-ph{color:var(--tk-ink-3);font-style:italic}
.nt-card mark{background:rgba(245,197,99,.35);color:inherit;border-radius:3px;padding:0 1px}
.nt-card footer{display:flex;align-items:center;gap:2px;margin-top:6px;min-height:28px}
.nt-card time{font-size:11px;color:var(--tk-ink-3);font-variant-numeric:tabular-nums}
.nt-card:not(.editing) footer .tk-icon-btn{opacity:0;transition:opacity .15s}
.nt-card:not(.editing):hover footer .tk-icon-btn,.nt-card:not(.editing):focus-within footer .tk-icon-btn,.nt-card footer .tk-icon-btn.on{opacity:1}
@media (hover:none){.nt-card:not(.editing) footer .tk-icon-btn{opacity:.75}}
.nt-card.pinned:not(.editing) footer .tk-icon-btn.on{color:var(--nc)}
.nt-card.editing{cursor:default;padding:12px 12px 8px 16px;
  box-shadow:inset 0 0 0 1.5px color-mix(in srgb,var(--nc) 60%,transparent),0 18px 34px -20px color-mix(in srgb,var(--nc) 80%,transparent)}
.nt-ed-title,.nt-ed-body{display:block;width:100%;border:0;outline:0;background:none;color:var(--tk-ink);font:inherit;padding:0;margin:0;resize:none}
.nt-ed-title{font-size:15px;font-weight:650;height:26px}
.nt-ed-body{font-size:13.2px;line-height:1.7;color:var(--tk-ink-2);min-height:84px;margin-top:4px;scrollbar-width:thin}
.nt-ed-title::placeholder,.nt-ed-body::placeholder{color:var(--tk-ink-3)}
.nt-colors{display:flex;gap:6px;align-items:center}
.nt-dot{width:16px;height:16px;border-radius:50%;border:0;padding:0;cursor:pointer;background:var(--c);box-shadow:0 0 0 2px transparent;transition:transform .16s var(--tk-bounce),box-shadow .16s}
.nt-dot:hover{transform:scale(1.18)}
.nt-dot.on{box-shadow:0 0 0 2px var(--tk-solid),0 0 0 3.5px var(--c);transform:scale(1.05)}
.nt-count{font-size:10.5px;color:var(--tk-ink-3);font-variant-numeric:tabular-nums;margin-right:2px}
.nt-empty-art>svg{color:var(--tk-petal)}

/* ══ 待办 ═════════════════════════════════════════════════ */
.td-add{display:flex;align-items:center;gap:8px;margin:0 14px 10px;padding:4px 4px 4px 10px;border-radius:13px;flex:none;
  background:var(--tk-bg-2);box-shadow:inset 0 0 0 1px var(--tk-line);transition:box-shadow .18s}
.td-add:focus-within{box-shadow:inset 0 0 0 1px var(--tk-petal),0 0 0 4px rgba(247,168,200,.12)}
.td-add-ic{color:var(--tk-petal);display:grid}
.td-add input{flex:1;min-width:0;border:0;outline:0;background:none;color:var(--tk-ink);font:inherit;font-size:13.5px;height:32px}
.td-add input::placeholder{color:var(--tk-ink-3)}
.td-bar{display:flex;align-items:center;gap:8px;padding:0 14px 8px;flex:none}
.td-prog{width:70px;height:6px;border-radius:6px;background:var(--tk-bg-3);overflow:hidden}
.td-prog i{display:block;height:100%;width:0;border-radius:6px;background:linear-gradient(90deg,var(--tk-mint),#8AE8C4);transition:width .5s var(--tk-spring)}
.td-prog-t{font-size:11.5px;font-weight:650;color:var(--tk-ink-3);font-variant-numeric:tabular-nums;min-width:28px;text-align:right}
.td-list{flex:1 1 auto;min-height:210px;overflow-y:auto;padding:2px 10px 16px;overscroll-behavior:contain;scrollbar-width:thin}
.td-group{display:flex;flex-direction:column;gap:2px}
.td-item{display:flex;align-items:center;gap:6px;min-height:42px;padding:4px 4px 4px 0;border-radius:11px;position:relative;background:transparent;transition:background .15s}
.td-item:hover{background:var(--tk-bg-2)}
.td-item.enter{animation:tdEnter .36s var(--tk-spring)}
@keyframes tdEnter{from{opacity:0;transform:translateY(-6px) scale(.98)}to{opacity:1;transform:none}}
.td-grip{width:18px;height:28px;display:grid;place-items:center;color:var(--tk-ink-3);cursor:grab;opacity:0;flex:none;touch-action:none;transition:opacity .15s}
.td-grip svg.ico{width:14px;height:14px}
.td-item:hover .td-grip{opacity:.8}
.td-grip.ghost{cursor:default}
@media (hover:none){.td-grip{opacity:.5}}
.td-check{width:22px;height:22px;flex:none;border-radius:7px;border:0;padding:0;cursor:pointer;display:grid;place-items:center;
  background:transparent;box-shadow:inset 0 0 0 1.6px var(--tk-line-2);transition:background .2s,box-shadow .2s,transform .16s var(--tk-bounce)}
.td-check:hover{box-shadow:inset 0 0 0 1.6px var(--tk-mint)}
.td-check:active{transform:scale(.85)}
.td-check svg{width:16px;height:16px;fill:none;stroke:#fff;stroke-width:2.6;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:18;stroke-dashoffset:18;transition:stroke-dashoffset .3s var(--tk-spring) .05s}
.td-item.star .td-check{box-shadow:inset 0 0 0 1.6px color-mix(in srgb,var(--tk-gold) 70%,transparent)}
.td-item.done .td-check{background:linear-gradient(135deg,#43C98A,#23A56C);box-shadow:none}
.td-item.done .td-check svg{stroke-dashoffset:0}
.td-item.checking .td-check{animation:tdPop .4s var(--tk-bounce)}
@keyframes tdPop{40%{transform:scale(1.25)}}
.td-text{flex:1;min-width:0;font-size:13.5px;line-height:1.5;color:var(--tk-ink);word-break:break-word;padding:5px 2px;cursor:text;
  text-decoration:line-through 1.5px;text-decoration-color:transparent;transition:color .3s,text-decoration-color .3s}
.td-item.done .td-text{color:var(--tk-ink-3);text-decoration-color:var(--tk-ink-3)}
.td-edit{flex:1;min-width:0;height:30px;border:0;outline:0;border-radius:8px;padding:0 8px;font:inherit;font-size:13.5px;color:var(--tk-ink);
  background:var(--tk-bg-3);box-shadow:inset 0 0 0 1px var(--tk-petal)}
.td-star,.td-del{opacity:0;transition:opacity .15s}
.td-item:hover .td-star,.td-item:hover .td-del,.td-star.on{opacity:1}
@media (hover:none){.td-star,.td-del{opacity:.7}}
.td-star.on{color:var(--tk-gold);background:transparent}
.td-star.on svg path:first-child{fill-opacity:.9}
.td-item.star:not(.done)::before{content:'';position:absolute;left:-4px;top:10px;bottom:10px;width:3px;border-radius:0 3px 3px 0;background:var(--tk-gold)}
.td-done-hd{display:flex;align-items:center;gap:6px;padding:12px 2px 4px 4px}
.td-fold{border:0;background:none;cursor:pointer;display:inline-flex;align-items:center;gap:5px;padding:4px 6px;border-radius:8px;font:inherit;font-size:12px;font-weight:650;color:var(--tk-ink-2)}
.td-fold:hover{background:var(--tk-bg-3)}
.td-fold svg.ico{width:14px;height:14px;transition:transform .22s var(--tk-spring)}
.td-fold.folded svg.ico{transform:rotate(-90deg)}
.td-fold em{font-style:normal;color:var(--tk-ink-3);font-variant-numeric:tabular-nums}
.td-group.done .td-item{opacity:.85}
.td-allclear{display:flex;align-items:center;gap:8px;justify-content:center;padding:18px 10px;font-size:12.5px;color:var(--tk-mint)}
.td-allclear svg.ico{width:18px;height:18px}
/* 拖拽占位（dragsort.js） */
.td-group .ds-placeholder{border-radius:11px}

@keyframes tkIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}

/* ══ 计算器 ═══════════════════════════════════════════════ */
.cx-chip{height:24px;padding:0 8px;border-radius:7px;border:0;cursor:pointer;font:inherit;font-size:10.5px;font-weight:750;letter-spacing:.08em;
  color:var(--tk-violet);background:rgba(169,139,255,.14);box-shadow:inset 0 0 0 1px rgba(169,139,255,.26)}
.cx-chip:hover{background:rgba(169,139,255,.22)}
.cx-screen{position:relative;margin:0 12px;padding:10px 16px 12px;border-radius:16px;text-align:right;cursor:pointer;min-height:112px;display:flex;flex-direction:column;justify-content:flex-end;
  background:linear-gradient(180deg,rgba(0,0,0,.22),rgba(0,0,0,.1));box-shadow:inset 0 0 0 1px var(--tk-line),inset 0 1px 12px rgba(0,0,0,.2);overflow:hidden}
body.theme-light .cx-screen{background:linear-gradient(180deg,rgba(120,60,95,.06),rgba(120,60,95,.03))}
.cx-screen.shake{animation:cxShake .36s}
@keyframes cxShake{20%{transform:translateX(-5px)}40%{transform:translateX(4px)}60%{transform:translateX(-3px)}80%{transform:translateX(2px)}}
.cx-prev{font-size:12.5px;color:var(--tk-ink-3);min-height:18px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;direction:rtl;text-align:right;font-family:var(--tk-num)}
.cx-main{font-family:var(--tk-num);font-size:36px;font-weight:400;line-height:1.2;color:var(--tk-ink);white-space:nowrap;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;
  letter-spacing:-.01em;font-variant-numeric:tabular-nums;transition:font-size .18s var(--tk-spring)}
.cx-main::-webkit-scrollbar{display:none}
.cx-main i{font-style:normal}
.cx-t-op{color:var(--tk-petal)}
.cx-t-op.u{margin-right:1px}
.cx-t-fn{color:var(--tk-violet)}
.cx-t-c{color:var(--tk-gold)}
.cx-t-p{color:var(--tk-ink-2)}
.cx-t-ghost{color:var(--tk-ink-3);opacity:.5}
.cx-zero{color:var(--tk-ink-3)}
.cx-main.result{font-size:40px;font-weight:500}
.cx-main.pop{animation:cxPop .34s var(--tk-spring)}
@keyframes cxPop{from{opacity:.4;transform:translateY(8px)}to{opacity:1;transform:none}}
.cx-sub{font-family:var(--tk-num);font-size:16px;color:var(--tk-ink-3);min-height:22px;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-variant-numeric:tabular-nums}
.cx-sub.hint{font-size:11.5px;opacity:0;transition:opacity .2s}
.cx-screen:hover .cx-sub.hint,.cx-sub.hint.ok{opacity:1}
.cx-sub.ok{color:var(--tk-mint)}
.cx-err{position:absolute;left:14px;top:10px;font-size:11.5px;font-weight:600;color:var(--tk-red);opacity:0;transform:translateY(-4px);transition:.2s}
.cx-err.show{opacity:1;transform:none}
.cx-pad-wrap{position:relative;padding:10px 12px 14px}
.cx-sci{display:none;grid-template-columns:repeat(5,1fr);gap:6px;margin-bottom:8px}
.cx-root.sci .cx-sci{display:grid;animation:tkIn .26s var(--tk-spring)}
.cx-pad{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
.cx-k{position:relative;height:54px;border:0;border-radius:16px;cursor:pointer;font-family:var(--tk-num);font-size:21px;font-weight:450;color:var(--tk-ink);
  background:var(--tk-bg-3);box-shadow:inset 0 0 0 1px var(--tk-line),inset 0 1px 0 rgba(255,255,255,.04);display:grid;place-items:center;overflow:hidden;
  user-select:none;-webkit-user-select:none;transition:background .12s,transform .1s,box-shadow .12s}
.cx-k:hover{background:var(--tk-bg-4)}
.cx-k:active,.cx-k.kbd{transform:scale(.94)}
.cx-k.hit::after{content:'';position:absolute;inset:0;border-radius:inherit;background:radial-gradient(circle at center,rgba(255,255,255,.28),transparent 70%);animation:cxHit .38s ease-out forwards;pointer-events:none}
@keyframes cxHit{from{opacity:1;transform:scale(.4)}to{opacity:0;transform:scale(1.4)}}
.cx-k svg.ico{width:22px;height:22px}
.cx-k.mod{color:var(--tk-ink-2);font-size:18px;background:var(--tk-bg-2)}
.cx-k.clr{color:var(--tk-red);font-size:16px;font-weight:650;background:rgba(251,113,133,.1);box-shadow:inset 0 0 0 1px rgba(251,113,133,.2)}
.cx-k.op{color:var(--tk-petal);font-size:24px;background:rgba(247,168,200,.12);box-shadow:inset 0 0 0 1px rgba(247,168,200,.2)}
.cx-k.op:hover{background:rgba(247,168,200,.2)}
.cx-k.eq{color:#fff;font-size:26px;background:var(--tk-grad);box-shadow:0 12px 24px -12px rgba(242,140,181,.95)}
.cx-k.eq:hover{filter:brightness(1.08)}
.cx-k.fn{height:38px;border-radius:11px;font-size:13.5px;font-weight:550;color:var(--tk-violet);background:rgba(169,139,255,.09);box-shadow:inset 0 0 0 1px rgba(169,139,255,.16)}
.cx-k.fn:hover{background:rgba(169,139,255,.17)}
.cx-k.kbd{box-shadow:inset 0 0 0 1.5px var(--tk-petal)}
.cx-hist{position:absolute;inset:6px 12px 14px;z-index:5;display:flex;flex-direction:column;border-radius:16px;overflow:hidden;
  background:var(--tk-solid);box-shadow:inset 0 0 0 1px var(--tk-line-2),0 -10px 30px -10px rgba(0,0,0,.4);animation:cxHist .26s var(--tk-spring)}
.cx-hist[hidden]{display:none}
@keyframes cxHist{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:none}}
.cx-hist-hd{display:flex;align-items:center;padding:10px 10px 6px 14px;font-size:12.5px;color:var(--tk-ink-2)}
.cx-hist-list{flex:1;overflow-y:auto;padding:0 6px 8px;scrollbar-width:thin}
.cx-hist-it{display:grid;grid-template-columns:1fr auto;grid-template-areas:"e t" "r r";gap:1px 8px;width:100%;text-align:right;border:0;background:none;cursor:pointer;
  padding:8px 10px;border-radius:10px;font:inherit;color:var(--tk-ink)}
.cx-hist-it:hover{background:var(--tk-bg-3)}
.cx-hist-it .e{grid-area:e;font-size:12px;color:var(--tk-ink-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-family:var(--tk-num)}
.cx-hist-it .r{grid-area:r;font-size:18px;font-family:var(--tk-num);font-variant-numeric:tabular-nums}
.cx-hist-it time{grid-area:t;font-size:10.5px;color:var(--tk-ink-3);text-align:left}
@media (max-width:768px){
  .cx-k{height:58px}
  .cx-root.sci .cx-k:not(.fn){height:50px}
}

/* ══ 小日历：放大按钮 + 农历提示 ═══════════════════════════ */
.cal-today-row{gap:6px}
.cal-today-row .cal-today-val{margin-right:auto}
.cal-zoom-btn{display:inline-flex;align-items:center;gap:4px;font-size:.7rem;background:linear-gradient(135deg,rgba(247,168,200,.18),rgba(169,139,255,.14));
  border:1px solid rgba(247,168,200,.32);color:var(--pink-sakura,#ffb7c5);padding:3px 10px 3px 8px;border-radius:20px;cursor:pointer;font-family:var(--font-body);transition:all .15s}
.cal-zoom-btn svg.ico{width:12px;height:12px}
.cal-zoom-btn:hover{border-color:var(--pink-sakura,#ffb7c5);filter:brightness(1.1)}
.cal-festival-tip{flex-wrap:wrap;row-gap:2px}
.cal-tip-lunar{flex-basis:100%;font-size:.68rem;opacity:.72;letter-spacing:.5px}

/* ══ 日历放大视图 ═════════════════════════════════════════ */
html.bc-lock{overflow:hidden}
#bigcal-mask{position:fixed;inset:0;z-index:10050;display:none;align-items:center;justify-content:center;padding:20px;
  background:rgba(6,4,14,.55);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}
#bigcal-mask.open{display:flex}
#bigcal-mask.closing{pointer-events:none}
#bigcal{position:relative;width:min(1140px,100%);height:min(780px,calc(100dvh - 40px));display:flex;flex-direction:column;border-radius:24px;overflow:hidden;
  color:var(--tk-ink);background:var(--tk-bg);box-shadow:var(--tk-shadow),inset 0 0 0 1px var(--tk-line-2)}
#bigcal::after{content:'';position:absolute;top:0;left:30px;right:30px;height:1px;pointer-events:none;background:linear-gradient(90deg,transparent,rgba(255,183,197,.55) 35%,rgba(233,199,137,.5) 65%,transparent)}
.bc-head{display:flex;align-items:center;gap:8px;padding:14px 14px 12px 18px;flex:none;position:relative;border-bottom:1px solid var(--tk-line)}
.bc-title{border:0;background:none;cursor:pointer;display:inline-flex;align-items:center;gap:6px;padding:4px 8px;border-radius:10px;color:var(--tk-ink);font:inherit}
.bc-title b{font-size:20px;font-weight:700;letter-spacing:.02em;font-family:var(--tk-num)}
.bc-title svg.ico{width:16px;height:16px;color:var(--tk-ink-3);transition:transform .2s}
.bc-title:hover{background:var(--tk-bg-3)}
.bc-sub{font-size:12.5px;color:var(--tk-ink-3);letter-spacing:.06em}
.bc-nav{display:flex;align-items:center;gap:4px;padding:3px;border-radius:12px;background:var(--tk-bg-2);box-shadow:inset 0 0 0 1px var(--tk-line)}
.bc-picker{position:absolute;top:calc(100% - 4px);left:52px;z-index:10;width:260px;padding:10px;border-radius:16px;background:var(--tk-solid);
  box-shadow:0 24px 50px -16px rgba(0,0,0,.6),inset 0 0 0 1px var(--tk-line-2);animation:tkIn .22s var(--tk-spring)}
.bc-picker[hidden]{display:none}
.bc-pk-hd{display:flex;align-items:center;justify-content:space-between;padding:0 2px 8px}
.bc-pk-hd b{font-size:15px;font-family:var(--tk-num)}
.bc-pk-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:4px}
.bc-pk-grid button{height:36px;border:0;border-radius:9px;cursor:pointer;font:inherit;font-size:13px;color:var(--tk-ink-2);background:var(--tk-bg-2)}
.bc-pk-grid button:hover{background:var(--tk-bg-4);color:var(--tk-ink)}
.bc-pk-grid button.now{box-shadow:inset 0 0 0 1px var(--tk-petal)}
.bc-pk-grid button.on{color:#fff;background:var(--tk-grad)}
.bc-body{flex:1;min-height:0;display:grid;grid-template-columns:minmax(0,1fr) 300px}
.bc-main{display:flex;flex-direction:column;min-height:0;padding:10px 14px 14px 18px}
.bc-wd{display:grid;grid-template-columns:repeat(7,1fr);padding:0 0 6px}
.bc-wd span{font-size:12px;font-weight:650;color:var(--tk-ink-3);padding:0 10px;letter-spacing:.06em}
.bc-wd span.we{color:color-mix(in srgb,var(--tk-petal) 75%,var(--tk-ink-3))}
.bc-grid-wrap{flex:1;min-height:0;position:relative;overflow:hidden}
.bc-grid{height:100%;display:grid;grid-template-columns:repeat(7,1fr);grid-template-rows:repeat(var(--rows,6),minmax(0,1fr));gap:6px}
.bc-grid.slide-l{animation:bcSlideL .38s var(--tk-spring)}
.bc-grid.slide-r{animation:bcSlideR .38s var(--tk-spring)}
@keyframes bcSlideL{from{opacity:0;transform:translateX(36px)}to{opacity:1;transform:none}}
@keyframes bcSlideR{from{opacity:0;transform:translateX(-36px)}to{opacity:1;transform:none}}
.bc-cell{position:relative;display:flex;flex-direction:column;align-items:flex-start;gap:2px;min-width:0;padding:8px 10px;border:0;border-radius:14px;cursor:pointer;text-align:left;
  font:inherit;color:var(--tk-ink);background:var(--tk-bg-2);box-shadow:inset 0 0 0 1px var(--tk-line);overflow:hidden;
  transition:background .15s,box-shadow .15s,transform .18s var(--tk-spring)}
.bc-cell:hover{background:var(--tk-bg-3);box-shadow:inset 0 0 0 1px var(--tk-line-2)}
.bc-cell:active{transform:scale(.97)}
.bc-cell:focus-visible{outline:none;box-shadow:inset 0 0 0 2px var(--tk-violet)}
.bc-num{font-family:var(--tk-num);font-size:20px;font-weight:600;line-height:1.1;font-variant-numeric:tabular-nums;min-width:30px;height:30px;display:grid;place-items:center;margin:-3px 0 0 -5px;border-radius:10px}
.bc-lab{font-size:11.5px;line-height:1.3;color:var(--tk-ink-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.bc-cell.we .bc-num{color:color-mix(in srgb,var(--tk-petal) 80%,var(--tk-ink))}
.bc-cell.fest .bc-lab{color:var(--tk-petal);font-weight:650}
.bc-cell.term .bc-lab{color:var(--tk-mint);font-weight:600}
.bc-cell.lmonth .bc-lab{color:var(--tk-violet);font-weight:600}
.bc-cell.out{background:transparent;box-shadow:none;opacity:.42}
.bc-cell.out:hover{opacity:.7;background:var(--tk-bg-2)}
.bc-cell.today .bc-num{color:#fff;background:var(--tk-grad);box-shadow:0 8px 18px -8px rgba(242,140,181,.95)}
.bc-cell.sel{background:linear-gradient(145deg,rgba(247,168,200,.14),rgba(169,139,255,.08));box-shadow:inset 0 0 0 1.5px var(--tk-petal)}
.bc-ev{margin-top:auto;display:flex;align-items:center;gap:4px;max-width:100%;padding:2px 7px 2px 5px;border-radius:7px;font-size:11px;color:var(--tk-gold);
  background:rgba(245,197,99,.13);box-shadow:inset 0 0 0 1px rgba(245,197,99,.24)}
.bc-ev em{font-style:normal;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.bc-ev i{font-style:normal;opacity:.7;flex:none}

.bc-side{border-left:1px solid var(--tk-line);padding:16px 16px 16px;display:flex;flex-direction:column;gap:12px;min-height:0;overflow-y:auto;scrollbar-width:thin;
  background:linear-gradient(180deg,rgba(255,255,255,.02),transparent)}
.bc-hero{display:flex;align-items:center;gap:14px;padding:14px;border-radius:18px;background:var(--tk-bg-2);box-shadow:inset 0 0 0 1px var(--tk-line)}
.bc-hero-d{font-family:var(--tk-num);font-size:46px;font-weight:700;line-height:1;min-width:64px;text-align:center;letter-spacing:-.03em;
  background:linear-gradient(160deg,var(--tk-ink),color-mix(in srgb,var(--tk-petal) 70%,var(--tk-ink)));-webkit-background-clip:text;background-clip:text;color:transparent}
.bc-hero.is-today{background:linear-gradient(145deg,rgba(247,168,200,.16),rgba(169,139,255,.1));box-shadow:inset 0 0 0 1px rgba(247,168,200,.3)}
.bc-hero-r{display:flex;flex-direction:column;gap:4px;min-width:0}
.bc-hero-r b{font-size:15px;font-weight:650}
.bc-hero-r span{font-size:12.5px;color:var(--tk-ink-2)}
.bc-lunar{display:flex;align-items:baseline;gap:8px;padding:0 4px;flex-wrap:wrap}
.bc-lunar span{font-size:11px;font-weight:700;letter-spacing:.1em;color:var(--tk-ink-3)}
.bc-lunar b{font-size:17px;font-weight:650;color:var(--tk-ink);font-family:"Songti SC","STSong","Noto Serif SC",serif;letter-spacing:.06em}
.bc-lunar i{font-style:normal;font-size:12px;color:var(--tk-ink-2)}
.bc-tags{display:flex;flex-wrap:wrap;gap:6px}
.bc-tag{display:inline-flex;align-items:center;gap:4px;height:26px;padding:0 10px;border-radius:13px;font-size:12px;font-weight:650;color:var(--tk-petal);
  background:rgba(247,168,200,.13);box-shadow:inset 0 0 0 1px rgba(247,168,200,.26)}
.bc-tag.term{color:var(--tk-mint);background:rgba(93,224,166,.12);box-shadow:inset 0 0 0 1px rgba(93,224,166,.24)}
.bc-tag svg.ico{width:13px;height:13px}
.bc-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}
.bc-stats div{padding:9px 6px;border-radius:12px;text-align:center;background:var(--tk-bg-2);box-shadow:inset 0 0 0 1px var(--tk-line)}
.bc-stats b{display:block;font-family:var(--tk-num);font-size:17px;font-weight:650;font-variant-numeric:tabular-nums}
.bc-stats span{font-size:10.5px;color:var(--tk-ink-3)}
.bc-sec{display:flex;flex-direction:column;gap:4px}
.bc-sec.grow{flex:1;min-height:120px}
.bc-sec-hd{display:flex;align-items:center;gap:6px;font-size:12px;font-weight:700;color:var(--tk-ink-2);padding:2px 2px 4px}
.bc-sec-hd svg.ico{width:14px;height:14px;color:var(--tk-ink-3)}
.bc-cd{display:flex;align-items:center;gap:8px;padding:8px 10px;border:0;border-radius:11px;cursor:pointer;text-align:left;font:inherit;color:var(--tk-ink);
  background:rgba(245,197,99,.09);box-shadow:inset 0 0 0 1px rgba(245,197,99,.2)}
.bc-cd:hover{background:rgba(245,197,99,.16)}
.bc-cd b{flex:1;min-width:0;font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bc-cd i{font-style:normal;font-size:11.5px;color:var(--tk-ink-3)}
.bc-none{font-size:12px;color:var(--tk-ink-3);padding:6px 4px}
.bc-fest-list{display:flex;flex-direction:column;gap:2px;overflow-y:auto;min-height:0;scrollbar-width:thin}
.bc-fest{display:flex;align-items:center;gap:10px;padding:6px 8px;border:0;border-radius:9px;cursor:pointer;text-align:left;font:inherit;background:none;color:var(--tk-ink)}
.bc-fest:hover{background:var(--tk-bg-3)}
.bc-fest.on{background:rgba(247,168,200,.12)}
.bc-fest span{font-family:var(--tk-num);font-size:12px;color:var(--tk-ink-3);min-width:38px;font-variant-numeric:tabular-nums}
.bc-fest b{font-size:12.5px;font-weight:600;color:var(--tk-petal);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bc-fest.term b{color:var(--tk-mint)}

@media (max-width:980px){
  .bc-body{grid-template-columns:minmax(0,1fr) 260px}
  .bc-ev em{display:none}
}
@media (max-width:760px){
  #bigcal-mask{padding:0}
  #bigcal{width:100%;height:100dvh;border-radius:0}
  .bc-head{flex-wrap:wrap;padding:10px 10px 8px 12px;padding-top:max(10px,env(safe-area-inset-top))}
  .bc-head .tk-head-ic,.bc-sub{display:none}
  .bc-title b{font-size:18px}
  #bc-ws{order:5}
  .bc-picker{left:10px}
  .bc-body{display:flex;flex-direction:column;overflow-y:auto}
  .bc-main{flex:none;height:min(62dvh,470px);padding:8px 8px 10px}
  .bc-grid{gap:3px}
  .bc-cell{padding:5px 3px;align-items:center;border-radius:10px}
  .bc-num{font-size:16px;margin:0;min-width:26px;height:26px;border-radius:8px}
  .bc-lab{font-size:10px;text-align:center}
  .bc-wd span{text-align:center;padding:0;font-size:11px}
  .bc-ev{padding:0;background:none;box-shadow:none;margin-top:0;font-size:10px}
  .bc-ev em,.bc-ev i{display:none}
  .bc-side{border-left:0;border-top:1px solid var(--tk-line);overflow:visible;padding-bottom:calc(16px + env(safe-area-inset-bottom))}
  .bc-sec.grow{min-height:0}
}
@media (prefers-reduced-motion:reduce){
  .nt-card,.td-item.enter,.bc-grid.slide-l,.bc-grid.slide-r,.cx-main.pop,.cx-hist,.cx-k.hit::after{animation:none !important}
}

/* ══ 随机决定器 ═══════════════════════════════════════════ */
html.rnd-lock{overflow:hidden}
#rnd-modal{position:fixed;inset:0;z-index:9200;display:none;align-items:center;justify-content:center;padding:16px;
  background:rgba(6,4,14,.55);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px)}
#rnd-modal.open{display:flex;animation:rndFade .2s ease both}
#rnd-modal.closing{animation:rndFadeOut .2s ease both;pointer-events:none}
@keyframes rndFade{from{opacity:0}to{opacity:1}}
@keyframes rndFadeOut{to{opacity:0}}
#rnd-panel{position:relative;width:min(540px,100%);max-height:min(860px,calc(100dvh - 32px));display:flex;flex-direction:column;border-radius:24px;overflow:hidden;
  color:var(--tk-ink);background:var(--tk-bg);box-shadow:var(--tk-shadow),inset 0 0 0 1px var(--tk-line-2)}
#rnd-modal.open #rnd-panel{animation:rndPop .34s var(--tk-spring) both}
#rnd-modal.closing #rnd-panel{animation:rndOut .2s ease-in both}
@keyframes rndPop{from{opacity:0;transform:translateY(16px) scale(.97)}to{opacity:1;transform:none}}
@keyframes rndOut{to{opacity:0;transform:translateY(10px) scale(.98)}}
#rnd-panel::after{content:'';position:absolute;top:0;left:26px;right:26px;height:1px;pointer-events:none;background:linear-gradient(90deg,transparent,rgba(255,183,197,.55) 35%,rgba(233,199,137,.5) 65%,transparent)}
.rnd-tabs{position:relative;display:flex;gap:2px;margin:0 14px;padding:4px;border-radius:14px;background:var(--tk-bg-2);box-shadow:inset 0 0 0 1px var(--tk-line);flex:none}
.rnd-tabs button{position:relative;z-index:1;flex:1;min-width:0;height:48px;border:0;background:none;cursor:pointer;border-radius:10px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;
  font:inherit;font-size:11.5px;font-weight:650;color:var(--tk-ink-2);transition:color .2s}
.rnd-tabs button svg.ico{width:18px;height:18px}
.rnd-tabs button:hover{color:var(--tk-ink)}
.rnd-tabs button.on{color:#fff}
.rnd-tab-ind{position:absolute;z-index:0;top:4px;bottom:4px;left:0;border-radius:10px;background:var(--tk-grad);box-shadow:0 8px 18px -8px rgba(242,140,181,.9);
  transition:transform .34s var(--tk-spring),width .34s var(--tk-spring)}
.rnd-body{flex:1;min-height:0;overflow-y:auto;padding:14px 18px 10px;scrollbar-width:thin;overscroll-behavior:contain}
.rnd-pane{display:flex;flex-direction:column;gap:12px;animation:tkIn .3s var(--tk-spring)}
.rnd-pane[hidden]{display:none}
.rnd-hint{font-size:12.5px;color:var(--tk-ink-3)}
.rnd-hint.spinning{animation:rndBlink 1s ease-in-out infinite}
@keyframes rndBlink{50%{opacity:.45}}
.rnd-lbl{font-size:12px;color:var(--tk-ink-3);font-weight:600}
.rnd-result{position:relative;min-height:46px;display:flex;align-items:center;justify-content:center;gap:10px;flex-wrap:wrap;text-align:center}
.rnd-win{display:inline-flex;align-items:center;gap:8px;padding:8px 18px;border-radius:15px;animation:rndWin .5s var(--tk-bounce);
  background:color-mix(in srgb,var(--c) 18%,transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--c) 45%,transparent),0 12px 30px -16px var(--c)}
.rnd-win svg.ico{width:18px;height:18px;color:var(--c)}
.rnd-win b{font-size:21px;font-weight:750;letter-spacing:.02em;color:var(--tk-ink)}
@keyframes rndWin{from{opacity:0;transform:scale(.6)}to{opacity:1;transform:none}}
.rnd-confetti{position:absolute;left:50%;top:50%;width:0;height:0;pointer-events:none;z-index:4}
.rnd-confetti i{position:absolute;width:6px;height:10px;border-radius:2px;left:-3px;top:-5px;animation:rndConf 1.2s cubic-bezier(.2,.7,.4,1) both}
@keyframes rndConf{0%{transform:translate(0,0) rotate(0);opacity:1}60%{transform:translate(var(--x),var(--y)) rotate(var(--r));opacity:1}
  100%{transform:translate(calc(var(--x)*1.15),calc(var(--y) + 70px)) rotate(calc(var(--r)*1.6));opacity:0}}
.rnd-chip{height:28px;padding:0 11px;border:0;border-radius:14px;cursor:pointer;font:inherit;font-size:12px;font-weight:600;color:var(--tk-ink-2);
  background:var(--tk-bg-2);box-shadow:inset 0 0 0 1px var(--tk-line-2);transition:.16s}
.rnd-chip:hover{color:var(--tk-petal);box-shadow:inset 0 0 0 1px var(--tk-petal)}
.rnd-row{display:flex;align-items:center;gap:10px;font-size:12.5px;color:var(--tk-ink-2)}
.rnd-row label,.rd-ctrl label{cursor:pointer;user-select:none}
.tk-switch{position:relative;width:38px;height:22px;flex:none;border:0;border-radius:11px;cursor:pointer;padding:0;background:var(--tk-bg-4);box-shadow:inset 0 0 0 1px var(--tk-line-2);transition:background .22s}
.tk-switch i{position:absolute;top:3px;left:3px;width:16px;height:16px;border-radius:50%;background:#fff;box-shadow:0 2px 5px rgba(0,0,0,.3);transition:transform .26s var(--tk-bounce)}
.tk-switch.on{background:linear-gradient(135deg,#43C98A,#23A56C);box-shadow:none}
.tk-switch.on i{transform:translateX(16px)}
.rnd-step{display:inline-flex;align-items:center;gap:2px;padding:2px;border-radius:11px;background:var(--tk-bg-2);box-shadow:inset 0 0 0 1px var(--tk-line)}
.rnd-step button{width:30px;height:28px;border:0;border-radius:8px;background:none;color:var(--tk-ink-2);cursor:pointer;display:grid;place-items:center}
.rnd-step button:hover{background:var(--tk-bg-3);color:var(--tk-ink)}
.rnd-step b{min-width:26px;text-align:center;font-family:var(--tk-num);font-size:15px;font-variant-numeric:tabular-nums}
.rnd-foot{display:flex;align-items:center;gap:12px;padding:12px 16px 16px;border-top:1px solid var(--tk-line);flex:none}
.rnd-recent{flex:1;min-width:0;display:flex;align-items:center;gap:6px;overflow:hidden;white-space:nowrap;mask-image:linear-gradient(90deg,#000 80%,transparent);-webkit-mask-image:linear-gradient(90deg,#000 80%,transparent)}
.rnd-rc{flex:none;max-width:130px;overflow:hidden;text-overflow:ellipsis;height:24px;line-height:24px;padding:0 9px;border-radius:12px;font-size:11.5px;color:var(--tk-ink-2);background:var(--tk-bg-3)}
.rnd-rc.new{color:var(--tk-petal);background:rgba(247,168,200,.14);animation:rndWin .4s var(--tk-bounce)}
.rnd-go{height:44px;min-width:150px;border-radius:14px;font-size:14.5px}
.rnd-go svg.ico{width:18px;height:18px}
.rnd-go:disabled{opacity:.55;cursor:default;transform:none;filter:grayscale(.3)}

/* 转盘 */
.rw-stage{position:relative;width:min(300px,76vw);aspect-ratio:1;margin:6px auto 0}
.rw-glow{position:absolute;inset:-12%;border-radius:50%;background:radial-gradient(closest-side,rgba(247,168,200,.28),rgba(169,139,255,.12) 60%,transparent);filter:blur(6px);pointer-events:none}
#rw-canvas{position:absolute;inset:0;width:100%;height:100%;touch-action:none;cursor:grab;border-radius:50%;filter:drop-shadow(0 18px 30px rgba(0,0,0,.45))}
#rw-canvas.grab{cursor:grabbing}
.rw-pointer{position:absolute;left:50%;top:-8px;width:28px;height:36px;margin-left:-14px;z-index:3;transform-origin:50% 25%;pointer-events:none;filter:drop-shadow(0 4px 6px rgba(0,0,0,.45))}
.rw-pointer i{position:absolute;inset:0;clip-path:polygon(50% 100%,0 22%,18% 0,82% 0,100% 22%);background:linear-gradient(180deg,#FFF1C9,#F5C563 55%,#C98A12)}
.rw-pointer.tick{animation:rwTick .16s ease-out}
@keyframes rwTick{40%{transform:rotate(-16deg)}}
.rw-hub{position:absolute;left:50%;top:50%;width:64px;height:64px;margin:-32px 0 0 -32px;z-index:2;border:0;border-radius:50%;cursor:pointer;
  font:800 16px/1 var(--tk-num);letter-spacing:.06em;color:#fff;background:radial-gradient(circle at 35% 30%,#ffc3dc,#e0508e 60%,#8c3fd0);
  box-shadow:0 0 0 5px rgba(255,255,255,.9),0 0 0 7px rgba(245,197,99,.6),0 10px 24px rgba(0,0,0,.45);transition:transform .2s var(--tk-bounce)}
.rw-hub:hover{transform:scale(1.06)}
.rw-hub:active{transform:scale(.92)}
#rnd-modal.busy-wheel .rw-hub{pointer-events:none;filter:saturate(.7)}
/* 提示条放在底栏上方，出现的那几秒也不挡主按钮 */
#rnd-panel > .tk-snack{bottom:80px}
#calc-panel > .tk-snack{bottom:auto;top:58px}
.rw-presets{display:flex;flex-wrap:wrap;gap:6px;justify-content:center}
.rw-opts{display:flex;flex-wrap:wrap;gap:6px;max-height:104px;overflow-y:auto;scrollbar-width:thin}
.rw-opt{display:inline-flex;align-items:center;gap:6px;height:28px;padding:0 3px 0 10px;border-radius:14px;font-size:12.5px;color:var(--tk-ink);
  background:color-mix(in srgb,var(--c) 14%,transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--c) 34%,transparent)}
.rw-opt>i{width:8px;height:8px;border-radius:50%;background:var(--c)}
.rw-opt button{width:22px;height:22px;border:0;border-radius:50%;background:none;color:var(--tk-ink-3);cursor:pointer;display:grid;place-items:center}
.rw-opt button svg.ico{width:12px;height:12px}
.rw-opt button:hover{color:var(--tk-red);background:rgba(251,113,133,.14)}
.rw-add{display:flex;gap:8px}
.rw-add input,.rn-range input,#rdw-area{flex:1;min-width:0;height:36px;padding:0 12px;border:0;outline:0;border-radius:11px;font:inherit;font-size:13.5px;color:var(--tk-ink);
  background:var(--tk-bg-2);box-shadow:inset 0 0 0 1px var(--tk-line);transition:box-shadow .18s}
.rw-add input:focus,.rn-range input:focus,#rdw-area:focus{box-shadow:inset 0 0 0 1px var(--tk-petal),0 0 0 4px rgba(247,168,200,.12)}
.rw-add input::placeholder,#rdw-area::placeholder{color:var(--tk-ink-3)}

/* 硬币 */
.rc-stage{position:relative;height:250px;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;perspective:900px}
.rc-toss{width:148px;height:148px;margin-bottom:30px;transform-style:preserve-3d}
.rc-coin{position:relative;width:100%;height:100%;transform-style:preserve-3d}
.rc-face{position:absolute;inset:0;border-radius:50%;backface-visibility:hidden;-webkit-backface-visibility:hidden;
  box-shadow:0 0 0 3px rgba(0,0,0,.12),inset 0 -6px 12px rgba(0,0,0,.18)}
.rc-face svg{width:100%;height:100%;display:block}
.rc-face.back{transform:rotateX(180deg)}
.rc-shadow{position:absolute;bottom:14px;width:120px;height:18px;border-radius:50%;background:radial-gradient(closest-side,rgba(0,0,0,.55),transparent);opacity:.6}
.rc-stats{display:flex;flex-direction:column;align-items:center;gap:6px}
.rc-bar{width:100%;max-width:320px;height:8px;border-radius:8px;background:linear-gradient(90deg,#9aa4bd,#6E7894);overflow:hidden}
.rc-bar i{display:block;height:100%;border-radius:8px 0 0 8px;background:linear-gradient(90deg,#F5C563,#FFE3A3);transition:width .5s var(--tk-spring)}
.rc-nums{width:100%;max-width:320px;display:flex;justify-content:space-between;font-size:12px;color:var(--tk-ink-3)}
.rc-nums b{font-family:var(--tk-num);font-size:15px;color:var(--tk-ink)}
.rc-nums .mid{font-size:11.5px}

/* 骰子 */
.rd-stage{min-height:170px;display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:22px 26px;padding:24px 8px 12px}
.rd-die6{width:64px;height:64px;perspective:700px}
.rd-cube{position:relative;width:100%;height:100%;transform-style:preserve-3d}
.rd-f{position:absolute;inset:0;border-radius:13px;display:grid;grid-template:repeat(3,1fr)/repeat(3,1fr);padding:8px;
  background:linear-gradient(145deg,#FFFFFF,#F3E8EF);box-shadow:inset 0 0 0 1px rgba(120,60,90,.12),inset 0 -5px 10px rgba(120,60,90,.1)}
.rd-f i{width:11px;height:11px;border-radius:50%;place-self:center}
.rd-f i.on{background:radial-gradient(circle at 35% 30%,#7c4a6a,#2a1224)}
.rd-f.f1 i.on{width:17px;height:17px;background:radial-gradient(circle at 35% 30%,#ff8fb0,#c81d4a)}
.rd-f.f1{transform:translateZ(32px)}
.rd-f.f6{transform:rotateY(180deg) translateZ(32px)}
.rd-f.f3{transform:rotateY(90deg) translateZ(32px)}
.rd-f.f4{transform:rotateY(-90deg) translateZ(32px)}
.rd-f.f2{transform:rotateX(90deg) translateZ(32px)}
.rd-f.f5{transform:rotateX(-90deg) translateZ(32px)}
.rd-poly{position:relative;width:78px;height:78px;display:grid;place-items:center}
.rd-poly svg{position:absolute;inset:0;width:100%;height:100%;fill:rgba(169,139,255,.2);stroke:#B69CFF;stroke-width:3;stroke-linejoin:round;filter:drop-shadow(0 10px 16px rgba(120,80,220,.35))}
.rd-poly.d4 b{margin-top:14px}
.rd-poly b{position:relative;font-family:var(--tk-num);font-size:26px;font-weight:750;color:var(--tk-ink);font-variant-numeric:tabular-nums}
.rd-poly small{position:absolute;bottom:-18px;font-size:10.5px;color:var(--tk-ink-3);letter-spacing:.06em}
.rd-poly.land b{animation:rndWin .3s var(--tk-bounce)}
.rd-ctrl{display:flex;align-items:center;gap:10px;flex-wrap:wrap;justify-content:center;font-size:12.5px;color:var(--tk-ink-2)}
.rd-sum{font-family:var(--tk-num);font-size:13px;color:var(--tk-ink-3)}
.rnd-result em{font-style:normal;font-weight:750;font-size:14px}
.rnd-result em.crit{color:var(--tk-gold)}
.rnd-result em.fail{color:var(--tk-red)}

/* 抽签 */
.rdw-edit{display:flex;flex-direction:column;gap:8px}
#rdw-area{height:auto;min-height:118px;padding:10px 12px;line-height:1.6;resize:vertical}
.rdw-meta{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--tk-ink-3)}
.rdw-cards{display:flex;flex-wrap:wrap;gap:10px;justify-content:center;min-height:10px}
.rdw-card{width:118px;height:78px;perspective:700px}
.rdw-inner{position:relative;width:100%;height:100%;transform-style:preserve-3d;transition:transform .7s var(--tk-spring) var(--d)}
.rdw-card.flip .rdw-inner{transform:rotateY(180deg)}
.rdw-back,.rdw-front{position:absolute;inset:0;border-radius:14px;backface-visibility:hidden;-webkit-backface-visibility:hidden;display:grid;place-items:center;padding:8px}
.rdw-back{color:rgba(255,255,255,.85);background:linear-gradient(135deg,#6b3aa8,#c2447d);box-shadow:inset 0 0 0 3px rgba(255,255,255,.18)}
.rdw-back svg.ico{width:30px;height:30px}
.rdw-front{transform:rotateY(180deg);background:linear-gradient(145deg,#fff8fb,#ffe6f0);box-shadow:0 12px 26px -14px rgba(242,140,181,.9),inset 0 0 0 1px rgba(200,120,150,.25)}
.rdw-front b{font-size:16px;font-weight:750;color:#3a1f33;text-align:center;word-break:break-word;line-height:1.3}
.rdw-front small{position:absolute;top:6px;left:9px;font-size:10.5px;font-weight:700;color:#c2447d}

/* 随机数 */
.rn-range{display:flex;align-items:flex-end;gap:10px}
.rn-range label{flex:1;display:flex;flex-direction:column;gap:5px;font-size:11.5px;font-weight:600;color:var(--tk-ink-3)}
.rn-range input{height:42px;font-family:var(--tk-num);font-size:18px;text-align:center}
.rn-range>i{font-style:normal;color:var(--tk-ink-3);padding-bottom:10px}
.rn-out{min-height:110px;display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:10px;padding:10px 0}
.rn-n{min-width:64px;height:64px;padding:0 14px;border-radius:16px;display:grid;place-items:center;font-family:var(--tk-num);font-size:30px;font-weight:700;font-variant-numeric:tabular-nums;
  color:var(--tk-ink);background:var(--tk-bg-3);box-shadow:inset 0 0 0 1px var(--tk-line-2)}
.rn-n.sm{min-width:48px;height:46px;font-size:20px;border-radius:12px;padding:0 10px}
.rn-n.land{color:#fff;background:var(--tk-grad);box-shadow:0 12px 24px -12px rgba(242,140,181,.95);animation:rndWin .36s var(--tk-bounce)}

@media (max-width:640px){
  #rnd-modal{padding:0;align-items:flex-end}
  #rnd-panel{width:100%;max-height:94dvh;border-radius:22px 22px 0 0;padding-bottom:env(safe-area-inset-bottom)}
  #rnd-modal.open #rnd-panel{animation:rndSheet .38s var(--tk-spring) both}
  .rnd-go{min-width:128px}
  .rc-stage{height:220px}
}
@keyframes rndSheet{from{transform:translateY(100%)}to{transform:none}}
@media (prefers-reduced-motion:reduce){
  #rnd-modal.open,#rnd-modal.open #rnd-panel,.rnd-win,.rnd-confetti i,.rw-pointer.tick{animation:none !important}
}
