:root { --bg-primary: #0b0b1a; --bg-surface: #141428; --bg-elevated: #1c1c3a; --bg-hover: #252548; --text-primary: #e8e8f0; --text-secondary: #9898b8; --text-muted: #686888; --accent: #6c63ff; --accent-rgb: 108, 99, 255; --accent-glow: rgba(108, 99, 255, 0.3); --gold: #ffd700; --gold-glow: rgba(255, 215, 0, 0.4); --border: #2a2a4a; --radius: 10px; --radius-sm: 6px; --shadow: 0 4px 24px rgba(0, 0, 0, 0.3); --transition: 0.2s ease; } * { scrollbar-width: thin; scrollbar-color: #2a2a4a transparent; } ::-webkit-scrollbar { width: 5px; } ::-webkit-scrollbar-track { background: transparent; } ::-webkit-scrollbar-thumb { background: #2a2a4a; border-radius: 3px; } ::-webkit-scrollbar-thumb:hover { background: #3a3a5a; } html, body { font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; background: var(--bg-primary); color: var(--text-primary); min-height: 100vh; } h1, h2, h3, h4, h5, h6 { font-weight: 700; letter-spacing: -0.02em; } h1 { font-size: 2rem; background: linear-gradient(135deg, #e8e8f0 0%, #6c63ff 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } a, .btn-link { color: var(--accent); } .btn-primary { background: var(--accent); border-color: var(--accent); } .btn-primary:hover { background: #7b73ff; border-color: #7b73ff; } .btn-outline-secondary { color: var(--text-secondary); border-color: var(--border); } .btn-outline-secondary:hover { background: var(--bg-hover); border-color: var(--accent); color: var(--text-primary); } .form-control, .form-select { background: var(--bg-surface); border-color: var(--border); color: var(--text-primary); border-radius: var(--radius-sm); font-size: 0.9rem; } .form-control:focus, .form-select:focus { background: var(--bg-elevated); border-color: var(--accent); color: var(--text-primary); box-shadow: 0 0 0 0.2rem var(--accent-glow); } .form-control::placeholder { color: var(--text-muted); } .content { padding-top: 1.5rem; } .sidebar { background-image: linear-gradient(180deg, #0d0d2b 0%, #1a0a2e 70%) !important; } .alert-info { background: var(--bg-surface); border-color: var(--border); color: var(--text-secondary); } /* ── Loading Screen ── */ .loading-screen { position: fixed; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; background: radial-gradient(ellipse at center, #141428 0%, #0b0b1a 100%); gap: 0.75rem; z-index: 9999; } .loading-content { position: relative; width: 5rem; height: 5rem; display: flex; align-items: center; justify-content: center; margin-bottom: 0.5rem; } .loading-ring { width: 100%; height: 100%; transform: rotate(-90deg); position: absolute; } .ring-track { fill: none; stroke: var(--border); stroke-width: 5; } .ring-fill { fill: none; stroke: var(--accent); stroke-width: 5; stroke-linecap: round; stroke-dasharray: 263.9; stroke-dashoffset: calc(263.9 - (263.9 * var(--blazor-load-percentage, 0%)) / 100); transition: stroke-dashoffset 0.2s ease; filter: drop-shadow(0 0 6px var(--accent-glow)); } .loading-icon { font-size: 1.5rem; color: var(--accent); animation: loading-pulse 1.5s ease-in-out infinite; z-index: 1; } @keyframes loading-pulse { 0%, 100% { transform: scale(1); opacity: 0.7; } 50% { transform: scale(1.15); opacity: 1; } } .loading-title { font-size: 1.4rem; font-weight: 700; margin: 0; letter-spacing: -0.02em; background: linear-gradient(135deg, #e8e8f0 0%, #6c63ff 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .loading-subtitle { font-size: 0.8rem; color: var(--text-muted); margin: 0; letter-spacing: 0.15em; text-transform: uppercase; } .loading-bar { width: 12rem; margin-top: 0.5rem; } .loading-bar-track { width: 100%; height: 3px; background: var(--border); border-radius: 2px; overflow: hidden; } .loading-bar-fill { height: 100%; width: calc(var(--blazor-load-percentage, 0%)); background: linear-gradient(90deg, var(--accent), #8b83ff); border-radius: 2px; transition: width 0.2s ease; } .loading-status { font-size: 0.8rem; color: var(--text-muted); margin: 0; } .loading-status::after { content: var(--blazor-load-percentage-text, "Loading..."); } .card-detail .detail-field.note { margin-top: 1.5rem; padding-top: 1.5rem; border-top: 1px solid var(--border); display: flex; flex-direction: column; gap: 0.5rem; } .note-input { min-height: 100px; resize: vertical; background: var(--bg-primary); border: 1px solid var(--border); } .saving-indicator { font-size: 0.75rem; color: var(--text-muted); font-style: italic; align-self: flex-end; } .inline-card-btn { background: none; border: none; padding: 0 2px; color: var(--accent); font-weight: 500; text-decoration: none; border-bottom: 1px dashed var(--accent); cursor: pointer; transition: all var(--transition); display: inline; font-size: inherit; font-family: inherit; border-radius: 2px; } .inline-card-btn:hover { color: var(--accent-light, #60a5fa); border-bottom-style: solid; background-color: rgba(var(--accent-rgb, 59, 130, 246), 0.1); }