/* ============================================================
 * quest-core.css —— 闯关小游戏共享框架（点灯谜阵 / 皇后谜题）
 * 结构对齐 one-stroke.css，独立配色，跟随站内 data-theme 深浅色
 * 变量挂在 :root 上：弹窗（.q-modal）在 .q-main 之外，若变量只写在
 * .q-main 里，弹窗会拿不到 --qcard/--qink，背景与文字全部失效。
 * ============================================================ */
:root {
    --qbg: #f4f1e8;
    --qcard: #fffdf6;
    --qline: #e4dccb;
    --qink: #2a2620;
    --qsoft: #6f6657;
    --qaccent: #b0562f;
    --qaccent-2: #8a5fb8;
    --qgold: #d99a2b;
    --qjade: #2e8b6f;
    --qbad: #c0392b;
    --qshadow: 0 18px 40px rgba(48, 38, 22, .12);
    --qshadow-sm: 0 4px 14px rgba(48, 38, 22, .08);
}
:root[data-theme="dark"] {
    --qbg: #14171c;
    --qcard: #1c2026;
    --qline: #2c323b;
    --qink: #e8e4da;
    --qsoft: #a49b8c;
    --qaccent: #e5824f;
    --qaccent-2: #b48ae0;
    --qgold: #e8b64c;
    --qjade: #4bbd97;
    --qbad: #e0604a;
    --qshadow: 0 18px 40px rgba(0, 0, 0, .5);
    --qshadow-sm: 0 4px 14px rgba(0, 0, 0, .35);
}
.q-main {
    max-width: 1240px;
    margin: 0 auto;
    padding: 22px 18px 60px;
    color: var(--qink);
    font-size: 15px;
    line-height: 1.75;
}
.q-main h1, .q-main h2, .q-main h3 { font-style: normal; color: var(--qink); }
.q-main b { color: var(--qink); }
.q-skip {
    position: absolute; left: -9999px; top: 0; z-index: 99;
    background: var(--qaccent); color: #fff; padding: 8px 14px; border-radius: 8px;
}
.q-skip:focus { left: 8px; top: 8px; }
.q-main :focus-visible { outline: 2px solid var(--qaccent); outline-offset: 2px; }

/* ---------- Hero ---------- */
.q-hero {
    display: grid; grid-template-columns: minmax(0, 1.05fr) minmax(0, 1fr);
    gap: 26px; align-items: start;
}
.q-eyebrow {
    display: inline-flex; align-items: center; gap: 8px;
    font-size: 12.5px; font-weight: 700; letter-spacing: .12em;
    color: var(--qaccent); text-transform: uppercase; margin: 0 0 10px;
}
.q-eyebrow-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--qaccent); box-shadow: 0 0 0 4px rgba(176, 86, 47, .16); }
.q-hero h1 { font-size: clamp(30px, 4.6vw, 44px); line-height: 1.16; margin: 0 0 12px; letter-spacing: .5px; }
.q-hero h1 span { color: var(--qaccent); }
.q-sub { margin: 0 0 18px; color: var(--qsoft); font-size: 15.5px; max-width: 560px; }
.q-hero-cta { display: flex; flex-wrap: wrap; gap: 10px; margin-bottom: 14px; }
.q-btn {
    -webkit-appearance: none; appearance: none; cursor: pointer;
    border: 1px solid var(--qline); border-radius: 12px;
    background: var(--qcard); color: var(--qink);
    font: inherit; font-weight: 700; padding: 9px 16px;
    transition: transform .12s ease, box-shadow .12s ease, background .12s ease;
    display: inline-flex; align-items: center; gap: 8px; justify-content: center;
}
.q-btn:hover { transform: translateY(-1px); box-shadow: var(--qshadow-sm); }
.q-btn:active { transform: translateY(0); }
.q-btn:disabled { opacity: .55; cursor: not-allowed; transform: none; box-shadow: none; }
.q-btn-primary { background: var(--qaccent); border-color: var(--qaccent); color: #fff; }
:root[data-theme="dark"] .q-btn-primary { color: #16110d; }
.q-btn-ghost { background: transparent; }
.q-btn-lg { padding: 12px 22px; font-size: 16px; border-radius: 14px; }
.q-btn-sm { padding: 6px 12px; font-size: 13px; border-radius: 10px; }
.q-hero-points { list-style: none; display: flex; flex-wrap: wrap; gap: 8px 18px; padding: 0; margin: 4px 0 16px; color: var(--qsoft); font-size: 13.5px; }
.q-hero-points li::before { content: '✓ '; color: var(--qjade); font-weight: 700; }
.q-hero-total {
    display: inline-flex; align-items: baseline; gap: 10px;
    background: var(--qcard); border: 1px solid var(--qline);
    border-radius: 14px; padding: 10px 16px; box-shadow: var(--qshadow-sm);
}
.q-total-stars { font-size: 26px; font-weight: 800; color: var(--qgold); }
.q-total-label { font-size: 12.5px; color: var(--qsoft); }
.q-total-label small { display: block; }/* ---------- 棋盘卡片 ---------- */
.q-board-card {
    background: var(--qcard); border: 1px solid var(--qline);
    border-radius: 18px; padding: 14px 16px 16px;
    box-shadow: var(--qshadow);
}
.q-board-head { display: flex; justify-content: space-between; align-items: center; gap: 12px; flex-wrap: wrap; }
.q-level-meta { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; min-width: 0; }
.q-tier-badge {
    font-size: 12px; font-weight: 800; letter-spacing: .08em;
    padding: 3px 10px; border-radius: 999px; color: #fff; background: var(--qjade);
}
.q-tier-badge[data-tier="medium"] { background: var(--qgold); color: #42300c; }
.q-tier-badge[data-tier="hard"] { background: var(--qaccent); }
.q-level-name { font-weight: 800; font-size: 15px; }
.q-live-stars { color: var(--qline); letter-spacing: 2px; }
.q-live-stars .is-on { color: var(--qgold); }
.q-level-rule { font-size: 12px; color: var(--qsoft); }
.q-meters { display: flex; gap: 10px; }
.q-meter { text-align: center; background: var(--qbg); border: 1px solid var(--qline); border-radius: 10px; padding: 4px 12px; min-width: 74px; }
.q-meter b { display: block; font-size: 15px; font-variant-numeric: tabular-nums; }
.q-meter small { font-size: 11px; color: var(--qsoft); }
.q-progress-line { height: 6px; border-radius: 4px; background: var(--qbg); border: 1px solid var(--qline); margin: 10px 0 12px; overflow: hidden; }
.q-progress-line i { display: block; height: 100%; width: 0; background: linear-gradient(90deg, var(--qjade), var(--qgold)); transition: width .25s ease; }
.q-coach {
    display: flex; gap: 10px; align-items: flex-start;
    background: rgba(217, 154, 43, .12); border: 1px solid rgba(217, 154, 43, .5);
    border-radius: 12px; padding: 9px 12px; margin-bottom: 12px;
}
:root[data-theme="dark"] .q-coach { background: rgba(232, 182, 76, .1); }
.q-coach-mark {
    flex: 0 0 auto; width: 20px; height: 20px; border-radius: 50%;
    background: var(--qgold); color: #42300c; font-weight: 800; font-size: 13px;
    display: grid; place-items: center; margin-top: 2px;
}
.q-coach p { margin: 0; font-size: 13.5px; }
.q-coach-close { margin-left: auto; border: 0; background: none; color: inherit; font-size: 16px; cursor: pointer; line-height: 1; }
.q-board-stage {
    position: relative; background: var(--qbg);
    border: 1px solid var(--qline); border-radius: 14px;
    padding: 10px; display: grid; place-items: center;
    touch-action: none; user-select: none; -webkit-user-select: none;
    overflow: hidden;
}
.q-board-stage.is-enter { animation: q-enter .28s ease; }
.q-board-stage.is-shake { animation: q-shake .3s ease; }
.q-board-stage.is-error { animation: q-shake .3s ease; }
.q-board-stage.is-error::after {
    content: ''; position: absolute; inset: 0; border-radius: 14px;
    box-shadow: inset 0 0 0 3px rgba(192, 57, 43, .4); pointer-events: none;
}
@keyframes q-enter { from { opacity: 0; transform: scale(.985); } }
@keyframes q-shake {
    20% { transform: translateX(-5px); } 40% { transform: translateX(5px); }
    60% { transform: translateX(-3px); } 80% { transform: translateX(3px); }
}
.q-stage-glow {
    position: absolute; inset: 0; pointer-events: none;
    background: radial-gradient(60% 50% at 50% 0%, rgba(217, 154, 43, .07), transparent 70%);
}
.q-toast {
    position: absolute; left: 50%; bottom: 14px; transform: translate(-50%, 12px);
    background: rgba(24, 20, 14, .92); color: #f4efe4;
    padding: 8px 16px; border-radius: 999px; font-size: 13px; max-width: 92%;
    opacity: 0; pointer-events: none; transition: opacity .2s ease, transform .2s ease;
    text-align: center; z-index: 5;
}
:root[data-theme="dark"] .q-toast { background: rgba(232, 226, 214, .95); color: #191510; }
.q-toast.is-on { opacity: 1; transform: translate(-50%, 0); }
.q-toast.is-bad { background: rgba(150, 40, 28, .95); color: #fff; }
:root[data-theme="dark"] .q-toast.is-bad { background: rgba(190, 62, 44, .96); color: #fff; }/* ---------- 工具行 ---------- */
.q-board-foot { margin-top: 12px; }
.q-tools { display: flex; flex-wrap: wrap; gap: 8px; }
.q-tool {
    display: inline-flex; align-items: center; gap: 7px;
    border: 1px solid var(--qline); background: var(--qcard); color: var(--qink);
    border-radius: 10px; padding: 7px 13px; font: inherit; font-size: 13.5px; font-weight: 700;
    cursor: pointer; transition: background .12s ease, transform .12s ease;
}
.q-tool svg { width: 16px; height: 16px; }
.q-tool:hover { background: var(--qbg); transform: translateY(-1px); }
.q-tool-bulb { border-color: rgba(217, 154, 43, .65); }
.q-tool-bulb.is-used { opacity: .82; }
.q-tool.is-pulse { animation: q-pulse 1.6s ease 3; }
.q-tool.is-flash { animation: q-flash .32s ease 2; }
.q-tool-cost { font-size: 11px; color: var(--qgold); font-weight: 800; }
@keyframes q-pulse { 50% { box-shadow: 0 0 0 6px rgba(217, 154, 43, .25); } }
@keyframes q-flash { 50% { background: rgba(217, 154, 43, .35); } }
.q-tip { margin: 10px 2px 0; font-size: 12.5px; color: var(--qsoft); }

/* ---------- 棋盘容器 ---------- */
.q-board { width: 100%; max-width: 460px; min-width: 0; }

/* ---------- 棋盘通用（两款游戏共用网格底座） ---------- */
.q-cell {
    -webkit-appearance: none; appearance: none; border: 1px solid var(--qline);
    background: var(--qcard); color: var(--qink); border-radius: 10px;
    font: inherit; cursor: pointer; position: relative;
    display: grid; place-items: center;
    transition: transform .1s ease, background .12s ease, border-color .12s ease, opacity .12s ease;
    padding: 0; line-height: 1;
}
.q-cell:hover { border-color: var(--qaccent); }
.q-cell:focus-visible { outline: 2px solid var(--qaccent); outline-offset: 1px; }

/* 点灯谜阵：灯泡造型 + 暖光 */
.ql-grid { display: grid; gap: 8px; width: 100%; }
.ql-grid .q-cell {
    aspect-ratio: 1; border-radius: 14px;
    background: var(--qbg); border-color: var(--qline);
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, .55), 0 2px 6px rgba(48, 38, 22, .06);
}
.ql-grid .q-cell i {
    width: 44%; aspect-ratio: 1; border-radius: 50%;
    background: radial-gradient(circle at 34% 30%, #7c7568, #4a463e 70%);
    box-shadow: inset 0 0 0 2px rgba(0, 0, 0, .18);
    position: relative; display: block;
    transition: background .18s ease, box-shadow .18s ease;
}
.ql-grid .q-cell i::after {
    content: ''; position: absolute; left: 50%; bottom: -26%; transform: translateX(-50%);
    width: 48%; height: 16%; border-radius: 2px; background: #6c6559;
}
:root[data-theme="dark"] .ql-grid .q-cell i { background: radial-gradient(circle at 34% 30%, #4c4a45, #2a2823 70%); }
:root[data-theme="dark"] .ql-grid .q-cell i::after { background: #3b3934; }
.ql-grid .q-cell.is-on {
    background: linear-gradient(160deg, #fff6da, #f6dd97);
    border-color: var(--qgold);
    box-shadow: 0 0 18px rgba(233, 183, 71, .45), inset 0 1px 0 rgba(255, 255, 255, .7);
}
.ql-grid .q-cell.is-on i {
    background: radial-gradient(circle at 34% 28%, #fffdf4, #ffdb72 52%, #e9a72a 100%);
    box-shadow: 0 0 14px rgba(244, 201, 93, .95), 0 0 30px rgba(244, 201, 93, .5);
}
.ql-grid .q-cell.is-on i::after { background: #b8862a; }
:root[data-theme="dark"] .ql-grid .q-cell.is-on {
    background: linear-gradient(160deg, #4a3d1c, #2e2716);
    box-shadow: 0 0 18px rgba(232, 182, 76, .35), inset 0 1px 0 rgba(255, 255, 255, .08);
}
:root[data-theme="dark"] .ql-grid .q-cell.is-on i {
    background: radial-gradient(circle at 34% 28%, #fff3c4, #f0bc4a 52%, #b9801c 100%);
}
:root[data-theme="dark"] .ql-grid .q-cell.is-on i::after { background: #8a6420; }
.ql-grid .q-cell.is-cross { border-color: var(--qaccent); box-shadow: 0 0 0 2px rgba(176, 86, 47, .35); }
.ql-grid .q-cell.is-cross i { opacity: .55; }
.ql-grid .q-cell.is-flip { animation: q-flip .3s ease; }
@keyframes q-flip {
    0% { transform: rotateY(0deg) scale(1); }
    50% { transform: rotateY(90deg) scale(.92); }
    100% { transform: rotateY(0deg) scale(1); }
}
/* 皇后谜题：色区棋盘 */
.qn-grid { display: grid; gap: 6px; width: 100%; }
.qn-grid .q-cell {
    aspect-ratio: 1; border-radius: 10px; font-size: clamp(17px, 4.6vw, 24px);
    background: var(--qcellbg, var(--qcard));
    border: 1.5px solid var(--qzline, var(--qline));
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, .5), 0 2px 6px rgba(48, 38, 22, .07);
}
:root[data-theme="dark"] .qn-grid .q-cell { box-shadow: inset 0 1px 0 rgba(255, 255, 255, .06), 0 2px 8px rgba(0, 0, 0, .35); }
.qn-grid .q-cell.is-alt { background: var(--qcellbg2, var(--qbg)); }
.qn-grid .q-cell .qz {
    font-size: 1em; line-height: 1;
    color: #8a5206;
    text-shadow: 0 1px 0 rgba(255, 255, 255, .65), 0 3px 6px rgba(90, 55, 0, .35);
}
.qn-grid .q-cell .qz-coord {
    position: absolute; left: 5px; top: 4px;
    font-size: 9px; line-height: 1; color: var(--qsoft); opacity: .48;
    pointer-events: none; font-variant-numeric: tabular-nums;
}
.qn-grid .q-cell.is-queen .qz-coord { opacity: .8; color: #7a4a08; }
:root[data-theme="dark"] .qn-grid .q-cell .qz { color: #f6cd72; text-shadow: 0 2px 6px rgba(0, 0, 0, .6); }
.qn-grid .q-cell.is-queen { box-shadow: 0 0 0 2px var(--qgold), inset 0 0 14px rgba(217, 154, 43, .28); }
.qn-grid .q-cell.is-bad { box-shadow: 0 0 0 2px var(--qbad) inset; animation: q-shake .3s ease; }
.qn-grid .q-cell.is-hint { box-shadow: 0 0 0 3px var(--qgold); animation: q-pulse 1.4s ease 2; }
.qn-grid .q-cell.is-undo-hint { box-shadow: 0 0 0 3px var(--qbad); }
.qn-grid .q-cell.is-scan { box-shadow: 0 0 0 3px var(--qbad), 0 0 16px rgba(192, 57, 43, .45); animation: q-scan .9s ease 2; }
@keyframes q-scan { 50% { box-shadow: 0 0 0 3px var(--qbad), 0 0 26px rgba(192, 57, 43, .7); } }

/* ---------- 行列计数条 / 步数对比 ---------- */
.q-counts { display: grid; gap: 6px; margin-top: 12px; }
.q-count-line { display: flex; align-items: center; gap: 8px; font-size: 12px; color: var(--qsoft); }
.q-count-line > b { flex: 0 0 30px; font-size: 11.5px; color: var(--qsoft); font-weight: 800; letter-spacing: .04em; }
.q-count-cells { display: flex; gap: 5px; flex-wrap: wrap; }
.q-count-cell {
    min-width: 22px; height: 22px; padding: 0 5px; border-radius: 7px;
    border: 1px solid var(--qline); background: var(--qbg);
    display: inline-flex; align-items: center; justify-content: center;
    font-size: 11px; font-weight: 800; color: var(--qsoft); font-variant-numeric: tabular-nums;
}
.q-count-cell.is-full { background: var(--qjade); border-color: var(--qjade); color: #fff; }
.q-count-cell.is-over { background: rgba(192, 57, 43, .16); border-color: var(--qbad); color: var(--qbad); }
.q-stepstat { display: flex; gap: 10px; flex-wrap: wrap; margin-top: 12px; }
.q-stepstat > div {
    background: var(--qbg); border: 1px solid var(--qline); border-radius: 10px;
    padding: 6px 12px; font-size: 11.5px; color: var(--qsoft);
}
.q-stepstat b { display: block; font-size: 16px; color: var(--qink); font-variant-numeric: tabular-nums; line-height: 1.4; }
.q-stepstat .is-over b { color: var(--qbad); }
.q-stepstat .is-good b { color: var(--qjade); }
.q-scan-info {
    margin: 10px 0 0; font-size: 12.5px; color: var(--qsoft);
    background: var(--qbg); border: 1px dashed var(--qline); border-radius: 10px; padding: 8px 12px;
}
.q-scan-info b { color: var(--qink); }
.q-scan-info.is-bad { border-color: var(--qbad); border-style: solid; color: var(--qbad); background: rgba(192, 57, 43, .08); }
.q-scan-info.is-bad b { color: var(--qbad); }

/* 工具按钮开启态 */
.q-tool.is-on { background: var(--qaccent); border-color: var(--qaccent); color: #fff; }
:root[data-theme="dark"] .q-tool.is-on { color: #16110d; }
.q-tool.is-on:hover { background: var(--qaccent); }
/* ---------- 侧栏 rail ---------- */
.q-rail { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; margin-top: 22px; }
.q-hero-card {
    background: var(--qcard); border: 1px solid var(--qline); border-radius: 16px;
    padding: 14px 16px; box-shadow: var(--qshadow-sm); margin-top: 18px; min-width: 0;
}
.q-hero-card .q-card-head { margin-bottom: 8px; }
.q-card { background: var(--qcard); border: 1px solid var(--qline); border-radius: 16px; padding: 14px 16px; box-shadow: var(--qshadow-sm); min-width: 0; }
.q-card-head { display: flex; justify-content: space-between; align-items: center; gap: 8px; margin: 0 0 10px; }
.q-card-head h2 { margin: 0; font-size: 15px; }
.q-stars { color: var(--qline); letter-spacing: 2px; white-space: nowrap; }
.q-stars .is-on { color: var(--qgold); }
.q-text-btn { border: 0; background: none; color: var(--qaccent); font: inherit; font-size: 13px; font-weight: 700; cursor: pointer; padding: 2px 4px; }
.q-text-btn:hover { text-decoration: underline; }
.q-text-danger { color: var(--qbad); }
.q-facts { margin: 0; display: grid; gap: 7px; }
.q-facts > div { display: flex; justify-content: space-between; gap: 10px; font-size: 13.5px; border-bottom: 1px dashed var(--qline); padding-bottom: 6px; }
.q-facts dt { color: var(--qsoft); }
.q-facts dd { margin: 0; font-weight: 700; text-align: right; }
.q-card-note { margin: 10px 0 0; font-size: 12.5px; color: var(--qsoft); }
.q-tier-list { display: grid; gap: 8px; }
.q-tier-row { display: block; width: 100%; text-align: left; border: 1px solid var(--qline); background: var(--qbg); border-radius: 12px; padding: 8px 12px; font: inherit; cursor: pointer; }
.q-tier-row:hover { border-color: var(--qaccent); }
.q-tier-row.is-active { border-color: var(--qaccent); box-shadow: 0 0 0 1px var(--qaccent) inset; }
.q-tier-row-top { display: flex; justify-content: space-between; font-size: 13px; margin-bottom: 6px; }
.q-tier-track { display: block; height: 6px; border-radius: 4px; background: var(--qline); overflow: hidden; }
.q-tier-fill { display: block; height: 100%; background: linear-gradient(90deg, var(--qjade), var(--qgold)); }
.q-mini-rank { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; }
.q-mini-rank li { display: flex; align-items: center; gap: 8px; font-size: 13px; background: var(--qbg); border-radius: 8px; padding: 5px 10px; }
.q-mini-rank .rk { font-weight: 800; color: var(--qaccent); min-width: 20px; }
.q-mini-rank .nm { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.q-mini-rank .sc { font-weight: 800; color: var(--qgold); }
.q-mini-rank .sc small { font-weight: 400; color: var(--qsoft); }
.q-rank-empty { color: var(--qsoft); font-size: 13px; text-align: center; padding: 8px 0; }

/* ---------- 内容区 ---------- */
.q-content { display: grid; grid-template-columns: minmax(0, 1fr) 300px; gap: 26px; margin-top: 30px; }
.q-content h2 { font-size: 21px; margin: 26px 0 10px; }
.q-content h2:first-child { margin-top: 0; }
.q-content p { color: var(--qsoft); margin: 0 0 12px; }
.q-content b { color: var(--qink); }
.q-steps { list-style: none; margin: 0 0 10px; padding: 0; display: grid; gap: 12px; counter-reset: qstep; }
.q-steps li { counter-increment: qstep; background: var(--qcard); border: 1px solid var(--qline); border-radius: 14px; padding: 12px 16px; position: relative; padding-left: 52px; }
.q-steps li::before {
    content: counter(qstep); position: absolute; left: 14px; top: 14px;
    width: 26px; height: 26px; border-radius: 50%; background: var(--qaccent); color: #fff;
    display: grid; place-items: center; font-weight: 800; font-size: 14px;
}
.q-steps b { display: block; margin-bottom: 3px; }
.q-steps p { margin: 0; font-size: 14px; }
.q-tier-cards { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; margin: 14px 0; }
.q-tier-cards article { background: var(--qcard); border: 1px solid var(--qline); border-radius: 14px; padding: 14px; }
.q-tier-chip { display: inline-block; font-size: 12px; font-weight: 800; color: #fff; background: var(--qjade); border-radius: 999px; padding: 2px 10px; margin-bottom: 8px; }
.q-tier-chip[data-tier="medium"] { background: var(--qgold); color: #42300c; }
.q-tier-chip[data-tier="hard"] { background: var(--qaccent); }
.q-tier-cards b { display: block; margin-bottom: 4px; }
.q-tier-cards p { margin: 0; font-size: 13px; }
.q-quote-list { padding-left: 20px; color: var(--qsoft); }
.q-faq details { background: var(--qcard); border: 1px solid var(--qline); border-radius: 12px; padding: 10px 14px; margin-bottom: 8px; }
.q-faq summary { cursor: pointer; font-weight: 700; }
.q-faq p { margin: 8px 0 2px; font-size: 14px; }
.q-rel { list-style: none; margin: 0; padding: 0; display: grid; gap: 8px; }
.q-rel a { display: flex; flex-direction: column; background: var(--qcard); border: 1px solid var(--qline); border-radius: 12px; padding: 10px 14px; text-decoration: none; color: var(--qink); }
.q-rel a:hover { border-color: var(--qaccent); }
.q-rel b { font-size: 14px; }
.q-rel small { color: var(--qsoft); font-size: 12px; }
.q-side-note { background: var(--qbg); border: 1px dashed var(--qline); border-radius: 12px; padding: 10px 14px; margin-top: 14px; font-size: 13px; color: var(--qsoft); }
.q-side-note b { display: block; color: var(--qink); margin-bottom: 4px; }/* ---------- 弹层 ---------- */
.q-modal { position: fixed; inset: 0; z-index: 200; display: grid; place-items: center; padding: 18px; }
.q-modal[hidden] { display: none; }
.q-modal-mask { position: absolute; inset: 0; background: rgba(20, 16, 10, .62); backdrop-filter: blur(2px); }
:root[data-theme="dark"] .q-modal-mask { background: rgba(0, 0, 0, .7); }
.q-dialog {
    position: relative; background: var(--qcard); color: var(--qink);
    border: 1px solid var(--qline); border-radius: 18px;
    width: min(560px, 100%); max-height: min(86vh, 780px);
    display: flex; flex-direction: column; box-shadow: var(--qshadow);
    animation: q-pop .22s ease;
}
@keyframes q-pop { from { opacity: 0; transform: translateY(10px) scale(.985); } }
.q-dialog-wide { width: min(760px, 100%); }
.q-dialog-how { width: min(640px, 100%); }
.q-dialog-sm { width: min(420px, 100%); }
.q-dialog-win { width: min(460px, 100%); text-align: center; padding: 26px 22px 20px; }
.q-dialog-head { display: flex; justify-content: space-between; align-items: flex-start; gap: 12px; padding: 16px 18px 10px; border-bottom: 1px solid var(--qline); }
.q-dialog-head h2 { margin: 0 0 3px; font-size: 18px; }
.q-dialog-head p { margin: 0; font-size: 12.5px; color: var(--qsoft); }
.q-close { border: 0; background: none; color: var(--qsoft); cursor: pointer; padding: 6px; border-radius: 8px; }
.q-close:hover { color: var(--qink); background: var(--qbg); }
.q-close svg { width: 18px; height: 18px; display: block; }
.q-close-abs { position: absolute; right: 12px; top: 12px; }
.q-dialog-body { padding: 14px 18px; overflow: auto; }
.q-dialog-foot { display: flex; justify-content: space-between; align-items: center; gap: 10px; padding: 12px 18px; border-top: 1px solid var(--qline); font-size: 12.5px; color: var(--qsoft); flex-wrap: wrap; }
.q-dialog-foot b { color: var(--qgold); }

/* 关卡地图 */
.q-map-top { display: flex; justify-content: space-between; align-items: center; gap: 10px; padding: 12px 18px 0; flex-wrap: wrap; }
.q-tabs { display: inline-flex; gap: 4px; background: var(--qbg); border: 1px solid var(--qline); border-radius: 12px; padding: 4px; }
.q-tab { border: 0; background: none; font: inherit; font-size: 13.5px; font-weight: 700; color: var(--qsoft); padding: 6px 14px; border-radius: 9px; cursor: pointer; }
.q-tab.is-on { background: var(--qcard); color: var(--qink); box-shadow: var(--qshadow-sm); }
.q-tab-count { margin-left: 6px; font-size: 11.5px; color: var(--qaccent); }
.q-tabs-sm .q-tab { padding: 5px 12px; font-size: 12.5px; }
.q-tier-hint { margin: 10px 18px 0; font-size: 12.5px; color: var(--qsoft); background: var(--qbg); border-radius: 10px; padding: 8px 12px; }
.q-tier-hint b { color: var(--qink); }
.q-map-legend { display: flex; flex-wrap: wrap; gap: 8px 16px; padding: 10px 18px 0; font-size: 12px; color: var(--qsoft); }
.q-lg-item { display: inline-flex; align-items: center; gap: 6px; }
.q-lg-stars { color: var(--qgold); letter-spacing: 1px; font-size: 11px; }
.q-lg-dash { display: inline-block; width: 18px; height: 10px; border-radius: 4px; border: 1px dashed var(--qline); }
.q-lg-cur { display: inline-block; width: 18px; height: 10px; border-radius: 4px; background: var(--qaccent); }
.q-level-grid {
    display: grid; grid-template-columns: repeat(auto-fill, minmax(58px, 1fr)); gap: 8px;
    padding: 12px 18px; overflow: auto; min-height: 180px; max-height: 46vh;
}
.q-chapter { grid-column: 1 / -1; display: flex; gap: 10px; align-items: baseline; font-size: 12px; color: var(--qsoft); margin-top: 8px; }
.q-chapter:first-child { margin-top: 0; }
.q-chapter-no { font-weight: 800; color: var(--qink); }
.q-level-btn {
    position: relative; border: 1px solid var(--qline); background: var(--qcard);
    border-radius: 12px; padding: 8px 4px 6px; text-align: center; cursor: pointer; font: inherit;
}
.q-level-btn .no { display: block; font-weight: 800; font-size: 15px; }
.q-level-btn .st { display: block; font-size: 9px; letter-spacing: 1px; color: var(--qline); min-height: 12px; }
.q-level-btn .st .on { color: var(--qgold); }
.q-level-btn.is-cleared { border-color: var(--qjade); }
.q-level-btn.is-perfect { background: linear-gradient(170deg, rgba(217, 154, 43, .16), var(--qcard)); }
.q-level-btn.is-locked { opacity: .45; cursor: not-allowed; }
.q-level-btn .lock { position: absolute; right: 6px; top: 6px; width: 12px; height: 12px; color: var(--qsoft); }
.q-level-btn.is-current { box-shadow: 0 0 0 2px var(--qaccent); }
.q-level-btn.is-next::after {
    content: '下一关'; position: absolute; left: 50%; top: -9px; transform: translateX(-50%);
    background: var(--qaccent); color: #fff; font-size: 10px; border-radius: 999px; padding: 1px 7px; white-space: nowrap;
}/* 排行榜 / 教程 / 结算 / 确认 */
.q-rank-list { padding: 10px 18px; overflow: auto; min-height: 140px; max-height: 42vh; }
.q-rank-row { display: flex; align-items: center; gap: 10px; padding: 7px 10px; border-radius: 10px; font-size: 13.5px; }
.q-rank-row:nth-child(odd) { background: var(--qbg); }
.q-rank-row .rk { font-weight: 800; min-width: 24px; color: var(--qsoft); }
.q-rank-row.top1 .rk, .q-rank-row.top2 .rk, .q-rank-row.top3 .rk { color: var(--qgold); }
.q-rank-row .who { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.q-rank-row .who small { color: var(--qsoft); font-size: 11.5px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.q-rank-row .sc { font-weight: 800; color: var(--qgold); }
.q-rank-row .sc small { font-weight: 400; color: var(--qsoft); font-size: 11px; }
.q-rank-row.is-me { box-shadow: 0 0 0 1.5px var(--qaccent) inset; }
.q-rank-top { display: flex; align-items: center; gap: 10px; padding: 12px 18px 0; flex-wrap: wrap; }
.q-name-field { display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; color: var(--qsoft); margin-left: auto; }
.q-name-field input {
    border: 1px solid var(--qline); background: var(--qbg); color: var(--qink);
    border-radius: 8px; padding: 6px 10px; font: inherit; width: 130px;
}
.q-rank-mine { margin: 8px 18px 0; font-size: 13px; color: var(--qsoft); display: none; }
.q-rank-mine.is-on { display: block; }
.q-rank-mine b { color: var(--qgold); }
.q-how-steps { list-style: none; margin: 0; padding: 12px 18px; display: grid; gap: 12px; }
.q-how-steps li { display: flex; gap: 12px; align-items: flex-start; }
.q-how-no { flex: 0 0 auto; width: 26px; height: 26px; border-radius: 50%; background: var(--qaccent); color: #fff; display: grid; place-items: center; font-weight: 800; }
.q-how-body b { display: block; margin-bottom: 2px; }
.q-how-body p { margin: 0; font-size: 13px; color: var(--qsoft); }
.q-how-demo { width: 96px; flex: 0 0 auto; margin-left: auto; }
.q-how-demo .d { stroke: var(--qsoft); stroke-dasharray: 4 4; stroke-width: 2; }
.q-how-demo .used { stroke: var(--qjade); stroke-width: 3; stroke-linecap: round; }
.q-how-demo circle { stroke: var(--qink); stroke-width: 2; }
.q-how-demo .odd { stroke: var(--qgold); stroke-dasharray: 3 3; }
.q-how-demo .done { fill: var(--qjade); stroke: var(--qjade); }
.q-how-demo .cur { fill: var(--qaccent); stroke: var(--qaccent); }
.q-how-demo-bulb path { stroke: var(--qgold); stroke-width: 2; }
.q-how-tips { display: grid; gap: 6px; margin: 4px 18px 12px; font-size: 12.5px; color: var(--qsoft); background: var(--qbg); border-radius: 10px; padding: 10px 12px; }
.q-how-mute { display: flex; gap: 6px; align-items: center; font-size: 13px; color: var(--qsoft); }
.q-how-foot { display: flex; justify-content: space-between; align-items: center; gap: 10px; padding: 12px 18px; border-top: 1px solid var(--qline); flex-wrap: wrap; }
.q-how-actions { display: flex; gap: 8px; }
.q-win-eyebrow { font-size: 12.5px; color: var(--qsoft); margin: 0 0 4px; }
.q-win-record { display: inline-block; margin-left: 8px; background: var(--qgold); color: #42300c; font-weight: 800; font-size: 11px; border-radius: 999px; padding: 2px 9px; }
.q-win-title { margin: 0 0 8px; font-size: 24px; }
.q-win-stars { font-size: 34px; letter-spacing: 6px; color: var(--qline); margin-bottom: 6px; }
.q-win-stars .is-on { color: var(--qgold); }
.q-win-note { color: var(--qsoft); font-size: 13.5px; margin: 0 0 14px; }
.q-win-stats { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; margin-bottom: 16px; }
.q-win-stats > div { background: var(--qbg); border-radius: 10px; padding: 8px 4px; }
.q-win-stats b { display: block; font-size: 17px; font-variant-numeric: tabular-nums; }
.q-win-stats small { font-size: 11px; color: var(--qsoft); }
.q-win-actions { display: flex; gap: 8px; justify-content: center; flex-wrap: wrap; margin-bottom: 12px; }
.q-win-share-row { margin: 0 0 6px; }
.q-win-share { border: 0; background: none; color: var(--qaccent); font: inherit; font-size: 13px; font-weight: 700; cursor: pointer; }
.q-win-share:hover { text-decoration: underline; }
.q-win-sync { min-height: 18px; font-size: 12px; color: var(--qsoft); margin: 0; }
.q-win-confetti { position: absolute; inset: 0; overflow: hidden; pointer-events: none; }
.q-win-confetti span {
    position: absolute; top: -12px; width: 8px; height: 12px; border-radius: 2px;
    background: var(--c, var(--qgold)); opacity: .9;
    animation: q-fall var(--d, 2s) ease-in var(--delay, 0s) forwards;
}
@keyframes q-fall { to { transform: translateY(110%) translateX(var(--dx, 0)) rotate(var(--rot, 320deg)); opacity: .1; } }
.q-confirm-actions { display: flex; gap: 10px; justify-content: flex-end; padding: 14px 18px; }
.q-dialog-sm p { padding: 0 18px; margin: 0 0 6px; font-size: 13.5px; color: var(--qsoft); }
.q-dialog-sm h2 { padding: 16px 18px 8px; margin: 0; font-size: 17px; }
.q-btn-danger { background: var(--qbad); border-color: var(--qbad); color: #fff; }
.q-sr { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }

/* ---------- 响应式 ---------- */
@media (max-width: 980px) {
    .q-hero { grid-template-columns: minmax(0, 1fr); }
    .q-rail { grid-template-columns: minmax(0, 1fr); }
    .q-content { grid-template-columns: minmax(0, 1fr); }
    .q-tier-cards { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 560px) {
    .q-main { padding: 14px 12px 46px; }
    .q-hero h1 { font-size: 30px; }
    .q-board-card { padding: 12px; }
    .q-meters { width: 100%; justify-content: space-between; }
    .q-meter { flex: 1; }
    .q-level-grid { grid-template-columns: repeat(auto-fill, minmax(52px, 1fr)); }
    .q-win-stats b { font-size: 15px; }
}
@media (prefers-reduced-motion: reduce) {
    .q-main *, .q-modal * { animation-duration: .01s !important; animation-iteration-count: 1 !important; transition-duration: .01s !important; }
}