/* 设计系统变量定义 */ .publish-page { --color-bg-gray: #f7f9fc; --color-bg-orange: #fff7f0; --color-orange-primary: #ff6a00; --color-orange-dark: #e65f00; --color-text-main: #303743; --color-text-sub: #7f8895; --color-text-dark: #20242a; --color-border: #dfe5ee; --color-danger: #f04438; --radius-8: 8px; min-width: 0; color: var(--color-text-dark); :deep(.el-input__wrapper), :deep(.el-textarea__inner) { border-radius: var(--radius-8); box-shadow: 0 0 0 1px var(--color-border) inset; transition: all 0.2s ease; } :deep(.el-input__wrapper:hover), :deep(.el-textarea__inner:hover) { box-shadow: 0 0 0 1px var(--color-orange-primary) inset !important; } :deep(.el-input__wrapper.is-focus), :deep(.el-textarea__inner:focus) { box-shadow: 0 0 0 1px var(--color-orange-primary) inset, 0 0 8px rgba(255, 106, 0, 0.15) !important; } } .publish-layout { display: grid; grid-template-columns: minmax(760px, 1fr) 300px; align-items: start; gap: 24px; max-width: 1580px; margin: 0 auto; overflow: visible; @media (max-width: 1120px) { grid-template-columns: 1fr; max-width: 920px; } } .form-column { display: grid; min-width: 0; gap: 18px; } /* 统合的灰色圆角面板基础类 */ .panel-field-row, .panel-input-grid, .level-row, .login-method-row, .quantity-item, .skin-group, .region-panel, .ratio-panel, .time-preset-row, .price-cell { padding: 12px; border-radius: var(--radius-8); background: var(--color-bg-gray); } .panel-input-grid { align-items: center; & .input-block { grid-template-columns: auto minmax(0, 1fr); align-items: center; gap: 10px; } /* 输入框不需要太长,限制最大宽度 */ & :deep(.el-input-number), & :deep(.el-input) { max-width: 140px; } } .summary-panel { border: 1px solid #e6ebf2; border-radius: var(--radius-8); background: #fff; box-shadow: 0 12px 34px rgba(20, 34, 56, 0.05); } .field-row { display: grid; grid-template-columns: 112px minmax(0, 1fr); gap: 14px; align-items: center; margin-top: 12px; @media (max-width: 860px) { grid-template-columns: 1fr; } & > label { color: var(--color-text-main); font-size: 13px; font-weight: 800; line-height: 22px; } & label span { color: var(--color-danger); } } /* 按钮共用样式 */ .level-btn, .region-btn, .mode-toggle button, .ratio-mode-btn { border: 1px solid #d6dce5; background: #fff; color: #596474; font-weight: 800; cursor: pointer; transition: all 0.16s ease; } .level-btn, .region-btn { &.active { border-color: var(--color-orange-primary); background: var(--color-orange-primary); color: #fff; } } .level-btn { height: 30px; min-width: 0; border-radius: 15px; } .region-btn { height: 32px; min-width: 0; border-radius: 16px; } .compact-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; margin-top: 16px; &.two { grid-template-columns: repeat(2, minmax(0, 1fr)); padding: 14px 16px; border-radius: var(--radius-8); background: var(--color-bg-gray); gap: 16px; } @media (max-width: 860px) { grid-template-columns: 1fr; } } .input-block { display: grid; min-width: 0; gap: 8px; & > span { color: var(--color-text-main); font-size: 13px; font-weight: 800; line-height: 22px; white-space: nowrap; } & b { color: var(--color-danger); } :deep(.el-input-number), :deep(.el-input), :deep(.el-date-editor) { width: 100%; } } .level-panel { display: grid; gap: 10px; margin-top: 16px; } .level-row { grid-template-columns: 72px minmax(0, 1fr); gap: 12px; align-items: center; padding: 10px 12px; & strong { font-size: 13px; & span { color: var(--color-danger); } } } .level-options { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 9px; } .field-hint { grid-column: 2; margin: 0; color: var(--color-text-sub); font-size: 12px; line-height: 1.55; @media (max-width: 860px) { grid-column: auto; } } .login-method-row { & .field-hint { margin-top: -2px; } } .quantity-table { display: grid; gap: 8px; } .quantity-header, .quantity-item { display: grid; grid-template-columns: minmax(180px, 3fr) minmax(80px, 1fr) minmax(100px, 1.2fr) minmax(140px, 1.5fr) minmax(80px, 1fr); gap: 10px; align-items: center; @media (max-width: 860px) { grid-template-columns: 1fr; } } .quantity-header { min-height: 30px; padding: 0 12px; color: #7b8492; font-size: 12px; font-weight: 800; @media (max-width: 860px) { display: none; } & b { color: var(--color-danger); margin-left: 2px; } } .quantity-item { min-height: 58px; &.disabled { opacity: 0.62; } /* 强制 el-input-number 所在的 Grid 单元格裁剪溢出 */ & > :deep(.el-input-number) { width: 100% !important; min-width: 0 !important; overflow: hidden; } } .quantity-meta { display: grid; min-width: 0; gap: 4px; & strong { overflow: hidden; font-size: 13px; text-overflow: ellipsis; white-space: nowrap; & span { color: var(--color-danger); margin-right: 2px; } } & small { color: var(--color-text-sub); font-size: 12px; font-weight: 700; } } .quantity-price, .quantity-status { white-space: nowrap; color: var(--color-text-sub); font-size: 12px; font-weight: 700; } .mode-toggle { display: grid; grid-template-columns: 1fr 1fr; gap: 4px; min-width: 0; & button { height: 30px; min-width: 0; border-radius: var(--radius-8); font-size: 12px; white-space: nowrap; padding: 0 6px; &:disabled { cursor: not-allowed; } &.active { border-color: var(--color-orange-primary); background: #fff3ea; color: var(--color-orange-dark); } } } .recommend-button { flex: 0 0 auto; height: 32px; padding: 0 12px; border: 1px solid #ffba86; border-radius: var(--radius-8); background: var(--color-bg-orange); color: var(--color-orange-dark); font-size: 12px; font-weight: 800; cursor: pointer; transition: all 0.2s ease; &:hover { background: #ffe3cd; border-color: var(--color-orange-primary); } } .deposit-control { display: flex; gap: 8px; align-items: center; & :deep(.el-input-number) { width: 140px !important; flex: 0 0 140px; } @media (max-width: 860px) { width: 100%; & :deep(.el-input-number) { width: 100% !important; flex: 1; } } } .deposit-breakdown { display: flex; flex-wrap: wrap; gap: 6px; & span { min-height: 24px; padding: 4px 8px; border-radius: 12px; background: var(--color-bg-orange); color: var(--color-orange-dark); font-size: 12px; font-weight: 800; } } .skin-groups { display: grid; gap: 10px; } .skin-group { border: none; } .skin-title, .region-title { display: flex; align-items: center; justify-content: space-between; gap: 12px; font-size: 13px; & span { color: var(--color-text-sub); font-size: 12px; font-weight: 700; } } .skin-title { min-height: 34px; margin-bottom: 8px; } .time-preset-panel { display: grid; gap: 10px; margin-top: 16px; } .time-preset-row { display: grid; grid-template-columns: 88px minmax(0, 1fr); gap: 12px; align-items: start; @media (max-width: 860px) { grid-template-columns: 1fr; } & strong { color: var(--color-text-main); font-size: 13px; font-weight: 800; line-height: 32px; } } .time-preset-content { display: grid; gap: 8px; min-width: 0; } .time-input { width: 118px; @media (max-width: 860px) { width: 140px; } } .login-region-panel { margin-top: 18px; } .region-grid { display: grid; grid-template-columns: repeat(8, minmax(0, 1fr)); gap: 8px; @media (max-width: 860px) { grid-template-columns: repeat(4, minmax(0, 1fr)); } } .upload-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; @media (max-width: 860px) { grid-template-columns: 1fr; } } .upload-item { display: grid; grid-template-columns: minmax(0, 1fr) 96px; gap: 12px; align-items: center; min-height: 112px; border: 1px solid var(--color-border-light); @media (max-width: 860px) { grid-template-columns: 1fr; } } .upload-copy { display: grid; min-width: 0; gap: 6px; & strong { color: #232a35; font-size: 14px; & span { color: var(--color-danger); } } & small { color: var(--color-text-sub); font-size: 12px; font-weight: 700; line-height: 1.45; } } .upload-add, .upload-preview { width: 96px; height: 88px; border-radius: var(--radius-8); @media (max-width: 860px) { width: 100%; } } .upload-add { display: grid; place-items: center; border: 1px dashed #c7ceda; background: #fff; color: #727d8d; font-size: 12px; font-weight: 800; cursor: pointer; &:disabled { cursor: not-allowed; opacity: 0.58; } } .upload-preview { position: relative; overflow: hidden; background: #e8edf4; & img { width: 100%; height: 100%; object-fit: cover; } & button { position: absolute; right: 6px; bottom: 6px; display: grid; width: 28px; height: 28px; place-items: center; border: none; border-radius: var(--radius-8); background: rgba(17, 24, 39, 0.72); color: #fff; cursor: pointer; } } .hidden-file { display: none; } .ratio-panel { margin-top: 14px; & p { margin: 0; color: var(--color-text-sub); font-size: 12px; line-height: 1.5; } } .ratio-reference { display: flex; align-items: center; justify-content: space-between; min-height: 52px; padding: 12px; border-radius: var(--radius-8); background: #fff; & span { color: var(--color-text-main); font-size: 13px; font-weight: 800; } & strong { color: var(--color-orange-primary); font-weight: 900; font-size: 22px; } } .ratio-mode-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; @media (max-width: 860px) { grid-template-columns: 1fr; } } .ratio-custom-card { display: flex; flex-direction: column; justify-content: center; gap: 6px; min-height: 72px; padding: 10px 12px; border: 1px solid #d6dce5; border-radius: var(--radius-8); background: #fff; transition: all 0.16s ease; & strong { color: #596474; font-size: 13px; font-weight: 800; } & :deep(.el-input-number) { width: 100% !important; } & :deep(.el-input__wrapper) { background-color: #fff !important; } &.active { border-color: var(--color-orange-primary); background: var(--color-bg-orange); color: var(--color-orange-primary); & strong { color: var(--color-orange-primary); } } } .ratio-mode-btn { display: grid; gap: 6px; min-height: 72px; padding: 12px; text-align: left; border-radius: var(--radius-8); & span { color: var(--color-text-sub); font-size: 12px; } &.active { border-color: var(--color-orange-primary); background: var(--color-bg-orange); color: var(--color-orange-primary); } &:disabled { cursor: not-allowed; opacity: 0.58; } } .price-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 10px; margin-top: 14px; @media (max-width: 860px) { grid-template-columns: 1fr; } } .price-cell { display: grid; gap: 6px; min-height: 82px; padding: 14px; border-left: 4px solid #ccd5e0; transition: all 0.2s ease; &:hover { transform: translateY(-2px); box-shadow: 0 4px 12px rgba(0, 0, 0, 0.03); } & span { color: #6f7a89; font-size: 12px; font-weight: 800; } & strong { overflow-wrap: anywhere; color: var(--color-orange-primary); font-weight: 900; font-size: 21px; } &.accent { background: var(--color-bg-orange); border-left-color: var(--color-orange-primary); } } .remark { margin-top: 14px; } .summary-column { --summary-sticky-top: clamp(148px, 22vh, 240px); min-width: 0; position: sticky; top: var(--summary-sticky-top); align-self: start; max-height: calc(100vh - var(--summary-sticky-top) - 24px); @media (max-width: 1120px) { display: none; } } .summary-panel { padding: 16px; max-height: inherit; overflow-y: auto; overscroll-behavior: contain; } .summary-main { display: grid; gap: 8px; padding: 16px; border-radius: var(--radius-8); background: var(--color-bg-orange); & span { color: #6f7a89; font-size: 12px; font-weight: 800; } & strong { color: var(--color-orange-primary); font-weight: 900; font-size: 34px; line-height: 1; } } .summary-list { display: grid; gap: 10px; margin: 14px 0; & span { color: #6f7a89; font-size: 12px; font-weight: 800; } & div { display: flex; justify-content: space-between; gap: 12px; padding-bottom: 10px; border-bottom: 1px solid #eef2f6; } & strong { color: var(--color-text-dark); font-size: 13px; text-align: right; overflow-wrap: anywhere; } } .summary-actions { display: grid; gap: 10px; & :deep(.el-button) { width: 100%; margin-left: 0; border-radius: var(--radius-8); } & :deep(.el-button.btn-publish) { background-color: var(--color-orange-primary); border-color: var(--color-orange-primary); color: #fff; font-weight: 800; transition: all 0.2s ease; &:hover { background-color: var(--color-orange-dark); border-color: var(--color-orange-dark); } } }