/* 用户门户与个人控制台：仅使用 portal-/dashboard-/user- 前缀，避免影响既有页面。 */
.portal-home .account-panel { align-self:center; }
.account-actions { display:grid; gap:10px; margin-top:26px; }
.primary-action,.secondary-action { min-height:46px; padding:11px 14px; transition:.18s; }
.primary-action { color:#fff; background:#173f30; }
.primary-action:hover { background:#245f48; transform:translateY(-1px); }
.primary-action:disabled,.secondary-action:disabled { opacity:.6; cursor:wait; transform:none; }
.primary-action span { margin-left:7px; color:var(--green); }
.secondary-action { border:1px solid #cae5d5; color:#287950; background:#f3faf5; }
.secondary-action:hover { border-color:#7abf99; background:#e6f7ed; }
.account-benefits { display:grid; gap:9px; margin:21px 0 0; padding:16px 0 0 20px; border-top:1px solid #edf1ed; color:#687970; font-size:12px; line-height:1.6; }
.account-benefits li::marker { color:#3da977; }
.account-link { border:1px solid #bce3cc; color:#20734d !important; background:#effaf3; }
.account-link:hover,.account-link:focus-visible { color:#1b6544 !important; background:#e1f5e9 !important; }
.modal-open { overflow:hidden; }
.auth-modal[hidden] { display:none; }
.auth-modal { position:fixed; z-index:20; inset:0; display:grid; place-items:center; padding:20px; }
.auth-modal-backdrop { position:absolute; inset:0; background:#09201770; backdrop-filter:blur(5px); }
.auth-dialog { position:relative; z-index:1; width:min(100%,440px); padding:31px; border:1px solid #e1e9e2; border-radius:16px; background:#fff; box-shadow:0 28px 76px #0b2f224d; }
.dialog-close { position:absolute; top:15px; right:16px; width:31px; height:31px; border:1px solid #d9e5dc; border-radius:50%; color:#537064; background:#f7faf7; font:400 23px/26px sans-serif; }
.dialog-close:hover { border-color:#97cdb0; color:#1d704a; background:#edf8f1; }
.auth-dialog-head { display:grid; gap:7px; padding-right:34px; }
.auth-dialog-head p { margin:0; color:#42a879; font-size:11px; font-weight:700; letter-spacing:.1em; }
.auth-dialog-head h2 { margin:0; color:#172d23; font-size:24px; letter-spacing:-.045em; }
.auth-dialog-head span { color:#718078; font-size:13px; line-height:1.65; }
.auth-tabs { display:grid; grid-template-columns:1fr 1fr; gap:5px; margin-top:23px; padding:4px; border-radius:9px; background:#eff4f0; }
.auth-tabs button { padding:9px; border-radius:6px; color:#698076; background:transparent; font-size:13px; }
.auth-tabs button.is-active { color:#1f6d49; background:#fff; box-shadow:0 2px 7px #284c3b14; }
.auth-form { margin-top:19px; }
.auth-form .primary-action { margin-top:5px; }
.signed-in-account { padding:4px 0; }
.account-status { display:flex; align-items:center; gap:7px; margin:0 0 10px; color:#35855c; font-size:12px; font-weight:700; letter-spacing:.06em; }
.account-status span { width:8px; height:8px; border-radius:50%; background:#48bf7c; box-shadow:0 0 0 4px #d7f5e4; }
.signed-in-account h2 { margin:0; color:#172d23; font-size:25px; letter-spacing:-.045em; }
.signed-in-account h2 span { color:#287e59; overflow-wrap:anywhere; }
.signed-in-account>p:not(.account-status) { margin:9px 0 0; color:#65756c; font-size:13px; line-height:1.7; }
.account-console-entry { display:flex; align-items:center; justify-content:center; text-decoration:none; }

.dashboard-page { min-height:100vh; background:#f0f4f0; }
.dashboard-shell { width:min(1280px,100%); min-height:100vh; margin:0 auto; padding:25px 28px 65px; }
.dashboard-nav { display:grid; grid-template-columns:auto 1fr auto; gap:24px; }
.dashboard-nav .brand { margin:0; }
.dashboard-nav .site-nav { justify-content:center; }
.user-menu { display:flex; align-items:center; gap:11px; min-width:0; }
.user-menu>span { max-width:170px; overflow:hidden; color:#557064; font-size:12px; font-weight:700; text-overflow:ellipsis; white-space:nowrap; }
.user-menu button { padding:8px 10px; border:1px solid #d4e2d7; border-radius:7px; color:#587064; background:#fff; font-size:12px; }
.user-menu button:hover { border-color:#e3c2c2; color:#a14949; background:#fff8f8; }
.dashboard-hero { display:flex; align-items:flex-end; justify-content:space-between; gap:25px; padding:35px 2px 24px; }
.dashboard-hero h1 { margin:8px 0 10px; font-size:34px; }
.dashboard-hero>div>p:last-child { max-width:660px; margin:0; color:#65756c; font-size:14px; line-height:1.75; }
.dashboard-doc-link { display:inline-flex; flex:none; align-items:center; gap:9px; padding:11px 13px; border:1px solid #c4e6d2; border-radius:8px; color:#277a52; background:#f1faf4; font-size:12px; font-weight:700; text-decoration:none; }
.dashboard-doc-link:hover { border-color:#81c89f; background:#e6f7ed; }.dashboard-doc-link span { font-size:17px; }
.dashboard-message { min-height:0; margin:0 0 14px; }.dashboard-message:not(:empty) { min-height:20px; }
.user-summary { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:13px; }
.user-summary article { display:grid; gap:7px; min-width:0; padding:18px; border:1px solid #dce6de; border-radius:12px; background:#fff; box-shadow:0 8px 22px #24483708; }
.user-summary span { overflow:hidden; color:#718078; font-size:12px; text-overflow:ellipsis; white-space:nowrap; }.user-summary strong { overflow:hidden; color:#1f7651; font:600 26px/1 "DM Mono",monospace; letter-spacing:-.08em; text-overflow:ellipsis; }.user-summary small { overflow:hidden; color:#95a198; font-size:11px; text-overflow:ellipsis; white-space:nowrap; }
.dashboard-grid { display:grid; grid-template-columns:minmax(0,1.56fr) minmax(320px,.85fr); gap:20px; margin-top:20px; align-items:start; }
.user-keys-card,.create-key-card,.integration-card { border:1px solid #dce6de; border-radius:14px; background:#fff; box-shadow:0 12px 32px #2448370c; }
.user-keys-card,.create-key-card { padding:24px; }.create-key-card { position:sticky; top:20px; }
.inline-state { display:grid; place-items:center; align-content:center; min-height:212px; gap:7px; color:#718078; font-size:13px; text-align:center; }.inline-state strong { color:#30483a; font-size:15px; }.inline-state span { max-width:270px; line-height:1.7; }
.key-list { display:grid; gap:10px; margin-top:18px; }
.user-key-item { display:grid; grid-template-columns:minmax(0,1fr) 130px auto; gap:18px; align-items:center; padding:15px; border:1px solid #e2eae3; border-radius:10px; background:#fcfdfb; }
.user-key-main { display:grid; min-width:0; gap:5px; }.user-key-name { display:flex; align-items:center; gap:8px; min-width:0; }.user-key-name strong { overflow:hidden; color:#284436; font-size:14px; text-overflow:ellipsis; white-space:nowrap; }.user-key-main code { overflow:hidden; color:#55766a; font:11px "DM Mono",monospace; text-overflow:ellipsis; white-space:nowrap; }.user-key-main small,.user-key-usage small { color:#94a198; font-size:10px; }
.key-status { flex:none; padding:3px 6px; border-radius:4px; font-size:10px; font-weight:700; }.key-status.is-active { color:#247a52; background:#e2f7eb; }.key-status.is-disabled { color:#9a6246; background:#fceee8; }
.user-key-usage { display:grid; gap:3px; }.user-key-usage>span { color:#7b8981; font-size:10px; }.user-key-usage strong { color:#277650; font:600 17px/1 "DM Mono",monospace; letter-spacing:-.06em; }
.user-key-actions { display:flex; gap:7px; }.user-key-actions button { padding:7px 9px; border:1px solid #cce3d5; border-radius:6px; color:#287950; background:#effaf3; font-size:11px; font-weight:700; }.user-key-actions button:hover { border-color:#80c79e; background:#e1f5e9; }.user-key-actions .key-delete { border-color:#ecd1cf; color:#a34c4c; background:#fff9f8; }.user-key-actions .key-delete:hover { border-color:#dfaaa7; background:#ffefed; }.user-key-actions button:disabled { opacity:.6; cursor:wait; }
.create-key-form { display:grid; gap:16px; margin-top:19px; }.create-key-form label { gap:7px; }.form-note { margin:0; padding:10px 11px; border:1px solid #d6ecdf; border-radius:8px; color:#5f7b6d; background:#f4fbf6; font-size:11px; line-height:1.7; }
.new-key-result { margin-top:19px; padding:15px; border:1px solid #bce8d1; border-radius:10px; background:#f1fff7; }.new-key-result p { margin:0; color:#668174; font-size:11px; line-height:1.65; }
.integration-card { display:grid; grid-template-columns:minmax(280px,.8fr) minmax(0,1.2fr); gap:28px; margin-top:20px; padding:27px; }.integration-intro h2 { max-width:330px; margin:8px 0 11px; font-size:22px; letter-spacing:-.045em; }.integration-intro>p:not(.doc-label) { margin:0; color:#65756c; font-size:12px; line-height:1.75; }.endpoint-row { display:flex; align-items:center; min-width:0; margin-top:17px; border:1px solid #cfe7d8; border-radius:7px; overflow:hidden; background:#fbfefc; }.endpoint-row code { min-width:0; flex:1; overflow:hidden; padding:9px 10px; color:#286449; font:11px "DM Mono",monospace; text-overflow:ellipsis; white-space:nowrap; }.endpoint-row button { align-self:stretch; padding:0 10px; border-left:1px solid #cfe7d8; border-radius:0; color:#277950; background:#effaf3; font-size:11px; font-weight:700; }.endpoint-row button:hover { background:#e0f5e8; }.integration-card pre { overflow:auto; margin:0; padding:17px 19px; border-radius:9px; color:#cbecdc; background:#102c23; font:11px/1.8 "DM Mono",monospace; }
@media (max-width:980px) { .dashboard-grid { grid-template-columns:1fr; }.create-key-card { position:static; }.user-summary { grid-template-columns:repeat(2,minmax(0,1fr)); }.integration-card { grid-template-columns:1fr; } }
@media (max-width:700px) { .dashboard-shell { padding:21px 17px 45px; }.dashboard-nav { grid-template-columns:1fr auto; gap:16px; }.dashboard-nav .site-nav { grid-column:1 / -1; grid-row:2; justify-content:flex-start; }.dashboard-hero { align-items:flex-start; flex-direction:column; padding-top:27px; }.dashboard-hero h1 { font-size:30px; }.dashboard-doc-link { width:100%; justify-content:space-between; }.user-key-item { grid-template-columns:1fr auto; gap:13px; }.user-key-usage { grid-column:1; grid-row:2; }.user-key-actions { grid-column:2; grid-row:1 / span 2; align-self:center; flex-direction:column; }.integration-card,.user-keys-card,.create-key-card { padding:20px 16px; } }
@media (max-width:460px) { .auth-dialog { padding:27px 19px 20px; }.user-menu>span { display:none; }.user-summary { grid-template-columns:1fr 1fr; gap:9px; }.user-summary article { padding:14px; }.user-summary strong { font-size:21px; }.user-summary small { white-space:normal; }.user-key-item { padding:13px; }.user-key-actions button { min-width:48px; }.integration-card pre { padding:15px; } }

/* 钱包、充值与模型计费：限定在用户控制台，避免影响公共页面。 */
.wallet-dashboard { display:grid; grid-template-columns:minmax(0,1.2fr) minmax(320px,.8fr); gap:20px; margin-top:20px; }
.wallet-balance-card,.recharge-card,.wallet-list-card,.pricing-card { border:1px solid #dce6de; border-radius:14px; background:#fff; box-shadow:0 12px 32px #2448370c; }
.wallet-balance-card,.recharge-card { padding:24px; }
.wallet-balance-card { min-height:280px; background:linear-gradient(135deg,#173f30 0%,#245f48 60%,#2c7959 100%); border-color:#1a503c; }
.wallet-balance-card .section-title h2,.wallet-balance-card .section-title p { color:#fff; }.wallet-balance-card .section-title p { color:#c4e7d4; }.wallet-balance-card .section-title>span { color:#97e2bc; background:#ffffff18; }
.wallet-state { display:grid; place-items:center; align-content:center; min-height:175px; gap:10px; color:#d2e9dc; text-align:center; }.wallet-state p { max-width:360px; margin:0; font-size:13px; line-height:1.7; }.wallet-state strong { color:#fff; font-size:15px; }
.wallet-state.wallet-error { padding:12px 0; color:#f6c9c3; }.wallet-state.wallet-error .text-action { color:#fff; border-color:#ffffff42; background:#ffffff14; }
.wallet-spinner { width:18px; height:18px; border:2px solid #b4ddc63d; border-top-color:#72d79d; border-radius:50%; animation:wallet-spin .75s linear infinite; }@keyframes wallet-spin { to { transform:rotate(360deg); } }
.balance-amount { display:flex; align-items:baseline; gap:11px; margin-top:29px; }.balance-amount>span { color:#a9dfc2; font:700 12px/1 "DM Mono",monospace; letter-spacing:.08em; }.balance-amount strong { min-width:0; overflow:hidden; color:#fff; font:600 42px/1 "DM Mono",monospace; letter-spacing:-.09em; text-overflow:ellipsis; }
.wallet-updated { margin:11px 0 0; color:#a6d7bb; font-size:11px; }.wallet-notice { margin-top:24px; padding:12px 13px; border:1px solid #b7e6c533; border-radius:9px; color:#d2eddd; background:#0621162e; }.wallet-notice b { color:#a4e8c2; font-size:11px; }.wallet-notice p { margin:5px 0 0; font-size:11px; line-height:1.7; }
.recharge-card .section-title { margin-bottom:19px; }.recharge-form { display:grid; gap:15px; }.recharge-form label { gap:7px; }.amount-input { display:flex; align-items:center; overflow:hidden; border:1px solid var(--line); border-radius:8px; background:#fcfdfb; }.amount-input:focus-within { border-color:#55bc8c; box-shadow:0 0 0 3px #d8f5e5; }.amount-input b { display:grid; place-items:center; align-self:stretch; min-width:40px; border-right:1px solid #e4ece5; color:#357c57; background:#f2faf4; font:700 15px/1 "DM Mono",monospace; }.amount-input input { flex:1; min-width:0; border:0; box-shadow:none; }.recharge-form textarea { min-height:64px; resize:vertical; }.recharge-notice { border-color:#eee1bc; color:#7e6c43; background:#fffbed; }.recharge-form .primary-action { margin-top:0; }
.wallet-lists { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:20px; margin-top:20px; }.wallet-list-card { min-width:0; overflow:hidden; }.wallet-list-heading { display:flex; align-items:flex-start; justify-content:space-between; gap:12px; padding:21px 22px 14px; border-bottom:1px solid #edf0ed; }.wallet-list-heading .doc-label { margin:0; }.wallet-list-heading h2 { margin:6px 0 0; color:#263d30; font-size:18px; letter-spacing:-.045em; }
.text-action { flex:none; padding:7px 9px; border:1px solid #c7e3d3; border-radius:6px; color:#287950; background:#effaf3; font-size:11px; font-weight:700; }.text-action:hover { border-color:#7fc89d; background:#e2f6ea; }.text-action:disabled { opacity:.55; cursor:wait; }
.wallet-list-state { display:grid; place-items:center; align-content:center; min-height:198px; gap:8px; padding:19px; color:#718078; text-align:center; }.wallet-list-state strong { color:#334c3d; font-size:14px; }.wallet-list-state p { max-width:330px; margin:0; font-size:12px; line-height:1.7; }.wallet-list-loading { grid-auto-flow:column; grid-template-columns:auto auto; }.wallet-list-loading p { margin:0; }.wallet-list-loading .wallet-spinner { border-color:#cce8d8; border-top-color:#3ba574; }.wallet-list-error { color:#a84b4b; }.wallet-list-error .text-action { margin-top:4px; }
.transaction-list { display:grid; }.transaction-item { display:grid; grid-template-columns:minmax(0,1fr) auto; gap:14px; align-items:center; padding:15px 22px; border-bottom:1px solid #edf1ed; }.transaction-item:last-child { border-bottom:0; }.transaction-main { display:grid; min-width:0; gap:5px; }.transaction-title-line { display:flex; align-items:center; gap:8px; min-width:0; }.transaction-title-line strong { overflow:hidden; color:#304839; font-size:13px; text-overflow:ellipsis; white-space:nowrap; }.transaction-main>small { overflow:hidden; color:#87958d; font-size:11px; text-overflow:ellipsis; white-space:nowrap; }.transaction-status { flex:none; padding:3px 6px; border-radius:4px; font-size:10px; font-weight:700; }.transaction-status.is-pending { color:#9b7342; background:#fff4dd; }.transaction-status.is-success { color:#247a52; background:#e2f7eb; }.transaction-status.is-rejected { color:#a34c4c; background:#ffefed; }.transaction-status.is-neutral { color:#647a6d; background:#edf2ee; }
.transaction-amount { display:grid; justify-items:end; gap:4px; text-align:right; }.transaction-amount strong { font:600 14px/1 "DM Mono",monospace; letter-spacing:-.05em; }.transaction-amount small { color:#98a39c; font-size:10px; white-space:nowrap; }.transaction-amount.is-income strong { color:#238159; }.transaction-amount.is-expense strong { color:#ad5550; }.transaction-amount.is-neutral strong { color:#5f7468; }
.pricing-card { margin-top:20px; padding:24px; }.pricing-heading { display:flex; align-items:flex-start; justify-content:space-between; gap:20px; }.pricing-heading .doc-label { margin:0; }.pricing-heading h2 { margin:7px 0 8px; color:#263d30; font-size:21px; letter-spacing:-.05em; }.pricing-heading p:not(.doc-label) { max-width:720px; margin:0; color:#65756c; font-size:12px; line-height:1.75; }.pricing-heading a { flex:none; padding:9px 11px; border:1px solid #c7e3d3; border-radius:7px; color:#287950; background:#effaf3; font-size:11px; font-weight:700; text-decoration:none; }.pricing-heading a:hover { border-color:#7fc89d; background:#e2f6ea; }
.pricing-state { display:grid; place-items:center; align-content:center; min-height:168px; gap:9px; color:#718078; text-align:center; }.pricing-state strong { color:#334c3d; font-size:14px; }.pricing-state p { max-width:500px; margin:0; font-size:12px; line-height:1.7; }.pricing-state.wallet-loading { grid-auto-flow:column; grid-template-columns:auto auto; }.pricing-state.wallet-loading p { margin:0; }.pricing-state.wallet-loading .wallet-spinner { border-color:#cce8d8; border-top-color:#3ba574; }.pricing-error { color:#a84b4b; }.pricing-error .text-action { margin-top:4px; }
.pricing-list { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:11px; margin-top:20px; }.pricing-item { display:grid; gap:7px; min-width:0; padding:14px; border:1px solid #e0e8e1; border-radius:9px; background:#fcfdfb; }.pricing-item>code { overflow:hidden; color:#2d674a; font:11px/1.5 "DM Mono",monospace; text-overflow:ellipsis; white-space:nowrap; }.pricing-item>small { overflow:hidden; color:#87958d; font-size:10px; text-overflow:ellipsis; white-space:nowrap; }.pricing-values { display:grid; grid-template-columns:1fr 1fr; gap:9px; margin-top:3px; }.pricing-values span { display:grid; gap:3px; min-width:0; }.pricing-values small { color:#8a9890; font-size:10px; }.pricing-values b { overflow:hidden; color:#2b7550; font:600 12px/1.25 "DM Mono",monospace; text-overflow:ellipsis; white-space:nowrap; }.pricing-note { margin:16px 0 0; padding:10px 12px; border:1px solid #e9e0c8; border-radius:8px; color:#746741; background:#fffdf5; font-size:11px; line-height:1.7; }
@media (max-width:980px) { .wallet-dashboard { grid-template-columns:1fr; }.pricing-list { grid-template-columns:repeat(2,minmax(0,1fr)); } }
@media (max-width:700px) { .wallet-balance-card,.recharge-card,.pricing-card { padding:20px 16px; }.wallet-lists { grid-template-columns:1fr; }.wallet-list-heading { padding:19px 16px 13px; }.transaction-item { padding:14px 16px; }.pricing-heading { flex-direction:column; gap:13px; }.pricing-heading a { width:100%; text-align:center; }.pricing-list { grid-template-columns:1fr; }.balance-amount strong { font-size:35px; } }
@media (max-width:460px) { .wallet-dashboard,.wallet-lists { gap:14px; margin-top:14px; }.transaction-item { gap:8px; }.transaction-main>small { white-space:normal; }.transaction-title-line { align-items:flex-start; flex-direction:column; gap:5px; }.transaction-amount strong { font-size:13px; }.pricing-values { gap:6px; } }
