:root { color: #18212f; background: #eef2f6; font-family: Inter, "PingFang SC", "Microsoft YaHei", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; } .login-shell { display: grid; grid-template-columns: minmax(360px, 1fr) minmax(420px, .85fr); min-height: 100vh; background: #f4f7fb; } .login-story { display: flex; flex-direction: column; justify-content: space-between; min-height: 100vh; padding: clamp(32px, 6vw, 84px); overflow: hidden; background: radial-gradient(circle at 82% 18%, rgba(73, 123, 180, .28), transparent 32%), linear-gradient(145deg, #101a2b, #173454 62%, #1e4a70); color: #f8fafc; } .login-brand { display: flex; align-items: center; gap: 12px; } .login-brand span { display: grid; width: 42px; height: 42px; place-items: center; border-radius: 11px; background: #e9f2ff; color: #152033; font-weight: 900; } .login-story h1 { max-width: 680px; margin: 14px 0 18px; font-size: clamp(36px, 5vw, 68px); line-height: 1.08; letter-spacing: -.04em; } .login-story > div > p:last-child { max-width: 620px; color: #c6d5e5; font-size: 17px; line-height: 1.8; } .login-story ul { display: grid; gap: 12px; margin: 0; padding: 0; list-style: none; } .login-story li { display: flex; align-items: center; gap: 10px; color: #dce8f4; } .login-form-wrap { display: grid; min-height: 100vh; padding: 32px; place-items: center; } .login-card { width: min(100%, 440px); padding: clamp(28px, 5vw, 48px); border: 1px solid #dce4ee; border-radius: 22px; background: #fff; box-shadow: 0 24px 70px rgba(30, 51, 78, .12); } .login-card header h2 { margin: 6px 0 8px; font-size: 30px; } .login-card header > p:last-child, .login-card footer { color: #6b788c; } .login-card .el-alert { margin: 20px 0 0; } .login-card .el-form { margin-top: 24px; } .login-card .el-button { width: 100%; } .login-card footer { display: flex; align-items: center; justify-content: center; gap: 7px; margin-top: 22px; font-size: 12px; } .content-page { display: grid; gap: 16px; } .content-metrics { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; } .content-metrics > span { display: grid; gap: 6px; padding: 16px 18px; border: 1px solid #dbe3ec; border-radius: 14px; background: #fff; box-shadow: 0 8px 24px rgba(31, 49, 72, .06); } .content-metrics small, .content-tab-actions p, .asset-card p { color: #66758a; } .content-metrics strong { font-size: 26px; } .content-toolbar .el-select { width: 220px; } .content-tabs { padding: 0 18px 18px; } .content-tab-actions { display: flex; align-items: center; justify-content: space-between; gap: 16px; margin-bottom: 14px; } .content-tab-actions p { margin: 0; font-size: 13px; } .compact-select { width: 120px; } .file-button { display: inline-flex; align-items: center; gap: 7px; min-height: 32px; padding: 0 14px; color: #fff; border-radius: 6px; background: #3370d4; cursor: pointer; font-size: 14px; } .file-button input { display: none; } .file-button.disabled { cursor: wait; opacity: .6; } .asset-gallery { display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); gap: 14px; min-height: 180px; } .asset-gallery > .el-empty { grid-column: 1 / -1; } .asset-card { overflow: hidden; border: 1px solid #dbe3ec; border-radius: 12px; background: #fff; } .asset-card > .el-image { width: 100%; height: 130px; background: #f5f7fa; } .asset-card > div, .asset-card > p { margin: 0; padding: 9px 11px 0; } .asset-card > div { display: flex; align-items: center; justify-content: space-between; gap: 8px; } .asset-card > p { padding-bottom: 11px; font-size: 12px; } .ad-title { display: flex; align-items: center; gap: 10px; } .ad-title > .el-image { flex: 0 0 76px; width: 76px; height: 48px; border-radius: 7px; background: #f5f7fa; } .decoration-form { display: grid; grid-template-columns: 2fr 1fr; gap: 14px; } .component-editor { display: grid; gap: 12px; } .component-editor > header { display: flex; align-items: center; justify-content: space-between; } .component-editor > article { display: grid; grid-template-columns: 150px minmax(0, 1fr) auto; align-items: start; gap: 10px; padding: 12px; border: 1px solid #dbe3ec; border-radius: 10px; background: #f5f7fa; } .json-preview { overflow: auto; margin-top: 16px; padding: 14px; border-radius: 10px; background: #14202b; color: #d9e7ef; font: 12px/1.6 ui-monospace, SFMono-Regular, Consolas, monospace; white-space: pre-wrap; } .asset-option { display: inline-flex; align-items: center; gap: 8px; } .asset-option img { width: 40px; height: 26px; border-radius: 4px; object-fit: cover; } @media (max-width: 980px) { .content-metrics { grid-template-columns: repeat(2, minmax(0, 1fr)); } .component-editor > article { grid-template-columns: 130px minmax(0, 1fr); } .component-editor > article > .el-button { grid-column: 2; justify-self: end; } } @media (max-width: 560px) { .content-metrics, .decoration-form { grid-template-columns: 1fr; } .content-tab-actions, .content-tab-actions .toolbar-actions { align-items: stretch; flex-direction: column; } .content-toolbar .el-select, .compact-select { width: 100%; } .component-editor > article { grid-template-columns: 1fr; } .component-editor > article > .el-button { grid-column: auto; } } .franchise-page, .franchise-detail { display: grid; gap: 16px; } .system-page, .system-workspace { display: grid; gap: 16px; } .system-tabs { padding: 0 18px 18px; } .audit-filters { display: grid; grid-template-columns: minmax(210px, 1fr) 210px 180px minmax(320px, 1.2fr) auto; gap: 10px; margin-bottom: 16px; } .system-metrics { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; } .system-metrics > span { display: grid; gap: 6px; padding: 16px 18px; border: 1px solid #dbe3ec; border-radius: 14px; background: #f8fafc; } .system-metrics small, .field-help { color: #66758a; } .system-metrics strong { font-size: 26px; } .system-config-grid { display: grid; grid-template-columns: minmax(0, 1.2fr) minmax(320px, .8fr); gap: 16px; } .config-card { padding: 18px; border: 1px solid #dbe3ec; border-radius: 14px; background: #fff; } .config-card > header, .status-control { display: flex; align-items: center; justify-content: space-between; gap: 12px; } .config-card h3 { margin-top: 4px; } .status-control { width: 100%; } .status-control .el-select { width: 150px; } .field-help { display: block; margin-top: 7px; font-size: 12px; } .migration-card .el-button { margin-top: 16px; } .audit-metadata { overflow: auto; min-height: 160px; padding: 14px; border-radius: 10px; background: #14202b; color: #d9e7ef; font: 12px/1.6 ui-monospace, SFMono-Regular, Consolas, monospace; white-space: pre-wrap; word-break: break-word; } .franchise-metrics { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; } .franchise-metrics > span { display: grid; gap: 6px; padding: 16px 18px; border: 1px solid #dbe3ec; border-radius: 14px; background: #fff; box-shadow: 0 8px 24px rgba(31, 49, 72, .06); } .franchise-metrics small { color: #66758a; } .franchise-metrics strong { font-size: 26px; } .franchise-filters { display: grid; grid-template-columns: minmax(220px, 1fr) 150px 180px auto; gap: 10px; padding: 0 18px 16px; } .franchise-assignment { display: grid; grid-template-columns: 90px minmax(0, 1fr); align-items: center; gap: 12px; padding: 14px; border: 1px solid #dbe3ec; border-radius: 10px; } .follow-up-form { padding: 16px; border-radius: 12px; background: #f5f7fa; } .follow-up-form h4, .franchise-detail h4, .follow-up-card p { margin-top: 0; } .follow-up-form .el-form { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; } .follow-up-form .el-form-item:last-child { grid-column: 1 / -1; } .follow-up-card { padding: 12px; border: 1px solid #dbe3ec; border-radius: 9px; background: #fff; } .follow-up-card p { margin: 8px 0; white-space: pre-wrap; } .follow-up-card small, .overdue { color: #c73535; } @media (max-width: 980px) { .franchise-metrics, .franchise-filters, .system-metrics, .audit-filters, .system-config-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } } @media (max-width: 560px) { .franchise-metrics, .franchise-filters, .system-metrics, .audit-filters, .system-config-grid, .follow-up-form .el-form { grid-template-columns: 1fr; } .follow-up-form .el-form-item:last-child { grid-column: auto; } } * { box-sizing: border-box; } body { margin: 0; min-width: 320px; min-height: 100vh; background: linear-gradient(180deg, rgba(245, 247, 250, 0.96), rgba(231, 237, 243, 0.96)), url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120' viewBox='0 0 120 120'%3E%3Cg fill='none' stroke='%23d5dde7' stroke-width='1'%3E%3Cpath d='M0 40h120M0 80h120M40 0v120M80 0v120'/%3E%3C/g%3E%3C/svg%3E"); } button, input, textarea { font: inherit; } .app-shell { display: grid; grid-template-columns: 240px minmax(0, 1fr); min-height: 100vh; } .sidebar { background: #152033; color: #f8fafc; padding: 24px 18px; } .brand { display: flex; align-items: center; gap: 12px; min-height: 56px; } .brand-mark { display: grid; width: 42px; height: 42px; place-items: center; border: 1px solid rgba(255, 255, 255, 0.24); border-radius: 8px; background: #e8f1ff; color: #152033; font-weight: 800; } .brand h1, .brand p, .workspace h2, .eyebrow { margin: 0; } .brand h1 { font-size: 17px; font-weight: 800; } .brand p { margin-top: 3px; color: #aab7c8; font-size: 12px; } .nav-list { display: grid; gap: 8px; margin-top: 30px; } .nav-item { display: flex; align-items: center; gap: 10px; width: 100%; min-height: 42px; padding: 0 12px; border: 0; border-radius: 8px; background: transparent; color: #cbd6e5; cursor: pointer; } .nav-item.active { background: #e8f1ff; color: #162033; font-weight: 700; } .nav-item:disabled { color: #6f7d90; cursor: not-allowed; } .workspace { min-width: 0; padding: 24px; } .topbar { display: flex; align-items: center; justify-content: space-between; gap: 16px; min-height: 58px; } .eyebrow { color: #4d6b92; font-size: 12px; font-weight: 800; letter-spacing: 0; } .workspace h2 { margin-top: 4px; font-size: 24px; } .session-box, .session-user { display: flex; align-items: center; gap: 10px; } .session-user > span { display: grid; width: 38px; height: 38px; place-items: center; border-radius: 50%; background: #e8f1ff; color: #1b416d; font-weight: 800; } .session-user > div { display: grid; gap: 2px; } .session-user small { max-width: 260px; overflow: hidden; color: #6b788c; font-size: 11px; text-overflow: ellipsis; white-space: nowrap; } .credential-form { margin-top: 18px; } .metric-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; margin: 20px 0 14px; } .metric-grid.compact { margin: 0; } .metric { min-height: 82px; padding: 14px 16px; border: 1px solid #d8e0ea; border-radius: 8px; background: #ffffff; } .metric span { display: block; color: #60708a; font-size: 13px; } .metric strong { display: block; margin-top: 8px; font-size: 26px; } .action-board { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; margin: 0 0 14px; } .action-tile { display: grid; grid-template-columns: 24px minmax(0, 1fr) auto; gap: 10px; align-items: center; min-height: 48px; padding: 10px 12px; color: #1f3656; text-align: left; border: 1px solid #d8e0ea; border-radius: 8px; background: #ffffff; cursor: pointer; } .action-tile:hover { border-color: #8cb5ec; background: #f6faff; } .action-tile span { overflow: hidden; color: #536781; font-size: 13px; text-overflow: ellipsis; white-space: nowrap; } .action-tile strong { color: #18212f; font-size: 18px; } .alert-line { margin-bottom: 10px; } .work-tabs { min-width: 0; } .overview-page { display: grid; gap: 14px; margin-top: 20px; } .overview-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 20px; padding: 18px; } .overview-toolbar h3, .section-heading h3 { margin: 2px 0 0; font-size: 18px; } .overview-toolbar p:not(.section-kicker) { margin: 6px 0 0; color: #687990; font-size: 13px; } .section-kicker { margin: 0; color: #4d6b92; font-size: 11px; font-weight: 800; } .overview-filters { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 10px; } .overview-filters > .el-select { width: 250px; } .overview-context { display: flex; align-items: center; gap: 12px; min-height: 42px; padding: 0 4px; color: #687990; font-size: 13px; } .overview-context > div { display: grid; gap: 2px; margin-right: auto; } .overview-context strong { color: #18212f; font-size: 16px; } .overview-metrics { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; } .overview-metric { min-height: 116px; padding: 18px; border: 1px solid #d8e0ea; border-radius: 10px; background: #fff; } .overview-metric.primary { border-color: #aac7ec; background: linear-gradient(135deg, #edf5ff, #fff); } .overview-metric span, .overview-metric small { color: #687990; font-size: 12px; } .overview-metric strong { display: block; margin: 12px 0 8px; font-size: 25px; } .overview-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; } .overview-card { padding: 18px; } .revenue-card { grid-column: 1 / -1; } .section-heading { display: flex; align-items: center; justify-content: space-between; gap: 12px; color: #365477; } .room-state-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin-top: 20px; } .room-state-grid > div { padding: 14px; border-radius: 8px; background: #f4f7fa; } .room-state-grid strong, .room-state-grid span { display: block; } .room-state-grid strong { font-size: 22px; } .room-state-grid span { margin-top: 5px; color: #687990; font-size: 12px; } .channel-list { display: grid; gap: 12px; margin-top: 18px; } .channel-list > div { display: flex; justify-content: space-between; gap: 12px; padding-bottom: 10px; border-bottom: 1px solid #edf0f4; color: #5c6f88; font-size: 13px; } .channel-list strong { color: #18212f; } .revenue-bars { display: grid; gap: 9px; margin-top: 18px; } .revenue-row { display: grid; grid-template-columns: 54px minmax(80px, 1fr) 100px; align-items: center; gap: 10px; font-size: 12px; } .revenue-row > div { height: 8px; overflow: hidden; border-radius: 999px; background: #edf1f6; } .revenue-row i { display: block; height: 100%; border-radius: inherit; background: #5d91d0; } .revenue-row strong { text-align: right; } .module-board { padding: 18px; } .module-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; margin-top: 16px; } .module-grid > button, .module-placeholder { display: grid; grid-template-columns: 24px minmax(0, 1fr) auto; align-items: center; gap: 10px; min-height: 72px; padding: 13px; border: 1px solid #d8e0ea; border-radius: 8px; background: #fff; color: #365477; text-align: left; } .module-grid > button { cursor: pointer; } .module-grid > button:hover { border-color: #8cb5ec; background: #f6faff; } .module-grid span { display: grid; gap: 4px; } .module-grid strong { color: #18212f; font-size: 14px; } .module-grid small { overflow: hidden; color: #687990; font-size: 11px; text-overflow: ellipsis; white-space: nowrap; } .module-placeholder { background: #f8fafc; } .panel { min-width: 0; border: 1px solid #d8e0ea; border-radius: 8px; background: #ffffff; overflow: hidden; } .panel-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 14px; border-bottom: 1px solid #e6ebf2; overflow-x: auto; } .toolbar-actions, .row-actions { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; } .search-input { width: min(240px, 100%); } .narrow-input { width: 120px; } .filter-select { width: 190px; } .profile-badges { display: flex; flex-wrap: wrap; gap: 6px; } .cleaner-select { width: 100%; } .option-row { display: inline-grid; gap: 2px; min-width: 0; margin-right: 8px; vertical-align: middle; } .option-row strong, .option-row span { max-width: 220px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .option-row span { color: #69788c; font-size: 12px; } .data-table { width: 100%; } .stack { display: grid; gap: 4px; } .stack strong { font-size: 13px; } .stack span { color: #69788c; font-size: 12px; } .pager { display: flex; justify-content: flex-end; padding: 12px 14px; border-top: 1px solid #e6ebf2; } .compact-form { display: grid; gap: 4px; } .preflight-summary { display: grid; gap: 14px; } .preflight-meta { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; } .preflight-meta span { min-width: 0; padding: 8px 10px; overflow: hidden; color: #334155; text-overflow: ellipsis; white-space: nowrap; background: #f5f8fb; border: 1px solid #e1e8f0; border-radius: 8px; } .preflight-table { width: 100%; } .transfer-preflight-alert { margin-bottom: 12px; } .dialog-stack { display: grid; gap: 14px; } .detail-header { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 10px 12px; border: 1px solid #e1e8f0; border-radius: 8px; background: #f5f8fb; } .detail-header span { color: #60708a; font-size: 13px; } .member-form { display: grid; grid-template-columns: minmax(0, 1fr) 140px minmax(0, 1fr) auto; gap: 10px; align-items: end; padding-top: 2px; } .member-form .el-form-item { margin-bottom: 0; } .detail-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; } .detail-grid span, .timeline-grid span { display: grid; gap: 4px; min-width: 0; padding: 9px 10px; color: #60708a; font-size: 12px; border: 1px solid #e1e8f0; border-radius: 8px; background: #f5f8fb; } .timeline-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; } .photo-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; } .photo-grid .el-image { width: 100%; aspect-ratio: 1; overflow: hidden; border: 1px solid #e1e8f0; border-radius: 8px; background: #f5f8fb; } .trend-list { display: grid; gap: 10px; } .trend-row { display: grid; grid-template-columns: 92px minmax(80px, 1fr) minmax(360px, 2.4fr); gap: 12px; align-items: center; min-height: 38px; } .trend-date { color: #334155; font-size: 13px; font-weight: 700; } .trend-track { height: 8px; overflow: hidden; background: #e9eff5; border-radius: 999px; } .trend-bar { display: block; height: 100%; background: #2563eb; border-radius: inherit; } .trend-meta { display: flex; gap: 10px; align-items: center; min-width: 0; color: #60708a; font-size: 12px; white-space: nowrap; } .trend-meta strong { color: #101828; font-size: 14px; } .detail-grid strong, .timeline-grid strong { overflow: hidden; color: #18212f; font-size: 14px; text-overflow: ellipsis; white-space: nowrap; } .stats-filter { display: grid; grid-template-columns: minmax(160px, 210px) repeat(3, minmax(130px, 180px)) auto; gap: 10px; align-items: end; } .stats-filter .el-form-item { margin-bottom: 0; } .stats-body { display: grid; gap: 14px; padding: 14px; } .handoff-summary { display: flex; flex-wrap: wrap; gap: 8px; } .handoff-summary span { display: inline-flex; align-items: center; gap: 6px; min-height: 32px; padding: 0 10px; color: #52657f; font-size: 13px; border: 1px solid #e1e8f0; border-radius: 8px; background: #f5f8fb; } .handoff-summary strong { color: #18212f; } .handoff-body { display: grid; gap: 14px; padding: 14px; } .handoff-session { padding: 12px; border: 1px solid #e1e8f0; border-radius: 8px; background: #f8fafc; } .handoff-session .el-form { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; } .handoff-session .el-form-item { margin-bottom: 0; } .handoff-category-progress { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; } .handoff-category-row { display: grid; gap: 8px; min-width: 0; padding: 12px; border: 1px solid #e1e8f0; border-radius: 8px; background: #ffffff; } .handoff-category-title, .handoff-category-meta { display: flex; align-items: center; justify-content: space-between; gap: 8px; } .handoff-category-title span, .handoff-category-meta { color: #60708a; font-size: 12px; } .handoff-stage-board { display: grid; gap: 10px; padding: 12px; border: 1px solid #d6e4dc; border-radius: 8px; background: #f8fcfa; } .handoff-stage-board header { display: flex; align-items: center; justify-content: space-between; gap: 12px; } .handoff-stage-board h3 { margin: 0; font-size: 14px; } .handoff-stage-board header span { color: #60708a; font-size: 12px; } .handoff-stage-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; } .handoff-stage-card { display: grid; gap: 5px; min-width: 0; padding: 10px; border: 1px solid #d6e4dc; border-radius: 8px; background: #ffffff; color: #172033; text-align: left; cursor: pointer; } .handoff-stage-card.blocked { border-color: #f0c7c7; background: #fff7f7; } .handoff-stage-card.ready { border-color: #b8dec4; background: #f3fbf5; } .handoff-stage-card span, .handoff-stage-card em, .handoff-stage-card small { color: #60708a; font-size: 12px; font-style: normal; } .handoff-stage-card strong { font-size: 15px; } .handoff-owner-board { display: grid; gap: 10px; padding: 12px; border: 1px solid #d8e2ef; border-radius: 8px; background: #f8fbff; } .handoff-owner-board header { display: flex; align-items: center; justify-content: space-between; gap: 12px; } .handoff-owner-board h3 { margin: 0; font-size: 14px; } .handoff-owner-board header span { color: #60708a; font-size: 12px; } .handoff-owner-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; } .handoff-owner-card { display: grid; gap: 5px; min-width: 0; padding: 10px; border: 1px solid #d8e2ef; border-radius: 8px; background: #ffffff; color: #172033; text-align: left; cursor: pointer; } .handoff-owner-card.active { border-color: #2f6fed; background: #f2f6ff; } .handoff-owner-card span { color: #60708a; font-size: 12px; } .handoff-verdict { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 12px; border: 1px solid #f0c7c7; border-radius: 8px; background: #fff7f7; } .handoff-verdict.ready { border-color: #b8dec4; background: #f3fbf5; } .handoff-verdict h3, .handoff-verdict p { margin: 0; } .handoff-verdict h3 { font-size: 14px; } .handoff-verdict p { margin-top: 4px; color: #60708a; font-size: 13px; } .handoff-status-select { width: 130px; } .handoff-search { width: 260px; } .handoff-bulk-form { display: grid; gap: 10px; } .handoff-bulk-form .el-form-item { margin-bottom: 0; } .handoff-blockers { border: 1px solid #f0c7c7; border-radius: 8px; overflow: hidden; background: #fff7f7; } .handoff-blockers header { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 10px 12px; border-bottom: 1px solid #f0c7c7; } .handoff-blockers h3 { margin: 0; font-size: 14px; } .handoff-blockers header span, .handoff-blockers li span { color: #7f4b4b; font-size: 12px; } .handoff-blockers ul { display: grid; gap: 8px; margin: 0; padding: 10px 12px; list-style: none; } .handoff-blockers li { display: grid; gap: 3px; } .handoff-execution-list { display: grid; gap: 10px; margin: 16px 0; max-height: 300px; overflow-y: auto; } .handoff-execution-list article { background: var(--el-fill-color-light); border: 1px solid var(--el-border-color-lighter); border-radius: 10px; display: grid; gap: 8px; padding: 12px; } .handoff-execution-list header { align-items: center; display: flex; flex-wrap: wrap; gap: 8px; } .handoff-execution-list header span:last-child, .handoff-execution-list small { color: var(--el-text-color-secondary); } .handoff-execution-list p { margin: 0; white-space: pre-wrap; } .handoff-execution-form { border-top: 1px solid var(--el-border-color-lighter); display: grid; gap: 0 12px; grid-template-columns: repeat(3, minmax(0, 1fr)); margin-top: 16px; padding-top: 16px; } .handoff-execution-result { grid-column: 1 / -1; } .stats-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; } .stat-block { min-width: 0; border: 1px solid #e1e8f0; border-radius: 8px; overflow: hidden; } .stat-block header { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 10px 12px; border-bottom: 1px solid #e1e8f0; background: #f5f8fb; } .stat-block h3 { margin: 0; font-size: 14px; } .stat-block header span { color: #60708a; font-size: 12px; } .cleaner-performance-board { background: #fbfcfe; } .cleaner-performance-board header > div { display: grid; gap: 3px; } .cleaner-performance-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; padding: 12px; } .cleaner-performance-card { display: grid; gap: 5px; min-width: 0; padding: 10px; border: 1px solid #d8e2ef; border-radius: 8px; background: #ffffff; color: #172033; text-align: left; cursor: pointer; } .cleaner-performance-card span, .cleaner-performance-card em, .cleaner-performance-card small { color: #60708a; font-size: 12px; font-style: normal; } .cleaner-performance-card strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .stores-page { display: grid; gap: 14px; } .store-toolbar h3, .store-detail-header h3, .rooms-toolbar h3 { margin: 0; } .store-layout { display: grid; grid-template-columns: minmax(230px, 300px) minmax(0, 1fr); min-height: 640px; } .store-list { display: flex; flex-direction: column; gap: 8px; padding: 12px; border-right: 1px solid #e6ebf2; background: #f8fafc; } .store-card { display: grid; gap: 5px; width: 100%; padding: 12px; color: #526177; text-align: left; background: #fff; border: 1px solid #dfe6ee; border-radius: 9px; cursor: pointer; } .store-card:hover, .store-card.active { border-color: #2878ff; box-shadow: 0 4px 16px rgba(40, 120, 255, 0.1); } .store-card.active { background: #f1f6ff; } .store-card-title { display: flex; align-items: center; justify-content: space-between; gap: 8px; color: #18212f; } .store-card small { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .store-detail { min-width: 0; padding: 18px; } .store-detail-empty { min-height: 420px; } .store-detail-header, .rooms-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 14px; } .store-detail-header p:not(.section-kicker) { margin: 5px 0 0; color: #69788c; } .store-summary-grid { margin-top: 16px; } .store-summary-grid strong { overflow: hidden; font-size: 13px; text-overflow: ellipsis; white-space: nowrap; } .business-hours-board { display: grid; gap: 9px; margin: 14px 0 22px; padding: 12px; border: 1px solid #e1e8f0; border-radius: 8px; background: #f8fafc; } .hours-chip-list { display: grid; grid-template-columns: repeat(7, minmax(76px, 1fr)); gap: 6px; } .hours-chip-list span { display: grid; gap: 3px; padding: 7px; color: #60708a; font-size: 11px; text-align: center; background: #fff; border: 1px solid #e1e8f0; border-radius: 6px; } .hours-chip-list b { color: #243247; font-size: 11px; } .rooms-toolbar { margin-bottom: 12px; padding-top: 16px; border-top: 1px solid #e6ebf2; } .asset-form { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 14px; } .asset-form .el-form-item { min-width: 0; } .asset-form .el-input-number, .asset-form .el-select { width: 100%; } .form-span-2 { grid-column: span 2; } .hours-editor { display: grid; gap: 8px; padding-top: 12px; border-top: 1px solid #e6ebf2; } .hours-editor-row { display: grid; grid-template-columns: 44px 126px minmax(120px, 1fr) minmax(120px, 1fr); gap: 8px; align-items: center; } .orders-page, .order-detail-stack { display: grid; gap: 14px; } .order-toolbar h3, .drawer-section-title h3 { margin: 0; } .order-page-summary { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; padding: 12px 14px; border-bottom: 1px solid #e6ebf2; background: #f8fafc; } .order-page-summary span { display: grid; gap: 4px; padding: 10px 12px; background: #fff; border: 1px solid #e1e8f0; border-radius: 8px; } .order-page-summary small { color: #69788c; } .order-page-summary strong { color: #172033; font-size: 18px; } .drawer-section-title { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-top: 8px; padding-top: 16px; border-top: 1px solid #e6ebf2; } .history-card { display: grid; gap: 4px; padding: 10px 12px; border: 1px solid #e1e8f0; border-radius: 8px; background: #f8fafc; } .history-card span, .history-card small { color: #69788c; font-size: 12px; } .history-card code { overflow: hidden; color: #526177; font-size: 11px; text-overflow: ellipsis; white-space: nowrap; } .payments-page { display: grid; gap: 14px; } .payment-metrics { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; } .payment-metrics span { display: grid; gap: 6px; padding: 14px; background: #fff; border: 1px solid #d8e0ea; border-radius: 8px; } .payment-metrics small { color: #69788c; } .payment-metrics strong { color: #172033; font-size: 22px; } .payment-toolbar h3 { margin: 0; } .payment-tabs { padding: 0 14px 14px; } .tab-action-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; min-height: 54px; color: #69788c; font-size: 13px; } .policy-table { margin-top: 16px; border-top: 1px solid #e6ebf2; } .payment-tools-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; padding: 8px 0; } .payment-tools-grid article { display: grid; gap: 18px; align-content: space-between; min-height: 180px; padding: 16px; border: 1px solid #dfe6ee; border-radius: 9px; background: #f8fafc; } .payment-tools-grid header { display: flex; gap: 10px; color: #2878ff; } .payment-tools-grid header div { display: grid; gap: 6px; } .payment-tools-grid header strong { color: #172033; } .payment-tools-grid header span { color: #69788c; font-size: 12px; line-height: 1.6; } .third-party-page { display: grid; gap: 14px; } .third-party-metrics { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; } .third-party-metrics span { display: grid; gap: 6px; padding: 14px; background: #fff; border: 1px solid #d8e0ea; border-radius: 8px; } .third-party-metrics small { color: #69788c; } .third-party-metrics strong { color: #172033; font-size: 22px; } .third-party-toolbar h3 { margin: 0; } .third-party-tabs { padding: 0 14px 14px; } .settings-preview { display: block; max-width: 320px; overflow: hidden; color: #526177; font-size: 11px; text-overflow: ellipsis; white-space: nowrap; } .people-page { display: grid; gap: 14px; } .people-metrics, .member-detail-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; } .people-metrics span, .member-detail-grid span { display: grid; gap: 6px; padding: 14px; background: #fff; border: 1px solid #d8e0ea; border-radius: 8px; } .people-metrics small, .member-detail-grid small { color: #69788c; } .people-metrics strong, .member-detail-grid strong { color: #172033; font-size: 22px; } .people-toolbar h3 { margin: 0; } .people-tabs { padding: 0 14px 14px; } .people-filter-row { display: flex; flex-wrap: wrap; gap: 10px; padding: 8px 0 14px; } .tag-list { display: flex; flex-wrap: wrap; gap: 4px; } .member-detail { display: grid; gap: 18px; } .member-detail h4 { margin: 0; } .devices-page { display: grid; gap: 14px; } .device-metrics { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; } .device-metrics span { display: grid; gap: 6px; padding: 14px; background: #fff; border: 1px solid #d8e0ea; border-radius: 8px; } .device-metrics small { color: #69788c; } .device-metrics strong { color: #172033; font-size: 22px; } .device-toolbar h3 { margin: 0; } .device-tabs { padding: 0 14px 14px; } .device-topology-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; } .device-topology-grid article { min-width: 0; padding: 12px; border: 1px solid #e1e7ef; border-radius: 8px; } .device-topology-grid h4 { margin: 0 0 12px; } .device-control-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; margin-top: 18px; } .platform-apps-page { display: grid; gap: 14px; } .platform-app-metrics { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; } .platform-app-metrics span { display: grid; gap: 6px; padding: 14px; background: #fff; border: 1px solid #d8e0ea; border-radius: 8px; } .platform-app-metrics small { color: #69788c; } .platform-app-metrics strong { color: #172033; font-size: 22px; } .platform-app-toolbar h3 { margin: 0; } .theme-dot { display: inline-block; width: 9px; height: 9px; margin-right: 5px; border-radius: 50%; } .color-input { width: 120px; margin-left: 8px; } .el-button { border-radius: 8px; } .el-tabs__nav-wrap::after { height: 1px; background: #d8e0ea; } .hidden-file-input { display: none; } @media (max-width: 980px) { .login-shell { grid-template-columns: 1fr 1fr; } .login-story { padding: 36px; } .app-shell { grid-template-columns: 1fr; } .sidebar { position: sticky; top: 0; z-index: 10; display: grid; grid-template-columns: auto 1fr; gap: 14px; padding: 12px; } .nav-list { grid-auto-flow: column; grid-auto-columns: max-content; align-content: center; margin-top: 0; overflow-x: auto; } .workspace { padding: 16px; } .topbar { align-items: stretch; flex-direction: column; } .token-box { grid-template-columns: minmax(0, 1fr) 40px; width: 100%; } .metric-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } .action-board { grid-template-columns: repeat(2, minmax(0, 1fr)); } .overview-toolbar { align-items: stretch; flex-direction: column; } .overview-filters { justify-content: flex-start; } .overview-metrics, .module-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } .handoff-owner-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } .handoff-stage-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } .cleaner-performance-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } .store-layout { grid-template-columns: 1fr; } .store-list { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); border-right: 0; border-bottom: 1px solid #e6ebf2; } .hours-chip-list { grid-template-columns: repeat(4, minmax(76px, 1fr)); } .order-page-summary { grid-template-columns: repeat(2, minmax(0, 1fr)); } .payment-metrics, .third-party-metrics, .people-metrics, .member-detail-grid, .device-metrics, .platform-app-metrics, .device-topology-grid, .payment-tools-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } .trend-row { grid-template-columns: 92px minmax(80px, 1fr); } .trend-meta { grid-column: 1 / -1; flex-wrap: wrap; } } @media (max-width: 560px) { .login-shell { grid-template-columns: 1fr; } .login-story { display: none; } .login-form-wrap { min-height: 100vh; padding: 18px; } .login-card { padding: 26px 22px; border-radius: 16px; } .session-user > div { display: none; } .sidebar { grid-template-columns: 1fr; } .metric-grid { grid-template-columns: 1fr; } .handoff-owner-grid { grid-template-columns: 1fr; } .handoff-stage-grid { grid-template-columns: 1fr; } .cleaner-performance-grid { grid-template-columns: 1fr; } .action-board { grid-template-columns: 1fr; } .overview-filters, .overview-context { align-items: stretch; flex-direction: column; } .overview-filters > .el-select { width: 100%; } .overview-metrics, .overview-grid, .module-grid, .room-state-grid { grid-template-columns: 1fr; } .revenue-card { grid-column: auto; } .revenue-row { grid-template-columns: 48px minmax(60px, 1fr) 82px; } .panel-toolbar { align-items: stretch; flex-direction: column; } .store-list { grid-template-columns: 1fr; } .store-detail { padding: 12px; } .store-detail-header, .rooms-toolbar { align-items: stretch; flex-direction: column; } .store-summary-grid, .asset-form { grid-template-columns: 1fr; } .form-span-2 { grid-column: span 1; } .hours-chip-list { grid-template-columns: repeat(2, minmax(76px, 1fr)); } .hours-editor-row { grid-template-columns: 40px 1fr; } .hours-editor-row .el-select { grid-column: span 2; } .order-page-summary { grid-template-columns: 1fr; } .payment-metrics, .third-party-metrics, .people-metrics, .member-detail-grid, .device-metrics, .platform-app-metrics, .device-topology-grid, .device-control-grid, .payment-tools-grid { grid-template-columns: 1fr; } .tab-action-row { align-items: stretch; flex-direction: column; } .people-filter-row > .el-input, .people-filter-row > .el-select, .people-filter-row > .el-button { width: 100%; } .toolbar-actions { justify-content: flex-end; } .handoff-search { width: 100%; } .preflight-meta { grid-template-columns: 1fr; } .member-form, .detail-grid, .timeline-grid, .photo-grid, .trend-row, .handoff-session .el-form, .handoff-execution-form, .handoff-category-progress, .stats-filter, .stats-grid { grid-template-columns: 1fr; } .trend-meta { grid-column: auto; } }