diff --git a/frontend/src/styles/admin-login.css b/frontend/src/styles/admin-login.css new file mode 100644 index 0000000..a7c4edc --- /dev/null +++ b/frontend/src/styles/admin-login.css @@ -0,0 +1,130 @@ +/* Admin login */ +.admin-login-page { + display: grid; + grid-template-columns: minmax(0, 1.02fr) minmax(0, 0.98fr); + min-height: 100vh; + background: var(--paper); +} + +.admin-login-brand { + position: relative; + overflow: hidden; + background: var(--brand-ink); + color: var(--paper-warm); +} + +.admin-login-brand::after { + position: absolute; + right: -120px; + bottom: -150px; + width: 420px; + height: 420px; + border: 1px solid rgba(236, 208, 177, 0.2); + border-radius: 50%; + content: ''; +} + +.admin-login-brand__inner { + position: relative; + z-index: 1; + display: flex; + flex-direction: column; + justify-content: center; + min-height: 100vh; + max-width: 560px; + margin: 0 auto; + padding: 64px; +} + +.admin-login-brand__eyebrow { + margin-top: 52px; + color: var(--brand-seal-line); + font-size: 11px; + letter-spacing: 0.18em; +} + +.admin-login-brand__title { + margin: 18px 0 22px !important; + color: #f0f4f2 !important; + font-size: clamp(42px, 5vw, 64px) !important; + line-height: 1.18 !important; +} + +.admin-login-brand__copy { + max-width: 430px; + color: #d8e2dd !important; + font-size: 15px; + line-height: 1.9; +} + +.admin-login-brand__foot { + margin-top: 32px; + color: #b9cbc3; + font-size: 12px; + letter-spacing: 0.04em; +} + +.admin-login-brand__foot .anticon { + margin-right: 8px; + color: var(--brand-seal-line); +} + +.admin-login-form-panel { + display: flex; + align-items: center; + justify-content: center; + padding: 48px 24px; +} + +.admin-login-card { + width: 100%; + max-width: 430px; + padding: 36px; + border: 1px solid var(--line); + border-radius: 8px; + background: var(--paper-warm); + box-shadow: 0 1px 2px rgba(29, 36, 33, 0.04), 0 20px 60px rgba(29, 36, 33, 0.06); +} + +.admin-login-card__head { + margin-bottom: 24px; +} + +.admin-login-card__head .ant-typography { + display: block; + margin-top: 16px; +} + +.admin-login-card__head h2 { + margin-bottom: 8px !important; + color: var(--brand-ink) !important; +} + +.admin-captcha-button { + width: 128px; + padding: 0 !important; + overflow: hidden; +} + +.admin-captcha-button img { + width: 100%; + height: 40px; + object-fit: cover; +} + +.admin-login-card__foot { + display: flex; + align-items: center; + justify-content: space-between; + margin-top: 24px; + padding-top: 18px; + border-top: 1px solid var(--line); + color: var(--ink-muted); + font-size: 12px; +} + +.admin-login-card__foot .ant-btn-link { + padding: 0; + color: var(--brand-ink); +} + diff --git a/frontend/src/styles/admin-misc.css b/frontend/src/styles/admin-misc.css new file mode 100644 index 0000000..417f7c8 --- /dev/null +++ b/frontend/src/styles/admin-misc.css @@ -0,0 +1,164 @@ +/* Admin placeholder */ +.admin-placeholder { + display: flex; + align-items: center; + justify-content: center; + min-height: 100vh; + padding: 32px; + background: var(--paper); +} + +.admin-placeholder__card { + width: min(760px, 100%); + padding: 40px; + border: 1px solid var(--line); + border-radius: 8px; + background: var(--paper-warm); +} + +.admin-placeholder__card h2 { + margin: 22px 0 10px !important; + color: var(--brand-ink) !important; +} + +.not-found { + display: flex; + align-items: center; + justify-content: center; + min-height: 100vh; + background: var(--paper); +} + +@media (max-width: 1100px) { + .home-hero__inner { + grid-template-columns: minmax(0, 1fr); + } + + .home-hero__visual { + display: none; + } + + .process-grid { + grid-template-columns: repeat(3, minmax(0, 1fr)); + row-gap: 24px; + } + + .trust-strip__inner { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } +} + +@media (max-width: 900px) { + .site-nav { + display: none; + } + + .login-page { + grid-template-columns: minmax(0, 1fr); + } + + .login-brand-panel__inner { + min-height: auto; + padding: 44px 28px 52px; + } + + .login-brand__logo { + margin-bottom: 30px; + } + + .login-brand__seal { + display: none; + } +} + +@media (max-width: 640px) { + .site-header { + height: 64px; + } + + .site-header__inner { + padding: 0 16px; + } + + .site-header__inner > .ant-space .ant-btn { + padding-inline: 10px; + } + + .home-hero__inner { + min-height: auto; + padding: 52px 16px 48px; + } + + .home-hero__title { + font-size: 42px !important; + } + + .home-hero__search { + width: 100%; + } + + .trust-strip__inner, + .section-block, + .site-footer__inner { + padding-right: 16px; + padding-left: 16px; + } + + .trust-strip__inner { + grid-template-columns: 1fr; + gap: 14px; + } + + .section-block { + padding-top: 52px; + padding-bottom: 52px; + } + + .section-heading { + align-items: flex-start; + flex-direction: column; + gap: 8px; + } + + .process-grid { + grid-template-columns: 1fr; + } + + .process-step { + padding-right: 0; + } + + .rules-panel { + align-items: flex-start; + flex-direction: column; + padding: 24px; + } + + .login-form-panel { + padding: 28px 16px; + } + + .login-form-card { + padding: 24px; + } + + .site-footer__inner { + align-items: flex-start; + flex-direction: column; + } +} + +/* Phase 1 shared loading */ +.page-loading { + display: flex; + align-items: center; + justify-content: center; + min-height: 100vh; + background: var(--paper); +} + +.page-loading__placeholder { + width: 120px; + height: 40px; +} + diff --git a/frontend/src/styles/admin-shell.css b/frontend/src/styles/admin-shell.css new file mode 100644 index 0000000..2e834c3 --- /dev/null +++ b/frontend/src/styles/admin-shell.css @@ -0,0 +1,636 @@ +/* Admin shell */ +.admin-shell { + min-height: 100vh; + background: var(--paper); +} + +.admin-sider { + border-right: 1px solid var(--line); + background: var(--paper-warm) !important; +} + +.admin-sider .ant-layout-sider-children { + display: flex; + flex-direction: column; + min-height: 100vh; +} + +.admin-sider__brand { + display: flex; + align-items: center; + justify-content: space-between; + height: 72px; + padding: 0 18px; + border-bottom: 1px solid var(--line); +} + +.admin-sider__phase { + color: var(--brand-seal); + font-family: 'Inter', monospace; + font-size: 9px; + letter-spacing: 0.12em; +} + +.admin-menu { + flex: 1; + padding: 14px 10px; + overflow-y: auto; + border-inline-end: 0 !important; + background: transparent !important; +} + +.admin-menu .ant-menu-submenu-title, +.admin-menu .ant-menu-item { + height: 40px; + margin: 2px 0; + border-radius: 4px; + color: var(--ink-secondary); + font-size: 13px; +} + +.admin-menu .ant-menu-item-selected { + color: var(--brand-ink) !important; + font-weight: 600; +} + +.admin-menu .ant-menu-submenu-selected > .ant-menu-submenu-title { + color: var(--brand-ink); +} + +.admin-menu .ant-menu-item .anticon, +.admin-menu .ant-menu-submenu-title .anticon { + color: var(--sage); +} + +.admin-sider__foot { + display: flex; + flex-direction: column; + gap: 4px; + padding: 16px 20px; + border-top: 1px solid var(--line); + font-size: 11px; +} + +.admin-main { + min-width: 0; + background: var(--paper); +} + +.admin-header { + position: sticky; + top: 0; + z-index: 10; + display: flex; + align-items: center; + justify-content: space-between; + height: 64px; + padding: 0 24px; + border-bottom: 1px solid var(--line); + background: rgba(255, 253, 248, 0.94); + backdrop-filter: blur(12px); +} + +.admin-header__left { + display: flex; + align-items: center; + gap: 14px; +} + +.admin-collapse { + color: var(--ink-secondary); +} + +.admin-role-tag { + margin: 0; + border-radius: 2px; + background: #eef2ec; + color: var(--brand-ink); +} + +.admin-account { + display: inline-flex; + align-items: center; + gap: 8px; + height: 40px; + padding: 0 8px; +} + +.admin-avatar { + background: var(--brand-ink) !important; + color: var(--paper-warm) !important; + font-family: 'Noto Serif SC', 'Songti SC', serif; +} + +.admin-account__name { + max-width: 120px; + overflow: hidden; + color: var(--ink); + font-size: 13px; + text-overflow: ellipsis; + white-space: nowrap; +} + +.admin-content { + padding: 24px; +} + +.admin-page { + max-width: 1600px; + margin: 0 auto; +} + +.admin-page__head { + display: flex; + align-items: flex-end; + justify-content: space-between; + gap: 24px; + margin-bottom: 24px; +} + +.admin-page__head-main { + display: flex; + flex-direction: column; + align-items: flex-start; + gap: 2px; + min-width: 0; +} + +.admin-page__desc { + display: block; + max-width: 720px; +} + +.admin-page__meta { + margin-top: 10px; +} + +.admin-page__actions { + display: flex; + align-items: center; + gap: 8px; + padding-bottom: 4px; +} + +.admin-page__head h2 { + margin: 6px 0 8px !important; + color: var(--brand-ink) !important; + font-size: 30px !important; +} + +.admin-page__eyebrow { + color: var(--brand-seal); + font-size: 10px !important; + letter-spacing: 0.16em; +} + +.admin-phase-tag { + margin: 0; + border-radius: 2px; + background: #f3ece4; + color: var(--brand-seal); +} + +.admin-kpi-card { + min-height: 150px; + border-color: var(--line); + background: var(--paper-warm); +} + +.admin-kpi-card .ant-statistic-title { + color: var(--ink-muted); + font-size: 12px; +} + +.admin-kpi-card .ant-statistic-content { + color: var(--brand-ink); + font-family: 'Inter', 'DIN Alternate', sans-serif; + font-size: 30px; +} + +.admin-kpi-card--accent { + background: var(--brand-ink); +} + +.admin-kpi-card--accent .ant-statistic-title, +.admin-kpi-card--accent .admin-kpi-card__foot { + color: #b9cbc3; +} + +.admin-kpi-card--accent .ant-statistic-content { + color: #f0f4f2; +} + +.admin-kpi-card__icon { + display: flex; + align-items: center; + justify-content: center; + width: 34px; + height: 34px; + margin-bottom: 16px; + border: 1px solid var(--line); + border-radius: 4px; + background: #f4f0e6; + color: var(--brand-seal); + font-size: 17px; +} + +.admin-kpi-card--accent .admin-kpi-card__icon { + border-color: rgba(236, 208, 177, 0.28); + background: rgba(236, 208, 177, 0.08); + color: var(--brand-seal-line); +} + +.admin-kpi-card__foot { + display: block; + margin-top: 8px; + color: var(--ink-muted); + font-size: 12px; +} + +.admin-section-title { + display: flex; + align-items: baseline; + gap: 12px; + margin: 30px 0 14px; +} + +.admin-section-title h4 { + margin: 0 !important; + color: var(--brand-ink) !important; +} + +.admin-pending-card { + display: flex; + align-items: center; + justify-content: space-between; + border-color: var(--line); + background: var(--paper-warm); +} + +.admin-pending-card > .ant-card-body { + display: flex; + align-items: center; + justify-content: space-between; + width: 100%; + padding: 18px 20px; +} + +.admin-pending-card > .ant-card-body > div { + display: flex; + flex-direction: column; + gap: 6px; +} + +.admin-pending-card__label { + color: var(--ink-muted); + font-size: 12px; +} + +.admin-pending-card strong { + color: var(--brand-ink); + font-family: 'Inter', 'DIN Alternate', sans-serif; + font-size: 28px; + line-height: 1; +} + +.admin-table-card { + margin-top: 24px; + border-color: var(--line); + background: var(--paper-warm); +} + +.admin-table-card .ant-card-head-title { + color: var(--brand-ink); +} + +.admin-table-card .ant-card-head-title .anticon { + margin-right: 6px; + color: var(--brand-seal); +} + +.admin-mono { + color: var(--ink-secondary); + font-family: 'Inter', monospace; + font-size: 11px; +} + +.admin-money { + color: var(--brand-ink); + font-family: 'Inter', monospace; + font-size: 12px; +} + +.admin-filter-bar { + display: flex; + flex-wrap: wrap; + align-items: flex-end; + justify-content: space-between; + gap: 16px; + margin-bottom: 18px; + padding: 16px 18px; + border: 1px solid var(--line); + border-radius: 10px; + background: var(--paper-warm); +} + +.admin-filter-bar__fields { + display: flex; + flex: 1 1 640px; + flex-wrap: wrap; + gap: 12px 14px; +} + +.admin-filter-bar__actions { + padding-bottom: 1px; +} + +.admin-filter-field { + display: flex; + flex-direction: column; + gap: 6px; + min-width: 140px; +} + +.admin-filter-field__label { + color: var(--ink-muted); + font-size: 11px; + letter-spacing: 0.08em; +} + +.admin-filter-field .ant-select, +.admin-filter-field .ant-input-affix-wrapper { + width: 100%; +} + +.admin-status-tag { + margin-inline-end: 0; + font-size: 11px; +} + +.admin-stack { + display: flex; + flex-direction: column; + gap: 3px; + line-height: 1.35; +} + +.admin-stack strong { + color: var(--ink); + font-size: 12px; + font-weight: 600; +} + +.admin-stack span { + color: var(--ink-muted); + font-size: 11px; +} + +.admin-stack__accent { + color: var(--brand-seal) !important; +} + +.admin-stack--tiny { + align-items: flex-start; + gap: 4px; +} + +.admin-order-link { + padding: 0; + border: 0; + background: none; + color: var(--brand-ink); + font-family: 'Inter', monospace; + font-size: 12px; + letter-spacing: 0.02em; + text-align: left; + cursor: pointer; +} + +.admin-order-link:hover { + color: var(--brand-seal); + text-decoration: underline; + text-underline-offset: 3px; +} + +.admin-amount { + display: flex; + flex-direction: column; + align-items: flex-end; + gap: 2px; +} + +.admin-amount strong { + color: var(--brand-ink); + font-family: 'Inter', monospace; + font-size: 13px; +} + +.admin-amount span { + color: var(--ink-muted); + font-size: 11px; +} + +.admin-amount__accent { + color: var(--success) !important; +} + +.admin-table__row--clickable { + cursor: pointer; +} + +.ant-table-wrapper .ant-table-tbody > tr.ant-table-row.admin-table__row--clickable:hover > td { + background: #f3f7f4; +} + +.admin-table-alert { + margin-bottom: 16px; +} + +.admin-finance-mini { + margin-top: 16px; +} + +.admin-finance-mini .admin-pending-card > .ant-card-body > span { + color: var(--ink-muted); + font-size: 11px; +} + +.admin-detail { + display: flex; + flex-direction: column; + gap: 22px; +} + +.admin-detail__section { + padding-bottom: 18px; + border-bottom: 1px dashed var(--line); +} + +.admin-detail__section:last-child { + padding-bottom: 0; + border-bottom: 0; +} + +.admin-detail__section-head { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 10px; +} + +.admin-detail__section-head h4 { + display: flex; + align-items: center; + gap: 6px; + margin: 0; + color: var(--brand-ink); + font-size: 13px; + letter-spacing: 0.06em; +} + +.admin-detail__section .ant-descriptions-item-label { + color: var(--ink-muted); + font-size: 12px; +} + +.admin-detail__section .ant-descriptions-item-content { + color: var(--ink); + font-size: 12px; +} + +.admin-detail__pre { + max-height: 220px; + padding: 10px 12px; + overflow: auto; + border: 1px solid var(--line); + border-radius: 6px; + background: #fbf8f1; + color: var(--ink-secondary); + font-size: 12px; + line-height: 1.6; + white-space: pre-wrap; + word-break: break-word; +} + +.admin-detail__pre--tall { + max-height: 440px; +} + +.admin-audit-summary { + display: inline-block; + max-width: 100%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + vertical-align: bottom; +} + +.admin-audit-ua { + color: var(--ink-muted); + font-family: 'Inter', monospace; + font-size: 11px; + word-break: break-all; +} + +.admin-config-form { + display: flex; + flex-direction: column; + gap: 18px; +} + +.admin-config-editor { + font-family: 'Inter', monospace; + font-size: 12px; + line-height: 1.6; +} + +.admin-detail-drawer .ant-drawer-header { + align-items: flex-start; +} + +.admin-detail-drawer__head { + display: flex; + flex-direction: column; + gap: 4px; +} + +.admin-detail-drawer__title { + color: var(--brand-ink); + font-family: 'Inter', monospace; + font-size: 15px; +} + +.admin-detail-drawer__subtitle { + color: var(--ink-muted); + font-size: 12px; + font-weight: 400; +} + +.admin-detail-drawer__tags { + margin-top: 4px; +} + +.admin-placeholder-card { + position: relative; + max-width: 760px; + padding: 34px; + border: 1px solid var(--line); + border-radius: 8px; + background: var(--paper-warm); +} + +.admin-placeholder-card h4 { + margin: 0 0 10px !important; + color: var(--brand-ink) !important; +} + +.admin-placeholder-card__seal { + display: inline-flex; + align-items: center; + justify-content: center; + width: 54px; + height: 54px; + margin-bottom: 20px; + border: 2px solid var(--brand-seal); + color: var(--brand-seal); + font-family: 'Noto Serif SC', 'Songti SC', serif; + font-size: 14px; + letter-spacing: 0.1em; + transform: rotate(-3deg); +} + +@media (max-width: 1100px) { + .admin-login-page { + grid-template-columns: minmax(0, 1fr); + } + + .admin-login-brand__inner { + min-height: auto; + padding: 44px 28px 52px; + } + + .admin-login-brand__eyebrow { + margin-top: 30px; + } +} + +@media (max-width: 900px) { + .admin-header { + padding: 0 16px; + } + + .admin-content { + padding: 16px; + } + + .admin-page__head { + align-items: flex-start; + flex-direction: column; + gap: 14px; + } + + .admin-account__name { + display: none; + } +} + diff --git a/frontend/src/styles/auth.css b/frontend/src/styles/auth.css new file mode 100644 index 0000000..8436728 --- /dev/null +++ b/frontend/src/styles/auth.css @@ -0,0 +1,142 @@ +/* Login */ +.login-page { + display: grid; + grid-template-columns: minmax(0, 1.05fr) minmax(0, 0.95fr); + min-height: 100vh; + background: var(--paper); +} + +.login-brand-panel { + position: relative; + overflow: hidden; + background: var(--brand-ink); + color: var(--paper-warm); +} + +.login-brand-panel::after { + position: absolute; + right: -80px; + bottom: -120px; + width: 360px; + height: 360px; + border: 1px solid rgba(236, 208, 177, 0.22); + border-radius: 50%; + content: ''; +} + +.login-brand-panel__inner { + position: relative; + z-index: 1; + display: flex; + flex-direction: column; + justify-content: center; + max-width: 560px; + min-height: 100vh; + margin: 0 auto; + padding: 64px; +} + +.login-brand__logo { + align-self: flex-start; + margin-bottom: 48px; +} + +.login-brand__title { + margin: 0 0 22px !important; + color: #f0f4f2 !important; + font-size: clamp(42px, 5vw, 64px) !important; + line-height: 1.18 !important; +} + +.login-brand__copy { + max-width: 430px; + color: #d8e2dd !important; + font-size: 15px; + line-height: 1.9; +} + +.login-brand__points { + margin-top: 24px; + color: #d8e2dd; + font-size: 13px; +} + +.login-brand__points .anticon { + margin-right: 8px; + color: var(--brand-seal-line); +} + +.login-brand__seal { + position: absolute; + right: 36px; + bottom: 36px; + display: flex; + align-items: center; + justify-content: center; + width: 72px; + height: 72px; + border: 2px solid var(--brand-seal); + color: var(--brand-seal-line); + font-family: 'Noto Serif SC', 'Songti SC', serif; + font-size: 18px; + letter-spacing: 0.12em; + transform: rotate(-6deg); +} + +.login-form-panel { + display: flex; + align-items: center; + justify-content: center; + padding: 48px 24px; +} + +.login-form-card { + width: 100%; + max-width: 420px; + padding: 36px; + border: 1px solid var(--line); + border-radius: 8px; + background: var(--paper-warm); + box-shadow: 0 1px 2px rgba(29, 36, 33, 0.04), 0 20px 60px rgba(29, 36, 33, 0.06); +} + +.login-form-card__top { + margin-bottom: 24px; +} + +.login-form-card__top .ant-typography { + display: block; + margin-top: 18px; +} + +.login-form-card__top h2 { + margin-bottom: 8px !important; + color: var(--brand-ink) !important; +} + +.login-alert { + margin-bottom: 18px; +} + +.login-dev-hint { + margin-top: 18px; + padding: 10px 12px; + border: 1px dashed var(--line); + border-radius: 4px; + color: var(--ink-muted); + font-size: 12px; +} + +.login-form-card__footer { + display: flex; + justify-content: space-between; + margin-top: 24px; + padding-top: 18px; + border-top: 1px solid var(--line); + font-size: 12px; +} + +.login-form-card__footer a { + color: var(--brand-ink); +} + diff --git a/frontend/src/styles/base.css b/frontend/src/styles/base.css new file mode 100644 index 0000000..d2312f9 --- /dev/null +++ b/frontend/src/styles/base.css @@ -0,0 +1,148 @@ +:root { + --brand-ink: #1e4d42; + --brand-ink-deep: #153a32; + --brand-seal: #a64332; + --brand-seal-line: #ecd0b1; + --brand-brass: #b08a4a; + --paper: #f6f2e8; + --paper-warm: #fffdf8; + --ink: #1c2521; + --ink-secondary: #5e6b64; + --ink-muted: #8a948e; + --line: #e4ded2; + --sage: #6f857c; + --success: #2f7d5c; + --warning: #c17a2b; + --danger: #a64332; + --info: #3e6b7a; +} + +* { + box-sizing: border-box; +} + +html { + scroll-behavior: smooth; +} + +body { + margin: 0; + min-width: 320px; + background: var(--paper); + color: var(--ink); + font-family: + 'Noto Sans SC', 'Source Han Sans SC', 'PingFang SC', 'Microsoft YaHei', sans-serif; + -webkit-font-smoothing: antialiased; +} + +a { + color: inherit; + text-decoration: none; +} + +.brand-title { + font-family: 'Noto Serif SC', 'Source Han Serif SC', 'Songti SC', serif !important; + font-weight: 600 !important; + letter-spacing: 0.04em; +} + +.site-shell { + min-height: 100vh; + background: var(--paper); +} + +.site-header { + position: sticky; + top: 0; + z-index: 20; + height: 72px; + padding: 0; + background: rgba(255, 253, 248, 0.94); + border-bottom: 1px solid var(--line); + backdrop-filter: blur(14px); +} + +.site-header__inner { + display: flex; + align-items: center; + justify-content: space-between; + max-width: 1280px; + height: 100%; + margin: 0 auto; + padding: 0 24px; + gap: 24px; +} + +.site-brand { + display: inline-flex; + align-items: center; + flex-shrink: 0; +} + +.site-nav { + display: flex; + align-items: center; + gap: 30px; + margin-right: auto; + color: var(--ink-secondary); + font-size: 14px; +} + +.site-nav a { + position: relative; + padding: 6px 0; + transition: color 160ms ease; +} + +.site-nav a:hover { + color: var(--brand-ink); +} + +.site-nav a::after { + position: absolute; + right: 0; + bottom: 0; + left: 0; + height: 1px; + background: var(--brand-seal); + content: ''; + opacity: 0; + transform: scaleX(0.6); + transition: + opacity 160ms ease, + transform 160ms ease; +} + +.site-nav a:hover::after { + opacity: 1; + transform: scaleX(1); +} + +.site-content { + min-height: calc(100vh - 72px - 140px); + background: var(--paper); +} + +.site-footer { + padding: 0; + background: var(--paper-warm); + border-top: 1px solid var(--line); + color: var(--ink-secondary); +} + +.site-footer__inner { + display: flex; + align-items: flex-end; + justify-content: space-between; + max-width: 1280px; + margin: 0 auto; + padding: 34px 24px; + gap: 24px; +} + +.site-footer__muted { + margin-top: 8px; + color: var(--ink-muted); + font-size: 12px; +} + diff --git a/frontend/src/styles/components.css b/frontend/src/styles/components.css new file mode 100644 index 0000000..d670a4c --- /dev/null +++ b/frontend/src/styles/components.css @@ -0,0 +1,89 @@ +/* 通用证据上传 */ +.evidence-upload__grid { + width: 100%; +} + +.evidence-upload__item { + position: relative; + width: 92px; + height: 92px; + border-radius: 12px; + overflow: hidden; + border: 1px solid var(--line); + background: var(--paper); +} + +.evidence-upload__image { + width: 92px; + height: 92px; + object-fit: cover; + display: block; +} + +.evidence-upload__link-card { + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 6px; + padding: 6px; + color: var(--ink-soft); + font-size: 12px; + text-align: center; +} + +.evidence-upload__link-card .anticon { + font-size: 20px; +} + +.evidence-upload__remove { + position: absolute; + top: 2px; + right: 2px; + background: rgba(255, 255, 255, 0.88) !important; + border-radius: 50%; +} + +.evidence-upload__add { + width: 92px; + height: 92px; + border: 1px dashed var(--line-strong, #cfd6cf); + border-radius: 12px; + background: var(--paper); + color: var(--ink-soft); + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 6px; + cursor: pointer; + transition: border-color 0.2s ease, color 0.2s ease; +} + +.evidence-upload__add:hover:not(:disabled) { + border-color: var(--jade, #2f6f5e); + color: var(--jade, #2f6f5e); +} + +.evidence-upload__add:disabled { + cursor: not-allowed; + opacity: 0.6; +} + +.evidence-upload__add .anticon { + font-size: 20px; +} + +.evidence-upload__add span { + font-size: 12px; +} + +.evidence-upload__hint { + display: block; + margin-top: 6px; + font-size: 12px; +} + + diff --git a/frontend/src/styles/global.css b/frontend/src/styles/global.css index e82a04c..d53e2d7 100644 --- a/frontend/src/styles/global.css +++ b/frontend/src/styles/global.css @@ -1,3648 +1,17 @@ -:root { - --brand-ink: #1e4d42; - --brand-ink-deep: #153a32; - --brand-seal: #a64332; - --brand-seal-line: #ecd0b1; - --brand-brass: #b08a4a; - --paper: #f6f2e8; - --paper-warm: #fffdf8; - --ink: #1c2521; - --ink-secondary: #5e6b64; - --ink-muted: #8a948e; - --line: #e4ded2; - --sage: #6f857c; - --success: #2f7d5c; - --warning: #c17a2b; - --danger: #a64332; - --info: #3e6b7a; -} - -* { - box-sizing: border-box; -} - -html { - scroll-behavior: smooth; -} - -body { - margin: 0; - min-width: 320px; - background: var(--paper); - color: var(--ink); - font-family: - 'Noto Sans SC', 'Source Han Sans SC', 'PingFang SC', 'Microsoft YaHei', sans-serif; - -webkit-font-smoothing: antialiased; -} - -a { - color: inherit; - text-decoration: none; -} - -.brand-title { - font-family: 'Noto Serif SC', 'Source Han Serif SC', 'Songti SC', serif !important; - font-weight: 600 !important; - letter-spacing: 0.04em; -} - -.site-shell { - min-height: 100vh; - background: var(--paper); -} - -.site-header { - position: sticky; - top: 0; - z-index: 20; - height: 72px; - padding: 0; - background: rgba(255, 253, 248, 0.94); - border-bottom: 1px solid var(--line); - backdrop-filter: blur(14px); -} - -.site-header__inner { - display: flex; - align-items: center; - justify-content: space-between; - max-width: 1280px; - height: 100%; - margin: 0 auto; - padding: 0 24px; - gap: 24px; -} - -.site-brand { - display: inline-flex; - align-items: center; - flex-shrink: 0; -} - -.site-nav { - display: flex; - align-items: center; - gap: 30px; - margin-right: auto; - color: var(--ink-secondary); - font-size: 14px; -} - -.site-nav a { - position: relative; - padding: 6px 0; - transition: color 160ms ease; -} - -.site-nav a:hover { - color: var(--brand-ink); -} - -.site-nav a::after { - position: absolute; - right: 0; - bottom: 0; - left: 0; - height: 1px; - background: var(--brand-seal); - content: ''; - opacity: 0; - transform: scaleX(0.6); - transition: - opacity 160ms ease, - transform 160ms ease; -} - -.site-nav a:hover::after { - opacity: 1; - transform: scaleX(1); -} - -.site-content { - min-height: calc(100vh - 72px - 140px); - background: var(--paper); -} - -.site-footer { - padding: 0; - background: var(--paper-warm); - border-top: 1px solid var(--line); - color: var(--ink-secondary); -} - -.site-footer__inner { - display: flex; - align-items: flex-end; - justify-content: space-between; - max-width: 1280px; - margin: 0 auto; - padding: 34px 24px; - gap: 24px; -} - -.site-footer__muted { - margin-top: 8px; - color: var(--ink-muted); - font-size: 12px; -} - -/* Home hero */ -.home-hero { - background: var(--brand-ink); - color: var(--paper-warm); -} - -.home-hero__inner { - display: grid; - grid-template-columns: minmax(0, 7fr) minmax(0, 5fr); - gap: 48px; - align-items: center; - max-width: 1280px; - min-height: 520px; - margin: 0 auto; - padding: 76px 24px 68px; -} - -.home-hero__eyebrow { - color: var(--brand-seal-line); - font-size: 12px; - letter-spacing: 0.18em; - text-transform: uppercase; -} - -.home-hero__title { - margin: 18px 0 20px !important; - color: #f0f4f2 !important; - font-size: clamp(42px, 5vw, 68px) !important; - line-height: 1.16 !important; -} - -.home-hero__lead { - max-width: 560px; - margin-bottom: 30px !important; - color: #d8e2dd; - font-size: 16px; - line-height: 1.9; -} - -.home-hero__search { - width: 420px; - max-width: calc(100vw - 48px); -} - -.home-hero__search .ant-input-affix-wrapper { - background: var(--paper-warm); -} - -.home-hero__visual { - position: relative; - min-height: 300px; -} - -.hero-ticket { - position: absolute; - display: flex; - flex-direction: column; - gap: 8px; - width: 280px; - padding: 22px; - border: 1px solid rgba(30, 77, 66, 0.18); - border-radius: 6px; - background: var(--paper-warm); - box-shadow: 0 1px 2px rgba(21, 58, 50, 0.08), 0 22px 48px rgba(21, 58, 50, 0.2); - color: var(--brand-ink); -} - -.hero-ticket span { - color: var(--ink-muted); - font-size: 12px; - letter-spacing: 0.08em; -} - -.hero-ticket strong { - font-family: 'Noto Serif SC', 'Songti SC', serif; - font-size: 20px; - font-weight: 600; - line-height: 1.4; -} - -.hero-ticket small { - color: var(--ink-secondary); - font-size: 12px; -} - -.hero-ticket--back { - top: 8px; - right: 0; - transform: rotate(7deg); - opacity: 0.7; -} - -.hero-ticket--main { - top: 58px; - left: 8px; - transform: rotate(-3deg); -} - -.hero-ticket--front { - right: 10px; - bottom: 0; - transform: rotate(4deg); -} - -.hero-ticket__seal { - display: inline-flex; - align-items: center; - justify-content: center; - width: 46px; - height: 46px; - border: 2px solid var(--brand-seal); - color: var(--brand-seal); - font-family: 'Noto Serif SC', 'Songti SC', serif; - font-size: 13px; - letter-spacing: 0.1em; -} - -/* Trust strip */ -.trust-strip { - background: var(--paper-warm); - border-bottom: 1px solid var(--line); -} - -.trust-strip__inner { - display: grid; - grid-template-columns: repeat(4, minmax(0, 1fr)); - max-width: 1280px; - margin: 0 auto; - padding: 22px 24px; - gap: 20px; -} - -.trust-item { - display: flex; - align-items: flex-start; - gap: 10px; - color: var(--brand-ink); -} - -.trust-item > .anticon { - margin-top: 2px; - color: var(--brand-seal); - font-size: 18px; -} - -.trust-item strong, -.trust-item span { - display: block; -} - -.trust-item strong { - font-size: 14px; -} - -.trust-item span { - margin-top: 4px; - color: var(--ink-muted); - font-size: 12px; - line-height: 1.5; -} - -/* Sections */ -.section-block { - max-width: 1280px; - margin: 0 auto; - padding: 72px 24px; -} - -.section-block--paper { - max-width: none; - background: var(--paper-warm); - border-top: 1px solid var(--line); - border-bottom: 1px solid var(--line); -} - -.section-block--paper > .section-heading, -.section-block--paper > .process-grid { - max-width: 1280px; - margin-right: auto; - margin-left: auto; -} - -.section-heading { - display: flex; - align-items: flex-end; - justify-content: space-between; - margin-bottom: 28px; - gap: 24px; -} - -.section-heading .ant-typography { - margin-bottom: 6px; -} - -.section-eyebrow { - color: var(--brand-seal); - font-size: 11px !important; - letter-spacing: 0.18em; -} - -.section-heading h2 { - margin: 6px 0 8px !important; - color: var(--brand-ink) !important; - font-size: 32px !important; -} - -/* Listing cards */ -.listing-card { - height: 100%; - overflow: hidden; - border-color: var(--line); - background: var(--paper-warm); - transition: - border-color 160ms ease, - transform 160ms ease; -} - -.listing-card:hover { - border-color: var(--sage); - transform: translateY(-2px); -} - -.listing-cover { - aspect-ratio: 4 / 3; - overflow: hidden; - background: #eef1ea; -} - -.listing-cover img { - width: 100%; - height: 100%; - object-fit: cover; -} - -.listing-cover--empty { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - gap: 12px; - background: - linear-gradient(0deg, rgba(30, 77, 66, 0.04), rgba(30, 77, 66, 0.04)), - var(--paper); - color: var(--brand-ink); - font-family: 'Noto Serif SC', 'Songti SC', serif; - letter-spacing: 0.12em; -} - -.listing-card__head, -.listing-card__price-row, -.listing-card__meta { - display: flex; - align-items: center; - justify-content: space-between; - gap: 12px; -} - -.listing-card__no { - color: var(--ink-muted); - font-family: 'Inter', monospace; - font-size: 11px; - letter-spacing: 0.06em; -} - -.listing-card__title { - margin: 12px 0 10px !important; - color: var(--ink) !important; - font-size: 17px !important; -} - -.listing-card__tags { - display: flex; - flex-wrap: wrap; - gap: 4px; -} - -.listing-card__tags .ant-tag { - margin: 0; - border-radius: 2px; - background: #eef2ec; - color: var(--brand-ink); -} - -.listing-card__meta { - margin-top: 14px; - color: var(--ink-muted); - font-size: 12px; -} - -.listing-card__price-row { - margin-top: 12px; - padding-top: 12px; - border-top: 1px solid var(--line); -} - -.listing-card__price { - color: var(--brand-seal); - font-family: 'Inter', 'DIN Alternate', sans-serif; - font-size: 24px; - font-weight: 700; -} - -.listing-card__unit, -.listing-card__deposit { - color: var(--ink-muted); - font-size: 12px; -} - -.listing-card-link { - display: block; - height: 100%; - color: inherit; -} - -.listing-card-link:hover { - color: inherit; -} - -.listing-detail-page { - max-width: 1240px; - margin: 0 auto; - padding: 26px 24px 64px; -} - -.listing-detail-page__crumb { - display: flex; - align-items: center; - justify-content: space-between; - gap: 16px; -} - -.listing-detail-page__hero { - margin-top: 18px; -} - -.listing-detail-gallery { - padding: 14px; - border: 1px solid var(--line); - border-radius: 12px; - background: var(--paper-warm); -} - -.listing-detail-gallery__main { - aspect-ratio: 16 / 10; - overflow: hidden; - border-radius: 8px; - background: #eef1ea; -} - -.listing-detail-gallery__main .ant-image, -.listing-detail-gallery__main img { - width: 100%; - height: 100%; -} - -.listing-detail-gallery__main img { - object-fit: cover; -} - -.listing-detail-gallery__thumbs { - display: flex; - gap: 8px; - margin-top: 10px; - overflow-x: auto; -} - -.listing-detail-gallery__thumbs .ant-image { - flex: 0 0 auto; - overflow: hidden; - border: 1px solid var(--line); - border-radius: 6px; -} - -.listing-detail-gallery__thumbs img { - object-fit: cover; -} - -.listing-detail-gallery__empty { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - gap: 12px; - min-height: 360px; - border-radius: 8px; - background: var(--paper); - color: var(--brand-ink); - letter-spacing: 0.12em; -} - -.listing-buy-card { - position: sticky; - top: 84px; - border-color: var(--line); - background: var(--paper-warm); -} - -.listing-buy-card__top { - display: flex; - align-items: center; - justify-content: space-between; - gap: 12px; -} - -.listing-buy-card__title { - margin: 12px 0 10px !important; - color: var(--brand-ink) !important; - font-size: 26px !important; - line-height: 1.35 !important; -} - -.listing-buy-card__price { - display: flex; - align-items: baseline; - gap: 10px; - margin-top: 18px; - padding: 14px 16px; - border-radius: 8px; - background: var(--paper); -} - -.listing-buy-card__price span { - color: var(--ink-muted); - font-size: 12px; -} - -.listing-buy-card__price strong { - color: var(--brand-seal); - font-family: 'Inter', 'DIN Alternate', sans-serif; - font-size: 32px; -} - -.listing-buy-card__meta { - display: grid; - grid-template-columns: repeat(3, minmax(0, 1fr)); - gap: 12px; - margin: 16px 0; -} - -.listing-buy-card__meta div { - display: flex; - flex-direction: column; - gap: 4px; - padding: 10px 12px; - border: 1px solid var(--line); - border-radius: 6px; - background: #fff; -} - -.listing-buy-card__meta span { - color: var(--ink-muted); - font-size: 11px; -} - -.listing-buy-card__meta strong { - color: var(--brand-ink); - font-family: 'Inter', monospace; - font-size: 13px; -} - -.listing-buy-card__notice { - margin-bottom: 16px; -} - -.listing-buy-card__links { - display: flex; - flex-wrap: wrap; - gap: 6px 12px; - margin-top: 12px; -} - -.listing-buy-card__links button { - padding: 0; - border: 0; - background: none; - color: var(--brand-seal); - font-size: 11px; - cursor: pointer; -} - -.listing-buy-card__links button:hover { - text-decoration: underline; - text-underline-offset: 3px; -} - -.listing-detail-page__body { - margin-top: 24px; -} - -.listing-detail-panel { - margin-bottom: 18px; - border-color: var(--line); - background: var(--paper-warm); -} - -.listing-detail-description { - margin-bottom: 0 !important; - color: var(--ink-secondary); - line-height: 1.85; - white-space: pre-wrap; -} - -.listing-process { - display: flex; - flex-direction: column; -} - -.listing-process__step { - display: flex; - gap: 16px; - padding: 14px 0; - border-bottom: 1px dashed var(--line); -} - -.listing-process__step:last-child { - border-bottom: 0; -} - -.listing-process__step > span { - color: var(--brand-seal); - font-family: 'Inter', monospace; - font-size: 12px; -} - -.listing-process__step strong { - color: var(--brand-ink); - font-size: 14px; -} - -.listing-process__step p { - margin: 6px 0 0; - color: var(--ink-muted); - font-size: 12px; -} - -.listing-trust-card { - border-color: var(--line); - background: var(--paper-warm); -} - -.listing-trust-card__item { - display: flex; - align-items: flex-start; - gap: 12px; -} - -.listing-trust-card__item > .anticon { - margin-top: 2px; - color: var(--brand-seal); - font-size: 18px; -} - -.listing-trust-card__item div { - display: flex; - flex-direction: column; - gap: 4px; -} - -.listing-trust-card__item strong { - color: var(--brand-ink); - font-size: 13px; -} - -.listing-trust-card__item span { - color: var(--ink-muted); - font-size: 11px; - line-height: 1.6; -} - -.listing-agreement-content { - max-height: 62vh; - overflow-y: auto; - color: var(--ink-secondary); - font-size: 12px; - line-height: 1.8; - white-space: pre-wrap; - word-break: break-word; -} - -@media (max-width: 991px) { - .listing-detail-page { - padding: 20px 16px 48px; - } - - .listing-buy-card { - position: static; - } - - .listing-buy-card__meta { - grid-template-columns: 1fr; - } -} - -.pc-orders-page, -.pc-order-detail-page { - max-width: 1240px; - margin: 0 auto; - padding: 28px 24px 64px; -} - -.pc-orders-page__head { - display: flex; - align-items: flex-end; - justify-content: space-between; - gap: 20px; - margin-bottom: 20px; -} - -.pc-orders-page__eyebrow { - color: var(--brand-seal); - font-size: 11px; - letter-spacing: 0.18em; -} - -.pc-orders-page__head h2 { - margin: 6px 0 8px !important; - color: var(--brand-ink) !important; -} - -.pc-orders-page__alert { - margin-bottom: 16px; -} - -.pc-orders-card { - border-color: var(--line); - background: var(--paper-warm); -} - -.pc-orders-login { - max-width: 520px; - margin: 60px auto; - text-align: center; - border-color: var(--line); - background: var(--paper-warm); -} - -.pc-orders-login .brand-logo { - margin-bottom: 16px; -} - -.pc-order-cell { - display: flex; - flex-direction: column; - gap: 4px; - align-items: flex-start; -} - -.pc-order-cell strong { - color: var(--ink); - font-size: 13px; - font-weight: 600; -} - -.pc-order-cell span { - display: inline-flex; - align-items: center; - gap: 6px; - color: var(--ink-secondary); - font-size: 11px; -} - -.pc-order-link { - padding: 0; - border: 0; - background: none; - color: var(--brand-ink); - font-family: 'Inter', monospace; - font-size: 12px; - cursor: pointer; -} - -.pc-order-link:hover { - color: var(--brand-seal); - text-decoration: underline; - text-underline-offset: 3px; -} - -.pc-order-muted { - color: var(--ink-muted) !important; -} - -.pc-order-amount { - display: flex; - flex-direction: column; - align-items: flex-end; - gap: 3px; -} - -.pc-order-amount strong { - color: var(--brand-ink); - font-family: 'Inter', monospace; - font-size: 13px; -} - -.pc-order-amount span { - color: var(--ink-muted); - font-size: 11px; -} - -.pc-orders-empty { - padding: 32px 0; - color: var(--ink-muted); -} - -.pc-order-detail-page__crumb { - display: flex; - align-items: center; - justify-content: space-between; - gap: 16px; -} - -.pc-order-detail-hero { - display: flex; - align-items: flex-end; - justify-content: space-between; - gap: 24px; - margin: 16px 0 22px; - padding: 22px 24px; - border: 1px solid var(--line); - border-radius: 12px; - background: var(--brand-ink); - color: #f0f4f2; -} - -.pc-order-detail-hero__no { - color: #b9cbc3; - font-family: 'Inter', monospace; - font-size: 11px; - letter-spacing: 0.06em; -} - -.pc-order-detail-hero h2 { - margin: 8px 0 12px !important; - color: #f6f2e8 !important; -} - -.pc-order-detail-hero__amount { - display: flex; - flex-direction: column; - align-items: flex-end; - gap: 3px; - flex: 0 0 auto; -} - -.pc-order-detail-hero__amount span, -.pc-order-detail-hero__amount small { - color: #b9cbc3; - font-size: 11px; -} - -.pc-order-detail-hero__amount strong { - color: #e8c9a6; - font-family: 'Inter', monospace; - font-size: 30px; -} - -.pc-order-detail-card { - margin-bottom: 16px; - border-color: var(--line); - background: var(--paper-warm); -} - -.pc-order-detail-side { - position: sticky; - top: 84px; -} - -.pc-order-action-card { - border-color: var(--line); - background: var(--paper-warm); -} - -.pc-order-action-card .ant-card-head-title { - color: var(--brand-ink); -} - -.pc-order-danger { - color: var(--brand-seal); - font-family: 'Inter', monospace; -} - -.pc-order-pre { - color: var(--ink-secondary); - font-size: 12px; - line-height: 1.75; - white-space: pre-wrap; - word-break: break-word; -} - -.pc-order-records { - display: flex; - flex-direction: column; -} - -.pc-order-record { - padding: 14px 0; - border-bottom: 1px dashed var(--line); -} - -.pc-order-record:last-child { - border-bottom: 0; -} - -.pc-order-record__head { - display: flex; - align-items: baseline; - justify-content: space-between; - gap: 12px; - margin-bottom: 6px; -} - -.pc-order-record__head strong { - color: var(--brand-ink); - font-size: 13px; -} - -.pc-order-record__head span { - color: var(--ink-muted); - font-size: 11px; -} - -.pc-order-dispute-tag { - margin: 16px 0 12px; -} - -@media (max-width: 767px) { - .pc-orders-page__head, - .pc-order-detail-hero { - flex-direction: column; - align-items: flex-start; - } - - .pc-order-detail-hero__amount { - align-items: flex-start; - } - - .pc-order-detail-side { - position: static; - } -} - -.empty-panel { - display: flex; - justify-content: center; - padding: 64px 24px; - border: 1px dashed var(--line); - border-radius: 8px; - background: var(--paper-warm); -} - -.section-pagination { - display: flex; - justify-content: center; - margin-top: 32px; -} - -/* Process */ -.process-grid { - display: grid; - grid-template-columns: repeat(5, minmax(0, 1fr)); - gap: 0; - margin-top: 8px; -} - -.process-step { - padding: 18px 20px 8px 0; - border-top: 1px solid var(--line); -} - -.process-step__no { - display: block; - margin-bottom: 18px; - color: var(--brand-seal); - font-family: 'Inter', monospace; - font-size: 12px; -} - -.process-step strong { - color: var(--brand-ink); - font-family: 'Noto Serif SC', 'Songti SC', serif; - font-size: 17px; -} - -.process-step p { - margin: 10px 0 0; - color: var(--ink-muted); - font-size: 12px; - line-height: 1.7; -} - -/* Rules */ -.rules-panel { - display: flex; - align-items: center; - justify-content: space-between; - gap: 32px; - padding: 36px; - border: 1px solid var(--line); - border-radius: 8px; - background: var(--paper-warm); -} - -.rules-panel .ant-typography { - max-width: 720px; -} - -/* Login */ -.login-page { - display: grid; - grid-template-columns: minmax(0, 1.05fr) minmax(0, 0.95fr); - min-height: 100vh; - background: var(--paper); -} - -.login-brand-panel { - position: relative; - overflow: hidden; - background: var(--brand-ink); - color: var(--paper-warm); -} - -.login-brand-panel::after { - position: absolute; - right: -80px; - bottom: -120px; - width: 360px; - height: 360px; - border: 1px solid rgba(236, 208, 177, 0.22); - border-radius: 50%; - content: ''; -} - -.login-brand-panel__inner { - position: relative; - z-index: 1; - display: flex; - flex-direction: column; - justify-content: center; - max-width: 560px; - min-height: 100vh; - margin: 0 auto; - padding: 64px; -} - -.login-brand__logo { - align-self: flex-start; - margin-bottom: 48px; -} - -.login-brand__title { - margin: 0 0 22px !important; - color: #f0f4f2 !important; - font-size: clamp(42px, 5vw, 64px) !important; - line-height: 1.18 !important; -} - -.login-brand__copy { - max-width: 430px; - color: #d8e2dd !important; - font-size: 15px; - line-height: 1.9; -} - -.login-brand__points { - margin-top: 24px; - color: #d8e2dd; - font-size: 13px; -} - -.login-brand__points .anticon { - margin-right: 8px; - color: var(--brand-seal-line); -} - -.login-brand__seal { - position: absolute; - right: 36px; - bottom: 36px; - display: flex; - align-items: center; - justify-content: center; - width: 72px; - height: 72px; - border: 2px solid var(--brand-seal); - color: var(--brand-seal-line); - font-family: 'Noto Serif SC', 'Songti SC', serif; - font-size: 18px; - letter-spacing: 0.12em; - transform: rotate(-6deg); -} - -.login-form-panel { - display: flex; - align-items: center; - justify-content: center; - padding: 48px 24px; -} - -.login-form-card { - width: 100%; - max-width: 420px; - padding: 36px; - border: 1px solid var(--line); - border-radius: 8px; - background: var(--paper-warm); - box-shadow: 0 1px 2px rgba(29, 36, 33, 0.04), 0 20px 60px rgba(29, 36, 33, 0.06); -} - -.login-form-card__top { - margin-bottom: 24px; -} - -.login-form-card__top .ant-typography { - display: block; - margin-top: 18px; -} - -.login-form-card__top h2 { - margin-bottom: 8px !important; - color: var(--brand-ink) !important; -} - -.login-alert { - margin-bottom: 18px; -} - -.login-dev-hint { - margin-top: 18px; - padding: 10px 12px; - border: 1px dashed var(--line); - border-radius: 4px; - color: var(--ink-muted); - font-size: 12px; -} - -.login-form-card__footer { - display: flex; - justify-content: space-between; - margin-top: 24px; - padding-top: 18px; - border-top: 1px solid var(--line); - font-size: 12px; -} - -.login-form-card__footer a { - color: var(--brand-ink); -} - -/* Admin placeholder */ -.admin-placeholder { - display: flex; - align-items: center; - justify-content: center; - min-height: 100vh; - padding: 32px; - background: var(--paper); -} - -.admin-placeholder__card { - width: min(760px, 100%); - padding: 40px; - border: 1px solid var(--line); - border-radius: 8px; - background: var(--paper-warm); -} - -.admin-placeholder__card h2 { - margin: 22px 0 10px !important; - color: var(--brand-ink) !important; -} - -.not-found { - display: flex; - align-items: center; - justify-content: center; - min-height: 100vh; - background: var(--paper); -} - -@media (max-width: 1100px) { - .home-hero__inner { - grid-template-columns: minmax(0, 1fr); - } - - .home-hero__visual { - display: none; - } - - .process-grid { - grid-template-columns: repeat(3, minmax(0, 1fr)); - row-gap: 24px; - } - - .trust-strip__inner { - grid-template-columns: repeat(2, minmax(0, 1fr)); - } -} - -@media (max-width: 900px) { - .site-nav { - display: none; - } - - .login-page { - grid-template-columns: minmax(0, 1fr); - } - - .login-brand-panel__inner { - min-height: auto; - padding: 44px 28px 52px; - } - - .login-brand__logo { - margin-bottom: 30px; - } - - .login-brand__seal { - display: none; - } -} - -@media (max-width: 640px) { - .site-header { - height: 64px; - } - - .site-header__inner { - padding: 0 16px; - } - - .site-header__inner > .ant-space .ant-btn { - padding-inline: 10px; - } - - .home-hero__inner { - min-height: auto; - padding: 52px 16px 48px; - } - - .home-hero__title { - font-size: 42px !important; - } - - .home-hero__search { - width: 100%; - } - - .trust-strip__inner, - .section-block, - .site-footer__inner { - padding-right: 16px; - padding-left: 16px; - } - - .trust-strip__inner { - grid-template-columns: 1fr; - gap: 14px; - } - - .section-block { - padding-top: 52px; - padding-bottom: 52px; - } - - .section-heading { - align-items: flex-start; - flex-direction: column; - gap: 8px; - } - - .process-grid { - grid-template-columns: 1fr; - } - - .process-step { - padding-right: 0; - } - - .rules-panel { - align-items: flex-start; - flex-direction: column; - padding: 24px; - } - - .login-form-panel { - padding: 28px 16px; - } - - .login-form-card { - padding: 24px; - } - - .site-footer__inner { - align-items: flex-start; - flex-direction: column; - } -} - -/* Phase 1 shared loading */ -.page-loading { - display: flex; - align-items: center; - justify-content: center; - min-height: 100vh; - background: var(--paper); -} - -.page-loading__placeholder { - width: 120px; - height: 40px; -} - -/* Admin login */ -.admin-login-page { - display: grid; - grid-template-columns: minmax(0, 1.02fr) minmax(0, 0.98fr); - min-height: 100vh; - background: var(--paper); -} - -.admin-login-brand { - position: relative; - overflow: hidden; - background: var(--brand-ink); - color: var(--paper-warm); -} - -.admin-login-brand::after { - position: absolute; - right: -120px; - bottom: -150px; - width: 420px; - height: 420px; - border: 1px solid rgba(236, 208, 177, 0.2); - border-radius: 50%; - content: ''; -} - -.admin-login-brand__inner { - position: relative; - z-index: 1; - display: flex; - flex-direction: column; - justify-content: center; - min-height: 100vh; - max-width: 560px; - margin: 0 auto; - padding: 64px; -} - -.admin-login-brand__eyebrow { - margin-top: 52px; - color: var(--brand-seal-line); - font-size: 11px; - letter-spacing: 0.18em; -} - -.admin-login-brand__title { - margin: 18px 0 22px !important; - color: #f0f4f2 !important; - font-size: clamp(42px, 5vw, 64px) !important; - line-height: 1.18 !important; -} - -.admin-login-brand__copy { - max-width: 430px; - color: #d8e2dd !important; - font-size: 15px; - line-height: 1.9; -} - -.admin-login-brand__foot { - margin-top: 32px; - color: #b9cbc3; - font-size: 12px; - letter-spacing: 0.04em; -} - -.admin-login-brand__foot .anticon { - margin-right: 8px; - color: var(--brand-seal-line); -} - -.admin-login-form-panel { - display: flex; - align-items: center; - justify-content: center; - padding: 48px 24px; -} - -.admin-login-card { - width: 100%; - max-width: 430px; - padding: 36px; - border: 1px solid var(--line); - border-radius: 8px; - background: var(--paper-warm); - box-shadow: 0 1px 2px rgba(29, 36, 33, 0.04), 0 20px 60px rgba(29, 36, 33, 0.06); -} - -.admin-login-card__head { - margin-bottom: 24px; -} - -.admin-login-card__head .ant-typography { - display: block; - margin-top: 16px; -} - -.admin-login-card__head h2 { - margin-bottom: 8px !important; - color: var(--brand-ink) !important; -} - -.admin-captcha-button { - width: 128px; - padding: 0 !important; - overflow: hidden; -} - -.admin-captcha-button img { - width: 100%; - height: 40px; - object-fit: cover; -} - -.admin-login-card__foot { - display: flex; - align-items: center; - justify-content: space-between; - margin-top: 24px; - padding-top: 18px; - border-top: 1px solid var(--line); - color: var(--ink-muted); - font-size: 12px; -} - -.admin-login-card__foot .ant-btn-link { - padding: 0; - color: var(--brand-ink); -} - -/* Admin shell */ -.admin-shell { - min-height: 100vh; - background: var(--paper); -} - -.admin-sider { - border-right: 1px solid var(--line); - background: var(--paper-warm) !important; -} - -.admin-sider .ant-layout-sider-children { - display: flex; - flex-direction: column; - min-height: 100vh; -} - -.admin-sider__brand { - display: flex; - align-items: center; - justify-content: space-between; - height: 72px; - padding: 0 18px; - border-bottom: 1px solid var(--line); -} - -.admin-sider__phase { - color: var(--brand-seal); - font-family: 'Inter', monospace; - font-size: 9px; - letter-spacing: 0.12em; -} - -.admin-menu { - flex: 1; - padding: 14px 10px; - overflow-y: auto; - border-inline-end: 0 !important; - background: transparent !important; -} - -.admin-menu .ant-menu-submenu-title, -.admin-menu .ant-menu-item { - height: 40px; - margin: 2px 0; - border-radius: 4px; - color: var(--ink-secondary); - font-size: 13px; -} - -.admin-menu .ant-menu-item-selected { - color: var(--brand-ink) !important; - font-weight: 600; -} - -.admin-menu .ant-menu-submenu-selected > .ant-menu-submenu-title { - color: var(--brand-ink); -} - -.admin-menu .ant-menu-item .anticon, -.admin-menu .ant-menu-submenu-title .anticon { - color: var(--sage); -} - -.admin-sider__foot { - display: flex; - flex-direction: column; - gap: 4px; - padding: 16px 20px; - border-top: 1px solid var(--line); - font-size: 11px; -} - -.admin-main { - min-width: 0; - background: var(--paper); -} - -.admin-header { - position: sticky; - top: 0; - z-index: 10; - display: flex; - align-items: center; - justify-content: space-between; - height: 64px; - padding: 0 24px; - border-bottom: 1px solid var(--line); - background: rgba(255, 253, 248, 0.94); - backdrop-filter: blur(12px); -} - -.admin-header__left { - display: flex; - align-items: center; - gap: 14px; -} - -.admin-collapse { - color: var(--ink-secondary); -} - -.admin-role-tag { - margin: 0; - border-radius: 2px; - background: #eef2ec; - color: var(--brand-ink); -} - -.admin-account { - display: inline-flex; - align-items: center; - gap: 8px; - height: 40px; - padding: 0 8px; -} - -.admin-avatar { - background: var(--brand-ink) !important; - color: var(--paper-warm) !important; - font-family: 'Noto Serif SC', 'Songti SC', serif; -} - -.admin-account__name { - max-width: 120px; - overflow: hidden; - color: var(--ink); - font-size: 13px; - text-overflow: ellipsis; - white-space: nowrap; -} - -.admin-content { - padding: 24px; -} - -.admin-page { - max-width: 1600px; - margin: 0 auto; -} - -.admin-page__head { - display: flex; - align-items: flex-end; - justify-content: space-between; - gap: 24px; - margin-bottom: 24px; -} - -.admin-page__head-main { - display: flex; - flex-direction: column; - align-items: flex-start; - gap: 2px; - min-width: 0; -} - -.admin-page__desc { - display: block; - max-width: 720px; -} - -.admin-page__meta { - margin-top: 10px; -} - -.admin-page__actions { - display: flex; - align-items: center; - gap: 8px; - padding-bottom: 4px; -} - -.admin-page__head h2 { - margin: 6px 0 8px !important; - color: var(--brand-ink) !important; - font-size: 30px !important; -} - -.admin-page__eyebrow { - color: var(--brand-seal); - font-size: 10px !important; - letter-spacing: 0.16em; -} - -.admin-phase-tag { - margin: 0; - border-radius: 2px; - background: #f3ece4; - color: var(--brand-seal); -} - -.admin-kpi-card { - min-height: 150px; - border-color: var(--line); - background: var(--paper-warm); -} - -.admin-kpi-card .ant-statistic-title { - color: var(--ink-muted); - font-size: 12px; -} - -.admin-kpi-card .ant-statistic-content { - color: var(--brand-ink); - font-family: 'Inter', 'DIN Alternate', sans-serif; - font-size: 30px; -} - -.admin-kpi-card--accent { - background: var(--brand-ink); -} - -.admin-kpi-card--accent .ant-statistic-title, -.admin-kpi-card--accent .admin-kpi-card__foot { - color: #b9cbc3; -} - -.admin-kpi-card--accent .ant-statistic-content { - color: #f0f4f2; -} - -.admin-kpi-card__icon { - display: flex; - align-items: center; - justify-content: center; - width: 34px; - height: 34px; - margin-bottom: 16px; - border: 1px solid var(--line); - border-radius: 4px; - background: #f4f0e6; - color: var(--brand-seal); - font-size: 17px; -} - -.admin-kpi-card--accent .admin-kpi-card__icon { - border-color: rgba(236, 208, 177, 0.28); - background: rgba(236, 208, 177, 0.08); - color: var(--brand-seal-line); -} - -.admin-kpi-card__foot { - display: block; - margin-top: 8px; - color: var(--ink-muted); - font-size: 12px; -} - -.admin-section-title { - display: flex; - align-items: baseline; - gap: 12px; - margin: 30px 0 14px; -} - -.admin-section-title h4 { - margin: 0 !important; - color: var(--brand-ink) !important; -} - -.admin-pending-card { - display: flex; - align-items: center; - justify-content: space-between; - border-color: var(--line); - background: var(--paper-warm); -} - -.admin-pending-card > .ant-card-body { - display: flex; - align-items: center; - justify-content: space-between; - width: 100%; - padding: 18px 20px; -} - -.admin-pending-card > .ant-card-body > div { - display: flex; - flex-direction: column; - gap: 6px; -} - -.admin-pending-card__label { - color: var(--ink-muted); - font-size: 12px; -} - -.admin-pending-card strong { - color: var(--brand-ink); - font-family: 'Inter', 'DIN Alternate', sans-serif; - font-size: 28px; - line-height: 1; -} - -.admin-table-card { - margin-top: 24px; - border-color: var(--line); - background: var(--paper-warm); -} - -.admin-table-card .ant-card-head-title { - color: var(--brand-ink); -} - -.admin-table-card .ant-card-head-title .anticon { - margin-right: 6px; - color: var(--brand-seal); -} - -.admin-mono { - color: var(--ink-secondary); - font-family: 'Inter', monospace; - font-size: 11px; -} - -.admin-money { - color: var(--brand-ink); - font-family: 'Inter', monospace; - font-size: 12px; -} - -.admin-filter-bar { - display: flex; - flex-wrap: wrap; - align-items: flex-end; - justify-content: space-between; - gap: 16px; - margin-bottom: 18px; - padding: 16px 18px; - border: 1px solid var(--line); - border-radius: 10px; - background: var(--paper-warm); -} - -.admin-filter-bar__fields { - display: flex; - flex: 1 1 640px; - flex-wrap: wrap; - gap: 12px 14px; -} - -.admin-filter-bar__actions { - padding-bottom: 1px; -} - -.admin-filter-field { - display: flex; - flex-direction: column; - gap: 6px; - min-width: 140px; -} - -.admin-filter-field__label { - color: var(--ink-muted); - font-size: 11px; - letter-spacing: 0.08em; -} - -.admin-filter-field .ant-select, -.admin-filter-field .ant-input-affix-wrapper { - width: 100%; -} - -.admin-status-tag { - margin-inline-end: 0; - font-size: 11px; -} - -.admin-stack { - display: flex; - flex-direction: column; - gap: 3px; - line-height: 1.35; -} - -.admin-stack strong { - color: var(--ink); - font-size: 12px; - font-weight: 600; -} - -.admin-stack span { - color: var(--ink-muted); - font-size: 11px; -} - -.admin-stack__accent { - color: var(--brand-seal) !important; -} - -.admin-stack--tiny { - align-items: flex-start; - gap: 4px; -} - -.admin-order-link { - padding: 0; - border: 0; - background: none; - color: var(--brand-ink); - font-family: 'Inter', monospace; - font-size: 12px; - letter-spacing: 0.02em; - text-align: left; - cursor: pointer; -} - -.admin-order-link:hover { - color: var(--brand-seal); - text-decoration: underline; - text-underline-offset: 3px; -} - -.admin-amount { - display: flex; - flex-direction: column; - align-items: flex-end; - gap: 2px; -} - -.admin-amount strong { - color: var(--brand-ink); - font-family: 'Inter', monospace; - font-size: 13px; -} - -.admin-amount span { - color: var(--ink-muted); - font-size: 11px; -} - -.admin-amount__accent { - color: var(--success) !important; -} - -.admin-table__row--clickable { - cursor: pointer; -} - -.ant-table-wrapper .ant-table-tbody > tr.ant-table-row.admin-table__row--clickable:hover > td { - background: #f3f7f4; -} - -.admin-table-alert { - margin-bottom: 16px; -} - -.admin-finance-mini { - margin-top: 16px; -} - -.admin-finance-mini .admin-pending-card > .ant-card-body > span { - color: var(--ink-muted); - font-size: 11px; -} - -.admin-detail { - display: flex; - flex-direction: column; - gap: 22px; -} - -.admin-detail__section { - padding-bottom: 18px; - border-bottom: 1px dashed var(--line); -} - -.admin-detail__section:last-child { - padding-bottom: 0; - border-bottom: 0; -} - -.admin-detail__section-head { - display: flex; - align-items: center; - justify-content: space-between; - margin-bottom: 10px; -} - -.admin-detail__section-head h4 { - display: flex; - align-items: center; - gap: 6px; - margin: 0; - color: var(--brand-ink); - font-size: 13px; - letter-spacing: 0.06em; -} - -.admin-detail__section .ant-descriptions-item-label { - color: var(--ink-muted); - font-size: 12px; -} - -.admin-detail__section .ant-descriptions-item-content { - color: var(--ink); - font-size: 12px; -} - -.admin-detail__pre { - max-height: 220px; - padding: 10px 12px; - overflow: auto; - border: 1px solid var(--line); - border-radius: 6px; - background: #fbf8f1; - color: var(--ink-secondary); - font-size: 12px; - line-height: 1.6; - white-space: pre-wrap; - word-break: break-word; -} - -.admin-detail__pre--tall { - max-height: 440px; -} - -.admin-audit-summary { - display: inline-block; - max-width: 100%; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - vertical-align: bottom; -} - -.admin-audit-ua { - color: var(--ink-muted); - font-family: 'Inter', monospace; - font-size: 11px; - word-break: break-all; -} - -.admin-config-form { - display: flex; - flex-direction: column; - gap: 18px; -} - -.admin-config-editor { - font-family: 'Inter', monospace; - font-size: 12px; - line-height: 1.6; -} - -.admin-detail-drawer .ant-drawer-header { - align-items: flex-start; -} - -.admin-detail-drawer__head { - display: flex; - flex-direction: column; - gap: 4px; -} - -.admin-detail-drawer__title { - color: var(--brand-ink); - font-family: 'Inter', monospace; - font-size: 15px; -} - -.admin-detail-drawer__subtitle { - color: var(--ink-muted); - font-size: 12px; - font-weight: 400; -} - -.admin-detail-drawer__tags { - margin-top: 4px; -} - -.admin-placeholder-card { - position: relative; - max-width: 760px; - padding: 34px; - border: 1px solid var(--line); - border-radius: 8px; - background: var(--paper-warm); -} - -.admin-placeholder-card h4 { - margin: 0 0 10px !important; - color: var(--brand-ink) !important; -} - -.admin-placeholder-card__seal { - display: inline-flex; - align-items: center; - justify-content: center; - width: 54px; - height: 54px; - margin-bottom: 20px; - border: 2px solid var(--brand-seal); - color: var(--brand-seal); - font-family: 'Noto Serif SC', 'Songti SC', serif; - font-size: 14px; - letter-spacing: 0.1em; - transform: rotate(-3deg); -} - -@media (max-width: 1100px) { - .admin-login-page { - grid-template-columns: minmax(0, 1fr); - } - - .admin-login-brand__inner { - min-height: auto; - padding: 44px 28px 52px; - } - - .admin-login-brand__eyebrow { - margin-top: 30px; - } -} - -@media (max-width: 900px) { - .admin-header { - padding: 0 16px; - } - - .admin-content { - padding: 16px; - } - - .admin-page__head { - align-items: flex-start; - flex-direction: column; - gap: 14px; - } - - .admin-account__name { - display: none; - } -} - -/* Mobile storefront */ -.mobile-shell { - --adm-color-primary: #1e4d42; - --adm-color-success: #2f7d5c; - --adm-color-warning: #c17a2b; - --adm-color-danger: #a64332; - --adm-font-family: 'Noto Sans SC', 'PingFang SC', 'Microsoft YaHei', sans-serif; - position: relative; - width: 100%; - max-width: 560px; - min-height: 100vh; - margin: 0 auto; - padding-bottom: calc(72px + env(safe-area-inset-bottom)); - background: var(--paper); - color: var(--ink); -} - -.mobile-shell--no-tabbar { - padding-bottom: 0; -} - -.mobile-header { - position: sticky; - top: 0; - z-index: 20; - display: flex; - align-items: center; - justify-content: space-between; - height: 58px; - padding: 0 16px; - border-bottom: 1px solid var(--line); - background: rgba(255, 253, 248, 0.95); - backdrop-filter: blur(12px); -} - -.mobile-header__brand { - display: inline-flex; - align-items: center; -} - -.mobile-header__right { - display: flex; - align-items: center; - gap: 10px; -} - -.mobile-header__login, -.mobile-header__user { - padding: 7px 12px; - border: 1px solid var(--line); - border-radius: 4px; - color: var(--brand-ink); - font-size: 12px; -} - -.mobile-header__login { - border-color: var(--brand-ink); - background: var(--brand-ink); - color: var(--paper-warm); -} - -.mobile-content { - min-height: calc(100vh - 130px); -} - -.mobile-tabbar { - position: fixed; - right: 0; - bottom: 0; - left: 0; - z-index: 30; - width: 100%; - max-width: 560px; - margin: 0 auto; - border-top: 1px solid var(--line); - background: var(--paper-warm); -} - -.mobile-tabbar[hidden] { - display: none; -} - -.mobile-tabbar .adm-tab-bar-item { - color: var(--ink-muted); -} - -.mobile-tabbar .adm-tab-bar-item-active { - color: var(--brand-ink); -} - -.mobile-tabbar .adm-tab-bar-item-title { - font-size: 11px; -} - -.mobile-home { - padding-bottom: 12px; -} - -.mobile-hero { - position: relative; - overflow: hidden; - padding: 28px 18px 24px; - background: var(--brand-ink); - color: var(--paper-warm); -} - -.mobile-hero::after { - position: absolute; - right: -70px; - bottom: -100px; - width: 220px; - height: 220px; - border: 1px solid rgba(236, 208, 177, 0.22); - border-radius: 50%; - content: ''; -} - -.mobile-hero__eyebrow { - position: relative; - z-index: 1; - color: var(--brand-seal-line); - font-size: 9px; - letter-spacing: 0.16em; -} - -.mobile-hero h1 { - position: relative; - z-index: 1; - margin: 12px 0 10px; - font-family: 'Noto Serif SC', 'Songti SC', serif; - font-size: 32px; - font-weight: 600; - letter-spacing: 0.04em; - line-height: 1.24; -} - -.mobile-hero p { - position: relative; - z-index: 1; - margin: 0 0 18px; - color: #d8e2dd; - font-size: 12px; - letter-spacing: 0.02em; -} - -.mobile-search { - position: relative; - z-index: 1; - --background: #fffdf8; - --border-radius: 6px; - --height: 42px; - --padding-left: 12px; - color: var(--ink); -} - -.mobile-chips { - position: relative; - z-index: 1; - display: flex; - gap: 8px; - margin-top: 14px; - overflow-x: auto; - scrollbar-width: none; -} - -.mobile-chips::-webkit-scrollbar { - display: none; -} - -.mobile-chips button { - flex: 0 0 auto; - padding: 7px 13px; - border: 1px solid rgba(236, 208, 177, 0.38); - border-radius: 3px; - background: transparent; - color: #d8e2dd; - font-size: 12px; -} - -.mobile-chips button.is-active { - border-color: var(--brand-seal-line); - background: var(--brand-seal-line); - color: var(--brand-ink); -} - -.mobile-trust { - display: grid; - grid-template-columns: repeat(3, minmax(0, 1fr)); - border-bottom: 1px solid var(--line); - background: var(--paper-warm); -} - -.mobile-trust span { - padding: 12px 4px; - border-right: 1px solid var(--line); - color: var(--ink-secondary); - font-size: 11px; - text-align: center; -} - -.mobile-trust span:last-child { - border-right: 0; -} - -.mobile-list-section { - padding: 24px 16px 8px; -} - -.mobile-section-head { - display: flex; - align-items: flex-end; - justify-content: space-between; - margin-bottom: 14px; -} - -.mobile-eyebrow { - display: block; - color: var(--brand-seal); - font-size: 9px !important; - letter-spacing: 0.16em; -} - -.mobile-section-head h2, -.mobile-rules h2, -.mobile-placeholder h1, -.mobile-profile h1 { - margin: 5px 0 0; - color: var(--brand-ink); - font-family: 'Noto Serif SC', 'Songti SC', serif; - font-size: 24px; - font-weight: 600; - letter-spacing: 0.04em; -} - -.mobile-count { - color: var(--ink-muted); - font-size: 11px; -} - -.mobile-listing-list { - display: flex; - flex-direction: column; - gap: 12px; -} - -.mobile-listing-card { - display: flex; - gap: 12px; - padding: 12px; - border: 1px solid var(--line); - border-radius: 8px; - background: var(--paper-warm); -} - -.mobile-listing-card__cover { - display: flex; - flex: 0 0 108px; - align-items: center; - justify-content: center; - width: 108px; - height: 108px; - overflow: hidden; - border-radius: 5px; - background: #eef1ea; -} - -.mobile-listing-card__cover img { - width: 100%; - height: 100%; - object-fit: cover; -} - -.mobile-listing-card__body { - display: flex; - flex: 1; - flex-direction: column; - min-width: 0; -} - -.mobile-listing-card__top, -.mobile-listing-card__bottom { - display: flex; - align-items: center; - justify-content: space-between; - gap: 8px; -} - -.mobile-listing-card__no { - color: var(--ink-muted); - font-family: 'Inter', monospace; - font-size: 9px; -} - -.mobile-listing-card__body h3 { - display: -webkit-box; - margin: 7px 0 6px; - overflow: hidden; - color: var(--ink); - font-size: 14px; - font-weight: 600; - line-height: 1.45; - -webkit-box-orient: vertical; - -webkit-line-clamp: 2; -} - -.mobile-listing-card__tags { - display: flex; - flex-wrap: wrap; - gap: 4px; -} - -.mobile-listing-card__tags span { - padding: 2px 5px; - border-radius: 2px; - background: #eef2ec; - color: var(--brand-ink); - font-size: 9px; -} - -.mobile-listing-card__bottom { - margin-top: auto; - padding-top: 9px; -} - -.mobile-listing-card__bottom strong { - color: var(--brand-seal); - font-family: 'Inter', 'DIN Alternate', sans-serif; - font-size: 19px; -} - -.mobile-listing-card__bottom small { - display: block; - margin-top: 2px; - color: var(--ink-muted); - font-size: 9px; -} - -.mobile-listing-card__more { - color: var(--ink-muted); - font-size: 10px; -} - -.mobile-skeleton-list { - display: flex; - flex-direction: column; - gap: 12px; -} - -.mobile-skeleton-card { - display: flex; - gap: 12px; - padding: 12px; - border: 1px solid var(--line); - border-radius: 8px; - background: var(--paper-warm); -} - -.mobile-skeleton-cover { - flex: 0 0 108px; - width: 108px; - height: 108px; - border-radius: 5px; -} - -.mobile-skeleton-card .adm-skeleton-paragraph { - flex: 1; -} - -.mobile-empty, -.mobile-error { - padding: 36px 0; - text-align: center; -} - -.mobile-error .adm-button { - margin-top: 10px; -} - -.mobile-rules { - margin: 22px 16px 12px; - padding: 22px 18px; - border: 1px solid var(--line); - border-radius: 8px; - background: var(--paper-warm); -} - -.mobile-rules p { - margin: 10px 0 0; - color: var(--ink-secondary); - font-size: 12px; - line-height: 1.8; -} - -.mobile-detail { - padding: 14px 16px 108px; -} - -.mobile-detail--loading, -.mobile-detail--error { - padding-top: 24px; -} - -.mobile-detail--error { - text-align: center; -} - -.mobile-detail--error .adm-button { - margin-top: 12px; -} - -.mobile-detail__back { - display: inline-flex; - align-items: center; - gap: 4px; - margin-bottom: 12px; - padding: 0; - border: 0; - background: transparent; - color: var(--ink-secondary); - font-size: 12px; -} - -.mobile-detail__cover, -.mobile-detail__cover-skeleton { - display: flex; - align-items: center; - justify-content: center; - width: 100%; - aspect-ratio: 4 / 3; - overflow: hidden; - border-radius: 8px; - background: #eef1ea; -} - -.mobile-detail__cover img { - width: 100%; - height: 100%; - object-fit: cover; -} - -.mobile-detail__head { - padding: 18px 0 14px; -} - -.mobile-detail__no { - color: var(--ink-muted); - font-family: 'Inter', monospace; - font-size: 10px; -} - -.mobile-detail__head h1 { - margin: 6px 0 10px; - color: var(--ink); - font-family: 'Noto Serif SC', 'Songti SC', serif; - font-size: 23px; - font-weight: 600; - line-height: 1.4; -} - -.mobile-detail__tags { - display: flex; - flex-wrap: wrap; - gap: 4px; -} - -.mobile-detail__price-card { - display: grid; - grid-template-columns: repeat(3, minmax(0, 1fr)); - gap: 1px; - overflow: hidden; - border: 1px solid var(--line); - border-radius: 8px; - background: var(--line); -} - -.mobile-detail__price-card > div { - padding: 14px 10px; - background: var(--paper-warm); -} - -.mobile-detail__price-card span, -.mobile-detail__price-card strong { - display: block; -} - -.mobile-detail__price-card span { - margin-bottom: 5px; - color: var(--ink-muted); - font-size: 10px; -} - -.mobile-detail__price-card strong { - color: var(--brand-ink); - font-family: 'Inter', 'DIN Alternate', sans-serif; - font-size: 18px; -} - -.mobile-detail__section { - padding: 20px 0 0; -} - -.mobile-detail__section h2 { - margin: 0 0 10px; - color: var(--brand-ink); - font-family: 'Noto Serif SC', 'Songti SC', serif; - font-size: 18px; - font-weight: 600; -} - -.mobile-detail__section p { - margin: 0; - color: var(--ink-secondary); - font-size: 13px; - line-height: 1.85; -} - -.mobile-detail__assets { - margin: 0; - border-top: 1px solid var(--line); -} - -.mobile-detail__assets > div { - display: flex; - justify-content: space-between; - gap: 16px; - padding: 10px 0; - border-bottom: 1px solid var(--line); - font-size: 12px; -} - -.mobile-detail__assets dt { - color: var(--ink-muted); -} - -.mobile-detail__assets dd { - margin: 0; - color: var(--ink); - text-align: right; -} - -.mobile-detail__notice { - margin-top: 22px; - padding: 16px; - border-left: 2px solid var(--brand-seal); - background: #f1ece2; -} - -.mobile-detail__notice strong { - color: var(--brand-ink); - font-size: 13px; -} - -.mobile-detail__notice p { - margin: 7px 0 0; - color: var(--ink-secondary); - font-size: 11px; - line-height: 1.7; -} - -.mobile-detail__actions { - position: fixed; - right: 0; - bottom: 0; - left: 0; - z-index: 30; - display: flex; - gap: 10px; - width: 100%; - max-width: 560px; - margin: 0 auto; - padding: 12px 16px calc(12px + env(safe-area-inset-bottom)); - border-top: 1px solid var(--line); - background: var(--paper-warm); -} - -.mobile-detail__agreements { - display: flex; - flex-wrap: wrap; - gap: 4px 8px; -} - -.mobile-detail__agreements .adm-button { - padding: 0; - color: var(--brand-seal); - font-size: 11px; -} - -.mobile-agreement-content { - max-height: 55vh; - overflow-y: auto; - color: var(--ink-secondary); - font-size: 12px; - line-height: 1.75; - text-align: left; - white-space: pre-wrap; - word-break: break-word; -} - -.mobile-order-confirm__summary { - display: flex; - flex-direction: column; - gap: 0; - margin-bottom: 16px; - overflow: hidden; - border: 1px solid var(--line); - border-radius: 10px; - background: #fff; -} - -.mobile-order-confirm__summary > div { - display: flex; - align-items: baseline; - justify-content: space-between; - gap: 14px; - padding: 11px 13px; - border-bottom: 1px solid var(--line); -} - -.mobile-order-confirm__summary > div:last-child { - border-bottom: 0; -} - -.mobile-order-confirm__summary span { - color: var(--ink-muted); - font-size: 11px; -} - -.mobile-order-confirm__summary strong { - color: var(--brand-ink); - font-size: 13px; - text-align: right; -} - -.mobile-placeholder { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - min-height: 70vh; - padding: 44px 28px; - text-align: center; -} - -.mobile-placeholder .mobile-eyebrow { - margin-top: 24px; -} - -.mobile-placeholder p { - max-width: 320px; - margin: 14px 0 22px; - color: var(--ink-secondary); - font-size: 13px; - line-height: 1.8; -} - -.mobile-profile { - padding: 22px 16px; -} - -.mobile-profile__head { - display: flex; - align-items: center; - gap: 14px; - padding: 20px; - border: 1px solid var(--line); - border-radius: 8px; - background: var(--brand-ink); -} - -.mobile-profile__head h1 { - margin: 0 0 4px; - color: #f0f4f2; - font-size: 22px; -} - -.mobile-profile__head p { - margin: 0; - color: #b9cbc3; - font-size: 11px; -} - -.mobile-profile__list { - margin-top: 14px; - overflow: hidden; - border: 1px solid var(--line); - border-radius: 8px; - background: var(--paper-warm); - --border-inner: 1px solid var(--line); -} - -.mobile-profile__actions { - margin-top: 18px; -} - -.mobile-orders { - padding: 20px 16px 32px; -} - -.mobile-orders__eyebrow { - color: var(--brand-seal); - font-size: 10px; - letter-spacing: 0.18em; -} - -.mobile-orders__head { - margin-bottom: 16px; -} - -.mobile-orders__head h1 { - margin: 6px 0; - color: var(--brand-ink); - font-family: 'Noto Serif SC', 'Songti SC', serif; - font-size: 28px; - letter-spacing: 0.04em; -} - -.mobile-orders__head p { - margin: 0; - color: var(--ink-muted); - font-size: 12px; -} - -.mobile-orders__login { - padding: 26px 20px; - border: 1px solid var(--line); - border-radius: 10px; - background: var(--paper-warm); - text-align: center; -} - -.mobile-orders__login h2 { - margin: 14px 0 6px; - color: var(--brand-ink); - font-size: 18px; -} - -.mobile-orders__login p { - margin: 0 0 18px; - color: var(--ink-secondary); - font-size: 12px; -} - -.mobile-orders__list { - display: flex; - flex-direction: column; - gap: 12px; - padding-top: 4px; -} - -.mobile-orders__skeleton { - display: flex; - flex-direction: column; - gap: 12px; -} - -.mobile-orders__empty { - padding: 36px 0 10px; - text-align: center; -} - -.mobile-orders__empty-link { - display: inline-flex; - align-items: center; - gap: 4px; - margin-top: 8px; - color: var(--brand-ink); - font-size: 12px; -} - -.mobile-orders__more { - padding: 6px 0 10px; - color: var(--ink-muted); - font-size: 11px; - text-align: center; -} - -.mobile-order-card { - display: block; - width: 100%; - padding: 16px 16px 14px; - border: 1px solid var(--line); - border-radius: 10px; - background: var(--paper-warm); - box-shadow: 0 6px 18px rgba(30, 77, 66, 0.04); - text-align: left; - transition: - transform 0.18s ease, - box-shadow 0.18s ease; -} - -.mobile-order-card:active { - transform: scale(0.995); -} - -.mobile-order-card--skeleton { - cursor: default; -} - -.mobile-order-card__top { - display: flex; - align-items: center; - justify-content: space-between; - gap: 10px; -} - -.mobile-order-card__no { - color: var(--ink-muted); - font-family: 'Inter', monospace; - font-size: 11px; - letter-spacing: 0.04em; -} - -.mobile-order-card__title { - margin: 10px 0 8px; - color: var(--brand-ink); - font-size: 16px; - font-weight: 600; - line-height: 1.4; -} - -.mobile-order-card__meta { - display: flex; - flex-wrap: wrap; - gap: 6px; -} - -.mobile-order-card__meta span { - padding: 2px 8px; - border: 1px solid var(--line); - border-radius: 999px; - color: var(--ink-secondary); - font-size: 10px; -} - -.mobile-order-card__bottom { - display: flex; - align-items: flex-end; - justify-content: space-between; - margin-top: 12px; - padding-top: 10px; - border-top: 1px dashed var(--line); -} - -.mobile-order-card__bottom strong { - display: block; - color: var(--brand-seal); - font-family: 'Inter', monospace; - font-size: 17px; -} - -.mobile-order-card__bottom small { - color: var(--ink-muted); - font-size: 10px; -} - -.mobile-order-card__date { - display: inline-flex; - align-items: center; - gap: 4px; - color: var(--ink-muted); - font-size: 10px; -} - -.mobile-order-detail { - padding: 16px 16px 36px; -} - -.mobile-order-detail__back button { - display: inline-flex; - align-items: center; - gap: 4px; - padding: 6px 0; - border: 0; - background: none; - color: var(--ink-secondary); - font-size: 12px; -} - -.mobile-order-detail__hero { - margin-top: 10px; - padding: 18px; - border-radius: 10px; - background: var(--brand-ink); - color: #f0f4f2; -} - -.mobile-order-detail__hero-top { - display: flex; - align-items: center; - justify-content: space-between; -} - -.mobile-order-detail__no { - color: #b9cbc3; - font-family: 'Inter', monospace; - font-size: 11px; - letter-spacing: 0.04em; -} - -.mobile-order-detail__hero h1 { - margin: 10px 0 12px; - color: #f6f2e8; - font-size: 20px; - line-height: 1.4; -} - -.mobile-order-detail__status { - display: flex; - flex-wrap: wrap; - gap: 14px; -} - -.mobile-order-detail__status-line { - display: flex; - align-items: center; - gap: 6px; - color: #b9cbc3; - font-size: 10px; -} - -.mobile-order-detail__hero-amount { - display: flex; - align-items: baseline; - gap: 10px; - margin-top: 16px; - padding-top: 12px; - border-top: 1px solid rgba(240, 244, 242, 0.16); -} - -.mobile-order-detail__hero-amount strong { - color: #e8c9a6; - font-family: 'Inter', monospace; - font-size: 24px; -} - -.mobile-order-detail__hero-amount span { - color: #b9cbc3; - font-size: 11px; -} - -.mobile-order-detail__list { - margin-top: 12px; - overflow: hidden; - border: 1px solid var(--line); - border-radius: 10px; - background: var(--paper-warm); - --border-inner: 1px solid var(--line); -} - -.mobile-order-detail__list .adm-list-header { - margin: 0; - padding: 12px 14px 8px; - border-bottom: 1px solid var(--line); - background: #faf6ec; - color: var(--brand-ink); - font-size: 11px; - letter-spacing: 0.12em; -} - -.mobile-order-detail__list .adm-list-body { - border: 0; -} - -.mobile-order-detail__checkout-content { - padding: 6px 0; - color: var(--ink-secondary); - font-size: 12px; - line-height: 1.7; - white-space: pre-wrap; - word-break: break-word; -} - -.mobile-order-detail__actions { - display: flex; - flex-direction: column; - gap: 12px; - margin-top: 18px; -} - -.mobile-order-detail__back-link { - color: var(--ink-muted); - font-size: 12px; - text-align: center; -} - -.mobile-order-actions { - display: flex; - flex-direction: column; - gap: 10px; - padding: 14px; - border: 1px solid var(--line); - border-radius: 10px; - background: var(--paper-warm); -} - -.mobile-order-actions__head { - display: flex; - align-items: baseline; - justify-content: space-between; - color: var(--brand-ink); - font-size: 11px; - letter-spacing: 0.12em; -} - -.mobile-order-actions__head em { - color: var(--brand-seal); - font-style: normal; - letter-spacing: 0; -} - -.mobile-order-actions__row { - display: grid; - grid-template-columns: 1fr 1fr; - gap: 8px; -} - -.mobile-order-detail__record { - padding: 4px 0; -} - -.mobile-order-detail__record-head { - display: flex; - align-items: baseline; - justify-content: space-between; - gap: 10px; -} - -.mobile-order-detail__record-head strong { - color: var(--brand-ink); - font-size: 12px; -} - -.mobile-order-detail__record-head span { - color: var(--ink-muted); - font-size: 10px; -} - -.mobile-order-detail__record p { - margin: 6px 0; - color: var(--ink-secondary); - font-size: 12px; - line-height: 1.7; - white-space: pre-wrap; - word-break: break-word; -} - -.mobile-order-detail__record-tags { - display: flex; - gap: 6px; - flex-wrap: wrap; -} - -.mobile-order-detail__danger { - color: var(--brand-seal); - font-family: 'Inter', monospace; -} - -.mobile-order-sheet { - max-height: 88vh; - padding: 20px 16px calc(20px + env(safe-area-inset-bottom)); - overflow-y: auto; - border-radius: 16px 16px 0 0; - background: var(--paper-warm); -} - -.mobile-order-sheet__title { - margin-bottom: 6px; - color: var(--brand-ink); - font-size: 18px; - font-weight: 700; -} - -.mobile-order-sheet__hint { - margin: 0 0 14px; - color: var(--ink-muted); - font-size: 11px; - line-height: 1.6; -} - -.mobile-order-sheet__field { - display: flex; - flex-direction: column; - gap: 8px; - margin-bottom: 14px; - color: var(--ink-muted); - font-size: 11px; -} - -.mobile-order-sheet__field .adm-text-area { - padding: 10px; - border: 1px solid var(--line); - border-radius: 8px; - background: #fff; -} - -.mobile-order-sheet__grid { - display: grid; - grid-template-columns: 1fr 1fr; - gap: 10px 12px; - margin-bottom: 14px; -} - -.mobile-order-sheet__grid label { - display: flex; - flex-direction: column; - gap: 6px; - color: var(--ink-muted); - font-size: 11px; -} - -.mobile-order-sheet__grid .adm-input { - padding: 9px 10px; - border: 1px solid var(--line); - border-radius: 8px; - background: #fff; - font-family: 'Inter', monospace; - font-size: 13px; -} - -.mobile-order-sheet__actions { - display: grid; - grid-template-columns: 1fr 1fr; - gap: 10px; - margin-top: 18px; -} - -.mobile-messages { - padding: 20px 16px 32px; -} - -.mobile-messages__eyebrow { - color: var(--brand-seal); - font-size: 10px; - letter-spacing: 0.18em; -} - -.mobile-messages__head { - margin-bottom: 12px; -} - -.mobile-messages__head h1 { - margin: 6px 0; - color: var(--brand-ink); - font-family: 'Noto Serif SC', 'Songti SC', serif; - font-size: 28px; - letter-spacing: 0.04em; -} - -.mobile-messages__head p { - margin: 0; - color: var(--ink-muted); - font-size: 12px; -} - -.mobile-messages__tabs { - --title-font-size: 13px; - margin-bottom: 10px; -} - -.mobile-messages__panel-actions { - display: flex; - align-items: center; - justify-content: space-between; - gap: 10px; - margin-bottom: 10px; -} - -.mobile-message-list { - display: flex; - flex-direction: column; - gap: 10px; -} - -.mobile-chat-row { - display: flex; - align-items: center; - gap: 12px; - width: 100%; - padding: 12px 14px; - border: 1px solid var(--line); - border-radius: 10px; - background: var(--paper-warm); - text-align: left; -} - -.mobile-chat-row__avatar { - display: flex; - flex-shrink: 0; - align-items: center; - justify-content: center; - width: 40px; - height: 40px; - border: 1px solid var(--brand-seal-line); - border-radius: 10px; - background: #fbf6ec; - color: var(--brand-seal); - font-family: 'Noto Serif SC', 'Songti SC', serif; - font-size: 12px; -} - -.mobile-chat-row__body { - display: flex; - flex: 1; - flex-direction: column; - gap: 4px; - min-width: 0; -} - -.mobile-chat-row__top { - display: flex; - justify-content: space-between; - gap: 8px; -} - -.mobile-chat-row__top strong { - overflow: hidden; - color: var(--brand-ink); - font-size: 13px; - text-overflow: ellipsis; - white-space: nowrap; -} - -.mobile-chat-row__top small { - flex-shrink: 0; - color: var(--ink-muted); - font-size: 10px; -} - -.mobile-chat-row__preview { - overflow: hidden; - color: var(--ink-secondary); - font-size: 11px; - text-overflow: ellipsis; - white-space: nowrap; -} - -.mobile-chat-row__tail { - flex-shrink: 0; - color: var(--ink-muted); -} - -.mobile-notice-row { - display: flex; - gap: 10px; - width: 100%; - padding: 12px 14px; - border: 1px solid var(--line); - border-radius: 10px; - background: var(--paper-warm); - text-align: left; -} - -.mobile-notice-row--unread { - border-color: var(--brand-seal-line); - background: #fffaf2; -} - -.mobile-notice-row__dot { - flex-shrink: 0; - width: 6px; - height: 6px; - margin-top: 6px; - border-radius: 50%; - background: transparent; -} - -.mobile-notice-row--unread .mobile-notice-row__dot { - background: var(--brand-seal); -} - -.mobile-notice-row__body { - display: flex; - flex: 1; - flex-direction: column; - gap: 4px; - min-width: 0; -} - -.mobile-notice-row__top { - display: flex; - justify-content: space-between; - gap: 8px; -} - -.mobile-notice-row__top strong { - color: var(--brand-ink); - font-size: 13px; -} - -.mobile-notice-row__top small { - flex-shrink: 0; - color: var(--ink-muted); - font-size: 10px; -} - -.mobile-notice-row__content { - display: -webkit-box; - overflow: hidden; - color: var(--ink-secondary); - font-size: 11px; - line-height: 1.6; - -webkit-box-orient: vertical; - -webkit-line-clamp: 2; -} - -.mobile-messages__empty { - padding: 30px 10px; - text-align: center; -} - -.mobile-messages__empty span { - display: block; - margin-top: 6px; - color: var(--ink-muted); - font-size: 11px; -} - -.mobile-chat { - display: flex; - flex-direction: column; - height: calc(100vh - 58px); - height: calc(100dvh - 58px); -} - -.mobile-chat__head { - display: flex; - align-items: center; - gap: 10px; - padding: 10px 12px; - border-bottom: 1px solid var(--line); - background: var(--paper-warm); -} - -.mobile-chat__back { - border: 0; - background: none; - color: var(--brand-ink); - font-size: 16px; -} - -.mobile-chat__title { - display: flex; - flex: 1; - flex-direction: column; - gap: 2px; - min-width: 0; -} - -.mobile-chat__title strong { - overflow: hidden; - color: var(--brand-ink); - font-size: 14px; - text-overflow: ellipsis; - white-space: nowrap; -} - -.mobile-chat__title span { - color: var(--ink-muted); - font-size: 10px; -} - -.mobile-chat__head-space { - width: 20px; -} - -.mobile-chat__body { - flex: 1; - padding: 14px 14px 18px; - overflow-y: auto; - background: var(--paper); -} - -.mobile-chat__earlier { - margin-bottom: 10px; - text-align: center; -} - -.mobile-chat__empty { - padding: 40px 0; - color: var(--ink-muted); - font-size: 12px; - text-align: center; -} - -.mobile-chat__date { - width: fit-content; - margin: 8px auto 12px; - padding: 2px 10px; - border-radius: 999px; - background: #ece7dc; - color: var(--ink-muted); - font-size: 10px; -} - -.mobile-chat__system { - display: flex; - justify-content: center; - margin-bottom: 12px; -} - -.mobile-chat__system span { - max-width: 85%; - padding: 5px 10px; - border-radius: 4px; - background: #ece7dc; - color: var(--ink-secondary); - font-size: 10px; - line-height: 1.6; -} - -.mobile-chat__message { - display: flex; - align-items: flex-start; - gap: 8px; - margin-bottom: 12px; -} - -.mobile-chat__message--self { - flex-direction: row-reverse; -} - -.mobile-chat__avatar { - display: flex; - flex-shrink: 0; - align-items: center; - justify-content: center; - width: 30px; - height: 30px; - border-radius: 50%; - background: var(--brand-ink); - color: #f6f2e8; - font-size: 11px; -} - -.mobile-chat__bubble-wrap { - display: flex; - flex-direction: column; - gap: 3px; - max-width: 76%; -} - -.mobile-chat__message--self .mobile-chat__bubble-wrap { - align-items: flex-end; -} - -.mobile-chat__sender { - color: var(--ink-muted); - font-size: 10px; -} - -.mobile-chat__bubble { - padding: 9px 12px; - border: 1px solid var(--line); - border-radius: 12px; - border-top-left-radius: 3px; - background: var(--paper-warm); - color: var(--ink); - font-size: 13px; - line-height: 1.55; - word-break: break-word; -} - -.mobile-chat__bubble p { - margin: 0; - white-space: pre-wrap; -} - -.mobile-chat__message--self .mobile-chat__bubble { - border-color: var(--brand-ink); - border-top-left-radius: 12px; - border-top-right-radius: 3px; - background: var(--brand-ink); - color: #f4f7f5; -} - -.mobile-chat__time { - color: var(--ink-muted); - font-size: 9px; -} - -.mobile-chat__images { - display: flex; - flex-direction: column; - gap: 6px; - margin-bottom: 6px; -} - -.mobile-chat__images img { - max-width: 180px; - border-radius: 6px; -} - -.mobile-chat__composer { - display: flex; - align-items: center; - gap: 8px; - padding: 10px 12px calc(10px + env(safe-area-inset-bottom)); - border-top: 1px solid var(--line); - background: var(--paper-warm); -} - -.mobile-chat__composer .adm-input { - flex: 1; - padding: 8px 12px; - border: 1px solid var(--line); - border-radius: 999px; - background: var(--paper); -} - -.mobile-chat__composer .adm-button { - min-width: 56px; -} - -@media (min-width: 640px) { - .mobile-shell { - border-right: 1px solid var(--line); - border-left: 1px solid var(--line); - box-shadow: 0 0 60px rgba(29, 36, 33, 0.08); - } -} - - +/* 全局样式入口:按页面域拆分,导入顺序即级联顺序,请勿随意调整。 */ +@import './base.css'; +@import './storefront-home.css'; +@import './storefront-sections.css'; +@import './storefront-listings.css'; +@import './storefront-content.css'; +@import './auth.css'; +@import './admin-misc.css'; +@import './admin-login.css'; +@import './admin-shell.css'; +@import './mobile-base.css'; +@import './mobile-listing.css'; +@import './mobile-profile-orders.css'; +@import './mobile-order-detail.css'; +@import './mobile-messages.css'; +@import './mobile-chat.css'; +@import './components.css'; diff --git a/frontend/src/styles/mobile-base.css b/frontend/src/styles/mobile-base.css new file mode 100644 index 0000000..c10b667 --- /dev/null +++ b/frontend/src/styles/mobile-base.css @@ -0,0 +1,393 @@ +/* Mobile storefront */ +.mobile-shell { + --adm-color-primary: #1e4d42; + --adm-color-success: #2f7d5c; + --adm-color-warning: #c17a2b; + --adm-color-danger: #a64332; + --adm-font-family: 'Noto Sans SC', 'PingFang SC', 'Microsoft YaHei', sans-serif; + position: relative; + width: 100%; + max-width: 560px; + min-height: 100vh; + margin: 0 auto; + padding-bottom: calc(72px + env(safe-area-inset-bottom)); + background: var(--paper); + color: var(--ink); +} + +.mobile-shell--no-tabbar { + padding-bottom: 0; +} + +.mobile-header { + position: sticky; + top: 0; + z-index: 20; + display: flex; + align-items: center; + justify-content: space-between; + height: 58px; + padding: 0 16px; + border-bottom: 1px solid var(--line); + background: rgba(255, 253, 248, 0.95); + backdrop-filter: blur(12px); +} + +.mobile-header__brand { + display: inline-flex; + align-items: center; +} + +.mobile-header__right { + display: flex; + align-items: center; + gap: 10px; +} + +.mobile-header__login, +.mobile-header__user { + padding: 7px 12px; + border: 1px solid var(--line); + border-radius: 4px; + color: var(--brand-ink); + font-size: 12px; +} + +.mobile-header__login { + border-color: var(--brand-ink); + background: var(--brand-ink); + color: var(--paper-warm); +} + +.mobile-content { + min-height: calc(100vh - 130px); +} + +.mobile-tabbar { + position: fixed; + right: 0; + bottom: 0; + left: 0; + z-index: 30; + width: 100%; + max-width: 560px; + margin: 0 auto; + border-top: 1px solid var(--line); + background: var(--paper-warm); +} + +.mobile-tabbar[hidden] { + display: none; +} + +.mobile-tabbar .adm-tab-bar-item { + color: var(--ink-muted); +} + +.mobile-tabbar .adm-tab-bar-item-active { + color: var(--brand-ink); +} + +.mobile-tabbar .adm-tab-bar-item-title { + font-size: 11px; +} + +.mobile-home { + padding-bottom: 12px; +} + +.mobile-hero { + position: relative; + overflow: hidden; + padding: 28px 18px 24px; + background: var(--brand-ink); + color: var(--paper-warm); +} + +.mobile-hero::after { + position: absolute; + right: -70px; + bottom: -100px; + width: 220px; + height: 220px; + border: 1px solid rgba(236, 208, 177, 0.22); + border-radius: 50%; + content: ''; +} + +.mobile-hero__eyebrow { + position: relative; + z-index: 1; + color: var(--brand-seal-line); + font-size: 9px; + letter-spacing: 0.16em; +} + +.mobile-hero h1 { + position: relative; + z-index: 1; + margin: 12px 0 10px; + font-family: 'Noto Serif SC', 'Songti SC', serif; + font-size: 32px; + font-weight: 600; + letter-spacing: 0.04em; + line-height: 1.24; +} + +.mobile-hero p { + position: relative; + z-index: 1; + margin: 0 0 18px; + color: #d8e2dd; + font-size: 12px; + letter-spacing: 0.02em; +} + +.mobile-search { + position: relative; + z-index: 1; + --background: #fffdf8; + --border-radius: 6px; + --height: 42px; + --padding-left: 12px; + color: var(--ink); +} + +.mobile-chips { + position: relative; + z-index: 1; + display: flex; + gap: 8px; + margin-top: 14px; + overflow-x: auto; + scrollbar-width: none; +} + +.mobile-chips::-webkit-scrollbar { + display: none; +} + +.mobile-chips button { + flex: 0 0 auto; + padding: 7px 13px; + border: 1px solid rgba(236, 208, 177, 0.38); + border-radius: 3px; + background: transparent; + color: #d8e2dd; + font-size: 12px; +} + +.mobile-chips button.is-active { + border-color: var(--brand-seal-line); + background: var(--brand-seal-line); + color: var(--brand-ink); +} + +.mobile-trust { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + border-bottom: 1px solid var(--line); + background: var(--paper-warm); +} + +.mobile-trust span { + padding: 12px 4px; + border-right: 1px solid var(--line); + color: var(--ink-secondary); + font-size: 11px; + text-align: center; +} + +.mobile-trust span:last-child { + border-right: 0; +} + +.mobile-list-section { + padding: 24px 16px 8px; +} + +.mobile-section-head { + display: flex; + align-items: flex-end; + justify-content: space-between; + margin-bottom: 14px; +} + +.mobile-eyebrow { + display: block; + color: var(--brand-seal); + font-size: 9px !important; + letter-spacing: 0.16em; +} + +.mobile-section-head h2, +.mobile-rules h2, +.mobile-placeholder h1, +.mobile-profile h1 { + margin: 5px 0 0; + color: var(--brand-ink); + font-family: 'Noto Serif SC', 'Songti SC', serif; + font-size: 24px; + font-weight: 600; + letter-spacing: 0.04em; +} + +.mobile-count { + color: var(--ink-muted); + font-size: 11px; +} + +.mobile-listing-list { + display: flex; + flex-direction: column; + gap: 12px; +} + +.mobile-listing-card { + display: flex; + gap: 12px; + padding: 12px; + border: 1px solid var(--line); + border-radius: 8px; + background: var(--paper-warm); +} + +.mobile-listing-card__cover { + display: flex; + flex: 0 0 108px; + align-items: center; + justify-content: center; + width: 108px; + height: 108px; + overflow: hidden; + border-radius: 5px; + background: #eef1ea; +} + +.mobile-listing-card__cover img { + width: 100%; + height: 100%; + object-fit: cover; +} + +.mobile-listing-card__body { + display: flex; + flex: 1; + flex-direction: column; + min-width: 0; +} + +.mobile-listing-card__top, +.mobile-listing-card__bottom { + display: flex; + align-items: center; + justify-content: space-between; + gap: 8px; +} + +.mobile-listing-card__no { + color: var(--ink-muted); + font-family: 'Inter', monospace; + font-size: 9px; +} + +.mobile-listing-card__body h3 { + display: -webkit-box; + margin: 7px 0 6px; + overflow: hidden; + color: var(--ink); + font-size: 14px; + font-weight: 600; + line-height: 1.45; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; +} + +.mobile-listing-card__tags { + display: flex; + flex-wrap: wrap; + gap: 4px; +} + +.mobile-listing-card__tags span { + padding: 2px 5px; + border-radius: 2px; + background: #eef2ec; + color: var(--brand-ink); + font-size: 9px; +} + +.mobile-listing-card__bottom { + margin-top: auto; + padding-top: 9px; +} + +.mobile-listing-card__bottom strong { + color: var(--brand-seal); + font-family: 'Inter', 'DIN Alternate', sans-serif; + font-size: 19px; +} + +.mobile-listing-card__bottom small { + display: block; + margin-top: 2px; + color: var(--ink-muted); + font-size: 9px; +} + +.mobile-listing-card__more { + color: var(--ink-muted); + font-size: 10px; +} + +.mobile-skeleton-list { + display: flex; + flex-direction: column; + gap: 12px; +} + +.mobile-skeleton-card { + display: flex; + gap: 12px; + padding: 12px; + border: 1px solid var(--line); + border-radius: 8px; + background: var(--paper-warm); +} + +.mobile-skeleton-cover { + flex: 0 0 108px; + width: 108px; + height: 108px; + border-radius: 5px; +} + +.mobile-skeleton-card .adm-skeleton-paragraph { + flex: 1; +} + +.mobile-empty, +.mobile-error { + padding: 36px 0; + text-align: center; +} + +.mobile-error .adm-button { + margin-top: 10px; +} + +.mobile-rules { + margin: 22px 16px 12px; + padding: 22px 18px; + border: 1px solid var(--line); + border-radius: 8px; + background: var(--paper-warm); +} + +.mobile-rules p { + margin: 10px 0 0; + color: var(--ink-secondary); + font-size: 12px; + line-height: 1.8; +} + diff --git a/frontend/src/styles/mobile-chat.css b/frontend/src/styles/mobile-chat.css new file mode 100644 index 0000000..96a618c --- /dev/null +++ b/frontend/src/styles/mobile-chat.css @@ -0,0 +1,261 @@ +.mobile-chat { + display: flex; + flex-direction: column; + height: calc(100vh - 58px); + height: calc(100dvh - 58px); +} + +.mobile-chat__head { + display: flex; + align-items: center; + gap: 10px; + padding: 10px 12px; + border-bottom: 1px solid var(--line); + background: var(--paper-warm); +} + +.mobile-chat__back { + border: 0; + background: none; + color: var(--brand-ink); + font-size: 16px; +} + +.mobile-chat__title { + display: flex; + flex: 1; + flex-direction: column; + gap: 2px; + min-width: 0; +} + +.mobile-chat__title strong { + overflow: hidden; + color: var(--brand-ink); + font-size: 14px; + text-overflow: ellipsis; + white-space: nowrap; +} + +.mobile-chat__title span { + color: var(--ink-muted); + font-size: 10px; +} + +.mobile-chat__head-space { + width: 20px; +} + +.mobile-chat__body { + flex: 1; + padding: 14px 14px 18px; + overflow-y: auto; + background: var(--paper); +} + +.mobile-chat__earlier { + margin-bottom: 10px; + text-align: center; +} + +.mobile-chat__empty { + padding: 40px 0; + color: var(--ink-muted); + font-size: 12px; + text-align: center; +} + +.mobile-chat__date { + width: fit-content; + margin: 8px auto 12px; + padding: 2px 10px; + border-radius: 999px; + background: #ece7dc; + color: var(--ink-muted); + font-size: 10px; +} + +.mobile-chat__system { + display: flex; + justify-content: center; + margin-bottom: 12px; +} + +.mobile-chat__system span { + max-width: 85%; + padding: 5px 10px; + border-radius: 4px; + background: #ece7dc; + color: var(--ink-secondary); + font-size: 10px; + line-height: 1.6; +} + +.mobile-chat__message { + display: flex; + align-items: flex-start; + gap: 8px; + margin-bottom: 12px; +} + +.mobile-chat__message--self { + flex-direction: row-reverse; +} + +.mobile-chat__avatar { + display: flex; + flex-shrink: 0; + align-items: center; + justify-content: center; + width: 30px; + height: 30px; + border-radius: 50%; + background: var(--brand-ink); + color: #f6f2e8; + font-size: 11px; +} + +.mobile-chat__bubble-wrap { + display: flex; + flex-direction: column; + gap: 3px; + max-width: 76%; +} + +.mobile-chat__message--self .mobile-chat__bubble-wrap { + align-items: flex-end; +} + +.mobile-chat__sender { + color: var(--ink-muted); + font-size: 10px; +} + +.mobile-chat__bubble { + padding: 9px 12px; + border: 1px solid var(--line); + border-radius: 12px; + border-top-left-radius: 3px; + background: var(--paper-warm); + color: var(--ink); + font-size: 13px; + line-height: 1.55; + word-break: break-word; +} + +.mobile-chat__bubble p { + margin: 0; + white-space: pre-wrap; +} + +.mobile-chat__message--self .mobile-chat__bubble { + border-color: var(--brand-ink); + border-top-left-radius: 12px; + border-top-right-radius: 3px; + background: var(--brand-ink); + color: #f4f7f5; +} + +.mobile-chat__time { + color: var(--ink-muted); + font-size: 9px; +} + +.mobile-chat__images { + display: flex; + flex-direction: column; + gap: 6px; + margin-bottom: 6px; +} + +.mobile-chat__images img { + max-width: 180px; + border-radius: 6px; +} + +.mobile-chat__composer { + display: flex; + align-items: center; + gap: 8px; + padding: 10px 12px calc(10px + env(safe-area-inset-bottom)); + border-top: 1px solid var(--line); + background: var(--paper-warm); +} + +.mobile-chat__composer .adm-input { + flex: 1; + padding: 8px 12px; + border: 1px solid var(--line); + border-radius: 999px; + background: var(--paper); +} + +.mobile-chat__composer .adm-button { + min-width: 56px; +} + +.mobile-chat__attach { + min-width: 36px; + padding: 4px; + color: var(--ink-soft); + font-size: 22px; +} + +.mobile-chat__pending { + display: flex; + align-items: center; + gap: 8px; + padding: 8px 12px; + overflow-x: auto; + border-top: 1px solid var(--line); + background: var(--paper-warm); +} + +.mobile-chat__pending-item { + position: relative; + flex: 0 0 56px; + width: 56px; + height: 56px; + border-radius: 10px; + overflow: hidden; + border: 1px solid var(--line); +} + +.mobile-chat__pending-item img { + width: 100%; + height: 100%; + object-fit: cover; + display: block; +} + +.mobile-chat__pending-item button { + position: absolute; + top: 0; + right: 0; + width: 18px; + height: 18px; + display: grid; + place-items: center; + border: 0; + border-radius: 0 0 0 8px; + background: rgba(20, 26, 23, 0.62); + color: #fff; + font-size: 10px; + cursor: pointer; +} + +.mobile-chat__pending-count { + margin-left: auto; + flex: 0 0 auto; + font-size: 12px; + color: var(--ink-soft); +} + +@media (min-width: 640px) { + .mobile-shell { + border-right: 1px solid var(--line); + border-left: 1px solid var(--line); + box-shadow: 0 0 60px rgba(29, 36, 33, 0.08); + } +} + diff --git a/frontend/src/styles/mobile-listing.css b/frontend/src/styles/mobile-listing.css new file mode 100644 index 0000000..24f06e5 --- /dev/null +++ b/frontend/src/styles/mobile-listing.css @@ -0,0 +1,262 @@ +.mobile-detail { + padding: 14px 16px 108px; +} + +.mobile-detail--loading, +.mobile-detail--error { + padding-top: 24px; +} + +.mobile-detail--error { + text-align: center; +} + +.mobile-detail--error .adm-button { + margin-top: 12px; +} + +.mobile-detail__back { + display: inline-flex; + align-items: center; + gap: 4px; + margin-bottom: 12px; + padding: 0; + border: 0; + background: transparent; + color: var(--ink-secondary); + font-size: 12px; +} + +.mobile-detail__cover, +.mobile-detail__cover-skeleton { + display: flex; + align-items: center; + justify-content: center; + width: 100%; + aspect-ratio: 4 / 3; + overflow: hidden; + border-radius: 8px; + background: #eef1ea; +} + +.mobile-detail__cover img { + width: 100%; + height: 100%; + object-fit: cover; +} + +.mobile-detail__head { + padding: 18px 0 14px; +} + +.mobile-detail__no { + color: var(--ink-muted); + font-family: 'Inter', monospace; + font-size: 10px; +} + +.mobile-detail__head h1 { + margin: 6px 0 10px; + color: var(--ink); + font-family: 'Noto Serif SC', 'Songti SC', serif; + font-size: 23px; + font-weight: 600; + line-height: 1.4; +} + +.mobile-detail__tags { + display: flex; + flex-wrap: wrap; + gap: 4px; +} + +.mobile-detail__price-card { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 1px; + overflow: hidden; + border: 1px solid var(--line); + border-radius: 8px; + background: var(--line); +} + +.mobile-detail__price-card > div { + padding: 14px 10px; + background: var(--paper-warm); +} + +.mobile-detail__price-card span, +.mobile-detail__price-card strong { + display: block; +} + +.mobile-detail__price-card span { + margin-bottom: 5px; + color: var(--ink-muted); + font-size: 10px; +} + +.mobile-detail__price-card strong { + color: var(--brand-ink); + font-family: 'Inter', 'DIN Alternate', sans-serif; + font-size: 18px; +} + +.mobile-detail__section { + padding: 20px 0 0; +} + +.mobile-detail__section h2 { + margin: 0 0 10px; + color: var(--brand-ink); + font-family: 'Noto Serif SC', 'Songti SC', serif; + font-size: 18px; + font-weight: 600; +} + +.mobile-detail__section p { + margin: 0; + color: var(--ink-secondary); + font-size: 13px; + line-height: 1.85; +} + +.mobile-detail__assets { + margin: 0; + border-top: 1px solid var(--line); +} + +.mobile-detail__assets > div { + display: flex; + justify-content: space-between; + gap: 16px; + padding: 10px 0; + border-bottom: 1px solid var(--line); + font-size: 12px; +} + +.mobile-detail__assets dt { + color: var(--ink-muted); +} + +.mobile-detail__assets dd { + margin: 0; + color: var(--ink); + text-align: right; +} + +.mobile-detail__notice { + margin-top: 22px; + padding: 16px; + border-left: 2px solid var(--brand-seal); + background: #f1ece2; +} + +.mobile-detail__notice strong { + color: var(--brand-ink); + font-size: 13px; +} + +.mobile-detail__notice p { + margin: 7px 0 0; + color: var(--ink-secondary); + font-size: 11px; + line-height: 1.7; +} + +.mobile-detail__actions { + position: fixed; + right: 0; + bottom: 0; + left: 0; + z-index: 30; + display: flex; + gap: 10px; + width: 100%; + max-width: 560px; + margin: 0 auto; + padding: 12px 16px calc(12px + env(safe-area-inset-bottom)); + border-top: 1px solid var(--line); + background: var(--paper-warm); +} + +.mobile-detail__agreements { + display: flex; + flex-wrap: wrap; + gap: 4px 8px; +} + +.mobile-detail__agreements .adm-button { + padding: 0; + color: var(--brand-seal); + font-size: 11px; +} + +.mobile-agreement-content { + max-height: 55vh; + overflow-y: auto; + color: var(--ink-secondary); + font-size: 12px; + line-height: 1.75; + text-align: left; + white-space: pre-wrap; + word-break: break-word; +} + +.mobile-order-confirm__summary { + display: flex; + flex-direction: column; + gap: 0; + margin-bottom: 16px; + overflow: hidden; + border: 1px solid var(--line); + border-radius: 10px; + background: #fff; +} + +.mobile-order-confirm__summary > div { + display: flex; + align-items: baseline; + justify-content: space-between; + gap: 14px; + padding: 11px 13px; + border-bottom: 1px solid var(--line); +} + +.mobile-order-confirm__summary > div:last-child { + border-bottom: 0; +} + +.mobile-order-confirm__summary span { + color: var(--ink-muted); + font-size: 11px; +} + +.mobile-order-confirm__summary strong { + color: var(--brand-ink); + font-size: 13px; + text-align: right; +} + +.mobile-placeholder { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + min-height: 70vh; + padding: 44px 28px; + text-align: center; +} + +.mobile-placeholder .mobile-eyebrow { + margin-top: 24px; +} + +.mobile-placeholder p { + max-width: 320px; + margin: 14px 0 22px; + color: var(--ink-secondary); + font-size: 13px; + line-height: 1.8; +} + diff --git a/frontend/src/styles/mobile-messages.css b/frontend/src/styles/mobile-messages.css new file mode 100644 index 0000000..13fc153 --- /dev/null +++ b/frontend/src/styles/mobile-messages.css @@ -0,0 +1,191 @@ +.mobile-messages { + padding: 20px 16px 32px; +} + +.mobile-messages__eyebrow { + color: var(--brand-seal); + font-size: 10px; + letter-spacing: 0.18em; +} + +.mobile-messages__head { + margin-bottom: 12px; +} + +.mobile-messages__head h1 { + margin: 6px 0; + color: var(--brand-ink); + font-family: 'Noto Serif SC', 'Songti SC', serif; + font-size: 28px; + letter-spacing: 0.04em; +} + +.mobile-messages__head p { + margin: 0; + color: var(--ink-muted); + font-size: 12px; +} + +.mobile-messages__tabs { + --title-font-size: 13px; + margin-bottom: 10px; +} + +.mobile-messages__panel-actions { + display: flex; + align-items: center; + justify-content: space-between; + gap: 10px; + margin-bottom: 10px; +} + +.mobile-message-list { + display: flex; + flex-direction: column; + gap: 10px; +} + +.mobile-chat-row { + display: flex; + align-items: center; + gap: 12px; + width: 100%; + padding: 12px 14px; + border: 1px solid var(--line); + border-radius: 10px; + background: var(--paper-warm); + text-align: left; +} + +.mobile-chat-row__avatar { + display: flex; + flex-shrink: 0; + align-items: center; + justify-content: center; + width: 40px; + height: 40px; + border: 1px solid var(--brand-seal-line); + border-radius: 10px; + background: #fbf6ec; + color: var(--brand-seal); + font-family: 'Noto Serif SC', 'Songti SC', serif; + font-size: 12px; +} + +.mobile-chat-row__body { + display: flex; + flex: 1; + flex-direction: column; + gap: 4px; + min-width: 0; +} + +.mobile-chat-row__top { + display: flex; + justify-content: space-between; + gap: 8px; +} + +.mobile-chat-row__top strong { + overflow: hidden; + color: var(--brand-ink); + font-size: 13px; + text-overflow: ellipsis; + white-space: nowrap; +} + +.mobile-chat-row__top small { + flex-shrink: 0; + color: var(--ink-muted); + font-size: 10px; +} + +.mobile-chat-row__preview { + overflow: hidden; + color: var(--ink-secondary); + font-size: 11px; + text-overflow: ellipsis; + white-space: nowrap; +} + +.mobile-chat-row__tail { + flex-shrink: 0; + color: var(--ink-muted); +} + +.mobile-notice-row { + display: flex; + gap: 10px; + width: 100%; + padding: 12px 14px; + border: 1px solid var(--line); + border-radius: 10px; + background: var(--paper-warm); + text-align: left; +} + +.mobile-notice-row--unread { + border-color: var(--brand-seal-line); + background: #fffaf2; +} + +.mobile-notice-row__dot { + flex-shrink: 0; + width: 6px; + height: 6px; + margin-top: 6px; + border-radius: 50%; + background: transparent; +} + +.mobile-notice-row--unread .mobile-notice-row__dot { + background: var(--brand-seal); +} + +.mobile-notice-row__body { + display: flex; + flex: 1; + flex-direction: column; + gap: 4px; + min-width: 0; +} + +.mobile-notice-row__top { + display: flex; + justify-content: space-between; + gap: 8px; +} + +.mobile-notice-row__top strong { + color: var(--brand-ink); + font-size: 13px; +} + +.mobile-notice-row__top small { + flex-shrink: 0; + color: var(--ink-muted); + font-size: 10px; +} + +.mobile-notice-row__content { + display: -webkit-box; + overflow: hidden; + color: var(--ink-secondary); + font-size: 11px; + line-height: 1.6; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; +} + +.mobile-messages__empty { + padding: 30px 10px; + text-align: center; +} + +.mobile-messages__empty span { + display: block; + margin-top: 6px; + color: var(--ink-muted); + font-size: 11px; +} + diff --git a/frontend/src/styles/mobile-order-detail.css b/frontend/src/styles/mobile-order-detail.css new file mode 100644 index 0000000..18a156a --- /dev/null +++ b/frontend/src/styles/mobile-order-detail.css @@ -0,0 +1,264 @@ + +.mobile-order-detail { + padding: 16px 16px 36px; +} + +.mobile-order-detail__back button { + display: inline-flex; + align-items: center; + gap: 4px; + padding: 6px 0; + border: 0; + background: none; + color: var(--ink-secondary); + font-size: 12px; +} + +.mobile-order-detail__hero { + margin-top: 10px; + padding: 18px; + border-radius: 10px; + background: var(--brand-ink); + color: #f0f4f2; +} + +.mobile-order-detail__hero-top { + display: flex; + align-items: center; + justify-content: space-between; +} + +.mobile-order-detail__no { + color: #b9cbc3; + font-family: 'Inter', monospace; + font-size: 11px; + letter-spacing: 0.04em; +} + +.mobile-order-detail__hero h1 { + margin: 10px 0 12px; + color: #f6f2e8; + font-size: 20px; + line-height: 1.4; +} + +.mobile-order-detail__status { + display: flex; + flex-wrap: wrap; + gap: 14px; +} + +.mobile-order-detail__status-line { + display: flex; + align-items: center; + gap: 6px; + color: #b9cbc3; + font-size: 10px; +} + +.mobile-order-detail__hero-amount { + display: flex; + align-items: baseline; + gap: 10px; + margin-top: 16px; + padding-top: 12px; + border-top: 1px solid rgba(240, 244, 242, 0.16); +} + +.mobile-order-detail__hero-amount strong { + color: #e8c9a6; + font-family: 'Inter', monospace; + font-size: 24px; +} + +.mobile-order-detail__hero-amount span { + color: #b9cbc3; + font-size: 11px; +} + +.mobile-order-detail__list { + margin-top: 12px; + overflow: hidden; + border: 1px solid var(--line); + border-radius: 10px; + background: var(--paper-warm); + --border-inner: 1px solid var(--line); +} + +.mobile-order-detail__list .adm-list-header { + margin: 0; + padding: 12px 14px 8px; + border-bottom: 1px solid var(--line); + background: #faf6ec; + color: var(--brand-ink); + font-size: 11px; + letter-spacing: 0.12em; +} + +.mobile-order-detail__list .adm-list-body { + border: 0; +} + +.mobile-order-detail__checkout-content { + padding: 6px 0; + color: var(--ink-secondary); + font-size: 12px; + line-height: 1.7; + white-space: pre-wrap; + word-break: break-word; +} + +.mobile-order-detail__actions { + display: flex; + flex-direction: column; + gap: 12px; + margin-top: 18px; +} + +.mobile-order-detail__back-link { + color: var(--ink-muted); + font-size: 12px; + text-align: center; +} + +.mobile-order-actions { + display: flex; + flex-direction: column; + gap: 10px; + padding: 14px; + border: 1px solid var(--line); + border-radius: 10px; + background: var(--paper-warm); +} + +.mobile-order-actions__head { + display: flex; + align-items: baseline; + justify-content: space-between; + color: var(--brand-ink); + font-size: 11px; + letter-spacing: 0.12em; +} + +.mobile-order-actions__head em { + color: var(--brand-seal); + font-style: normal; + letter-spacing: 0; +} + +.mobile-order-actions__row { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 8px; +} + +.mobile-order-detail__record { + padding: 4px 0; +} + +.mobile-order-detail__record-head { + display: flex; + align-items: baseline; + justify-content: space-between; + gap: 10px; +} + +.mobile-order-detail__record-head strong { + color: var(--brand-ink); + font-size: 12px; +} + +.mobile-order-detail__record-head span { + color: var(--ink-muted); + font-size: 10px; +} + +.mobile-order-detail__record p { + margin: 6px 0; + color: var(--ink-secondary); + font-size: 12px; + line-height: 1.7; + white-space: pre-wrap; + word-break: break-word; +} + +.mobile-order-detail__record-tags { + display: flex; + gap: 6px; + flex-wrap: wrap; +} + +.mobile-order-detail__danger { + color: var(--brand-seal); + font-family: 'Inter', monospace; +} + +.mobile-order-sheet { + max-height: 88vh; + padding: 20px 16px calc(20px + env(safe-area-inset-bottom)); + overflow-y: auto; + border-radius: 16px 16px 0 0; + background: var(--paper-warm); +} + +.mobile-order-sheet__title { + margin-bottom: 6px; + color: var(--brand-ink); + font-size: 18px; + font-weight: 700; +} + +.mobile-order-sheet__hint { + margin: 0 0 14px; + color: var(--ink-muted); + font-size: 11px; + line-height: 1.6; +} + +.mobile-order-sheet__field { + display: flex; + flex-direction: column; + gap: 8px; + margin-bottom: 14px; + color: var(--ink-muted); + font-size: 11px; +} + +.mobile-order-sheet__field .adm-text-area { + padding: 10px; + border: 1px solid var(--line); + border-radius: 8px; + background: #fff; +} + +.mobile-order-sheet__grid { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 10px 12px; + margin-bottom: 14px; +} + +.mobile-order-sheet__grid label { + display: flex; + flex-direction: column; + gap: 6px; + color: var(--ink-muted); + font-size: 11px; +} + +.mobile-order-sheet__grid .adm-input { + padding: 9px 10px; + border: 1px solid var(--line); + border-radius: 8px; + background: #fff; + font-family: 'Inter', monospace; + font-size: 13px; +} + +.mobile-order-sheet__actions { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 10px; + margin-top: 18px; +} + diff --git a/frontend/src/styles/mobile-profile-orders.css b/frontend/src/styles/mobile-profile-orders.css new file mode 100644 index 0000000..136b8f6 --- /dev/null +++ b/frontend/src/styles/mobile-profile-orders.css @@ -0,0 +1,207 @@ +.mobile-profile { + padding: 22px 16px; +} + +.mobile-profile__head { + display: flex; + align-items: center; + gap: 14px; + padding: 20px; + border: 1px solid var(--line); + border-radius: 8px; + background: var(--brand-ink); +} + +.mobile-profile__head h1 { + margin: 0 0 4px; + color: #f0f4f2; + font-size: 22px; +} + +.mobile-profile__head p { + margin: 0; + color: #b9cbc3; + font-size: 11px; +} + +.mobile-profile__list { + margin-top: 14px; + overflow: hidden; + border: 1px solid var(--line); + border-radius: 8px; + background: var(--paper-warm); + --border-inner: 1px solid var(--line); +} + +.mobile-profile__actions { + margin-top: 18px; +} + +.mobile-orders { + padding: 20px 16px 32px; +} + +.mobile-orders__eyebrow { + color: var(--brand-seal); + font-size: 10px; + letter-spacing: 0.18em; +} + +.mobile-orders__head { + margin-bottom: 16px; +} + +.mobile-orders__head h1 { + margin: 6px 0; + color: var(--brand-ink); + font-family: 'Noto Serif SC', 'Songti SC', serif; + font-size: 28px; + letter-spacing: 0.04em; +} + +.mobile-orders__head p { + margin: 0; + color: var(--ink-muted); + font-size: 12px; +} + +.mobile-orders__login { + padding: 26px 20px; + border: 1px solid var(--line); + border-radius: 10px; + background: var(--paper-warm); + text-align: center; +} + +.mobile-orders__login h2 { + margin: 14px 0 6px; + color: var(--brand-ink); + font-size: 18px; +} + +.mobile-orders__login p { + margin: 0 0 18px; + color: var(--ink-secondary); + font-size: 12px; +} + +.mobile-orders__list { + display: flex; + flex-direction: column; + gap: 12px; + padding-top: 4px; +} + +.mobile-orders__skeleton { + display: flex; + flex-direction: column; + gap: 12px; +} + +.mobile-orders__empty { + padding: 36px 0 10px; + text-align: center; +} + +.mobile-orders__empty-link { + display: inline-flex; + align-items: center; + gap: 4px; + margin-top: 8px; + color: var(--brand-ink); + font-size: 12px; +} + +.mobile-orders__more { + padding: 6px 0 10px; + color: var(--ink-muted); + font-size: 11px; + text-align: center; +} + +.mobile-order-card { + display: block; + width: 100%; + padding: 16px 16px 14px; + border: 1px solid var(--line); + border-radius: 10px; + background: var(--paper-warm); + box-shadow: 0 6px 18px rgba(30, 77, 66, 0.04); + text-align: left; + transition: + transform 0.18s ease, + box-shadow 0.18s ease; +} + +.mobile-order-card:active { + transform: scale(0.995); +} + +.mobile-order-card--skeleton { + cursor: default; +} + +.mobile-order-card__top { + display: flex; + align-items: center; + justify-content: space-between; + gap: 10px; +} + +.mobile-order-card__no { + color: var(--ink-muted); + font-family: 'Inter', monospace; + font-size: 11px; + letter-spacing: 0.04em; +} + +.mobile-order-card__title { + margin: 10px 0 8px; + color: var(--brand-ink); + font-size: 16px; + font-weight: 600; + line-height: 1.4; +} + +.mobile-order-card__meta { + display: flex; + flex-wrap: wrap; + gap: 6px; +} + +.mobile-order-card__meta span { + padding: 2px 8px; + border: 1px solid var(--line); + border-radius: 999px; + color: var(--ink-secondary); + font-size: 10px; +} + +.mobile-order-card__bottom { + display: flex; + align-items: flex-end; + justify-content: space-between; + margin-top: 12px; + padding-top: 10px; + border-top: 1px dashed var(--line); +} + +.mobile-order-card__bottom strong { + display: block; + color: var(--brand-seal); + font-family: 'Inter', monospace; + font-size: 17px; +} + +.mobile-order-card__bottom small { + color: var(--ink-muted); + font-size: 10px; +} + +.mobile-order-card__date { + display: inline-flex; + align-items: center; + gap: 4px; + color: var(--ink-muted); + font-size: 10px; +} diff --git a/frontend/src/styles/storefront-content.css b/frontend/src/styles/storefront-content.css new file mode 100644 index 0000000..7e31b6f --- /dev/null +++ b/frontend/src/styles/storefront-content.css @@ -0,0 +1,50 @@ +/* Process */ +.process-grid { + display: grid; + grid-template-columns: repeat(5, minmax(0, 1fr)); + gap: 0; + margin-top: 8px; +} + +.process-step { + padding: 18px 20px 8px 0; + border-top: 1px solid var(--line); +} + +.process-step__no { + display: block; + margin-bottom: 18px; + color: var(--brand-seal); + font-family: 'Inter', monospace; + font-size: 12px; +} + +.process-step strong { + color: var(--brand-ink); + font-family: 'Noto Serif SC', 'Songti SC', serif; + font-size: 17px; +} + +.process-step p { + margin: 10px 0 0; + color: var(--ink-muted); + font-size: 12px; + line-height: 1.7; +} + +/* Rules */ +.rules-panel { + display: flex; + align-items: center; + justify-content: space-between; + gap: 32px; + padding: 36px; + border: 1px solid var(--line); + border-radius: 8px; + background: var(--paper-warm); +} + +.rules-panel .ant-typography { + max-width: 720px; +} + diff --git a/frontend/src/styles/storefront-home.css b/frontend/src/styles/storefront-home.css new file mode 100644 index 0000000..1602f92 --- /dev/null +++ b/frontend/src/styles/storefront-home.css @@ -0,0 +1,117 @@ +/* Home hero */ +.home-hero { + background: var(--brand-ink); + color: var(--paper-warm); +} + +.home-hero__inner { + display: grid; + grid-template-columns: minmax(0, 7fr) minmax(0, 5fr); + gap: 48px; + align-items: center; + max-width: 1280px; + min-height: 520px; + margin: 0 auto; + padding: 76px 24px 68px; +} + +.home-hero__eyebrow { + color: var(--brand-seal-line); + font-size: 12px; + letter-spacing: 0.18em; + text-transform: uppercase; +} + +.home-hero__title { + margin: 18px 0 20px !important; + color: #f0f4f2 !important; + font-size: clamp(42px, 5vw, 68px) !important; + line-height: 1.16 !important; +} + +.home-hero__lead { + max-width: 560px; + margin-bottom: 30px !important; + color: #d8e2dd; + font-size: 16px; + line-height: 1.9; +} + +.home-hero__search { + width: 420px; + max-width: calc(100vw - 48px); +} + +.home-hero__search .ant-input-affix-wrapper { + background: var(--paper-warm); +} + +.home-hero__visual { + position: relative; + min-height: 300px; +} + +.hero-ticket { + position: absolute; + display: flex; + flex-direction: column; + gap: 8px; + width: 280px; + padding: 22px; + border: 1px solid rgba(30, 77, 66, 0.18); + border-radius: 6px; + background: var(--paper-warm); + box-shadow: 0 1px 2px rgba(21, 58, 50, 0.08), 0 22px 48px rgba(21, 58, 50, 0.2); + color: var(--brand-ink); +} + +.hero-ticket span { + color: var(--ink-muted); + font-size: 12px; + letter-spacing: 0.08em; +} + +.hero-ticket strong { + font-family: 'Noto Serif SC', 'Songti SC', serif; + font-size: 20px; + font-weight: 600; + line-height: 1.4; +} + +.hero-ticket small { + color: var(--ink-secondary); + font-size: 12px; +} + +.hero-ticket--back { + top: 8px; + right: 0; + transform: rotate(7deg); + opacity: 0.7; +} + +.hero-ticket--main { + top: 58px; + left: 8px; + transform: rotate(-3deg); +} + +.hero-ticket--front { + right: 10px; + bottom: 0; + transform: rotate(4deg); +} + +.hero-ticket__seal { + display: inline-flex; + align-items: center; + justify-content: center; + width: 46px; + height: 46px; + border: 2px solid var(--brand-seal); + color: var(--brand-seal); + font-family: 'Noto Serif SC', 'Songti SC', serif; + font-size: 13px; + letter-spacing: 0.1em; +} + diff --git a/frontend/src/styles/storefront-listings.css b/frontend/src/styles/storefront-listings.css new file mode 100644 index 0000000..a3cec2d --- /dev/null +++ b/frontend/src/styles/storefront-listings.css @@ -0,0 +1,650 @@ +/* Listing cards */ +.listing-card { + height: 100%; + overflow: hidden; + border-color: var(--line); + background: var(--paper-warm); + transition: + border-color 160ms ease, + transform 160ms ease; +} + +.listing-card:hover { + border-color: var(--sage); + transform: translateY(-2px); +} + +.listing-cover { + aspect-ratio: 4 / 3; + overflow: hidden; + background: #eef1ea; +} + +.listing-cover img { + width: 100%; + height: 100%; + object-fit: cover; +} + +.listing-cover--empty { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 12px; + background: + linear-gradient(0deg, rgba(30, 77, 66, 0.04), rgba(30, 77, 66, 0.04)), + var(--paper); + color: var(--brand-ink); + font-family: 'Noto Serif SC', 'Songti SC', serif; + letter-spacing: 0.12em; +} + +.listing-card__head, +.listing-card__price-row, +.listing-card__meta { + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; +} + +.listing-card__no { + color: var(--ink-muted); + font-family: 'Inter', monospace; + font-size: 11px; + letter-spacing: 0.06em; +} + +.listing-card__title { + margin: 12px 0 10px !important; + color: var(--ink) !important; + font-size: 17px !important; +} + +.listing-card__tags { + display: flex; + flex-wrap: wrap; + gap: 4px; +} + +.listing-card__tags .ant-tag { + margin: 0; + border-radius: 2px; + background: #eef2ec; + color: var(--brand-ink); +} + +.listing-card__meta { + margin-top: 14px; + color: var(--ink-muted); + font-size: 12px; +} + +.listing-card__price-row { + margin-top: 12px; + padding-top: 12px; + border-top: 1px solid var(--line); +} + +.listing-card__price { + color: var(--brand-seal); + font-family: 'Inter', 'DIN Alternate', sans-serif; + font-size: 24px; + font-weight: 700; +} + +.listing-card__unit, +.listing-card__deposit { + color: var(--ink-muted); + font-size: 12px; +} + +.listing-card-link { + display: block; + height: 100%; + color: inherit; +} + +.listing-card-link:hover { + color: inherit; +} + +.listing-detail-page { + max-width: 1240px; + margin: 0 auto; + padding: 26px 24px 64px; +} + +.listing-detail-page__crumb { + display: flex; + align-items: center; + justify-content: space-between; + gap: 16px; +} + +.listing-detail-page__hero { + margin-top: 18px; +} + +.listing-detail-gallery { + padding: 14px; + border: 1px solid var(--line); + border-radius: 12px; + background: var(--paper-warm); +} + +.listing-detail-gallery__main { + aspect-ratio: 16 / 10; + overflow: hidden; + border-radius: 8px; + background: #eef1ea; +} + +.listing-detail-gallery__main .ant-image, +.listing-detail-gallery__main img { + width: 100%; + height: 100%; +} + +.listing-detail-gallery__main img { + object-fit: cover; +} + +.listing-detail-gallery__thumbs { + display: flex; + gap: 8px; + margin-top: 10px; + overflow-x: auto; +} + +.listing-detail-gallery__thumbs .ant-image { + flex: 0 0 auto; + overflow: hidden; + border: 1px solid var(--line); + border-radius: 6px; +} + +.listing-detail-gallery__thumbs img { + object-fit: cover; +} + +.listing-detail-gallery__empty { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 12px; + min-height: 360px; + border-radius: 8px; + background: var(--paper); + color: var(--brand-ink); + letter-spacing: 0.12em; +} + +.listing-buy-card { + position: sticky; + top: 84px; + border-color: var(--line); + background: var(--paper-warm); +} + +.listing-buy-card__top { + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; +} + +.listing-buy-card__title { + margin: 12px 0 10px !important; + color: var(--brand-ink) !important; + font-size: 26px !important; + line-height: 1.35 !important; +} + +.listing-buy-card__price { + display: flex; + align-items: baseline; + gap: 10px; + margin-top: 18px; + padding: 14px 16px; + border-radius: 8px; + background: var(--paper); +} + +.listing-buy-card__price span { + color: var(--ink-muted); + font-size: 12px; +} + +.listing-buy-card__price strong { + color: var(--brand-seal); + font-family: 'Inter', 'DIN Alternate', sans-serif; + font-size: 32px; +} + +.listing-buy-card__meta { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 12px; + margin: 16px 0; +} + +.listing-buy-card__meta div { + display: flex; + flex-direction: column; + gap: 4px; + padding: 10px 12px; + border: 1px solid var(--line); + border-radius: 6px; + background: #fff; +} + +.listing-buy-card__meta span { + color: var(--ink-muted); + font-size: 11px; +} + +.listing-buy-card__meta strong { + color: var(--brand-ink); + font-family: 'Inter', monospace; + font-size: 13px; +} + +.listing-buy-card__notice { + margin-bottom: 16px; +} + +.listing-buy-card__links { + display: flex; + flex-wrap: wrap; + gap: 6px 12px; + margin-top: 12px; +} + +.listing-buy-card__links button { + padding: 0; + border: 0; + background: none; + color: var(--brand-seal); + font-size: 11px; + cursor: pointer; +} + +.listing-buy-card__links button:hover { + text-decoration: underline; + text-underline-offset: 3px; +} + +.listing-detail-page__body { + margin-top: 24px; +} + +.listing-detail-panel { + margin-bottom: 18px; + border-color: var(--line); + background: var(--paper-warm); +} + +.listing-detail-description { + margin-bottom: 0 !important; + color: var(--ink-secondary); + line-height: 1.85; + white-space: pre-wrap; +} + +.listing-process { + display: flex; + flex-direction: column; +} + +.listing-process__step { + display: flex; + gap: 16px; + padding: 14px 0; + border-bottom: 1px dashed var(--line); +} + +.listing-process__step:last-child { + border-bottom: 0; +} + +.listing-process__step > span { + color: var(--brand-seal); + font-family: 'Inter', monospace; + font-size: 12px; +} + +.listing-process__step strong { + color: var(--brand-ink); + font-size: 14px; +} + +.listing-process__step p { + margin: 6px 0 0; + color: var(--ink-muted); + font-size: 12px; +} + +.listing-trust-card { + border-color: var(--line); + background: var(--paper-warm); +} + +.listing-trust-card__item { + display: flex; + align-items: flex-start; + gap: 12px; +} + +.listing-trust-card__item > .anticon { + margin-top: 2px; + color: var(--brand-seal); + font-size: 18px; +} + +.listing-trust-card__item div { + display: flex; + flex-direction: column; + gap: 4px; +} + +.listing-trust-card__item strong { + color: var(--brand-ink); + font-size: 13px; +} + +.listing-trust-card__item span { + color: var(--ink-muted); + font-size: 11px; + line-height: 1.6; +} + +.listing-agreement-content { + max-height: 62vh; + overflow-y: auto; + color: var(--ink-secondary); + font-size: 12px; + line-height: 1.8; + white-space: pre-wrap; + word-break: break-word; +} + +@media (max-width: 991px) { + .listing-detail-page { + padding: 20px 16px 48px; + } + + .listing-buy-card { + position: static; + } + + .listing-buy-card__meta { + grid-template-columns: 1fr; + } +} + +.pc-orders-page, +.pc-order-detail-page { + max-width: 1240px; + margin: 0 auto; + padding: 28px 24px 64px; +} + +.pc-orders-page__head { + display: flex; + align-items: flex-end; + justify-content: space-between; + gap: 20px; + margin-bottom: 20px; +} + +.pc-orders-page__eyebrow { + color: var(--brand-seal); + font-size: 11px; + letter-spacing: 0.18em; +} + +.pc-orders-page__head h2 { + margin: 6px 0 8px !important; + color: var(--brand-ink) !important; +} + +.pc-orders-page__alert { + margin-bottom: 16px; +} + +.pc-orders-card { + border-color: var(--line); + background: var(--paper-warm); +} + +.pc-orders-login { + max-width: 520px; + margin: 60px auto; + text-align: center; + border-color: var(--line); + background: var(--paper-warm); +} + +.pc-orders-login .brand-logo { + margin-bottom: 16px; +} + +.pc-order-cell { + display: flex; + flex-direction: column; + gap: 4px; + align-items: flex-start; +} + +.pc-order-cell strong { + color: var(--ink); + font-size: 13px; + font-weight: 600; +} + +.pc-order-cell span { + display: inline-flex; + align-items: center; + gap: 6px; + color: var(--ink-secondary); + font-size: 11px; +} + +.pc-order-link { + padding: 0; + border: 0; + background: none; + color: var(--brand-ink); + font-family: 'Inter', monospace; + font-size: 12px; + cursor: pointer; +} + +.pc-order-link:hover { + color: var(--brand-seal); + text-decoration: underline; + text-underline-offset: 3px; +} + +.pc-order-muted { + color: var(--ink-muted) !important; +} + +.pc-order-amount { + display: flex; + flex-direction: column; + align-items: flex-end; + gap: 3px; +} + +.pc-order-amount strong { + color: var(--brand-ink); + font-family: 'Inter', monospace; + font-size: 13px; +} + +.pc-order-amount span { + color: var(--ink-muted); + font-size: 11px; +} + +.pc-orders-empty { + padding: 32px 0; + color: var(--ink-muted); +} + +.pc-order-detail-page__crumb { + display: flex; + align-items: center; + justify-content: space-between; + gap: 16px; +} + +.pc-order-detail-hero { + display: flex; + align-items: flex-end; + justify-content: space-between; + gap: 24px; + margin: 16px 0 22px; + padding: 22px 24px; + border: 1px solid var(--line); + border-radius: 12px; + background: var(--brand-ink); + color: #f0f4f2; +} + +.pc-order-detail-hero__no { + color: #b9cbc3; + font-family: 'Inter', monospace; + font-size: 11px; + letter-spacing: 0.06em; +} + +.pc-order-detail-hero h2 { + margin: 8px 0 12px !important; + color: #f6f2e8 !important; +} + +.pc-order-detail-hero__amount { + display: flex; + flex-direction: column; + align-items: flex-end; + gap: 3px; + flex: 0 0 auto; +} + +.pc-order-detail-hero__amount span, +.pc-order-detail-hero__amount small { + color: #b9cbc3; + font-size: 11px; +} + +.pc-order-detail-hero__amount strong { + color: #e8c9a6; + font-family: 'Inter', monospace; + font-size: 30px; +} + +.pc-order-detail-card { + margin-bottom: 16px; + border-color: var(--line); + background: var(--paper-warm); +} + +.pc-order-detail-side { + position: sticky; + top: 84px; +} + +.pc-order-action-card { + border-color: var(--line); + background: var(--paper-warm); +} + +.pc-order-action-card .ant-card-head-title { + color: var(--brand-ink); +} + +.pc-order-danger { + color: var(--brand-seal); + font-family: 'Inter', monospace; +} + +.pc-order-pre { + color: var(--ink-secondary); + font-size: 12px; + line-height: 1.75; + white-space: pre-wrap; + word-break: break-word; +} + +.pc-order-records { + display: flex; + flex-direction: column; +} + +.pc-order-record { + padding: 14px 0; + border-bottom: 1px dashed var(--line); +} + +.pc-order-record:last-child { + border-bottom: 0; +} + +.pc-order-record__head { + display: flex; + align-items: baseline; + justify-content: space-between; + gap: 12px; + margin-bottom: 6px; +} + +.pc-order-record__head strong { + color: var(--brand-ink); + font-size: 13px; +} + +.pc-order-record__head span { + color: var(--ink-muted); + font-size: 11px; +} + +.pc-order-dispute-tag { + margin: 16px 0 12px; +} + +@media (max-width: 767px) { + .pc-orders-page__head, + .pc-order-detail-hero { + flex-direction: column; + align-items: flex-start; + } + + .pc-order-detail-hero__amount { + align-items: flex-start; + } + + .pc-order-detail-side { + position: static; + } +} + +.empty-panel { + display: flex; + justify-content: center; + padding: 64px 24px; + border: 1px dashed var(--line); + border-radius: 8px; + background: var(--paper-warm); +} + +.section-pagination { + display: flex; + justify-content: center; + margin-top: 32px; +} + diff --git a/frontend/src/styles/storefront-sections.css b/frontend/src/styles/storefront-sections.css new file mode 100644 index 0000000..3e913b0 --- /dev/null +++ b/frontend/src/styles/storefront-sections.css @@ -0,0 +1,89 @@ +/* Trust strip */ +.trust-strip { + background: var(--paper-warm); + border-bottom: 1px solid var(--line); +} + +.trust-strip__inner { + display: grid; + grid-template-columns: repeat(4, minmax(0, 1fr)); + max-width: 1280px; + margin: 0 auto; + padding: 22px 24px; + gap: 20px; +} + +.trust-item { + display: flex; + align-items: flex-start; + gap: 10px; + color: var(--brand-ink); +} + +.trust-item > .anticon { + margin-top: 2px; + color: var(--brand-seal); + font-size: 18px; +} + +.trust-item strong, +.trust-item span { + display: block; +} + +.trust-item strong { + font-size: 14px; +} + +.trust-item span { + margin-top: 4px; + color: var(--ink-muted); + font-size: 12px; + line-height: 1.5; +} + +/* Sections */ +.section-block { + max-width: 1280px; + margin: 0 auto; + padding: 72px 24px; +} + +.section-block--paper { + max-width: none; + background: var(--paper-warm); + border-top: 1px solid var(--line); + border-bottom: 1px solid var(--line); +} + +.section-block--paper > .section-heading, +.section-block--paper > .process-grid { + max-width: 1280px; + margin-right: auto; + margin-left: auto; +} + +.section-heading { + display: flex; + align-items: flex-end; + justify-content: space-between; + margin-bottom: 28px; + gap: 24px; +} + +.section-heading .ant-typography { + margin-bottom: 6px; +} + +.section-eyebrow { + color: var(--brand-seal); + font-size: 11px !important; + letter-spacing: 0.18em; +} + +.section-heading h2 { + margin: 6px 0 8px !important; + color: var(--brand-ink) !important; + font-size: 32px !important; +} +