:root { --bg: #f6f7f9; --surface: #ffffff; --border: #e3e6ea; --text: #0f172a; --muted: #6b7280; --accent: #1d4ed8; --accent-soft: rgba(29, 78, 216, 0.08); } * { box-sizing: border-box; } body { background: var(--bg); color: var(--text); font-family: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, Arial, sans-serif; font-size: 14px; line-height: 1.5; } a { color: var(--accent); text-decoration: none; } a:hover { color: #153eae; } .app-shell { min-height: 100vh; display: flex; flex-direction: column; } .navbar { border-bottom: 1px solid var(--border); background: var(--surface); } .navbar-brand { font-weight: 600; letter-spacing: -0.2px; } .badge-role { background: var(--accent-soft); color: var(--accent); font-weight: 600; border: 1px solid rgba(29, 78, 216, 0.2); } .hero { background: var(--surface); border: 1px solid var(--border); border-radius: 10px; padding: 24px; } .module-card, .card-soft { background: var(--surface); border: 1px solid var(--border); border-radius: 10px; box-shadow: 0 2px 12px rgba(15, 23, 42, 0.04); } .module-card .card-body { padding: 18px; } .module-title { font-size: 15px; font-weight: 600; } .module-meta { color: var(--muted); font-size: 12px; } .table thead th { font-weight: 600; font-size: 12px; text-transform: uppercase; letter-spacing: 0.4px; color: var(--muted); border-bottom: 1px solid var(--border); } .table td { vertical-align: middle; } .form-control, .form-select { border-radius: 8px; border-color: var(--border); font-size: 14px; } .form-control:focus, .form-select:focus { border-color: var(--accent); box-shadow: 0 0 0 3px rgba(29, 78, 216, 0.12); } .btn-primary { background: var(--accent); border-color: var(--accent); border-radius: 8px; font-weight: 600; } .btn-outline-secondary { border-radius: 8px; } .section-title { font-size: 16px; font-weight: 600; margin-bottom: 12px; } .footer { margin-top: auto; padding: 24px 0; color: var(--muted); font-size: 12px; } .toast { border-radius: 10px; border: 1px solid var(--border); box-shadow: 0 6px 20px rgba(15, 23, 42, 0.08); } .search-input { max-width: 280px; } .empty-state { border: 1px dashed var(--border); border-radius: 10px; padding: 18px; color: var(--muted); background: #fafbfc; }