:root{--bg: #0d1520;--bg-grad: radial-gradient(1200px 600px at 70% -10%, #16283d 0%, #0d1520 55%);--panel: #14202f;--panel-hover: #1a2a3d;--border: #24374d;--border-hover: #3a557a;--text: #e6edf5;--text-dim: #8fa3b8;--text-faint: #5c7089;--accent: #4da3ff;--danger: #e74c3c}*{margin:0;padding:0;box-sizing:border-box}html,body,#root{min-height:100vh}body{background:var(--bg) var(--bg-grad) no-repeat;color:var(--text);font-family:Segoe UI,system-ui,-apple-system,Helvetica Neue,Arial,sans-serif;-webkit-font-smoothing:antialiased}.auth-loading{min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;color:var(--text-dim);font-size:.95rem}.spinner{width:34px;height:34px;border-radius:50%;border:3px solid var(--border);border-top-color:var(--accent);animation:spin .9s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.auth-error{min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:24px;text-align:center}.auth-error h1{font-size:1.15rem}.auth-error p{max-width:420px;color:var(--text-dim);font-size:.9rem;line-height:1.5}.auth-error code{color:var(--accent)}.auth-error button{margin-top:8px;padding:9px 18px;border:1px solid var(--border-hover);border-radius:8px;background:var(--panel-hover);color:var(--text);font-size:.9rem;cursor:pointer}.auth-error button:hover{border-color:var(--accent)}.portal{min-height:100vh;display:flex;flex-direction:column;max-width:1060px;margin:0 auto;padding:0 28px}.portal-header{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:26px 0 18px;border-bottom:1px solid var(--border)}.brand{display:flex;align-items:center;gap:14px}.brand-mark{display:inline-flex;align-items:center;justify-content:center;padding:8px 12px;border-radius:10px;background:linear-gradient(135deg,#0055a4,#036);border:1px solid #2a6db8;font-weight:800;font-size:1.05rem;letter-spacing:.06em;color:#cfe4ff}.brand-mark-accent{color:#fff}.brand-text h1{font-size:1.25rem;font-weight:650;letter-spacing:.01em}.brand-text p{font-size:.8rem;color:var(--text-faint);letter-spacing:.04em;text-transform:uppercase}.user-box{display:flex;align-items:center;gap:14px}.user-info{display:flex;flex-direction:column;align-items:flex-end}.user-name{font-size:.92rem;font-weight:600}.user-email{font-size:.76rem;color:var(--text-faint)}.logout-btn{padding:8px 16px;border:1px solid var(--border);border-radius:8px;background:transparent;color:var(--text-dim);font-size:.85rem;cursor:pointer;transition:border-color .15s ease,color .15s ease}.logout-btn:hover{border-color:var(--danger);color:#ff8a7a}.tile-area{flex:1;padding:34px 0 20px}.tile-heading{font-size:.82rem;font-weight:600;text-transform:uppercase;letter-spacing:.12em;color:var(--text-faint);margin-bottom:18px}.links-error{margin-bottom:16px;color:#ffb3a7;font-size:.85rem}.tile-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:18px}.tile{display:flex;align-items:center;gap:16px;padding:20px;border:1px solid var(--border);border-radius:14px;background:var(--panel);text-decoration:none;color:inherit;transition:transform .15s ease,border-color .15s ease,background .15s ease,box-shadow .15s ease}a.tile:hover{transform:translateY(-2px);background:var(--panel-hover);border-color:var(--border-hover);box-shadow:0 10px 26px #00000059}.tile-icon{flex-shrink:0;width:52px;height:52px;display:flex;align-items:center;justify-content:center;border-radius:12px;background:#4da3ff12;border:1px solid var(--border);color:var(--text-faint)}.tile-icon svg{width:28px;height:28px}.tile-text{display:flex;flex-direction:column;gap:3px;min-width:0}.tile-title{display:inline-flex;align-items:center;gap:8px;font-size:1.02rem;font-weight:650}.tile-subtitle{font-size:.82rem;color:var(--text-dim);line-height:1.35}.tile-locked{cursor:not-allowed;opacity:.55;background:#101a27}.tile-locked .tile-subtitle{color:var(--text-faint)}.lock-icon{width:15px;height:15px;color:var(--text-faint)}.portal-footer{padding:18px 0 24px;border-top:1px solid var(--border);font-size:.76rem;color:var(--text-faint)}@media(max-width:560px){.portal{padding:0 16px}.portal-header{flex-wrap:wrap}.user-box{width:100%;justify-content:space-between}.tile-grid{grid-template-columns:1fr}}
