/* ===== VISION UI GLASSMORPHISM THEME ===== */ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap'); :root { --sidebar-w: 230px; --sidebar-collapsed-w: 56px; --topbar-h: 60px; /* Glassmorphism foundations */ --glass-bg: rgba(11, 17, 47, 0.65); --glass-border: rgba(255, 255, 255, 0.06); --glass-shadow: 0 8px 32px rgba(0, 0, 0, 0.3); /* Sidebar */ --sidebar-bg: rgba(6, 11, 40, 0.85); --sidebar-hover: rgba(255, 255, 255, 0.04); --sidebar-active: rgba(0, 117, 255, 0.18); --sidebar-text: #7b7f9e; --sidebar-text-active: #ffffff; --sidebar-divider: rgba(255, 255, 255, 0.05); /* Neon accent palette */ --neon-blue: #0075FF; --neon-cyan: #00E5FF; --neon-green: #01B574; --neon-purple: #7928CA; /* Content */ --content-bg: #060b28; --card-bg: rgba(11, 17, 47, 0.65); --card-border: rgba(255, 255, 255, 0.06); --card-shadow: 0 8px 32px rgba(0, 0, 0, 0.3); /* Text */ --text-primary: #FFFFFF; --text-secondary: #A0A5B5; --text-muted: #6b7194; /* Status */ --green: #01B574; --green-bg: rgba(1, 181, 116, 0.12); --red: #ff6b6b; --red-bg: rgba(255, 107, 107, 0.12); --orange: #ffb347; --orange-bg: rgba(255, 179, 71, 0.12); /* Accent */ --accent: #0075FF; --accent-hover: #005ce6; --accent-bg: rgba(0, 117, 255, 0.12); /* Sizes */ --radius: 20px; --radius-sm: 12px; --radius-xs: 8px; --font: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; /* Aliases for legacy templates */ --d-card-bg: var(--card-bg); --d-border: var(--card-border); --d-border-light: rgba(255, 255, 255, 0.04); --d-text: var(--text-primary); --d-muted: var(--text-secondary); --d-primary: var(--neon-blue); --d-primary-bg: rgba(0, 117, 255, 0.12); --d-green: var(--neon-green); --d-green-bg: var(--green-bg); --d-red: var(--red); --d-red-bg: var(--red-bg); --d-orange: var(--orange); --d-orange-bg: var(--orange-bg); --d-warning: var(--orange); --d-warning-bg: var(--orange-bg); --d-info: var(--neon-blue); --d-info-bg: var(--accent-bg); --d-bg-subtle: rgba(255, 255, 255, 0.03); --d-shadow-sm: var(--card-shadow); } * { box-sizing: border-box; } body { font-family: var(--font); background: var(--content-bg); color: var(--text-primary); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; margin: 0; padding: 0; } /* ===== LAYOUT ===== */ .d-layout { display: flex; min-height: 100vh; font-family: var(--font); background: var(--content-bg); } /* ===== SIDEBAR ===== */ .d-sidebar { width: var(--sidebar-w); background: var(--sidebar-bg); backdrop-filter: blur(24px); -webkit-backdrop-filter: blur(24px); border-right: 1px solid var(--glass-border); display: flex; flex-direction: column; position: fixed; top: 0; left: 0; bottom: 0; z-index: 1030; transition: width 0.25s cubic-bezier(0.4, 0, 0.2, 1); overflow: hidden; } .d-sidebar.collapsed { width: var(--sidebar-collapsed-w); } .d-sidebar.hidden { width: 0; overflow: hidden; border-right: none; } .d-sidebar.hidden + .d-main { margin-left: 0; } .d-sidebarg { padding: 0 12px; width: var(--sidebar-w); transition: width 0.25s ease; display: flex; flex-direction: column; height: 100%; } .d-logo { display: flex; align-items: center; gap: 10px; padding: 12px 12px 10px; text-decoration: none; color: #fff; flex-shrink: 0; } .d-logo-img { width: 32px; height: 32px; border-radius: 10px; background: linear-gradient(135deg, var(--neon-blue), var(--neon-cyan)); box-shadow: 0 4px 16px rgba(0, 117, 255, 0.3); display: flex; align-items: center; justify-content: center; font-weight: 800; font-size: 14px; flex-shrink: 0; color: #fff; } .d-logo-text { font-weight: 700; font-size: 14px; white-space: nowrap; letter-spacing: 0.3px; color: #fff; } .d-logo-sub { font-size: 9px; color: var(--sidebar-text); font-weight: 400; text-transform: uppercase; letter-spacing: 0.5px; } .d-nav { flex: 1; overflow-y: auto; padding: 6px 0; min-height: 0; } .d-nav::-webkit-scrollbar { width: 3px; } .d-nav::-webkit-scrollbar-thumb { background: var(--sidebar-divider); border-radius: 4px; } .d-nav-label { padding: 12px 16px 4px; font-size: 9px; font-weight: 700; text-transform: uppercase; letter-spacing: 1px; color: var(--text-muted); white-space: nowrap; } .d-nav-item { display: flex; align-items: center; gap: 0; padding: 6px 14px; margin: 1px 8px; border-radius: 10px; text-decoration: none; color: var(--sidebar-text); font-size: 13px; font-weight: 500; transition: all 0.2s ease; white-space: nowrap; position: relative; } .d-nav-item:hover { background: var(--sidebar-hover); color: var(--text-primary); } .d-nav-item.active { background: var(--sidebar-active); color: var(--sidebar-text-active); font-weight: 600; } /* Icon container for Vision UI style */ .d-nav-iconbox { width: 28px; height: 28px; border-radius: 8px; background: rgba(255, 255, 255, 0.04); display: flex; align-items: center; justify-content: center; flex-shrink: 0; margin-right: 10px; transition: all 0.2s ease; } .d-nav-item:hover .d-nav-iconbox { background: rgba(255, 255, 255, 0.08); } .d-nav-item.active .d-nav-iconbox { background: var(--neon-blue); box-shadow: 0 4px 12px rgba(0, 117, 255, 0.3); } .d-nav-item i { font-size: 13px; transition: color 0.2s ease; } .d-nav-item.active i { color: #fff; } .d-nav-item .d-nav-label-text { flex: 1; } .d-nav-badge { margin-left: auto; background: var(--neon-blue); color: #fff; font-size: 9px; font-weight: 700; padding: 1px 6px; border-radius: 8px; min-width: 18px; text-align: center; } .d-sidebar-divider { height: 1px; background: var(--sidebar-divider); margin: 4px 12px; } /* Sidebar footer */ .d-sidebar-footer { padding: 8px 12px; border-top: 1px solid var(--sidebar-divider); display: flex; align-items: center; gap: 6px; flex-shrink: 0; } .d-sidebar-footer .d-nav-item { margin: 0; padding: 6px 10px; flex: 1; justify-content: center; } .d-theme-btn { display: flex; align-items: center; gap: 8px; padding: 6px 14px; margin: 1px 8px; border: none; background: transparent; color: var(--sidebar-text); font-size: 12px; cursor: pointer; border-radius: 10px; transition: all 0.2s; width: calc(100% - 16px); font-family: var(--font); font-weight: 500; } .d-theme-btn:hover { background: var(--sidebar-hover); color: var(--text-primary); } .d-theme-btn i { font-size: 13px; width: 28px; height: 28px; border-radius: 8px; background: rgba(255,255,255,0.04); display: inline-flex; align-items: center; justify-content: center; margin-right: 10px; } /* ===== MAIN AREA ===== */ .d-main { flex: 1; margin-left: var(--sidebar-w); transition: margin-left 0.25s ease; display: flex; flex-direction: column; min-height: 100vh; background: var(--content-bg); } .d-sidebar.collapsed + .d-main { margin-left: var(--sidebar-collapsed-w); } /* ===== TOP BAR ===== */ .d-topbar { height: var(--topbar-h); background: rgba(6, 11, 40, 0.6); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); border-bottom: 1px solid var(--glass-border); display: flex; align-items: center; justify-content: space-between; padding: 0 28px; position: sticky; top: 0; z-index: 1020; } .d-topbar-left { display: flex; align-items: center; gap: 16px; } .d-sidebar-toggle { display: inline-flex; background: none; border: none; font-size: 22px; color: var(--text-secondary); cursor: pointer; padding: 6px; border-radius: 10px; line-height: 1; transition: background 0.15s; } .d-sidebar-toggle:hover { background: rgba(255, 255, 255, 0.06); } .d-page-title { font-size: 18px; font-weight: 700; color: var(--text-primary); } .d-topbar-right { display: flex; align-items: center; gap: 8px; } .d-topbar-btn { position: relative; background: rgba(255, 255, 255, 0.04); border: none; font-size: 18px; color: var(--text-secondary); cursor: pointer; padding: 8px 10px; border-radius: 12px; transition: all 0.2s; display: flex; align-items: center; justify-content: center; } .d-topbar-btn:hover { background: rgba(255, 255, 255, 0.08); color: var(--text-primary); } .d-topbar-badge { position: absolute; top: 4px; right: 4px; width: 8px; height: 8px; border-radius: 50%; background: var(--red); border: 2px solid transparent; } .d-user-dropdown { display: flex; align-items: center; gap: 10px; padding: 4px 12px 4px 4px; border-radius: 14px; text-decoration: none; color: var(--text-primary); cursor: pointer; transition: background 0.15s; } .d-user-dropdown:hover { background: rgba(255, 255, 255, 0.06); } .d-user-avatar { width: 36px; height: 36px; border-radius: 12px; background: linear-gradient(135deg, var(--neon-blue), var(--neon-purple)); color: #fff; display: flex; align-items: center; justify-content: center; font-weight: 700; font-size: 14px; } .d-user-name { font-size: 14px; font-weight: 500; color: var(--text-primary); } /* ===== CONTENT ===== */ .d-content { flex: 1; padding: 28px; background: transparent; } /* ===== STAT CARDS ===== */ .d-stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 20px; margin-bottom: 28px; } .d-stat-card { background: var(--glass-bg); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); border: 1px solid var(--glass-border); border-radius: 20px; padding: 24px; display: flex; align-items: center; gap: 18px; box-shadow: var(--card-shadow); transition: all 0.3s ease; } .d-stat-card:hover { box-shadow: 0 12px 40px rgba(0, 0, 0, 0.4); transform: translateY(-3px); border-color: rgba(255, 255, 255, 0.1); } .d-stat-icon { width: 52px; height: 52px; border-radius: 16px; display: flex; align-items: center; justify-content: center; font-size: 22px; flex-shrink: 0; backdrop-filter: blur(8px); } .d-stat-icon.purple { background: rgba(121, 40, 202, 0.2); color: var(--neon-purple); } .d-stat-icon.green { background: var(--green-bg); color: var(--neon-green); } .d-stat-icon.orange { background: var(--orange-bg); color: var(--orange); } .d-stat-icon.red { background: var(--red-bg); color: var(--red); } .d-stat-icon.blue { background: var(--accent-bg); color: var(--neon-blue); } .d-stat-info { flex: 1; min-width: 0; } .d-stat-value { font-size: 30px; font-weight: 800; color: #FFFFFF; line-height: 1.1; letter-spacing: -0.02em; } .d-stat-label { font-size: 12px; color: #A0A5B5; margin-top: 3px; font-weight: 500; text-transform: uppercase; letter-spacing: 0.4px; } .d-stat-change { font-size: 12px; font-weight: 600; display: flex; align-items: center; gap: 3px; } .d-stat-change.up { color: var(--neon-green); } .d-stat-change.down { color: var(--red); } /* ===== STAT ROW (flex version) ===== */ .d-stats-row { display: flex; gap: 20px; margin-bottom: 28px; flex-wrap: wrap; } .d-stats-row .d-stat-card { flex: 1; min-width: 200px; } /* ===== GENERIC CARD ===== */ .d-card { background: var(--glass-bg); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); border: 1px solid var(--glass-border); border-radius: 20px; box-shadow: var(--card-shadow); } .d-card-body { padding: 20px 24px; } .d-card-actions { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; padding: 16px 0; } /* ===== VISION UI BUTTONS ===== */ .btn-apple { display: inline-flex; align-items: center; justify-content: center; gap: 6px; padding: 8px 18px; font-size: 13px; font-weight: 600; border-radius: 12px; border: none; background: linear-gradient(135deg, var(--neon-blue), #005ce6); color: #fff; cursor: pointer; text-decoration: none; transition: all 0.2s ease; font-family: var(--font); line-height: 1.4; box-shadow: 0 4px 14px rgba(0, 117, 255, 0.25); } .btn-apple:hover { background: linear-gradient(135deg, #005ce6, #0047b3); color: #fff; text-decoration: none; box-shadow: 0 6px 20px rgba(0, 117, 255, 0.35); transform: translateY(-1px); } .btn-apple:disabled { opacity: 0.5; cursor: not-allowed; box-shadow: none; transform: none; } .btn-apple-sm { padding: 5px 12px; font-size: 11px; border-radius: 10px; } .btn-outline-apple { display: inline-flex; align-items: center; justify-content: center; gap: 6px; padding: 7px 17px; font-size: 13px; font-weight: 600; border-radius: 12px; border: 1px solid rgba(255, 255, 255, 0.12); background: rgba(255, 255, 255, 0.04); color: var(--text-secondary); cursor: pointer; text-decoration: none; transition: all 0.2s ease; font-family: var(--font); line-height: 1.4; } .btn-outline-apple:hover { border-color: var(--neon-blue); color: var(--neon-blue); background: rgba(0, 117, 255, 0.08); text-decoration: none; } .btn-apple-secondary { background: rgba(255, 255, 255, 0.06); color: var(--text-secondary); box-shadow: none; } .btn-apple-secondary:hover { background: rgba(255, 255, 255, 0.1); color: var(--text-primary); box-shadow: none; } .btn-apple-active { background: linear-gradient(135deg, var(--neon-blue), #005ce6) !important; color: #fff !important; border-color: transparent !important; } /* ===== CHARTS ===== */ .d-charts { display: grid; grid-template-columns: 2fr 1fr; gap: 20px; margin-bottom: 28px; } .d-chart-card { background: var(--glass-bg); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); border: 1px solid var(--glass-border); border-radius: 20px; padding: 24px; box-shadow: var(--card-shadow); } .d-chart-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 18px; } .d-chart-title { font-size: 16px; font-weight: 700; color: #FFFFFF; } .d-chart-subtitle { font-size: 12px; color: #A0A5B5; margin-top: 3px; font-weight: 500; } .d-chart-body { position: relative; height: 380px; } .d-chart-body canvas { width: 100% !important; height: 100% !important; } /* ===== TABLE CARD ===== */ .d-table-card { background: var(--glass-bg); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); border: 1px solid var(--glass-border); border-radius: 20px; box-shadow: var(--card-shadow); overflow: hidden; } .d-table-header { padding: 18px 24px; display: flex; justify-content: space-between; align-items: center; border-bottom: 1px solid var(--glass-border); } .d-table-title { font-size: 16px; font-weight: 700; color: #FFFFFF; } .d-table-body { overflow-x: auto; padding: 0; } .d-table-body table { width: 100%; border-collapse: collapse; font-size: 13px; } .d-table-body th { text-align: left; font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.6px; color: #A0A5B5; padding: 14px 24px; border-bottom: 1px solid var(--glass-border); background: transparent; } .d-table-body td { padding: 12px 24px; border-bottom: 1px solid rgba(255, 255, 255, 0.04); color: #FFFFFF; } .d-table-body tr:last-child td { border-bottom: none; } .d-table-body tr:hover td { background: rgba(255, 255, 255, 0.02); } /* ===== KPI CATEGORY CARDS ===== */ .d-kpi-flex { display: flex; gap: 6px; } .d-kpi-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 6px; flex: 1; } .d-kpi-card { background: var(--glass-bg); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); border: 1px solid var(--glass-border); border-radius: 12px; box-shadow: var(--card-shadow); transition: all 0.2s; } .d-kpi-card:hover { border-color: rgba(255, 255, 255, 0.1); } .d-kpi-head { display: flex; justify-content: space-between; align-items: center; padding: 5px 8px; font-size: 8px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.3px; color: #A0A5B5; } .d-kpi-name { font-size: 8px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.2px; color: #A0A5B5; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .d-kpi-card-educ { width: 150px; flex-shrink: 0; display: flex; align-items: center; justify-content: center; } .d-kpi-card-educ .d-kpi-head { flex-direction: column; gap: 6px; padding: 10px 8px; text-align: center; } .d-kpi-card-educ .d-kpi-name { font-size: 9px; white-space: normal; line-height: 1.3; } .d-kpi-card-educ .d-kpi-row-pct { font-size: 14px; } .d-kpi-body { padding: 0; } .d-kpi-row { display: flex; justify-content: space-between; align-items: center; padding: 3px 10px; font-size: 9px; line-height: 1.3; border-left: 2px solid transparent; } .d-kpi-row + .d-kpi-row { border-top: 1px solid rgba(255,255,255,0.04); } .d-kpi-row.ok { border-left-color: var(--neon-green); background: rgba(1, 181, 116, 0.05); } .d-kpi-row.fail { border-left-color: var(--red); background: rgba(255, 107, 107, 0.05); } .d-kpi-row-name { color: #FFFFFF; flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .d-kpi-row-val { font-weight: 700; color: #FFFFFF; } .d-kpi-row-pct { font-weight: 700; font-size: 10px; min-width: 30px; text-align: right; } .d-kpi-row-pct.ok { color: var(--neon-green); } .d-kpi-row-pct.fail { color: var(--red); } /* ===== PILL BADGES (shared) ===== */ .cat-pct, .d-kpi-row-pct.pill { display:inline-block;padding:1px 6px;border-radius:20px;font-size:10px;font-weight:700;line-height:1.4; } .cat-pct.ok, .d-kpi-row-pct.pill.ok { background:rgba(1,181,116,0.12); color:var(--neon-green); } .cat-pct.fail, .d-kpi-row-pct.pill.fail { background:rgba(255,77,79,0.12); color:var(--red); } .sp { display:inline-block;padding:1px 6px;border-radius:20px;font-size:11px;font-weight:700;line-height:1.4; } .sp.good { background:rgba(1,181,116,0.12); color:var(--neon-green); } .sp.ok { background:rgba(245,158,11,0.12); color:#f59e0b; } .sp.bad { background:rgba(255,77,79,0.12); color:var(--red); } /* ===== BREADCRUMBS ===== */ .d-breadcrumbs { display: flex; align-items: center; gap: 8px; font-size: 12px; color: #A0A5B5; margin-bottom: 20px; } .d-breadcrumbs a { color: #A0A5B5; text-decoration: none; transition: color 0.15s; } .d-breadcrumbs a:hover { color: var(--neon-blue); } .d-breadcrumbs span.sep { color: rgba(255, 255, 255, 0.12); } .d-breadcrumbs span { color: #FFFFFF; } /* ===== RESPONSIVE ===== */ @media (max-width: 992px) { .d-charts { grid-template-columns: 1fr; } } @media (max-width: 768px) { .d-sidebar { transform: translateX(-100%); width: var(--sidebar-w); } .d-sidebar.open { transform: translateX(0); } .d-sidebar.collapsed { transform: translateX(-100%); } .d-sidebar.collapsed.open { transform: translateX(0); } .d-main { margin-left: 0; } .d-sidebar-toggle { display: inline-flex; } .d-stats { grid-template-columns: repeat(2, 1fr); } } @media (max-width: 480px) { .d-stats { grid-template-columns: 1fr; } .d-content { padding: 16px; } .d-user-name { display: none; } } /* ===== OVERLAY (mobile) ===== */ .d-overlay { position: fixed; inset: 0; background: rgba(0, 0, 0, 0.6); backdrop-filter: blur(4px); z-index: 1029; display: none; } .d-overlay.show { display: block; } /* ===== UTILITY ===== */ ::-webkit-scrollbar { width: 4px; } ::-webkit-scrollbar-track { background: transparent; } ::-webkit-scrollbar-thumb { background: rgba(255, 255, 255, 0.08); border-radius: 4px; } ::-webkit-scrollbar-thumb:hover { background: rgba(255, 255, 255, 0.15); } /* Form controls overrides for glassmorphism */ .form-control, .form-select, .form-control-sm, .form-select-sm { background: rgba(255, 255, 255, 0.04) !important; border: 1px solid rgba(255, 255, 255, 0.1) !important; color: #FFFFFF !important; border-radius: 12px !important; font-family: var(--font); color-scheme: dark; } .form-control:focus, .form-select:focus { border-color: var(--neon-blue) !important; box-shadow: 0 0 0 2px rgba(0, 117, 255, 0.2) !important; background: rgba(255, 255, 255, 0.06) !important; } .form-control::placeholder { color: #6b7194 !important; } /* Badge style for Vision UI */ .badge-vision { display: inline-flex; align-items: center; gap: 4px; padding: 3px 12px; border-radius: 20px; font-size: 11px; font-weight: 600; white-space: nowrap; } .badge-vision.green { background: var(--green-bg); color: var(--neon-green); } .badge-vision.red { background: var(--red-bg); color: var(--red); } .badge-vision.orange { background: var(--orange-bg); color: var(--orange); } .badge-vision.blue { background: var(--accent-bg); color: var(--neon-blue); }