/* 调谐测评页样式（复用 index.css 的主题变量） */

.tuning-container { max-width: 980px; }

/* 描边 SVG 图标（跟随文字颜色） */
.ticon {
    width: 1.05em; height: 1.05em;
    fill: none; stroke: currentColor;
    stroke-width: 2; stroke-linecap: round; stroke-linejoin: round;
    vertical-align: -0.16em; margin-right: 0.38em;
    display: inline-block; flex-shrink: 0;
}
.theme-toggle .ticon { margin-right: 0; vertical-align: -0.18em; }
.primary-btn .ticon, .secondary-btn .ticon { width: 1em; height: 1em; }

.tuning-header { text-align: center; padding: 1.6rem 0 0.8rem; }
.tuning-header h1 { color: var(--text-primary); font-size: 1.9rem; }
.tuning-header p { color: var(--text-muted); margin-top: 0.4rem; }

.tuning-panel {
    background: var(--panel-bg);
    border: 1px solid var(--border-color);
    border-radius: var(--border-radius);
    box-shadow: 0 2px 12px var(--card-shadow);
    padding: 1.4rem 1.5rem;
    margin: 1.2rem 0;
}
.tuning-panel h2 { color: var(--text-primary); font-size: 1.25rem; margin-bottom: 0.9rem; }
.tuning-panel h3 { color: var(--text-secondary); font-size: 1.02rem; }

.strategy-top { display: flex; flex-wrap: wrap; gap: 1.2rem; align-items: flex-end; }
.field label { display: block; color: var(--text-muted); font-size: 0.82rem; margin-bottom: 0.35rem; }
.field select {
    background: var(--input-bg); color: var(--text-primary);
    border: 1px solid var(--input-border); border-radius: 8px;
    padding: 0.45rem 0.7rem; font-size: 0.95rem; min-width: 170px;
}

.segmented { display: inline-flex; border: 1px solid var(--input-border); border-radius: 8px; overflow: hidden; }
.segmented button {
    background: var(--input-bg); color: var(--text-muted); border: none;
    padding: 0.45rem 0.95rem; cursor: pointer; font-size: 0.92rem;
    transition: background 0.2s, color 0.2s;
    white-space: nowrap;
}
.segmented button + button { border-left: 1px solid var(--input-border); }
.segmented button.active { background: var(--button-border); color: #fff; }
.segmented.small button { padding: 0.3rem 0.7rem; font-size: 0.85rem; }

.small-note { color: var(--text-muted); font-size: 0.78rem; line-height: 1.55; margin: 0.55rem 0 0; }

.builder-section { margin-top: 1.3rem; }
.builder-title { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 0.6rem; }
.cp-add { display: flex; flex-wrap: wrap; gap: 0.45rem; }

.chip-btn {
    background: var(--button-bg); border: 1px dashed var(--button-border);
    color: var(--button-text); border-radius: 999px; padding: 0.3rem 0.9rem;
    font-size: 0.85rem; cursor: pointer; transition: background 0.2s;
}
.chip-btn:hover { background: var(--button-hover-bg); }

.tuning-container button, .tuning-container select { touch-action: manipulation; }

/* ===== Scratch 式积木 ===== */
.rule-card { margin-top: 0.35rem; filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.12)); }
/* 首张规则卡与上方说明文字留出呼吸空间（卡间仍保持 0.35rem 咬合距） */
#checkpoints, #keep-box { padding-top: 0.5rem; }
.rule-hat {
    display: flex; align-items: center; gap: 0.5rem;
    background: linear-gradient(180deg, #4c97ff, #3d7fdb);
    color: #fff; font-weight: 700; font-size: 0.95rem;
    border-radius: 16px 16px 4px 4px;
    padding: 0.55rem 0.95rem;
    box-shadow: inset 0 -3px 0 rgba(0, 0, 0, 0.18);
    position: relative;
}
.rule-hat::before {
    content: ''; position: absolute; top: -7px; left: 22px;
    width: 56px; height: 14px; background: #4c97ff;
    border-radius: 8px 8px 0 0;
}
.rule-hat .icon-btn { margin-left: auto; color: rgba(255, 255, 255, 0.85); }
.rule-hat .icon-btn:hover { color: #fff; background: rgba(0, 0, 0, 0.18); }
.rule-body {
    --stack-bg: color-mix(in srgb, #4c97ff 7%, var(--bg-tertiary));
    --outer-bg: color-mix(in srgb, #4c97ff 7%, var(--bg-tertiary));
    background: var(--stack-bg);
    border: 2px solid rgba(76, 151, 255, 0.35); border-top: none;
    border-radius: 0 0 14px 14px;
    padding: 0.65rem 0.75rem 0.75rem 0.9rem;
    position: relative;
}
/* 卡底部凹槽：与下一张规则卡帽顶凸起同位咬合 */
.rule-body::after {
    content: ''; position: absolute; bottom: -2px; left: 22px;
    width: 56px; height: 9px;
    background: var(--panel-bg);
    border-radius: 8px 8px 0 0;
}
.keep-card .rule-hat { background: linear-gradient(180deg, #4cbf56, #3da346); }
.keep-card .rule-hat::before { background: #4cbf56; }
.keep-card .rule-body {
    --stack-bg: color-mix(in srgb, #4cbf56 7%, var(--bg-tertiary));
    --outer-bg: color-mix(in srgb, #4cbf56 7%, var(--bg-tertiary));
    background: var(--stack-bg);
    border-color: rgba(76, 191, 86, 0.35);
}

.block-stack { display: flex; flex-direction: column; align-items: flex-start; }
.block {
    display: flex; align-items: center; gap: 0.4rem; flex-wrap: wrap;
    color: #fff; font-weight: 600; font-size: 0.86rem;
    border-radius: 10px; padding: 0.42rem 0.6rem 0.42rem 0.8rem;
    position: relative;
    box-shadow: inset 0 -2.5px 0 rgba(0, 0, 0, 0.2), 0 1px 3px rgba(0, 0, 0, 0.18);
}
.block + .block { margin-top: 2px; }
.block::before {
    content: ''; position: absolute; top: -5px; left: 16px;
    width: 24px; height: 10px; background: inherit;
    border-radius: 4px 4px 0 0; opacity: 0.95;
}
.block::after {
    content: ''; position: absolute; bottom: 0; left: 16px;
    width: 24px; height: 5px;
    background: var(--stack-bg, var(--bg-tertiary));
    border-radius: 4px 4px 0 0; opacity: 0.95;
}
.block-valid { background: #59c059; }
.block-stat { background: #4c97ff; }
.block-score { background: #ffab19; }

.block .socket, .rule-hat .socket {
    background: #fff; color: #1c2027; border: none; outline: none;
    border-radius: 999px; padding: 0.16rem 0.55rem;
    font-size: 0.84rem; font-weight: 700; cursor: pointer;
    box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15);
}
.block .socket option { background: #fff; color: #1c2027; }
.block input.socket-num { width: 96px; cursor: text; }
.grade-chip {
    background: #fff; border: none; border-radius: 999px; cursor: pointer;
    padding: 0.12rem 0.42rem; font-size: 0.7rem; font-weight: 800;
    box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15);
}
.grade-chip:hover { transform: scale(1.1); }
.block input.socket-num::placeholder { color: #9aa4b1; font-weight: 500; font-size: 0.74rem; }
.block .block-rm { color: rgba(255, 255, 255, 0.8); }
.block .block-rm:hover { color: #fff; background: rgba(0, 0, 0, 0.2); }

/* 连接件积木（点击切换 且/或）：方形带齿咬合，右缩进不与条件块左对齐 */
.conn-pill {
    position: relative;
    margin: 2px 0 0 4px;
    min-width: 44px;
    padding: 0.12rem 0.9rem 0.3rem;
    border: none; border-radius: 8px;
    color: #fff; font-weight: 800; font-size: 0.74rem; cursor: pointer;
    box-shadow: inset 0 -2.5px 0 rgba(0, 0, 0, 0.2), 0 1px 3px rgba(0, 0, 0, 0.18);
    transition: transform 0.15s;
}
.conn-pill::before {
    content: ''; position: absolute; top: -5px; left: 12px;
    width: 24px; height: 10px; background: inherit;
    border-radius: 4px 4px 0 0; opacity: 0.95;
}
.conn-pill::after {
    content: ''; position: absolute; bottom: 0; left: 12px;
    width: 24px; height: 5px;
    background: var(--stack-bg, var(--bg-tertiary));
    border-radius: 4px 4px 0 0; opacity: 0.95;
}
.conn-and { background: #f0a11b; }
.conn-or { background: #9966ff; }
.conn-pill:hover { transform: scale(1.05); }
.conn-pill + .block, .conn-pill + .block-group { margin-top: 2px; }

/* 嵌套条件组 */
.block-group {
    --stack-bg: color-mix(in srgb, #9966ff 10%, color-mix(in srgb, #4c97ff 6%, var(--bg-tertiary)));
    border: 2.5px dashed rgba(153, 102, 255, 0.65);
    background: rgba(153, 102, 255, 0.08);
    border-radius: 12px; padding: 0.5rem 0.6rem 0.6rem;
    margin: 2px 0;
    position: relative;
}
.block-group::before {
    /* 含 2.5px 虚线边框的外沿 = 16..40，与块齿列精确对齐 */
    content: ''; position: absolute; top: -7px; left: 13.5px;
    width: 19px; height: 7px;
    background: var(--stack-bg);
    border: 2.5px dashed rgba(153, 102, 255, 0.65); border-bottom: none;
    border-radius: 4px 4px 0 0;
}
.block-group::after {
    content: ''; position: absolute; bottom: -2.5px; left: 16px;
    width: 24px; height: 6px;
    background: var(--outer-bg, var(--bg-tertiary));
    border-radius: 4px 4px 0 0;
}
.block-group-head {
    display: flex; align-items: center; justify-content: space-between;
    color: #8a55d7; font-size: 0.75rem; font-weight: 800;
    margin-bottom: 0.35rem; text-transform: uppercase; letter-spacing: 0.04em;
}
.block-group-head .icon-btn { color: #8a55d7; }
.block-group-head .icon-btn:hover { color: var(--error); }

.icon-btn {
    background: none; border: none; cursor: pointer; color: var(--text-muted);
    font-size: 0.9rem; padding: 0.15rem 0.35rem; border-radius: 6px;
}
.icon-btn:hover { color: var(--error); background: var(--button-hover-bg); }

.add-row { display: flex; gap: 0.5rem; margin-top: 0.55rem; }
.ghost-block {
    border: 2px dashed var(--input-border); background: transparent;
    color: var(--text-muted); border-radius: 10px;
    padding: 0.28rem 0.75rem; font-size: 0.82rem; cursor: pointer;
    transition: border-color 0.2s, color 0.2s;
}
.ghost-block:hover { border-color: var(--button-border); color: var(--button-text); }

/* 策略复述 */
.desc-box {
    margin-top: 1.3rem;
    border-left: 4px solid var(--accent-gold);
    background: var(--bg-tertiary);
    border-radius: 8px; padding: 0.75rem 1rem 0.85rem;
}
.desc-head { display: flex; align-items: baseline; gap: 0.7rem; flex-wrap: wrap; }
.desc-head .small-note { margin: 0; }
.strategy-desc { margin-top: 0.45rem; }
.strategy-desc .desc-line {
    color: var(--text-secondary); font-size: 0.88rem; line-height: 1.75;
    padding-left: 1.1em; position: relative;
}
.strategy-desc .desc-line::before {
    content: '›'; position: absolute; left: 0.15em; color: var(--accent-gold); font-weight: 700;
}

.action-row {
    display: grid; grid-template-columns: 2fr 1fr;
    gap: 0.9rem; margin-top: 1.2rem;
}
.primary-btn {
    background: linear-gradient(135deg, var(--amber-500), var(--amber-600));
    color: #fff; border: none; border-radius: 12px; padding: 0.85rem 1.2rem;
    font-size: 1.02rem; font-weight: 700; cursor: pointer;
    box-shadow: 0 3px 12px rgba(217, 119, 6, 0.32);
    transition: transform 0.15s, box-shadow 0.15s;
}
.primary-btn:hover:not(:disabled) { transform: translateY(-1px); box-shadow: 0 5px 16px rgba(217, 119, 6, 0.4); }
.primary-btn:disabled { opacity: 0.55; cursor: wait; }
.secondary-btn {
    background: var(--button-bg); color: var(--button-text);
    border: 1.5px solid var(--button-border); border-radius: 12px;
    padding: 0.85rem 1rem; font-size: 1.02rem; font-weight: 600; cursor: pointer;
    transition: transform 0.15s, background 0.15s;
}
.secondary-btn:hover { background: var(--button-hover-bg); transform: translateY(-1px); }

/* 结果下方保存策略 */
.result-save { display: flex; gap: 0.6rem; align-items: center; flex-wrap: wrap; margin-top: 1.4rem; }
.result-save .secondary-btn { padding: 0.5rem 1rem; font-size: 0.9rem; }
.result-save .lib-name { max-width: 240px; }
.result-save .lib-msg { margin-top: 0; }
.sim-error { color: var(--error); margin-top: 0.8rem; font-size: 0.9rem; }

/* 结果摘要卡 */
.summary-cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 0.8rem; margin-bottom: 1.4rem; }
.sum-card {
    background: var(--bg-tertiary); border: 1px solid var(--border-color);
    border-radius: 10px; padding: 0.8rem 1rem;
}
.sum-card .k { color: var(--text-muted); font-size: 0.78rem; }
.sum-card .v { color: var(--text-primary); font-size: 1.35rem; font-weight: 700; margin-top: 0.2rem; }
.sum-card .s { color: var(--text-muted); font-size: 0.72rem; margin-top: 0.2rem; }

/* 图表 */
.chart-block { margin-top: 0.6rem; }
.chart-wrap { position: relative; margin-top: 0.6rem; }
#dist-chart { width: 100%; height: auto; display: block; }
.chart-legend {
    display: flex; flex-wrap: nowrap; gap: 0.4rem; margin-top: 0.7rem;
    overflow-x: auto; padding-bottom: 4px; scrollbar-width: thin;
}
.legend-chip {
    display: inline-flex; align-items: center; gap: 0.35rem; cursor: pointer;
    border: 1px solid var(--border-color); border-radius: 999px;
    padding: 0.18rem 0.6rem; font-size: 0.76rem; color: var(--text-secondary);
    transition: opacity 0.2s; user-select: none;
    white-space: nowrap; flex-shrink: 0;
    font-variant-numeric: tabular-nums;
}
.legend-chip.off { opacity: 0.35; }
.legend-chip .dot { width: 9px; height: 9px; border-radius: 50%; }
.chart-tooltip {
    position: absolute; pointer-events: none; z-index: 5;
    background: var(--panel-bg); border: 1px solid var(--border-color);
    border-radius: 8px; padding: 0.5rem 0.7rem; font-size: 0.78rem;
    color: var(--text-secondary); box-shadow: 0 4px 14px var(--card-shadow);
    min-width: 130px;
}
.chart-tooltip .tt-title { font-weight: 700; color: var(--text-primary); margin-bottom: 0.25rem; }
.chart-tooltip .tt-row { display: flex; align-items: center; gap: 0.4rem; margin-top: 0.15rem; }
.chart-tooltip .dot { width: 8px; height: 8px; border-radius: 50%; }
.chart-empty { color: var(--text-muted); text-align: center; padding: 2rem 0; }

/* 评级成本 */
.grade-block { margin-top: 1.6rem; }
.grade-tables { display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; margin-top: 0.7rem; }
@media (max-width: 720px) { .grade-tables { grid-template-columns: 1fr; } }
.grade-table { border: 1px solid var(--border-color); border-radius: 10px; overflow: hidden; }
.grade-table .gt-head {
    background: var(--bg-tertiary); color: var(--text-secondary);
    font-weight: 700; font-size: 0.9rem; padding: 0.55rem 0.9rem;
}
.grade-table table { width: 100%; border-collapse: collapse; font-size: 0.86rem; }
.grade-table th, .grade-table td { padding: 0.5rem 0.9rem; text-align: right; color: var(--text-secondary); }
.grade-table th { color: var(--text-muted); font-weight: 500; font-size: 0.76rem; border-bottom: 1px solid var(--border-color); }
.grade-table td:first-child, .grade-table th:first-child { text-align: left; }
.grade-table tr + tr td { border-top: 1px solid var(--border-color); }
.grade-badge {
    display: inline-block; min-width: 2.4rem; text-align: center; border-radius: 6px;
    padding: 0.1rem 0.4rem; color: #fff; font-weight: 700; font-size: 0.8rem;
}
.grade-cell-sub { display: block; color: var(--text-muted); font-size: 0.68rem; margin-top: 0.12rem; }
.grade-none { color: var(--text-muted); font-style: italic; }

/* 单开 */
.single-flex { display: flex; gap: 1.4rem; flex-wrap: wrap; }
.single-left { flex: 1; min-width: 260px; }
.single-right { flex: 0 0 300px; }
.single-right img { width: 100%; border-radius: 10px; box-shadow: 0 4px 16px var(--card-shadow); }
.single-status { font-size: 1.05rem; font-weight: 700; color: var(--text-primary); margin-bottom: 0.7rem; }
.single-slots { display: flex; flex-direction: column; gap: 0.45rem; }
.slot-row {
    display: flex; align-items: center; gap: 0.6rem;
    background: var(--bg-tertiary); border: 1px solid var(--border-color);
    border-radius: 8px; padding: 0.5rem 0.8rem;
}
.slot-row .slot-idx { color: var(--text-muted); font-size: 0.78rem; width: 1.4rem; }
.slot-row .slot-name { color: var(--text-primary); font-size: 0.92rem; flex: 1; }
.slot-row .slot-value { color: var(--text-primary); font-weight: 700; min-width: 3.6rem; text-align: right; }
.slot-row .slot-tag {
    font-size: 0.68rem; border-radius: 5px; padding: 0.08rem 0.4rem;
    background: rgba(217, 119, 6, 0.15); color: var(--accent-gold);
}
.slot-row .slot-gain { color: var(--success); font-size: 0.8rem; min-width: 3.6rem; text-align: right; font-variant-numeric: tabular-nums; }
.slot-row .slot-score { color: var(--accent-blue); font-size: 0.8rem; min-width: 3.6rem; text-align: right; font-variant-numeric: tabular-nums; }
.slot-row.slot-head {
    background: none; border: none; padding-top: 0; padding-bottom: 0.1rem;
}
.slot-row.slot-head span { color: var(--text-muted) !important; font-size: 0.7rem !important; font-weight: 500; }

.gt-sub { color: var(--text-muted); font-weight: 400; font-size: 0.72rem; margin-left: 0.55rem; }
.single-cost { margin-top: 0.8rem; color: var(--text-muted); font-size: 0.85rem; }

/* 我的策略（本地库） */
.lib-box {
    margin-top: 1.3rem; border: 1px solid var(--border-color);
    border-radius: 10px; overflow: hidden; background: var(--bg-tertiary);
}
.lib-head {
    display: flex; align-items: center; gap: 0.5rem; width: 100%;
    background: none; border: none; cursor: pointer;
    padding: 0.65rem 0.95rem; color: var(--text-secondary);
    font-size: 0.95rem; font-weight: 700; text-align: left;
}
.lib-head:hover { background: var(--button-hover-bg); }
.lib-caret { display: inline-block; transition: transform 0.25s; color: var(--accent-gold); }
.lib-count { color: var(--text-muted); font-weight: 500; font-size: 0.8rem; }
.lib-body { padding: 0.35rem 0.95rem 0.85rem; border-top: 1px solid var(--border-color); }
.lib-actions { display: flex; gap: 0.5rem; flex-wrap: wrap; align-items: center; margin-top: 0.5rem; }
.lib-name {
    flex: 1; min-width: 150px;
    background: var(--input-bg); color: var(--text-primary);
    border: 1px solid var(--input-border); border-radius: 8px;
    padding: 0.35rem 0.65rem; font-size: 0.86rem; outline: none;
}
.lib-import-box { margin-top: 0.6rem; display: flex; gap: 0.5rem; align-items: flex-start; }
.lib-import-box textarea {
    flex: 1; background: var(--input-bg); color: var(--text-primary);
    border: 1px solid var(--input-border); border-radius: 8px;
    padding: 0.45rem 0.6rem; font-size: 0.78rem; font-family: monospace; resize: vertical;
}
.lib-list { margin-top: 0.65rem; display: flex; flex-direction: column; gap: 0.4rem; }
.lib-item {
    display: flex; align-items: center; gap: 0.7rem; flex-wrap: wrap;
    background: var(--panel-bg); border: 1px solid var(--border-color);
    border-radius: 8px; padding: 0.45rem 0.7rem;
}
.lib-item-info { flex: 1; min-width: 140px; }
.lib-item-name { color: var(--text-primary); font-weight: 600; font-size: 0.88rem; }
.lib-item-meta { color: var(--text-muted); font-size: 0.72rem; margin-top: 0.1rem; }
.lib-item-actions { display: flex; gap: 0.35rem; align-items: center; }
.lib-del-armed {
    color: #fff !important; background: var(--error) !important;
    border-radius: 999px; padding: 0.18rem 0.6rem !important;
    font-size: 0.74rem !important; white-space: nowrap;
}
.lib-msg { color: var(--success); font-size: 0.8rem; margin-top: 0.5rem; }

/* 词条概率表 */
.prob-box { margin-top: 0.9rem; }
.prob-table { margin-top: 0.55rem; display: flex; flex-direction: column; gap: 0.3rem; }
.prob-row {
    display: flex; align-items: center; gap: 0.7rem;
    padding: 0.3rem 0.45rem; border-radius: 8px;
}
.prob-row:nth-child(odd) { background: var(--panel-bg); }
.prob-name { flex: 0 0 8.5rem; color: var(--text-secondary); font-size: 0.82rem; font-weight: 600; }
.prob-tiers { flex: 1; display: flex; flex-wrap: wrap; gap: 0.3rem 0.45rem; }
.prob-tier {
    display: inline-flex; flex-direction: column; align-items: center;
    background: var(--input-bg); border: 1px solid var(--border-color);
    border-radius: 7px; padding: 0.16rem 0.45rem; min-width: 3.2rem;
}
.prob-tier b { color: var(--text-primary); font-size: 0.78rem; font-variant-numeric: tabular-nums; }
.prob-tier small { color: var(--text-muted); font-size: 0.62rem; margin-top: 0.05rem; }

/* 策略排行榜 */
.lb-filters { display: flex; gap: 0.7rem; flex-wrap: wrap; align-items: center; margin-top: 0.7rem; }
.lb-filters select {
    background: var(--input-bg); color: var(--text-primary);
    border: 1px solid var(--input-border); border-radius: 8px;
    padding: 0.34rem 0.6rem; font-size: 0.88rem;
}
.lb-body { margin-top: 0.9rem; display: flex; flex-direction: column; gap: 0.6rem; }
.lb-empty { color: var(--text-muted); text-align: center; padding: 1.6rem 0; font-size: 0.9rem; }
.lb-row {
    border: 1px solid var(--border-color); border-radius: 12px;
    background: var(--bg-tertiary); padding: 0.65rem 0.9rem;
    transition: border-color 0.2s, transform 0.15s;
}
.lb-row:hover { border-color: var(--button-border); transform: translateY(-1px); }
.lb-row.lb-top { background: linear-gradient(90deg, rgba(245, 197, 24, 0.07), var(--bg-tertiary) 40%); }
.lb-main { display: flex; align-items: center; gap: 0.9rem; }
.lb-rank {
    flex: 0 0 auto; min-width: 2rem; height: 2rem; border-radius: 50%;
    display: inline-flex; align-items: center; justify-content: center;
    background: var(--input-bg); color: var(--text-muted);
    font-weight: 800; font-size: 0.88rem;
}
.lb-rank.top1 { background: linear-gradient(160deg, #ffd94d, #e8a90c); color: #4a3903; box-shadow: 0 2px 6px rgba(232, 169, 12, 0.4); }
.lb-rank.top2 { background: linear-gradient(160deg, #e2e6ec, #b4bac4); color: #3c414b; }
.lb-rank.top3 { background: linear-gradient(160deg, #e3ad78, #c08650); color: #4d2e12; }
.lb-who { flex: 0 0 auto; min-width: 5.2rem; }
.lb-char { color: var(--text-primary); font-weight: 700; font-size: 0.98rem; }
.lb-cost { color: var(--text-muted); font-size: 0.74rem; margin-top: 0.05rem; }
.lb-stats {
    flex: 1; display: grid; grid-template-columns: repeat(4, 1fr); gap: 0.4rem;
}
.lb-stat {
    display: flex; flex-direction: column; align-items: center; justify-content: center;
    padding: 0.3rem 0.3rem; border-radius: 8px; text-align: center;
}
.lb-stat b { color: var(--text-primary); font-size: 1.02rem; font-variant-numeric: tabular-nums; }
.lb-stat small { color: var(--text-muted); font-size: 0.66rem; margin-top: 0.12rem; line-height: 1.25; }
.lb-stat.hot { background: var(--button-hover-bg); }
.lb-stat.hot b { color: var(--accent-gold); }
.lb-stat + .lb-stat { border-left: 1px solid var(--border-color); border-radius: 0 8px 8px 0; }
.lb-stat.hot + .lb-stat, .lb-stat:first-child { border-left: none; }
.lb-load { flex: 0 0 auto; }
.lb-desc { margin-top: 0.45rem; }
.lb-desc summary {
    cursor: pointer; color: var(--accent-blue); font-size: 0.78rem; user-select: none;
}
.lb-desc .desc-line {
    color: var(--text-muted); font-size: 0.8rem; line-height: 1.7; padding-left: 1em;
}

/* 返回评分链接在移动端也保持可见（index.css 会折叠 .links） */
.tuning-container .navbar .links {
    display: flex !important; position: static; width: auto;
    flex-direction: row; background: none; border: none; box-shadow: none; padding: 0;
}
.tuning-container .navbar .links a { width: auto; border: none; border-radius: 8px; }

/* 移动端适配 */
@media (max-width: 640px) {
    .tuning-container .logo strong { white-space: nowrap; font-size: 1rem; }
    .tuning-container .navbar .links a { font-size: 0.82rem; padding: 0.3rem 0.5rem; }
    .tuning-container .lang-select { font-size: 0.8rem; padding: 0.25rem 0.3rem; }
    .tuning-header { padding-top: 1rem; }
    .tuning-header h1 { font-size: 1.4rem; }
    .tuning-header p { font-size: 0.85rem; }
    .tuning-panel { padding: 1rem 0.85rem; }
    .strategy-top { flex-direction: column; align-items: stretch; gap: 0.8rem; }
    .field select { width: 100%; }
    .segmented { display: flex; width: 100%; }
    .segmented button { flex: 1; padding: 0.45rem 0.3rem; }
    .segmented.small { width: auto; }
    .builder-title { align-items: flex-start; }
    .rule-hat { font-size: 0.86rem; padding: 0.5rem 0.7rem; }
    .rule-body { padding: 0.55rem 0.5rem 0.6rem 0.6rem; }
    .block { font-size: 0.8rem; padding: 0.36rem 0.45rem 0.36rem 0.6rem; gap: 0.3rem; }
    .block .socket, .rule-hat .socket { font-size: 0.78rem; padding: 0.12rem 0.42rem; }
    .block input.socket-num { width: 74px; }
    .conn-pill { font-size: 0.7rem; padding: 0.16rem 0.75rem; }
    .desc-box { padding: 0.6rem 0.7rem 0.7rem; }
    .strategy-desc .desc-line { font-size: 0.82rem; }
    .action-row { grid-template-columns: 1fr; }
    .primary-btn, .secondary-btn { width: 100%; }
    /* 保存/导出并排一行 */
    .result-save .secondary-btn { width: auto; flex: 1 1 auto; padding: 0.5rem 0.5rem; font-size: 0.85rem; }
    .result-save .lib-msg { flex-basis: 100%; }
    /* 策略库条目按钮：禁竖排换行，放不下整体折行 */
    .lib-item-actions { flex-wrap: wrap; }
    .lib-item-actions .chip-btn { white-space: nowrap; padding: 0.3rem 0.6rem; font-size: 0.8rem; }
    .valid-thresholds b { white-space: nowrap; }
    .summary-cards { grid-template-columns: repeat(2, 1fr); }
    .single-right { flex: 1 1 100%; }
    .lib-actions .chip-btn { flex: 1 1 auto; text-align: center; }
    .lb-main { flex-wrap: wrap; gap: 0.5rem 0.7rem; }
    .lb-stats { grid-template-columns: repeat(2, 1fr); flex-basis: 100%; order: 3; gap: 0.3rem; }
    .lb-stat { align-items: flex-start; text-align: left; border-left: none !important; border-radius: 8px; }
    .lb-load { margin-left: auto; }
    .chart-tooltip { font-size: 0.7rem; min-width: 100px; }
    .prob-row { flex-direction: column; align-items: flex-start; gap: 0.3rem; }
    .prob-name { flex: none; }
    .lb-filters .segmented.small button { padding: 0.3rem 0.55rem; font-size: 0.8rem; }
    /* 单开结果表：窄屏不截断词条名，整体缩小字体放下全部内容 */
    .slot-row { flex-wrap: nowrap; gap: 0.3rem; padding: 0.45rem 0.5rem; }
    .slot-row .slot-idx { width: 1rem; font-size: 0.66rem; flex-shrink: 0; }
    .slot-row .slot-name { min-width: 0; white-space: nowrap; font-size: 0.78rem; }
    .slot-row .slot-tag { font-size: 0.56rem; padding: 0.05rem 0.24rem; white-space: nowrap; }
    .slot-row .slot-value { min-width: 2.6rem; font-size: 0.78rem; flex-shrink: 0; }
    .slot-row .slot-gain, .slot-row .slot-score { min-width: 2.5rem; font-size: 0.68rem; flex-shrink: 0; }
    .slot-row.slot-head span { font-size: 0.6rem !important; }
}

@media (max-width: 380px) {
    .slot-row .slot-name { font-size: 0.7rem; }
    .slot-row .slot-tag { font-size: 0.52rem; }
    .slot-row .slot-value { font-size: 0.72rem; min-width: 2.4rem; }
    .slot-row .slot-gain, .slot-row .slot-score { font-size: 0.62rem; min-width: 2.3rem; }
}

/* ===== 策略积木导出图（服务端 chromium 截图用，同套样式保证所见即所得） ===== */
.tuning-export {
    width: 560px; padding: 20px 22px 24px;
    background: var(--panel-bg);
    font-family: system-ui, -apple-system, 'PingFang SC', 'Microsoft YaHei', sans-serif;
}
.export-head {
    position: relative;
    background: linear-gradient(180deg, #ffab19, #e8930c);
    color: #fff;
    border-radius: 24px 24px 6px 6px;
    padding: 0.75rem 1.05rem 0.65rem;
    box-shadow: inset 0 -3px 0 rgba(0, 0, 0, 0.18);
    filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.12));
}
.export-head::after {
    content: ''; position: absolute; bottom: -2px; left: 22px;
    width: 56px; height: 9px; background: var(--panel-bg);
    border-radius: 8px 8px 0 0;
}
.export-head .xh-title { font-size: 1.08rem; font-weight: 800; }
.export-head .xh-sub { font-size: 0.78rem; opacity: 0.92; margin-top: 3px; font-weight: 600; }
.ban-card .rule-hat { background: linear-gradient(180deg, #e0564f, #c4423c); }
.ban-card .rule-hat::before { background: #e0564f; }
.ban-card .rule-body {
    --stack-bg: color-mix(in srgb, #e0564f 7%, var(--bg-tertiary));
    --outer-bg: color-mix(in srgb, #e0564f 7%, var(--bg-tertiary));
    background: var(--stack-bg);
    border-color: rgba(224, 86, 79, 0.35);
}
.export-tail {
    position: relative; margin-top: 0.35rem;
    background: var(--bg-tertiary);
    border: 2px solid var(--input-border);
    border-radius: 6px 6px 18px 18px;
    padding: 0.75rem 1rem 0.85rem;
    filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.12));
}
.export-tail::before {
    content: ''; position: absolute; top: -7px; left: 22px;
    width: 56px; height: 10px; background: var(--bg-tertiary);
    border-radius: 8px 8px 0 0;
}
.export-tail .xt-head { font-size: 0.88rem; font-weight: 800; color: var(--text-primary); margin-bottom: 0.4rem; }
.export-tail .xt-row {
    display: flex; justify-content: space-between; align-items: baseline;
    font-size: 0.84rem; color: var(--text-secondary); padding: 2px 0;
}
.export-tail .xt-row b { color: var(--text-primary); font-weight: 700; }
.export-tail .xt-grade { font-weight: 800; }
.export-tail .xt-foot {
    margin-top: 0.5rem; font-size: 0.68rem; color: var(--text-muted);
    text-align: right; opacity: 0.85;
}
.tuning-export .rule-card + .rule-card { margin-top: 0.35rem; }

/* 标题弹窗（导出 / 保存 / 重命名共用） */
.title-modal {
    position: fixed; inset: 0; z-index: 200;
    background: rgba(15, 23, 42, 0.45);
    display: flex; align-items: center; justify-content: center;
    padding: 1rem;
}
.title-modal-box {
    background: var(--bg-primary); border-radius: 14px;
    padding: 1.1rem 1.2rem 1rem; width: min(360px, 92vw);
    box-shadow: 0 12px 40px rgba(0, 0, 0, 0.28);
}
.title-modal-box h3 {
    display: flex; align-items: center; gap: 0.45rem;
    margin: 0 0 0.75rem; font-size: 1rem; color: var(--text-primary);
}
.title-modal-box .lib-name {
    width: 100%; max-width: none; box-sizing: border-box;
    font-size: 16px; /* ≥16px 避免 iOS 聚焦自动放大 */
}
.title-modal-actions { display: flex; justify-content: flex-end; gap: 0.6rem; margin-top: 0.95rem; }
.title-modal-actions .chip-btn { min-width: 5.5em; text-align: center; }
.chip-primary { background: var(--button-border); border-style: solid; color: #fff; }
.chip-primary:hover { background: var(--button-hover-border, var(--button-border)); }
@media (max-width: 640px) {
    .title-modal { align-items: flex-start; padding-top: 18vh; }
    .title-modal-actions .chip-btn { flex: 1; }
}

/* 页脚 */
.tuning-footer { text-align: center; padding: 0.6rem 0 1.4rem; }
.tuning-footer p { color: var(--text-muted); font-size: 12px; margin-top: 6px; opacity: 0.75; }

/* 排行榜页码 */
.lb-pager { display: flex; justify-content: center; align-items: center; gap: 0.35rem; padding: 0.7rem 0 0.2rem; flex-wrap: wrap; }
.lb-page-gap { color: var(--text-muted); font-size: 0.8rem; padding: 0 0.1rem; }
.lb-page-btn {
    min-width: 2.1rem; height: 2.1rem; border-radius: 8px;
    border: 1px solid var(--input-border); background: var(--input-bg);
    color: var(--text-secondary); font-size: 0.88rem; cursor: pointer;
    transition: background 0.15s, color 0.15s;
    font-variant-numeric: tabular-nums;
}
.lb-page-btn:hover:not(:disabled):not(.cur) { background: var(--button-hover-bg); color: var(--button-text); }
.lb-page-btn.cur { background: var(--button-border); color: #fff; border-color: var(--button-border); cursor: default; }
.lb-page-btn:disabled { opacity: 0.35; cursor: default; }

/* 词条组数量块 + 词条多选面板 */
.block-set { background: #9966ff; }
.block .op-fixed { color: #fff; font-weight: 800; font-size: 0.9rem; padding: 0 0.1rem; }
.set-panel {
    display: flex; flex-wrap: wrap; gap: 0.3rem;
    background: rgba(153, 102, 255, 0.1);
    border: 1.5px dashed rgba(153, 102, 255, 0.5);
    border-radius: 10px; padding: 0.45rem 0.5rem; margin: 4px 0 4px 12px;
}
.set-chip {
    border: 1.5px solid var(--input-border); background: var(--bg-primary);
    color: var(--text-muted); border-radius: 999px;
    padding: 0.14rem 0.55rem; font-size: 0.76rem; cursor: pointer;
    transition: all 0.15s;
}
.set-chip.on { background: #9966ff; border-color: #9966ff; color: #fff; font-weight: 700; }
.set-picker { cursor: pointer; }

/* 一旦规则块 */
.block-ban { background: #e0564f; }
.ban-stack { margin-top: 0.6rem; --stack-bg: var(--panel-bg); }

/* 一旦规则数值框：留空显示 ∞ */
.block-ban input.socket-num { width: 72px; text-align: center; }
.block-ban input.socket-num::placeholder { font-size: 1.05rem; font-weight: 700; color: #6b7382; }

/* 角色有效词条表（纯列表，权重和=1） */
.valid-table {
    margin-top: 0.55rem;
    display: grid; grid-template-columns: repeat(auto-fill, minmax(190px, 1fr));
    gap: 0.25rem 0.9rem;
}
.valid-row {
    display: flex; align-items: center; justify-content: space-between; gap: 0.5rem;
    padding: 0.26rem 0.5rem; border-radius: 8px;
    background: var(--panel-bg);
}
.valid-name {
    color: var(--text-muted); font-size: 0.84rem;
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.vw-num {
    color: var(--text-secondary); font-size: 0.8rem;
    font-variant-numeric: tabular-nums; flex-shrink: 0;
}
@media (max-width: 640px) {
    /* 单列：长词条名（如 共鸣技能伤害加成）不再被截断 */
    .valid-table { grid-template-columns: 1fr; gap: 0.22rem 0.5rem; }
    .valid-name { font-size: 0.8rem; }
    .vw-num { font-size: 0.76rem; }
    #valid-char-label { display: none; }
}

/* 策略ID / 上榜排名 / 我的标记 / 刷新按钮 */
.sig-chip {
    font-family: 'SF Mono', Monaco, monospace; font-size: 0.72rem;
    color: var(--text-muted); background: var(--input-bg);
    border-radius: 5px; padding: 0.06rem 0.4rem;
}
.result-board {
    display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap;
    margin: -0.5rem 0 1.2rem; font-size: 0.82rem;
}
.rank-chip {
    background: var(--button-hover-bg); color: var(--button-text);
    border: 1px solid var(--button-border); border-radius: 999px;
    padding: 0.14rem 0.6rem; font-size: 0.76rem; font-weight: 600;
}
.rank-none { color: var(--text-muted); font-size: 0.76rem; }
.lb-row.lb-mine { border-color: var(--button-border); box-shadow: 0 0 0 1px var(--button-border); }
.mine-badge {
    font-size: 0.64rem; font-weight: 700; color: #fff;
    background: var(--amber-500); border-radius: 5px; padding: 0.05rem 0.35rem;
    vertical-align: 2px;
}
@media (max-width: 640px) {
    .result-board { margin-top: 0; }
}

/* 评级分数线 */
.valid-thresholds {
    margin-top: 0.65rem; padding-top: 0.55rem;
    border-top: 1px dashed var(--border-color);
    color: var(--text-muted); font-size: 0.8rem;
    font-variant-numeric: tabular-nums;
}
.valid-thresholds .thr-sep { margin: 0 0.5rem; color: var(--border-color); }
