/* ======================================================================
 *  GPA / 绩点计算器 /tool/gpa-calc
 * ====================================================================== */

/* ---------- 卡片 ---------- */
.gpa-card {
    padding: 22px;
    margin-bottom: 16px;
    background: var(--c-bg-card);
    border: 1px solid var(--c-border);
    border-radius: var(--radius-md);
    box-shadow: var(--shadow-sm);
}
.gpa-card-title { font-size: 15.5px; font-weight: 800; letter-spacing: -0.01em; margin-bottom: 14px; }
.gpa-sub-title { font-size: 13.5px; font-weight: 800; color: var(--c-text-sub); margin: 20px 0 11px; }

/* ---------- 工具栏 ---------- */
.gpa-toolbar { display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between; gap: 12px; margin-bottom: 16px; }
.gpa-field { display: flex; flex-direction: column; gap: 6px; }
.gpa-field-label { font-size: 12px; font-weight: 700; color: var(--c-text-muted); }
.gpa-select {
    height: 42px;
    padding: 0 12px;
    font-family: inherit;
    font-size: 13.5px;
    font-weight: 700;
    color: var(--c-text);
    background: var(--c-surface-soft);
    border: 1.5px solid var(--c-border);
    border-radius: 11px;
    outline: none;
    cursor: pointer;
}
.gpa-select:focus { border-color: var(--c-primary); box-shadow: 0 0 0 4px var(--c-primary-soft); }
.gpa-actions { display: flex; flex-wrap: wrap; gap: 8px; }
.gpa-btn {
    height: 42px;
    padding: 0 16px;
    font-family: inherit;
    font-size: 13px;
    font-weight: 700;
    color: var(--c-text-sub);
    background: var(--c-surface-soft);
    border: 1px solid var(--c-border);
    border-radius: 11px;
    cursor: pointer;
    transition: all 0.16s ease;
}
.gpa-btn:hover { color: var(--c-primary); border-color: var(--c-primary); background: var(--c-primary-soft); }
.gpa-btn-clear:hover { color: #d32f2f; border-color: #d32f2f; background: rgba(211, 47, 47, 0.06); }

/* ---------- 课程表 ---------- */
.gpa-head,
.gpa-row {
    display: grid;
    grid-template-columns: minmax(0, 1.5fr) 92px minmax(0, 1fr) 72px 40px;
    gap: 10px;
    align-items: center;
}
.gpa-head { padding: 0 4px 8px; font-size: 12px; font-weight: 700; color: var(--c-text-muted); }
.gpa-head span:nth-child(2),
.gpa-head span:nth-child(4) { text-align: center; }
.gpa-rows { display: flex; flex-direction: column; gap: 8px; }
.gpa-row { transition: opacity 0.16s ease; }
.gpa-row.is-off { opacity: 0.5; }
.gpa-in {
    width: 100%;
    height: 42px;
    padding: 0 12px;
    font-family: inherit;
    font-size: 14px;
    font-weight: 700;
    color: var(--c-text);
    background: var(--c-surface-soft);
    border: 1.5px solid var(--c-border);
    border-radius: 10px;
    outline: none;
    transition: all 0.16s ease;
}
.gpa-in:focus { border-color: var(--c-primary); box-shadow: 0 0 0 4px var(--c-primary-soft); }
.gpa-in::placeholder { font-weight: 500; font-size: 13px; color: var(--c-text-muted); }
.gpa-in-credit,
.gpa-in-score { text-align: center; }
.gpa-incl {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 4px;
    font-size: 12px;
    font-weight: 700;
    color: var(--c-text-muted);
    cursor: pointer;
    user-select: none;
}
.gpa-incl input { width: 15px; height: 15px; accent-color: #2fa36b; cursor: pointer; }
.gpa-del {
    width: 34px;
    height: 34px;
    font-size: 13px;
    color: var(--c-text-muted);
    background: transparent;
    border: 1px solid var(--c-border);
    border-radius: 9px;
    cursor: pointer;
    transition: all 0.16s ease;
}
.gpa-del:hover { color: #d32f2f; border-color: #d32f2f; background: rgba(211, 47, 47, 0.06); }
.gpa-tip { margin-top: 14px; font-size: 12.5px; line-height: 1.75; color: var(--c-text-muted); }
.gpa-tip b { color: var(--c-text-sub); }

/* ---------- 结果 ---------- */
.gpa-result { display: flex; flex-wrap: wrap; align-items: center; gap: 22px; padding: 22px; border-radius: 14px; background: linear-gradient(135deg, rgba(47, 163, 107, 0.12), rgba(41, 128, 185, 0.07)); border: 1px solid rgba(47, 163, 107, 0.3); }
.gpa-score { display: flex; flex-direction: column; align-items: center; gap: 4px; padding-right: 22px; border-right: 1px solid var(--c-border); }
.gpa-score b { font-size: 54px; font-weight: 800; line-height: 1; letter-spacing: -0.03em; color: #1f8a56; font-variant-numeric: tabular-nums; }
.gpa-score span { font-size: 12.5px; font-weight: 700; color: var(--c-text-muted); }
.gpa-metrics { display: flex; flex-wrap: wrap; gap: 26px; }
.gpa-metric { display: flex; flex-direction: column; gap: 3px; }
.gpa-metric b { font-size: 24px; font-weight: 800; color: var(--c-text); font-variant-numeric: tabular-nums; }
.gpa-metric span { font-size: 12px; font-weight: 600; color: var(--c-text-muted); }
.gpa-note { margin-top: 14px; font-size: 12.5px; line-height: 1.8; color: var(--c-text-muted); }

/* ---------- 换算表 ---------- */
.gpa-table { display: grid; grid-template-columns: repeat(8, minmax(0, 1fr)); gap: 1px; background: var(--c-border); border: 1px solid var(--c-border); border-radius: 12px; overflow: hidden; }
.gpa-t-row { display: flex; flex-direction: column; align-items: center; gap: 2px; padding: 10px 4px; background: var(--c-bg-card); }
.gpa-t-row .s { font-size: 11px; color: var(--c-text-muted); }
.gpa-t-row b { font-size: 14px; font-weight: 800; color: var(--c-primary); }

/* ---------- 免责与简介 ---------- */
.gpa-disclaim {
    font-size: 12px;
    line-height: 1.85;
    color: var(--c-text-muted);
    background: var(--c-surface-soft);
    border: 1px solid var(--c-border);
    border-radius: 12px;
    padding: 14px 16px;
    margin-bottom: 26px;
}
.gpa-disclaim b { color: var(--c-text-sub); }
.gpa-info-block { margin-bottom: 26px; }

/* ---------- 响应式 ---------- */
@media (max-width: 720px) {
    .gpa-table { grid-template-columns: repeat(4, minmax(0, 1fr)); }
}
@media (max-width: 560px) {
    .gpa-card { padding: 18px; }
    .gpa-head { display: none; }
    .gpa-row {
        grid-template-columns: minmax(0, 1fr) 76px 40px;
        grid-template-areas:
            "name credit del"
            "score score incl";
        row-gap: 8px;
    }
    .gpa-in-name { grid-area: name; }
    .gpa-in-credit { grid-area: credit; }
    .gpa-in-score { grid-area: score; }
    .gpa-incl { grid-area: incl; justify-content: flex-end; }
    .gpa-del { grid-area: del; }
    .gpa-score b { font-size: 44px; }
    .gpa-metrics { gap: 20px; }
}

/* ============ 黑夜模式 ============ */
[data-theme="dark"] .gpa-select,
[data-theme="dark"] .gpa-btn,
[data-theme="dark"] .gpa-in,
[data-theme="dark"] .gpa-del,
[data-theme="dark"] .gpa-disclaim { background: rgba(255, 255, 255, 0.04); }
[data-theme="dark"] .gpa-result {
    background: linear-gradient(135deg, rgba(47, 163, 107, 0.18), rgba(41, 128, 185, 0.1));
    border-color: rgba(47, 163, 107, 0.38);
}
[data-theme="dark"] .gpa-score b { color: #5fd39a; }
