/* ============================================================ YEIDA Portal — Design System Premium government-tech: navy / blue / emerald on clean white ============================================================ */ @import url('https://fonts.googleapis.com/css2?family=Schibsted+Grotesk:wght@500;600;700;800&family=Public+Sans:ital,wght@0,400;0,500;0,600;0,700;1,400&display=swap'); :root { /* Brand */ --navy-900: #081a39; --navy-800: #0b2548; --navy-700: #103263; --navy-600: #16407e; --blue-600: #1d5fbf; --blue-700: #16407e; --blue-500: #2670e6; --blue-400: #5a93f0; --blue-100: #d8e6fb; --blue-50: #eef4ff; --emerald-700: #0a7d56; --emerald-600: #0f9d6b; --emerald-500: #16b67e; --emerald-100: #cdeede; --emerald-50: #e8f7f0; --amber-600: #c77a08; --amber-500: #e8930c; --amber-50: #fdf3e2; --red-600: #d23f3f; --red-500: #e85656; --red-50: #fdedee; /* Neutrals */ --ink: #0e1b2e; --ink-2: #2b3a4f; --muted: #5d6f87; --faint: #8a99 ac; --faint: #8a99ac; --line: #e4eaf1; --line-2: #eef2f7; --bg: #f4f7fb; --bg-2: #eef3f9; --card: #ffffff; --ink-on-navy: #eaf1fb; /* Type */ --font-display: 'Schibsted Grotesk', system-ui, sans-serif; --font-ui: 'Public Sans', system-ui, -apple-system, sans-serif; /* Radii */ --r-sm: 8px; --r-md: 11px; --r-lg: 16px; --r-xl: 22px; --r-pill: 999px; /* Shadows */ --sh-xs: 0 1px 2px rgba(13,38,76,.05); --sh-sm: 0 1px 2px rgba(13,38,76,.05), 0 4px 12px -4px rgba(13,38,76,.06); --sh-md: 0 8px 24px -8px rgba(13,38,76,.13), 0 2px 6px -2px rgba(13,38,76,.05); --sh-lg: 0 24px 48px -16px rgba(11,37,72,.26), 0 6px 16px -8px rgba(11,37,72,.16); --sh-glow: 0 10px 28px -8px rgba(29,95,191,.42); --sidebar-w: 252px; --topbar-h: 64px; } * { box-sizing: border-box; } html, body { margin: 0; padding: 0; } body { font-family: var(--font-ui); color: var(--ink); background: var(--bg); -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; } #root { min-height: 100vh; } h1,h2,h3,h4,h5 { font-family: var(--font-display); margin: 0; color: var(--ink); letter-spacing: -.015em; } p { margin: 0; } button { font-family: inherit; cursor: pointer; } a { color: inherit; text-decoration: none; } input, select, textarea { font-family: inherit; } ::selection { background: var(--blue-100); } .num { font-variant-numeric: tabular-nums; font-feature-settings: "tnum"; } /* Scrollbars */ *::-webkit-scrollbar { width: 10px; height: 10px; } *::-webkit-scrollbar-thumb { background: #cdd7e4; border-radius: 99px; border: 2px solid transparent; background-clip: padding-box; } *::-webkit-scrollbar-thumb:hover { background: #b4c2d4; background-clip: padding-box; } *::-webkit-scrollbar-track { background: transparent; } /* ---------- Buttons ---------- */ .btn { display: inline-flex; align-items: center; justify-content: center; gap: 9px; font-family: var(--font-ui); font-weight: 600; font-size: 14.5px; padding: 11px 18px; border-radius: var(--r-md); border: 1px solid transparent; background: transparent; color: var(--ink); white-space: nowrap; transition: transform .12s ease, box-shadow .18s ease, background .18s ease, border-color .18s ease, color .15s ease; line-height: 1; } .btn:active { transform: translateY(1px); } .btn svg { width: 18px; height: 18px; flex: none; } .btn-primary { background: #0077FF; color: #fff; box-shadow: 0 10px 24px -8px rgba(0,119,255,.5); border-radius: var(--r-pill) !important; } .btn-primary:hover { box-shadow: 0 14px 32px -8px rgba(0,119,255,.6); filter: brightness(1.05); } .btn-navy { background: linear-gradient(180deg, var(--navy-700), var(--navy-800)); color: #fff; box-shadow: 0 10px 24px -10px rgba(8,26,57,.6); } .btn-navy:hover { filter: brightness(1.1); } .btn-emerald { background: linear-gradient(180deg, var(--emerald-500), var(--emerald-600)); color: #fff; box-shadow: 0 10px 26px -10px rgba(15,157,107,.55); } .btn-emerald:hover { filter: brightness(1.05); } .btn-outline { background: #fff; border-color: var(--line); color: var(--ink-2); box-shadow: var(--sh-xs); } .btn-outline:hover { border-color: #c9d6e6; background: #fbfdff; } .btn-ghost { color: var(--muted); } .btn-ghost:hover { background: var(--bg-2); color: var(--ink); } .btn-sm { padding: 8px 13px; font-size: 13.5px; border-radius: var(--r-sm); } .btn-sm svg { width: 16px; height: 16px; } .btn-lg { padding: 14px 24px; font-size: 16px; } .btn-block { width: 100%; } /* ---------- Cards ---------- */ .card { background: var(--card); border: 1px solid var(--line); border-radius: var(--r-lg); box-shadow: var(--sh-sm); } .card-pad { padding: 22px; } .card-hover { transition: box-shadow .2s ease, transform .2s ease, border-color .2s ease; } .card-hover:hover { box-shadow: var(--sh-md); border-color: #d6e0ee; transform: translateY(-2px); } /* ---------- Badges / chips ---------- */ .badge { display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; font-weight: 600; padding: 4px 10px; border-radius: var(--r-pill); line-height: 1.3; white-space: nowrap; } .badge .dot { width: 6px; height: 6px; border-radius: 99px; background: currentColor; } .badge-green { background: var(--emerald-50); color: var(--emerald-700); } .badge-blue { background: var(--blue-50); color: var(--blue-600); } .badge-amber { background: var(--amber-50); color: var(--amber-600); } .badge-red { background: var(--red-50); color: var(--red-600); } .badge-gray { background: var(--bg-2); color: var(--muted); } .badge-navy { background: #e9eefb; color: var(--navy-700); } .chip { display: inline-flex; align-items: center; gap: 7px; cursor: pointer; font-size: 13.5px; font-weight: 500; padding: 8px 14px; border-radius: var(--r-pill); background: #fff; border: 1px solid var(--line); color: var(--ink-2); transition: all .15s ease; } .chip:hover { border-color: #c9d6e6; background: #fbfdff; } .chip.active { background: var(--navy-800); color: #fff; border-color: var(--navy-800); } /* ---------- Inputs ---------- */ .field { display: flex; flex-direction: column; gap: 7px; } .field label { font-size: 13px; font-weight: 600; color: var(--ink-2); } .input, .select { width: 100%; padding: 12px 14px; font-size: 14.5px; color: var(--ink); background: #fff; border: 1.5px solid var(--line); border-radius: var(--r-md); transition: border-color .15s ease, box-shadow .15s ease; outline: none; } .input::placeholder { color: #9aa9bc; } .input:focus, .select:focus { border-color: var(--blue-400); box-shadow: 0 0 0 4px rgba(38,112,230,.12); } .input-icon { position: relative; } .input-icon svg { position: absolute; left: 13px; top: 50%; transform: translateY(-50%); width: 18px; height: 18px; color: #9aa9bc; } .input-icon .input { padding-left: 42px; } /* ---------- Sidebar nav ---------- */ .nav-item { display: flex; align-items: center; gap: 12px; width: 100%; padding: 9.5px 12px; border-radius: var(--r-md); border: none; background: transparent; color: #b9c7dd; font-size: 14.5px; font-weight: 500; text-align: left; transition: background .15s ease, color .15s ease; position: relative; } .nav-item svg { width: 19px; height: 19px; flex: none; } .nav-item:hover { background: rgba(255,255,255,.06); color: #eef3fb; } .nav-item.active { background: rgba(255,255,255,.1); color: #fff; font-weight: 600; } .nav-item.active::before { content: ''; position: absolute; left: -12px; top: 50%; transform: translateY(-50%); width: 3.5px; height: 22px; border-radius: 99px; background: var(--emerald-500); } .nav-badge { margin-left: auto; font-size: 11px; font-weight: 700; background: var(--emerald-500); color: #042e1f; padding: 1px 7px; border-radius: 99px; } /* ---------- Misc ---------- */ .divider { height: 1px; background: var(--line); border: none; } .kicker { font-size: 12.5px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--blue-600); } .muted { color: var(--muted); } .faint { color: #93a2b6; } .avatar { border-radius: 99px; object-fit: cover; background: linear-gradient(135deg,var(--blue-500),var(--navy-700)); display: inline-flex; align-items: center; justify-content: center; color: #fff; font-weight: 700; } .progress { height: 8px; background: var(--bg-2); border-radius: 99px; overflow: hidden; } .progress > span { display: block; height: 100%; border-radius: 99px; background: linear-gradient(90deg,var(--emerald-500),var(--emerald-600)); transition: width .6s cubic-bezier(.2,.7,.3,1); } /* Animations are OPT-IN via body.anim-on (added by JS only when the document is visible). Default/hidden/print state shows content fully so nothing ever sticks at opacity:0. */ @keyframes fadeUp { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes popIn { from { opacity: 0; transform: scale(.96); } to { opacity: 1; transform: none; } } @keyframes shimmer { 100% { transform: translateX(100%); } } @keyframes spin { to { transform: rotate(360deg); } } @keyframes pulseDot { 0%,100% { opacity: 1; } 50% { opacity: .35; } } body.anim-on .anim-fade-up { animation: fadeUp .5s cubic-bezier(.2,.7,.3,1) both; } body.anim-on .anim-fade-in { animation: fadeIn .4s ease both; } body.anim-on .anim-pop { animation: popIn .35s cubic-bezier(.2,.8,.3,1) both; } body.anim-on .stagger > * { animation: fadeUp .5s cubic-bezier(.2,.7,.3,1) both; } .stagger > *:nth-child(1){animation-delay:.03s} .stagger > *:nth-child(2){animation-delay:.08s} .stagger > *:nth-child(3){animation-delay:.13s} .stagger > *:nth-child(4){animation-delay:.18s} .stagger > *:nth-child(5){animation-delay:.23s} .stagger > *:nth-child(6){animation-delay:.28s} .stagger > *:nth-child(7){animation-delay:.33s} .stagger > *:nth-child(8){animation-delay:.38s} /* Tables */ .tbl { width: 100%; border-collapse: collapse; } .tbl th { text-align: left; font-size: 12px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; color: var(--faint); padding: 12px 16px; border-bottom: 1px solid var(--line); } .tbl td { padding: 14px 16px; border-bottom: 1px solid var(--line-2); font-size: 14px; color: var(--ink-2); } .tbl tbody tr { transition: background .12s ease; } .tbl tbody tr:hover { background: #fafcfe; } .tbl tbody tr:last-child td { border-bottom: none; } /* Utility layout */ .row { display: flex; align-items: center; } .col { display: flex; flex-direction: column; } .gap-2{gap:8px}.gap-3{gap:12px}.gap-4{gap:16px}.gap-5{gap:20px}.gap-6{gap:24px} .grow{flex:1}.center{align-items:center;justify-content:center} .spread{justify-content:space-between} /* Tooltip-ish */ .icon-btn { width: 38px; height: 38px; border-radius: var(--r-md); border: 1px solid transparent; display: inline-flex; align-items: center; justify-content: center; background: transparent; color: var(--muted); transition: background .15s, color .15s, border-color .15s; position: relative; } .icon-btn:hover { background: var(--bg-2); color: var(--ink); } .icon-btn svg { width: 20px; height: 20px; } .notif-dot { position: absolute; top: 7px; right: 8px; width: 8px; height: 8px; border-radius: 99px; background: var(--red-500); border: 2px solid #fff; } /* ---------- Dashboard polish ---------- */ /* premium stat/status card: hairline top accent + refined hover */ .stat-card { position: relative; overflow: hidden; } .stat-card::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: var(--accent, var(--blue-500)); opacity: .9; } .stat-card { transition: box-shadow .22s ease, transform .22s ease, border-color .22s ease; } .stat-card:hover { box-shadow: var(--sh-md); transform: translateY(-2px); border-color: #d6e0ee; } /* section eyebrow heading */ .sec-eyebrow { display: inline-flex; align-items: center; gap: 8px; font-size: 11.5px; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; color: var(--blue-600); } .sec-eyebrow::before { content: ''; width: 22px; height: 2px; border-radius: 2px; background: var(--blue-500); } /* refined module switch card */ .mod-switch { transition: box-shadow .2s ease, transform .2s ease, border-color .2s ease, background .2s ease; } .mod-switch:hover { transform: translateY(-2px); box-shadow: var(--sh-md); } /* subtle metric tile */ .metric-tile { transition: box-shadow .2s ease, transform .2s ease, border-color .2s ease; } .metric-tile:hover { box-shadow: var(--sh-md); transform: translateY(-2px); border-color: #d6e0ee; } /* table refinement on dashboard */ .tbl.tbl-clean th { background: var(--bg); }