:root { --bg: #f3f4f6; --surface: #ffffff; --surface-muted: #f8fafc; --border: #e5e7eb; --text: #0f172a; --muted: #64748b; --primary: #111827; --accent: #0f766e; --warning: #b45309; --success: #166534; --shadow: 0 12px 32px rgba(15, 23, 42, 0.06); --radius-sm: 10px; --radius-md: 14px; --radius-lg: 18px; } html, body { background: var(--bg); color: var(--text); font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; min-height: 100%; } body { margin: 0; } a { text-decoration: none; } .app-shell { min-height: 100vh; } .topbar { background: rgba(255, 255, 255, 0.96); backdrop-filter: blur(10px); position: sticky; top: 0; z-index: 1040; } .brand-mark { width: 42px; height: 42px; border-radius: 12px; display: inline-flex; align-items: center; justify-content: center; background: var(--primary); color: #fff; font-weight: 700; letter-spacing: -0.02em; } .brand-title { font-size: 1.05rem; font-weight: 700; } .eyebrow, .section-kicker { font-size: 0.75rem; letter-spacing: 0.08em; color: var(--muted); font-weight: 700; } .app-nav { gap: 0.5rem; } .app-nav .nav-link { border-radius: 999px; color: var(--muted); font-weight: 600; padding: 0.6rem 0.95rem; } .app-nav .nav-link.active, .app-nav .nav-link:hover { background: var(--primary); color: #fff; } .app-nav .nav-link-muted { color: var(--muted); pointer-events: none; } .page-title { font-size: clamp(1.7rem, 3vw, 2.35rem); line-height: 1.15; font-weight: 700; letter-spacing: -0.03em; } .page-lead { color: var(--muted); max-width: 68ch; line-height: 1.8; } .panel-card { border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--shadow); background: var(--surface); } .hero-panel { background: linear-gradient(180deg, #ffffff 0%, #fbfbfc 100%); } .metric-card { border: 1px solid var(--border); background: var(--surface-muted); border-radius: var(--radius-md); padding: 1rem; height: 100%; } .metric-label, .mini-stat span, .summary-row span { color: var(--muted); font-size: 0.86rem; } .metric-value { font-size: 1.55rem; font-weight: 700; margin-top: 0.35rem; margin-bottom: 0.25rem; letter-spacing: -0.02em; } .metric-note { color: var(--muted); font-size: 0.84rem; } .section-title { font-size: 1.15rem; font-weight: 700; letter-spacing: -0.02em; } .small-title { font-size: 1rem; } .stack-list, .price-list, .summary-grid { display: grid; gap: 0.85rem; } .stack-item, .price-item, .summary-row, .mini-stat { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; padding: 0.8rem 0.9rem; background: var(--surface-muted); border: 1px solid var(--border); border-radius: var(--radius-sm); } .summary-row.total { background: #eef2f7; } .status-badge { display: inline-flex; align-items: center; justify-content: center; border-radius: 999px; padding: 0.32rem 0.65rem; font-size: 0.76rem; font-weight: 700; border: 1px solid transparent; white-space: nowrap; } .status-badge.success { background: #ecfdf3; color: var(--success); border-color: #bbf7d0; } .status-badge.pending { background: #fff7ed; color: var(--warning); border-color: #fed7aa; } .status-badge.neutral { background: #eff6ff; color: #1d4ed8; border-color: #bfdbfe; } .status-badge.warning { background: #fff7ed; color: var(--warning); border-color: #fdba74; } .chart-list { display: grid; gap: 1rem; } .chart-row { display: grid; grid-template-columns: 96px minmax(0, 1fr) 96px; gap: 0.85rem; align-items: center; } .chart-meta, .chart-value { font-size: 0.88rem; } .chart-track { height: 12px; background: #e2e8f0; border-radius: 999px; overflow: hidden; } .chart-bar { height: 100%; background: #111827; border-radius: 999px; } .app-table thead th { color: var(--muted); font-size: 0.78rem; font-weight: 700; border-bottom-color: var(--border); white-space: nowrap; } .app-table tbody td { border-bottom-color: var(--border); padding-top: 1rem; padding-bottom: 1rem; } .empty-state { padding: 2.5rem 1rem; text-align: center; } .empty-state.compact { padding: 1.25rem 0.5rem; } .empty-title { font-weight: 700; margin-bottom: 0.35rem; } .empty-copy { color: var(--muted); } .summary-card .alert { border-radius: var(--radius-sm); } .form-control, .form-select { min-height: 46px; border-radius: var(--radius-sm); border-color: #d1d5db; padding-inline: 0.9rem; } .form-control:focus, .form-select:focus, .btn:focus { box-shadow: 0 0 0 0.2rem rgba(17, 24, 39, 0.12); border-color: #9ca3af; } .btn { border-radius: 10px; padding: 0.68rem 1rem; font-weight: 600; } .btn-dark { background: var(--primary); border-color: var(--primary); } .btn-outline-secondary { border-color: #d1d5db; color: var(--text); } .footer-meta { background: rgba(255, 255, 255, 0.92); color: var(--muted); } .app-toast { border-radius: var(--radius-sm); box-shadow: var(--shadow); } @media print { .topbar, .footer-meta, .btn, .toast-container { display: none !important; } body { background: #fff; } .container-xxl { max-width: 100% !important; } .panel-card { box-shadow: none; border-color: #d1d5db; } } @media (max-width: 991.98px) { .chart-row { grid-template-columns: 1fr; } .app-nav .nav-link-muted { width: 100%; padding-inline: 0; } } .pricing-picker { display: grid; gap: 0.85rem; } .pricing-option, .customer-list-card { display: grid; grid-template-columns: auto minmax(0, 1fr) minmax(140px, 180px); gap: 0.85rem; align-items: start; padding: 0.9rem; border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface-muted); } .customer-list-card { grid-template-columns: 1fr; background: var(--surface); } .pricing-option .form-check-input { margin-top: 0.35rem; } .pricing-option-price .form-control { min-height: 42px; } .compact-list { gap: 0.6rem; } @media (max-width: 767.98px) { .pricing-option { grid-template-columns: auto 1fr; } .pricing-option-price { grid-column: 1 / -1; } } .product-inline-note { padding: 0.7rem 0.85rem; border: 1px dashed var(--border); border-radius: var(--radius-md); background: var(--surface-muted); color: var(--ink); }