@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap'); /* ══════════════════════════════════════════════════════════════ MITRA ERP Portal — Professional Light Theme Clean white/light-gray surfaces, blue accent, soft shadows — same palette family as work-order.html's --wo-* tokens, applied portal-wide via the shared class vocabulary below. Include via in each page OR loaded dynamically by sidebar.js ══════════════════════════════════════════════════════════════ */ :root { /* ── Core palette ── */ --primary-bg: #f4f6f9; --secondary-bg: #ffffff; --accent-color: #2563eb; --accent-color2: #1d4ed8; --accent-glow: rgba(37, 99, 235, 0.16); --text-main: #0f172a; --text-dim: #64748b; --text-faint: #94a3b8; --glass: #ffffff; --glass-solid: #ffffff; --glass-border: #e2e8f0; --glass-border-strong: #cbd5e1; --error: #dc2626; --success: #16a34a; --warning: #d97706; --font-main: 'Inter', system-ui, -apple-system, sans-serif; --transition: 0.3s cubic-bezier(0.4, 0, 0.2, 1); /* ── Legacy / per-page token names ── */ --bg: #f4f6f9; --dark: #f4f6f9; /* Several older pages (admin.html, production.html) use --ink/--ink2/--ink3 as BACKGROUND surfaces (page bg / card+modal bg / a third tier), not as text-ink colors — keep these as light surfaces so those pages' own .modal/.comp-card/readonly-input rules (which reference var(--ink2) directly, not through a class this file already overrides) render correctly instead of picking up a stray dark/black value. */ --ink: #f4f6f9; --ink2: #ffffff; --ink3: #f8fafc; --blue: #2563eb; --blue2: #1d4ed8; --blue-light: #eff6ff; --blue-glow: rgba(37, 99, 235, 0.12); --accent: #2563eb; --accent2: #1d4ed8; --accent3: #3b82f6; --text4: #94a3b8; --text-muted: #64748b; --text-label: #64748b; --danger: #dc2626; --amber: #d97706; --amber2: #b45309; --green: #16a34a; --green2: #15803d; --teal2: #0d9488; --teal3: #14b8a6; --red: #dc2626; --purple: #7c3aed; --teal: #0d9488; --gold: #d97706; --orange: #ea580c; --border: #e2e8f0; --border2: #cbd5e1; --text: #0f172a; --text2: #334155; --text3: #64748b; --surface: #ffffff; --surface2: #f8fafc; --surface3: #eef1f5; --radius: 10px; --radius-lg: 14px; --shadow: 0 1px 3px rgba(15, 23, 42, 0.08), 0 1px 2px rgba(15, 23, 42, 0.04); } /* ── Global sizing ── Pages hardcode pixel font-sizes, so a body zoom is the most reliable way to scale all text/UI uniformly. Reset to 100% (normal, un-zoomed) — was 1.18 (18% larger). */ body { zoom: 1; } body { background-color: var(--primary-bg) !important; background-image: none !important; color: var(--text-main) !important; font-family: var(--font-main) !important; } body::before { display: none !important; } .bg-glow { display: none !important; } /* ── Glass utilities from source (kept as solid light surfaces now) ── */ .glass-card { background: var(--glass) !important; backdrop-filter: none !important; border: 1px solid var(--glass-border) !important; border-radius: 12px !important; box-shadow: var(--shadow) !important; } .accent-glow { box-shadow: 0 0 0 3px var(--accent-glow) !important; } .gradient-text { background: linear-gradient(135deg, var(--accent-color) 0%, var(--accent-color2) 100%) !important; -webkit-background-clip: text !important; background-clip: text !important; -webkit-text-fill-color: transparent !important; } /* ── SIDEBAR — clean light ───────────── */ .sb { background: #ffffff !important; border-right: 1px solid var(--glass-border) !important; box-shadow: 1px 0 0 rgba(15, 23, 42, 0.03) !important; } .sb-logo { padding: 18px 16px 16px !important; border-bottom: 1px solid var(--glass-border) !important; } .sb-logo-mark { background: linear-gradient(135deg, #2563eb 0%, #4f46e5 100%) !important; box-shadow: 0 4px 14px rgba(37, 99, 235, 0.3) !important; border-radius: 9px !important; letter-spacing: .3px !important; } .sb-logo-text { color: #0f172a !important; letter-spacing: .3px !important; } .sb-logo-text small { color: #94a3b8 !important; } .sb-links { padding: 10px 10px !important; } .sb-link { color: #64748b !important; border-radius: 9px !important; font-weight: 500 !important; position: relative !important; margin: 2px 0 !important; } .sb-link:hover { color: #0f172a !important; background: #f1f5f9 !important; } .sb-link.active { color: #1d4ed8 !important; background: #eff6ff !important; font-weight: 600 !important; box-shadow: none !important; } /* Active left indicator bar */ .sb-link.active::before { display: block !important; content: '' !important; position: absolute !important; left: 0; top: 50%; transform: translateY(-50%); width: 3px; height: 58%; border-radius: 0 4px 4px 0; background: linear-gradient(180deg, #60a5fa, #2563eb) !important; box-shadow: none !important; } .sb-link svg { color: #94a3b8 !important; } .sb-link:hover svg { color: #334155 !important; } .sb-link.active svg { color: #2563eb !important; } .sb-divider { background: var(--glass-border) !important; } .sb-group { color: #94a3b8 !important; font-size: 10px !important; letter-spacing: 1px !important; font-weight: 700 !important; margin-top: 12px !important; } .sb-group:hover { color: #334155 !important; background: #f8fafc !important; } .sb-group.open { color: #1e293b !important; } .sb-group svg { color: #94a3b8 !important; opacity: 1 !important; } .sb-chev { color: #cbd5e1 !important; } .sb-group.open .sb-chev { color: #2563eb !important; } .sb-sub svg { color: #cbd5e1 !important; } .sb-sub.active svg { color: #2563eb !important; } .sb-bottom { border-top: 1px solid var(--glass-border) !important; } .sb-user { background: #f8fafc !important; border: 1px solid var(--glass-border) !important; border-radius: 12px !important; } .sb-user:hover { background: #eff6ff !important; border-color: rgba(37, 99, 235, 0.3) !important; } .sb-avatar { background: linear-gradient(135deg, #2563eb 0%, #4f46e5 100%) !important; box-shadow: 0 2px 8px rgba(37, 99, 235, 0.25) !important; border-radius: 9px !important; } .sb-role { color: #94a3b8 !important; } .sb-name { color: #1e293b !important; } .sb-logout { color: #dc2626 !important; border: none !important; background: transparent !important; border-radius: 9px !important; } .sb-logout:hover { color: #b91c1c !important; background: rgba(220, 38, 38, 0.08) !important; border-color: transparent !important; } .sb-toggle-btn { color: #94a3b8 !important; } .sb-toggle-btn:hover { color: #1e293b !important; background: #f1f5f9 !important; } /* ── MOBILE BOTTOM BAR ─────────────────────── */ .mob-bar { background: rgba(255, 255, 255, 0.96) !important; backdrop-filter: blur(8px) !important; border-top: 1px solid var(--glass-border) !important; box-shadow: 0 -2px 12px rgba(15, 23, 42, 0.06) !important; } .mob-bar a { color: var(--text-dim) !important; } .mob-bar a.active { color: var(--accent-color) !important; background: var(--blue-light) !important; } .mob-bar .mb-more { color: var(--text-dim) !important; } /* ── CARDS ──────────────────────────────────── */ .card, .win { background: var(--glass) !important; backdrop-filter: none !important; border-color: var(--glass-border) !important; box-shadow: var(--shadow) !important; } .card:hover, .win:hover { box-shadow: 0 6px 20px rgba(15, 23, 42, 0.10) !important; } .card-hd, .win-bar { background: var(--surface2) !important; border-bottom-color: var(--glass-border) !important; color: var(--text-main) !important; } /* ── FORM FIELDS ───────────────────────────── */ .fi, .f-inp, .form-input, .t-inp, .comp-inp, .line-inp, .batch-inp { background: #ffffff !important; border-color: var(--glass-border) !important; color: var(--text-main) !important; } .fi:focus, .f-inp:focus, .form-input:focus, .comp-inp:focus, .line-inp:focus { border-color: var(--accent-color) !important; box-shadow: 0 0 0 3px var(--accent-glow) !important; } .fi::placeholder, .f-inp::placeholder, .form-input::placeholder { color: var(--text-faint) !important; } select.fi, .f-sel, .form-select, .t-sel { background-color: #ffffff !important; border-color: var(--glass-border) !important; color: var(--text-main) !important; } select.fi option, .f-sel option, .form-select option, .t-sel option { background: #ffffff !important; color: var(--text-main) !important; } /* ── LABELS ────────────────────────────────── */ .fl, .f-lbl, .form-label, .comp-fl, .line-fl { color: var(--text-dim) !important; } /* ── BUTTONS ───────────────────────────────── */ .b-primary, .b-planned, .b-save { background: var(--accent-color) !important; color: #fff !important; box-shadow: var(--shadow) !important; } .b-primary:hover:not(:disabled), .b-planned:hover:not(:disabled), .b-save:hover:not(:disabled) { background: var(--accent-color2) !important; } .b-cancel { background: #ffffff !important; border-color: var(--glass-border) !important; color: var(--text2) !important; } .b-cancel:hover { background: var(--surface2) !important; color: var(--text-main) !important; } .b-add, .b-new { background: var(--blue-light) !important; color: var(--accent-color2) !important; border-color: #bfdbfe !important; } .b-add:hover, .b-new:hover { background: #dbeafe !important; } .b-del { background: rgba(220, 38, 38, 0.06) !important; color: var(--error) !important; border-color: rgba(220, 38, 38, 0.25) !important; } .b-issue, .b-release { background: var(--accent-color) !important; box-shadow: var(--shadow) !important; } .b-issue:hover:not(:disabled), .b-release:hover:not(:disabled) { background: var(--accent-color2) !important; } .b-close { background: var(--warning) !important; } /* ── TABS ──────────────────────────────────── */ .tabs, .module-tabs { background: var(--surface3) !important; } .tab, .module-tab { color: var(--text-dim) !important; } .tab.on, .module-tab.on { background: #ffffff !important; color: var(--accent-color) !important; border-color: var(--glass-border) !important; box-shadow: var(--shadow) !important; } .tab-btn.on { color: var(--accent-color) !important; border-bottom-color: var(--accent-color) !important; } /* ── COMPONENT CARDS ───────────────────────── */ .comp-card, .line-card, .po-card, .blist-card, .req-card { background: #ffffff !important; border-color: var(--glass-border) !important; } .comp-card:hover, .po-card:hover, .blist-card:hover, .req-card:hover { border-color: var(--accent-color) !important; box-shadow: 0 4px 14px var(--accent-glow) !important; } .comp-item, .po-code, .blist-id { color: var(--accent-color2) !important; } .comp-fv { color: var(--text2) !important; } /* ── ALERTS ────────────────────────────────── */ .alert, .al-info, .al-teal, .al-purple { background: var(--blue-light) !important; border-color: #bfdbfe !important; color: var(--accent-color2) !important; } .al-green { background: #f0fdf4 !important; border-color: #bbf7d0 !important; color: #15803d !important; } .al-amber, .al-gold { background: #fffbeb !important; border-color: #fde68a !important; color: #b45309 !important; } .al-red { background: #fef2f2 !important; border-color: #fecaca !important; color: #b91c1c !important; } /* ── BADGES / PILLS ────────────────────────── */ .status-badge, .po-badge, .comp-type, .rc-type-badge { font-weight: 700 !important; } .po-badge.released { background: var(--blue-light) !important; color: var(--accent-color2) !important; border-color: #bfdbfe !important; } .po-badge.planned { background: #fffbeb !important; color: #b45309 !important; border-color: #fde68a !important; } .po-badge.closed { background: #f0fdf4 !important; color: #15803d !important; border-color: #bbf7d0 !important; } /* ── STATS / PILLS ─────────────────────────── */ .stat-pill { background: var(--surface2) !important; border-color: var(--glass-border) !important; color: var(--text-main) !important; } /* ── TABLE ──────────────────────────────────── */ .bom-tbl th, .p-tbl th, .sr-tbl th, .comp-table th { background: var(--surface3) !important; color: var(--text-dim) !important; border-color: var(--glass-border) !important; } .bom-tbl td, .p-tbl td { background: transparent !important; color: var(--text2) !important; border-color: var(--glass-border) !important; } .bom-tbl tbody tr:nth-child(even) td, .p-tbl tbody tr:nth-child(even) td { background: var(--surface2) !important; } .bom-tbl tbody tr:hover td, .p-tbl tbody tr:hover td { background: var(--blue-light) !important; } /* ── SEARCH DROPDOWN ───────────────────────── */ .search-dd, .item-dd { background: var(--glass-solid) !important; border-color: var(--accent-color) !important; box-shadow: 0 8px 28px rgba(15, 23, 42, 0.16) !important; z-index: 500 !important; } .card, .card-bd, .win { overflow: visible !important; } .sd-row, .dd-row { border-bottom-color: var(--glass-border) !important; color: var(--text2) !important; } .sd-row:hover, .dd-row:hover { background: var(--blue-light) !important; } .sd-code, .dd-code { color: var(--accent-color2) !important; } /* ── TOAST ──────────────────────────────────── */ .t-ok { background: var(--success) !important; } .t-err { background: var(--error) !important; } /* ── MODAL ─────────────────────────────────── */ .modal, .modal-overlay .modal { background: var(--glass-solid) !important; border-color: var(--glass-border) !important; box-shadow: 0 24px 60px rgba(15, 23, 42, 0.25) !important; } .modal-hd, .modal-header { background: var(--surface2) !important; border-bottom-color: var(--glass-border) !important; color: var(--text-main) !important; } .modal-bd, .modal-body { background: transparent !important; } .modal-footer { background: var(--surface2) !important; border-top-color: var(--glass-border) !important; } /* ── TOTALS ────────────────────────────────── */ .total-row, .tot-strip { background: var(--surface3) !important; } .total-row .tv { color: var(--teal) !important; } /* ── PIPELINE ──────────────────────────────── */ .pipeline-header { background: var(--surface2) !important; border-color: var(--glass-border) !important; } /* ── BATCH SECTION ─────────────────────────── */ .batch-sec { background: var(--surface2) !important; border-color: var(--glass-border) !important; } /* ── ORDER INFO ────────────────────────────── */ .order-info, .oi-item { color: var(--text2) !important; } .oi-l { color: var(--text-dim) !important; } /* ── SUCCESS BOX ───────────────────────────── */ .suc-box, .success-page { background: var(--glass) !important; } .suc-title { color: #15803d !important; } .suc-pill { background: var(--blue-light) !important; color: var(--accent-color2) !important; border-color: #bfdbfe !important; } /* ── SKELETON ──────────────────────────────── */ .skeleton { background: linear-gradient(90deg, #eef1f5 25%, #f8fafc 50%, #eef1f5 75%) !important; } /* ── EMPTY MESSAGE ─────────────────────────── */ .empty-msg, .bom-msg, .po-empty { color: var(--text-dim) !important; } /* ── FILTER TABS ───────────────────────────── */ .filter-tab { border-color: var(--glass-border) !important; color: var(--text-dim) !important; background: #ffffff !important; } .filter-tab.on, .filter-tab:hover { border-color: var(--accent-color) !important; color: var(--accent-color2) !important; background: var(--blue-light) !important; } /* ── DT ROWS (detail) ──────────────────────── */ .dt-row { border-bottom-color: var(--glass-border) !important; } .dt-row .dt-l { color: var(--text-dim) !important; } .dt-row .dt-v { color: var(--text2) !important; } /* ═══════════════════════════════════════════ LOGIN PAGE + HOME DASHBOARD ═══════════════════════════════════════════ */ .login-card { background: var(--glass) !important; backdrop-filter: none !important; border-color: var(--glass-border) !important; box-shadow: var(--shadow) !important; } .login-h { color: var(--text-main) !important; } .login-sub { color: var(--text-dim) !important; } .login-logo-box, .login-logo-mark { background: var(--accent-color) !important; box-shadow: 0 4px 14px var(--accent-glow) !important; } .login-logo-text { color: var(--text-main) !important; } .field-label { color: var(--text-dim) !important; } .field-input { background: #ffffff !important; border-color: var(--glass-border) !important; color: var(--text-main) !important; } .field-input:focus { border-color: var(--accent-color) !important; box-shadow: 0 0 0 3px var(--accent-glow) !important; } .field-input::placeholder { color: var(--text-faint) !important; } .btn-primary { background: var(--accent-color) !important; border: none !important; box-shadow: var(--shadow) !important; } .btn-primary:hover { background: var(--accent-color2) !important; } .err-box { background: #fef2f2 !important; border-color: #fecaca !important; color: #b91c1c !important; } /* Dashboard cards */ .dash-card, .quick-card { background: var(--glass) !important; backdrop-filter: none !important; border-color: var(--glass-border) !important; } .dash-card:hover, .quick-card:hover { border-color: var(--accent-color) !important; box-shadow: 0 4px 16px var(--accent-glow) !important; } .stat-box { background: var(--glass) !important; border-color: var(--glass-border) !important; } .page-title { color: var(--text-main) !important; } .page-sub { color: var(--text-dim) !important; } /* Stat cards on dashboard */ .stat-card { background: var(--glass) !important; backdrop-filter: none !important; border-color: var(--glass-border) !important; } .stat-val { color: var(--text-main) !important; } .stat-label { color: var(--text-dim) !important; } .stats-grid { gap: 12px !important; } /* Info pill on dashboard */ .info-pill, .pipeline-info { background: var(--surface2) !important; border-color: var(--glass-border) !important; color: var(--text-dim) !important; } /* Action cards / Quick links on dashboard */ .actions-grid > div, [class*="action"] { background: var(--glass) !important; border-color: var(--glass-border) !important; } /* Old top nav — fully replaced by the sidebar (sidebar.js removes the element on load). Hidden here so it never flashes during page load: every page that loads theme.css also loads sidebar.js, so no page still needs it. The sidebar itself is a div.sb, not