/* Vòng Quay May Mắn – tool UI */
.vq-app,.vq-modal{--vq-bg:#140f33;--vq-bg2:#1f1750;--vq-card:#ffffff;--vq-ink:#1f1d2e;--vq-mute:#6b6880;--vq-line:#e7e4f2;--vq-pri:#6c4cf1;--vq-acc:#ffb020;--vq-red:#ff5a5f;--vq-font:"Be Vietnam Pro",system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;position:relative;color:var(--vq-ink);font-family:inherit}
.vq-app *,.vq-modal *{box-sizing:border-box}
.vq-modal{font-family:var(--vq-font)}
.vq-app-skel{min-height:520px;display:grid;place-items:center;color:#c9c3ff}
.vq-topbar{display:flex;gap:10px;align-items:center;justify-content:space-between;margin-bottom:12px;flex-wrap:wrap}
.vq-title-in{display:block;width:100%;background:transparent;border:0;border-bottom:1px dashed var(--vq-line);color:var(--vq-ink);font:700 17px/1.3 var(--vq-font);padding:4px 2px 8px;margin:0 0 10px;border-radius:0}
.vq-title-in::placeholder{color:#a19db8}
.vq-title-in:focus{outline:none;border-bottom-color:var(--vq-acc)}
.vq-topbtns{display:flex;gap:8px;flex-wrap:wrap;justify-content:center}
.vq-ic{display:inline-flex;align-items:center;gap:7px;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.18);color:#fff;border-radius:999px;padding:8px 14px;font:600 13.5px var(--vq-font);cursor:pointer;transition:background .15s}
.vq-ic:hover{background:rgba(255,255,255,.2)}
.vq-ic svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.vq-body{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(280px,1fr);gap:20px;align-items:start}
.vq-stage{display:flex;flex-direction:column;align-items:center;gap:14px}
.vq-wheel-wrap{position:relative;width:min(100%,600px,calc(100svh - 330px));min-width:min(100%,300px);aspect-ratio:1;margin-top:18px}
.vq-glow{position:absolute;inset:-12%;border-radius:50%;background:radial-gradient(closest-side,rgba(255,196,64,.28),rgba(108,76,241,.18) 60%,transparent);pointer-events:none;z-index:0}
.vq-canvas{position:relative;z-index:1;width:100%;height:100%;display:block;border-radius:50%;cursor:pointer;filter:drop-shadow(0 22px 44px rgba(0,0,0,.55))}
.vq-pointer{position:absolute;top:-4.5%;left:50%;transform:translateX(-50%);width:10%;min-width:34px;z-index:3;filter:drop-shadow(0 4px 4px rgba(0,0,0,.45));transform-origin:50% 35%}
.vq-pointer svg{display:block;width:100%;height:auto}
.is-spinning .vq-pointer{animation:vqtick .12s ease-in-out infinite alternate}
@keyframes vqtick{to{transform:translateX(-50%) rotate(-7deg)}}
.vq-spin{position:absolute;z-index:2;top:50%;left:50%;transform:translate(-50%,-50%);width:21%;aspect-ratio:1;border-radius:50%;border:clamp(4px,1vw,7px) solid #ffe08a;background:radial-gradient(circle at 35% 28%,#ff8a96,#ff3d57 55%,#c2153a);color:#fff;font:800 clamp(14px,2.6vw,22px)/1 var(--vq-font);letter-spacing:.04em;cursor:pointer;box-shadow:0 0 0 3px #8a5a06,0 8px 22px rgba(0,0,0,.45),inset 0 -6px 12px rgba(0,0,0,.2);transition:transform .15s}
.vq-spin:hover{transform:translate(-50%,-50%) scale(1.05)}
.vq-spin:focus-visible,.vq-ic:focus-visible,.vq-btn:focus-visible,.vq-chip:focus-visible{outline:3px solid var(--vq-acc);outline-offset:2px}
.is-spinning .vq-spin{pointer-events:none;opacity:.85}
.vq-hint{color:rgba(255,255,255,.55);font-size:12.5px;text-align:center}
.vq-panel{background:var(--vq-card);border-radius:16px;padding:14px;box-shadow:0 10px 30px rgba(0,0,0,.25);min-width:0}
.vq-tabs{display:flex;gap:4px;background:#f3f1fa;border-radius:12px;padding:4px;margin-bottom:10px}
.vq-tab{flex:1;border:0;background:transparent;padding:9px 6px;border-radius:9px;font:600 14px var(--vq-font);color:var(--vq-mute);cursor:pointer}
.vq-tab.is-on{background:#fff;color:var(--vq-pri);box-shadow:0 1px 4px rgba(0,0,0,.08)}
.vq-badge{display:inline-block;min-width:22px;padding:1px 6px;border-radius:99px;background:var(--vq-pri);color:#fff;font-size:12px}
.vq-pane{display:none}.vq-pane.is-on{display:block}
.vq-tb{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0}
.vq-tb-c{justify-content:center}
.vq-chip{border:1px solid var(--vq-line);background:#faf9ff;border-radius:99px;padding:6px 11px;font:600 13px var(--vq-font);color:var(--vq-ink);cursor:pointer}
.vq-chip:hover{border-color:var(--vq-pri);color:var(--vq-pri)}
.vq-chip-danger:hover{border-color:#e11d48;color:#e11d48}
.vq-ta{width:100%;border:1px solid var(--vq-line);border-radius:12px;padding:0 12px;font:500 15.5px/34px var(--vq-font);resize:vertical;min-height:306px;color:var(--vq-ink);background:#fff repeating-linear-gradient(#fff 0 33px,#efedf7 33px 34px) local;background-position:0 0}
.vq-ta:focus,.vq-input:focus{outline:2px solid var(--vq-pri);outline-offset:1px}
.vq-input{width:100%;border:1px solid var(--vq-line);border-radius:10px;padding:9px 11px;font:15px var(--vq-font);color:var(--vq-ink);background:#fff;margin:4px 0 8px}
.vq-lbl{display:block;font:600 13px var(--vq-font);color:var(--vq-mute);margin-top:6px}
.vq-check{display:flex;gap:8px;align-items:center;margin:8px 0;font-size:14px;cursor:pointer}
.vq-check input{width:18px;height:18px;accent-color:var(--vq-pri)}
.vq-radio{display:flex;gap:14px;flex-wrap:wrap;margin:8px 0;font-size:14px}
.vq-note{font-size:12.5px;color:var(--vq-mute);margin:6px 0}
.vq-note code{background:#f3f1fa;padding:1px 5px;border-radius:5px}
.vq-hist{margin:0;padding:0 0 0 22px;max-height:300px;overflow:auto;font-size:14px}
.vq-hist li{padding:5px 0;border-bottom:1px dashed var(--vq-line)}
.vq-hist small{color:var(--vq-mute)}
.vq-empty{color:var(--vq-mute);list-style:none;text-align:center;padding:16px 0}
.vq-btn{border:1px solid var(--vq-line);background:#fff;color:var(--vq-ink);border-radius:12px;padding:10px 16px;font:700 14px var(--vq-font);cursor:pointer}
.vq-btn:hover{border-color:var(--vq-pri)}
.vq-btn-primary{background:linear-gradient(135deg,var(--vq-pri),#8b5cf6);color:#fff;border-color:transparent}
.vq-btn-primary:hover{filter:brightness(1.08)}
.vq-btn-lg{font-size:18px;padding:14px 28px}
.vq-btn-sm{padding:6px 12px;font-size:13px;margin:4px 0 10px}
.vq-btn:disabled{opacity:.6}
.vq-grid2{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.vq-err{color:#e11d48}
/* modal */
.vq-modal{position:fixed;inset:0;background:rgba(10,8,30,.6);display:grid;place-items:center;z-index:99999;padding:16px;animation:vqf .2s}
.vq-modal-box{position:relative;background:#fff;border-radius:20px;padding:26px 22px 20px;width:min(520px,100%);text-align:center;box-shadow:0 30px 80px rgba(0,0,0,.4);animation:vqp .3s cubic-bezier(.2,1.4,.4,1);color:#1f1d2e}
.vq-modal-title{font-weight:700;color:#6b6880;margin-bottom:8px}
.vq-winner{font:800 clamp(26px,6vw,44px)/1.2 var(--vq-font);color:#6c4cf1;word-break:break-word;margin:8px 0 18px}
.vq-modal-actions{display:flex;gap:8px;justify-content:center;flex-wrap:wrap}
.vq-x{position:absolute;top:8px;right:12px;border:0;background:none;font-size:26px;cursor:pointer;color:#6b6880}
.vq-share{text-align:left}.vq-share label{display:block;font-weight:600;font-size:13px;margin-top:8px}
.vq-link{margin-left:10px;font-size:13px}
@keyframes vqf{from{opacity:0}}@keyframes vqp{from{transform:scale(.8);opacity:0}}
.vq-confetti{position:fixed;inset:0;pointer-events:none;z-index:100000}
/* number */
.vq-stage-num{background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.12);border-radius:20px;padding:28px 16px;min-height:340px;justify-content:center}
.vq-num-display{font:800 clamp(64px,14vw,140px)/1 var(--vq-font);color:#fff;font-variant-numeric:tabular-nums;text-shadow:0 6px 30px rgba(108,76,241,.8);min-height:1.1em}
.vq-num-out{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;max-width:560px}
.vq-ball{display:inline-grid;place-items:center;min-width:46px;height:46px;padding:0 8px;border-radius:99px;background:#fff;color:#6c4cf1;font-weight:800;box-shadow:inset 0 -3px 0 rgba(0,0,0,.08)}
/* coin */
.vq-coin-wrap{perspective:900px;cursor:pointer;margin:10px 0}
.vq-coin{width:190px;height:190px;position:relative;transform-style:preserve-3d;transition:transform 1.25s cubic-bezier(.2,.7,.2,1)}
.vq-coin-face{position:absolute;inset:0;border-radius:50%;display:grid;place-items:center;backface-visibility:hidden;font-size:26px;letter-spacing:.06em;color:#7a4b00;background:radial-gradient(circle at 35% 30%,#fff3c4,#ffc93c 45%,#d99a06);box-shadow:inset 0 0 0 10px rgba(255,255,255,.35),inset 0 0 0 14px #c98a00}
.vq-coin-s{transform:rotateY(180deg);background:radial-gradient(circle at 35% 30%,#f1f5f9,#cbd5e1 45%,#94a3b8);color:#334155;box-shadow:inset 0 0 0 10px rgba(255,255,255,.4),inset 0 0 0 14px #64748b}
.vq-coin-res{font:800 32px var(--vq-font);color:#fff;min-height:40px;text-align:center}
.vq-bar{display:flex;border-radius:10px;overflow:hidden;font:700 12px var(--vq-font);color:#fff;margin:8px 0}
.vq-bar span{padding:8px 6px;white-space:nowrap;transition:width .4s}
.vq-bar span:first-child{background:#d99a06}.vq-bar span:last-child{background:#64748b}
/* boxes */
.vq-stage-box{background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.12);border-radius:20px;padding:16px;width:100%}
.vq-boxes{display:grid;grid-template-columns:repeat(var(--cols,4),1fr);gap:10px;width:100%}
.vq-box{position:relative;aspect-ratio:1;border:0;border-radius:14px;background:linear-gradient(160deg,#2b2170,#1b1442);cursor:pointer;display:grid;place-items:center;padding:8px;transition:transform .2s}
.vq-box:hover{transform:translateY(-3px) rotate(-2deg)}
.vq-box-gift svg{width:70%;max-width:80px;display:block;margin:auto}
.vq-box-n{position:absolute;top:6px;left:9px;color:#c9c3ff;font:700 12px var(--vq-font)}
.vq-box.is-open{background:#fff}.vq-box.is-open .vq-box-gift{display:none}
.vq-box-prize{color:#6c4cf1;font:700 clamp(11px,1.6vw,15px)/1.25 var(--vq-font);text-align:center;word-break:break-word}
/* teams */
.vq-stage-teams{width:100%}.vq-teams{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px;width:100%}
.vq-team{background:#fff;border-radius:14px;overflow:hidden;border-top:6px solid var(--c)}
.vq-team-h{font-weight:800;padding:10px 12px;color:var(--c)}
.vq-team ol{margin:0;padding:0 12px 12px 32px;font-size:14px}
.vq-teams .vq-empty,.vq-teams .vq-err{grid-column:1/-1;color:#c9c3ff}
/* cards */
.vq-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(100px,1fr));gap:10px;width:100%}
.vq-card{border:0;background:none;padding:0;aspect-ratio:3/4;perspective:700px;cursor:pointer}
.vq-card-in{position:relative;display:block;width:100%;height:100%;transform-style:preserve-3d;transition:transform .5s}
.vq-card.is-open .vq-card-in{transform:rotateY(180deg)}
.vq-card-b,.vq-card-f{position:absolute;inset:0;border-radius:12px;display:grid;place-items:center;backface-visibility:hidden;padding:8px;font-weight:800}
.vq-card-b{background:repeating-linear-gradient(45deg,#6c4cf1 0 10px,#7c5cff 10px 20px);color:#fff;font-size:30px;border:3px solid #fff}
.vq-card-f{background:#fff;color:#1f1d2e;transform:rotateY(180deg);font-size:14px;text-align:center;word-break:break-word}
/* lucky */
.vq-lucky-out{width:100%;color:#fff}
.vq-lucky-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.vq-lucky-card{background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.14);border-radius:14px;padding:14px;text-align:center}
.vq-lucky-card small{display:block;color:#c9c3ff;font-size:12px;margin-bottom:6px}
.vq-lucky-card b{font-size:28px}
.vq-lucky-big{font-size:56px!important;color:var(--vq-acc)}
.vq-lucky-card:first-child{grid-column:1/-1}
.vq-dot{display:inline-block;width:18px;height:18px;border-radius:50%;vertical-align:middle;border:2px solid #fff}
.vq-lucky-out .vq-note{color:#c9c3ff}
/* fullscreen */
.vq-app:fullscreen{background:radial-gradient(circle at 30% 20%,#2b2170,#0d0a24);padding:24px;overflow:auto}
.vq-app:fullscreen .vq-wheel-wrap{width:min(100%,84vh)}
.vq-fake-fs{position:fixed!important;inset:0;z-index:9999;background:#140f33;padding:16px;overflow:auto}
@media (max-width:860px){
 .vq-body{grid-template-columns:1fr}
 .vq-ic{padding:7px 10px;font-size:12.5px;gap:5px}
 .vq-topbtns{gap:6px;flex-wrap:nowrap}
 .vq-hint{display:none}
 .vq-tab{font-size:13.5px;white-space:nowrap;padding:9px 4px}
 .vq-wheel-wrap{margin-top:14px}
 .vq-love-tool .vq-panel,.vq-lucky-tool .vq-panel{order:-1}
 .vq-love-tool .vq-stage,.vq-lucky-tool .vq-stage{min-height:0}
 .vq-lucky-big{font-size:46px!important}
}
@media (prefers-reduced-motion:reduce){.vq-coin,.vq-card-in{transition:none}}
/* v1.1 additions */
.vq-tpl{appearance:auto;max-width:170px}
.vq-winners{text-align:left;max-height:50vh;overflow:auto;margin:6px auto 16px;padding-left:28px;font:700 20px/1.5 var(--vq-font);color:#6c4cf1;display:inline-block}
.vq-grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.vq-stage-timer{min-height:420px}
.vq-timer-ring{--p:100;width:min(78vw,360px);aspect-ratio:1;border-radius:50%;display:grid;place-items:center;background:conic-gradient(var(--vq-acc) calc(var(--p)*1%),rgba(255,255,255,.1) 0);position:relative}
.vq-timer-ring:before{content:"";position:absolute;inset:14px;border-radius:50%;background:#1b1442}
.vq-timer-big{position:relative;font:800 clamp(44px,10vw,92px)/1 var(--vq-font);color:#fff;font-variant-numeric:tabular-nums;letter-spacing:.02em}
.vq-sw{font-size:clamp(40px,9vw,84px)}
.vq-app:fullscreen .vq-timer-ring{width:min(80vh,80vw)}
.vq-app:fullscreen .vq-timer-big{font-size:min(16vh,14vw)}
.is-alarm .vq-stage-timer{animation:vqal .5s steps(2) 10}
@keyframes vqal{50%{background:rgba(255,90,95,.45)}}
.vq-range{width:100%;accent-color:var(--vq-pri);margin:6px 0 10px}
.vq-stage-pw{justify-content:center;gap:14px}
.vq-pw-out{width:100%;display:flex;flex-direction:column;gap:8px;max-height:360px;overflow:auto}
.vq-pw-row{display:flex;gap:8px;align-items:center;background:#fff;border-radius:12px;padding:8px 10px}
.vq-pw-row code{flex:1;font:600 clamp(14px,2.2vw,19px)/1.4 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;color:#1f1d2e;word-break:break-all}
.vq-pw-meter{width:100%;color:#d8d3ff;font-size:14px}.vq-pw-meter p{margin:4px 0 0}
.vq-pw-bar{height:10px;border-radius:99px;background:rgba(255,255,255,.12);overflow:hidden}.vq-pw-bar span{display:block;height:100%;transition:width .3s}
.vq-love-out{width:100%;color:#fff;text-align:center}
.vq-love-score{display:inline-grid;place-items:center;position:relative;margin:6px 0}
.vq-love-score span{font-size:150px;line-height:1;color:#ff5a7a;filter:drop-shadow(0 10px 30px rgba(255,90,122,.5))}
.vq-love-score b{position:absolute;font:800 40px var(--vq-font);color:#fff}
.vq-love-v{font:700 20px var(--vq-font);margin:4px 0 14px}
.vq-love-out .vq-lucky-card{text-align:left}.vq-love-out .vq-lucky-card b{font-size:20px;display:block;margin:2px 0}
.vq-love-out .vq-lucky-card:first-child{grid-column:auto}
.vq-love-out .vq-note{color:#c9c3ff}
/* nickname */
.vq-nick-out{width:100%;display:grid;grid-template-columns:1fr 1fr;gap:8px;max-height:460px;overflow:auto}
.vq-nick-row small{color:var(--vq-mute);font-size:11px;white-space:nowrap}
.vq-nick{flex:1;font-size:clamp(15px,2vw,18px);color:#1f1d2e;word-break:break-all;line-height:1.4}
@media (max-width:860px){.vq-nick-out{grid-template-columns:1fr}}
/* tarot */
.vq-stage-tarot{gap:18px;justify-content:center}
.vq-tarot-table{display:grid;grid-template-columns:repeat(var(--n,3),minmax(0,180px));gap:clamp(10px,2vw,22px);justify-content:center;width:100%}
.vq-tslot{display:flex;flex-direction:column;align-items:center;gap:8px}
.vq-tpos{color:#ffd166;font-weight:700;font-size:14px;text-align:center}
.vq-tcard{border:0;padding:0;background:none;width:100%;aspect-ratio:7/12;perspective:900px;cursor:pointer}
.vq-tc-in{position:relative;display:block;width:100%;height:100%;transform-style:preserve-3d;transition:transform .7s cubic-bezier(.2,.8,.2,1)}
.vq-tcard.is-open .vq-tc-in{transform:rotateY(180deg)}
.vq-tc-back,.vq-tc-face{position:absolute;inset:0;border-radius:12px;backface-visibility:hidden;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;padding:10px;box-shadow:0 10px 26px rgba(0,0,0,.45)}
.vq-tc-back{background:radial-gradient(circle at 50% 40%,#3a2a9a,#1b1442 70%);border:3px solid #ffe08a;color:#ffd166;outline:1px solid #8a5a06;outline-offset:-9px}
.vq-tc-back svg{width:46%}
.vq-tcard:hover:not(.is-open) .vq-tc-in{transform:translateY(-4px)}
.vq-tc-face{transform:rotateY(180deg);background:linear-gradient(170deg,#fffaf0,#f3e7cc);border:3px solid #c9a24a;color:#7a4b00;text-align:center}
.vq-tc-face svg{width:46%}
.vq-tc-face.is-rev svg,.vq-tc-face.is-rev .vq-tc-top{transform:rotate(180deg)}
.vq-tc-top{font:800 15px var(--vq-font);letter-spacing:.05em}
.vq-tc-name{font:800 clamp(12px,1.5vw,16px)/1.2 var(--vq-font);color:#1f1d2e}
.vq-tc-en{font-size:11px;color:#8a6a2a}
.vq-suit-wands{color:#c2410c}.vq-suit-cups{color:#0369a1}.vq-suit-swords{color:#4b5563}.vq-suit-pentacles{color:#a16207}.vq-suit-major{color:#6c4cf1}
.vq-tarot-read{margin-top:12px;max-height:420px;overflow:auto}
.vq-tarot-item{border-top:1px dashed var(--vq-line);padding:10px 0;font-size:14.5px}
.vq-tarot-item p{margin:4px 0}
.vq-tarot-kw{color:#6c4cf1;font-weight:700}
@media (max-width:560px){.vq-tarot-table{gap:8px}.vq-tc-en{display:none}}
.vq-tc-face:before{content:"";position:absolute;inset:7px;border:1.5px solid currentColor;border-radius:8px;opacity:.35;pointer-events:none}
.vq-tc-face:after{content:"";position:absolute;left:50%;top:50%;width:70%;aspect-ratio:1;transform:translate(-50%,-62%);border-radius:50%;background:radial-gradient(closest-side,currentColor,transparent);opacity:.12;pointer-events:none}
.vq-tarot-table{min-height:calc(min(180px,(100vw - 120px)/3) * 12 / 7 + 30px)}
/* background fx */
.vq-stage{position:relative}
.vq-fx{position:absolute;inset:-30px -10px 0;overflow:hidden;pointer-events:none;z-index:0}
.vq-fx span{position:absolute;top:-30px;color:#fff;animation:vqfall linear infinite;text-shadow:0 0 6px rgba(255,255,255,.6)}
.vq-fx-heart span{color:#ff5a7a}.vq-fx-mai span{color:#ffd166}.vq-fx-star span{color:#fff3b0}
@keyframes vqfall{0%{transform:translate3d(0,-30px,0) rotate(0)}100%{transform:translate3d(30px,110vh,0) rotate(300deg)}}
.vq-fx-heart span{animation-name:vqrise}@keyframes vqrise{0%{transform:translate3d(0,110vh,0) scale(.8)}100%{transform:translate3d(-20px,-40px,0) scale(1.1)}}
.vq-stage>*:not(.vq-fx){position:relative;z-index:1}
/* numerology */
.vq-numer-tool .vq-body{grid-template-columns:minmax(260px,1fr) minmax(0,1.6fr)}
.vq-stage-numer{align-items:stretch;width:100%}
.vq-num-res{width:100%;display:flex;flex-direction:column;gap:12px;color:#fff}
.vq-nm-card{background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.14);border-radius:16px;padding:14px 16px}
.vq-nm-card p{margin:8px 0 0;color:#e2deff;font-size:14.5px;line-height:1.6}
.vq-nm-head{display:flex;gap:12px;align-items:center}
.vq-nm-head small{display:block;color:#c9c3ff;font-size:12.5px}
.vq-nm-head strong{color:#fff;font-size:16px}
.vq-nm-num{display:grid;place-items:center;min-width:52px;height:52px;border-radius:50%;background:radial-gradient(circle at 35% 30%,#ffe08a,#f7b733 55%,#b9770e);color:#3b2400;font:800 22px var(--vq-font)}
.vq-nm-card.is-big .vq-nm-num{min-width:72px;height:72px;font-size:32px}
.vq-nm-card.is-big strong{font-size:20px}
.vq-nm-cols{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.vq-nm-chart small{color:#c9c3ff}
.vq-nm-grid{display:grid;grid-template-columns:repeat(3,64px);grid-auto-rows:64px;gap:6px;margin:10px 0}
.vq-nm-grid span{display:grid;place-items:center;border-radius:10px;background:rgba(255,255,255,.06);border:1px dashed rgba(255,255,255,.2);font:800 18px var(--vq-font);color:#ffd166;letter-spacing:.05em}
.vq-nm-grid span.has{background:rgba(255,209,102,.14);border-style:solid;border-color:rgba(255,209,102,.5)}
.vq-nm-chart ul{margin:6px 0 0;padding-left:18px;font-size:14px;color:#e2deff}.vq-nm-chart li{margin:6px 0}
.vq-num-res .vq-note,.vq-num-res .vq-empty{color:#c9c3ff}
@media (max-width:860px){.vq-numer-tool .vq-body{grid-template-columns:1fr}.vq-nm-cols{grid-template-columns:1fr}}
.vq-count{position:absolute;inset:0;display:grid;place-items:center;z-index:4;pointer-events:none;font:800 clamp(80px,18vw,180px)/1 var(--vq-font);color:#fff;text-shadow:0 0 30px rgba(255,176,32,.9),0 6px 0 rgba(0,0,0,.35)}
.vq-count.pop{animation:vqpop .8s ease-out}@keyframes vqpop{0%{transform:scale(1.8);opacity:0}25%{opacity:1}100%{transform:scale(.9);opacity:.2}}
.vq-win-img{display:block;margin:0 auto 10px;width:120px;height:120px;border-radius:50%;object-fit:cover;border:4px solid #ffe08a}
/* batch7: event countdown */
.vq-stage-ev{color:#fff;text-align:center;gap:14px}
.vq-ev-title{font:800 clamp(20px,3.4vw,30px)/1.25 var(--vq-font)}
.vq-ev-boxes{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;width:100%;max-width:560px}
.vq-ev-box{background:linear-gradient(180deg,#2c2270,#1a1448);border:1px solid rgba(255,255,255,.16);border-radius:16px;padding:16px 6px 10px;box-shadow:inset 0 -3px 0 rgba(0,0,0,.25)}
.vq-ev-box b{display:block;font:800 clamp(30px,7vw,58px)/1 var(--vq-font);color:var(--vq-acc);font-variant-numeric:tabular-nums}
.vq-ev-box small{display:block;margin-top:6px;font-size:13px;opacity:.8}
.vq-ev-date{font-size:15px;opacity:.85}
.vq-ev-extra{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;width:100%;max-width:560px}
.vq-ev-extra div{background:rgba(255,255,255,.06);border-radius:12px;padding:8px}
.vq-ev-extra small{display:block;font-size:12px;opacity:.7}.vq-ev-extra b{font-size:16px}
.vq-ev-chips{flex-wrap:wrap}.vq-chip.is-on{background:var(--vq-pri);border-color:var(--vq-pri);color:#fff}
/* symbols */
.vq-sym-wrap{display:flex;flex-direction:column;gap:12px}
.vq-sym-top{position:sticky;top:64px;z-index:5}
.vq-sym-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.vq-sym-comp{flex:1 1 220px;font-size:20px!important}
.vq-sym-len,.vq-sym-last{font-size:13px;color:var(--vq-mute)}.vq-sym-last{margin-left:auto}
.vq-sym-cats{flex-wrap:wrap;gap:6px}
.vq-sym-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(52px,1fr));gap:6px;background:#fff;border:1px solid var(--vq-line);border-radius:16px;padding:12px;min-height:220px;align-content:start}
.vq-sym-grid.is-wide{grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}
.vq-sym-grid.is-blank{grid-template-columns:1fr}
.vq-sym{border:1px solid var(--vq-line);background:#faf9ff;border-radius:10px;min-height:48px;font-size:22px;cursor:pointer;color:var(--vq-ink);transition:transform .12s,background .12s;font-family:"Segoe UI Symbol","Noto Sans Symbols 2","Apple Symbols",var(--vq-font)}
.vq-sym-grid.is-wide .vq-sym{font-size:16px}
.vq-sym:hover{background:#efeaff;border-color:var(--vq-pri)}.vq-sym.is-hit{transform:scale(1.15);background:#dcfce7}
.vq-blank{display:flex;gap:12px;align-items:center;border:1px solid var(--vq-line);border-radius:12px;padding:10px 12px}
.vq-blank-v{font:700 20px monospace;background:#f3f1fb;border-radius:8px;padding:4px 8px;white-space:pre}
.vq-blank div{flex:1}.vq-blank b{display:block;font-size:14px}.vq-blank small{color:var(--vq-mute);font-size:13px}
/* dice */
.vq-dice-wrap{cursor:pointer;padding:10px}
.vq-dice-tray{display:flex;flex-wrap:wrap;gap:16px;justify-content:center;min-height:110px}
.vq-die{width:92px;height:92px;border-radius:20px;background:linear-gradient(145deg,#fff,#e9e6f5);box-shadow:0 10px 24px rgba(0,0,0,.35),inset 0 -4px 0 rgba(0,0,0,.08);display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(3,1fr);padding:14px;gap:4px}
.vq-die i{border-radius:50%;place-self:center;width:16px;height:16px}.vq-die i.on{background:#1f1d2e;box-shadow:inset 0 2px 2px rgba(0,0,0,.5)}
.vq-die-n{display:flex;flex-direction:column;align-items:center;justify-content:center;background:linear-gradient(145deg,#ffd166,#ffb020)}
.vq-die-n b{font:800 36px var(--vq-font);color:#1f1d2e}.vq-die-n small{font-size:11px;color:#5b4a12}
.vq-dice-tray.is-rolling .vq-die{animation:vqshake .14s linear infinite}
@keyframes vqshake{0%{transform:rotate(-8deg) translateY(-3px)}50%{transform:rotate(8deg) translateY(3px)}100%{transform:rotate(-8deg)}}
.vq-dice-sum{color:#fff;font-size:22px;min-height:32px}.vq-dice-sum b{color:var(--vq-acc)}
.vq-dice-stat{display:grid;grid-template-columns:repeat(6,1fr);gap:6px}
.vq-dice-stat div{position:relative;text-align:center;background:#faf9ff;border:1px solid var(--vq-line);border-radius:10px;padding:6px 2px;overflow:hidden}
.vq-dice-stat small{display:block;font-size:11px;color:var(--vq-mute)}.vq-dice-stat b{font-size:15px}
.vq-dice-stat i{position:absolute;left:0;bottom:0;height:3px;background:var(--vq-pri)}
.vq-love-score.is-friend span{color:#22c55e;filter:drop-shadow(0 10px 30px rgba(34,197,94,.45));font-size:130px}
.vq-tarot-daily .vq-tarot-table{min-height:280px}
@media(max-width:600px){.vq-ev-boxes{gap:6px}.vq-ev-box{padding:12px 2px 8px}.vq-die{width:72px;height:72px;padding:10px}.vq-die i{width:12px;height:12px}.vq-sym-top{top:56px}}
