Files
conference/static/css/style.css
T
paul 3c26f1310e Redesign profile photo upload with circular crop UI, server-side processing, and form integration
- Replace square preview with 280x280 circular container with crop ring overlay
- Zoom slider and drag-to-pan for precise crop positioning
- Client-side crop via canvas at 400x400 output resolution
- Server-side resize to 400x400 (LANCZOS), EXIF stripping, RGB conversion, JPEG optimization
- Generate CSRF token in before_request so photo upload fetch works
- Save button now also submits the profile form (photo + fields updated together)
- Remove dead photo-upload-form handler and unused CSS
- Clean up debug markers and attendee code field from profile page

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-27 07:10:52 +00:00

5014 lines
99 KiB
CSS

/* ===================================================================
NetEvents Professional Design System
=================================================================== */
/* ----- CSS Custom Properties (Design Tokens) ----- */
:root {
/* Colors - Classy, Professional Palette */
--primary-color: #1e3a5f; /* Deep navy - professional, authoritative */
--primary-hover: #152a45; /* Darker navy for hover */
--primary-light: #dbeafe;
--secondary-color: #6b7280; /* Sophisticated slate gray */
--secondary-hover: #4b5563;
--success-color: #166534; /* Deep forest green - refined */
--success-light: #dcfce7;
--danger-color: #991b1b; /* Elegant burgundy - not harsh red */
--danger-hover: #7f1d1d;
--danger-light: #fee2e2;
--warning-color: #78350f; /* Warm amber brown */
--warning-light: #fef3c7;
/* Backgrounds - Warm neutrals, not cold gray */
--bg-color: #f9fafb; /* Subtle warm off-white */
--card-bg: #ffffff;
--card-hover-bg: #f9fafb;
/* Text - Rich, readable */
--text-color: #111827; /* Near-black with warmth */
--text-muted: #4b5563; /* Medium slate gray */
--text-light: #5a6370; /* Medium gray — WCAG AA compliant (4.6:1 on #f9fafb) */
/* Borders - Subtle definition */
--border-color: #e5e7eb;
--border-light: #f3f4f6;
/* Shadows */
--shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1);
--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1);
--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1);
/* Spacing Scale (4px base) */
--space-1: 0.25rem;
--space-2: 0.5rem;
--space-3: 0.75rem;
--space-4: 1rem;
--space-5: 1.25rem;
--space-6: 1.5rem;
--space-8: 2rem;
--space-10: 2.5rem;
--space-12: 3rem;
--space-16: 4rem;
/* Border Radius */
--radius-sm: 4px;
--radius-md: 6px;
--radius-lg: 8px;
--radius-xl: 12px;
--radius-2xl: 16px;
--radius-full: 9999px;
/* Transitions */
--transition-fast: 150ms ease;
--transition-base: 200ms ease;
--transition-slow: 300ms ease;
/* Typography */
--font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
--font-size-xs: 0.75rem;
--font-size-sm: 0.875rem;
--font-size-base: 1rem;
--font-size-lg: 1.125rem;
--font-size-xl: 1.25rem;
--font-size-2xl: 1.5rem;
--font-size-3xl: 1.875rem;
--font-size-4xl: 2.25rem;
}
/* ----- Reset & Base ----- */
*, *::before, *::after {
margin: 0;
padding: 0;
box-sizing: border-box;
}
html {
scroll-behavior: smooth;
}
body {
font-family: var(--font-sans);
font-size: var(--font-size-base);
line-height: 1.6;
color: var(--text-color);
background-color: var(--bg-color);
min-height: 100vh;
display: flex;
flex-direction: column;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
overflow-x: hidden;
}
/* Custom selection color */
::selection {
background-color: var(--primary-light);
color: var(--primary-color);
}
/* ----- Typography ----- */
h1, h2, h3, h4, h5, h6 {
font-weight: 600;
color: var(--text-color);
}
h1 { font-size: var(--font-size-3xl); line-height: 1.2; margin-bottom: var(--space-8); font-weight: 700; letter-spacing: -0.03em; }
h2 { font-size: var(--font-size-2xl); line-height: 1.2; margin-bottom: var(--space-6); margin-top: var(--space-10); letter-spacing: -0.02em; }
h3 { font-size: var(--font-size-xl); line-height: 1.3; margin-bottom: var(--space-5); margin-top: var(--space-8); font-weight: 600; }
h4 { font-size: var(--font-size-lg); line-height: 1.3; margin-bottom: var(--space-4); font-weight: 600; }
h5 { font-size: var(--font-size-base); line-height: 1.4; margin-bottom: var(--space-3); font-weight: 600; }
h6 { font-size: var(--font-size-xs); line-height: 1.4; margin-bottom: var(--space-2); font-weight: 600; text-transform: uppercase; letter-spacing: 0.08em; }
h2:first-child,
h3:first-child { margin-top: 0; }
p { margin-bottom: var(--space-4); }
p:last-child { margin-bottom: 0; }
a {
color: var(--primary-color);
text-decoration: none;
transition: color var(--transition-fast);
}
a:hover {
color: var(--primary-hover);
}
/* ----- Layout ----- */
.container {
max-width: 1200px;
margin: 0 auto;
padding: 0 var(--space-8);
}
@media (min-width: 1400px) {
.container {
max-width: 1320px;
padding: 0 var(--space-12);
}
}
/* Tablet breakpoint */
@media (min-width: 768px) and (max-width: 1024px) {
.container {
padding: 0 var(--space-6);
}
}
@media (max-width: 768px) {
.container {
padding: 0 var(--space-4);
}
}
/* ----- Navigation ----- */
.navbar {
background-color: var(--card-bg);
box-shadow: var(--shadow-sm);
padding: var(--space-4) 0;
margin-bottom: var(--space-8);
}
.sticky-navbar {
position: sticky;
top: 0;
z-index: 1000;
background-color: var(--card-bg);
box-shadow: var(--shadow-md);
padding: var(--space-4) 0;
}
.navbar-container {
display: flex;
justify-content: space-between;
align-items: center;
}
.logo {
display: flex;
align-items: center;
font-size: var(--font-size-xl);
font-weight: 800;
color: var(--primary-color);
text-decoration: none;
transition: opacity var(--transition-fast);
}
.logo-icon {
margin-right: var(--space-2);
}
.logo:hover {
opacity: 0.9;
color: var(--primary-color);
}
/* Hamburger Menu */
.hamburger {
display: none;
background: none;
border: none;
cursor: pointer;
padding: var(--space-2);
color: var(--text-color);
}
.hamburger svg {
width: 24px;
height: 24px;
stroke: currentColor;
stroke-width: 2;
fill: none;
}
.nav-links {
display: flex;
align-items: center;
list-style: none;
gap: var(--space-2);
}
.nav-links a {
display: flex;
align-items: center;
gap: var(--space-2);
padding: var(--space-3) var(--space-4);
color: var(--text-color);
text-decoration: none;
font-size: var(--font-size-sm);
font-weight: 500;
border-radius: var(--radius-lg);
transition: all var(--transition-fast);
min-height: 44px;
letter-spacing: -0.01em;
}
.nav-links a svg {
width: 18px;
height: 18px;
stroke: currentColor;
stroke-width: 2;
fill: none;
}
.nav-links a span {
display: inline;
}
/* Nav User Info */
.nav-user {
display: flex;
align-items: center;
gap: var(--space-2);
margin-left: var(--space-4);
padding-left: var(--space-4);
border-left: 1px solid var(--border-color);
text-decoration: none;
border-radius: var(--radius-lg);
padding: var(--space-2) var(--space-3);
transition: background-color var(--transition-fast);
}
.nav-user:hover {
background-color: var(--bg-color);
}
.nav-user-icon {
width: 20px;
height: 20px;
stroke: var(--primary-color);
stroke-width: 2;
fill: none;
}
.nav-user-name {
font-size: var(--font-size-sm);
font-weight: 600;
color: var(--text-color);
white-space: nowrap;
}
.nav-user-type {
font-size: var(--font-size-xs);
font-weight: 500;
color: var(--text-muted);
text-transform: uppercase;
letter-spacing: 0.05em;
background: var(--bg-color);
padding: 2px 6px;
border-radius: var(--radius-sm);
}
@media (max-width: 768px) {
.nav-user {
margin-left: auto;
border-left: none;
padding-left: 0;
}
.nav-user-type {
display: none;
}
}
.nav-links a:hover {
background-color: var(--bg-color);
color: var(--primary-color);
}
.nav-links a:hover svg {
stroke: var(--primary-color);
}
/* Mobile Navigation */
@media (max-width: 768px) {
.hamburger {
display: flex;
align-items: center;
justify-content: center;
}
.nav-links {
position: fixed;
top: 65px;
left: 0;
right: 0;
bottom: 0;
background-color: var(--card-bg);
flex-direction: column;
align-items: stretch;
padding: var(--space-4);
gap: var(--space-2);
transform: translateX(-100%);
transition: transform var(--transition-slow);
overflow-y: auto;
z-index: 999;
}
.nav-links.active {
transform: translateX(0);
}
.nav-links a {
padding: var(--space-4);
font-size: var(--font-size-base);
border-bottom: 1px solid var(--border-light);
}
.nav-links a span {
display: inline;
}
}
/* Tablet nav adjustments */
@media (min-width: 769px) and (max-width: 1024px) {
.nav-links {
gap: var(--space-1);
}
.nav-links a {
padding: var(--space-2) var(--space-3);
font-size: var(--font-size-sm);
}
.nav-links a svg {
width: 16px;
height: 16px;
}
}
/* ----- Main Content ----- */
main {
flex: 1;
padding-top: var(--space-6);
padding-bottom: var(--space-12);
}
/* ----- Footer ----- */
.footer {
background-color: var(--card-bg);
border-top: 1px solid var(--border-color);
padding: var(--space-6) 0;
margin-top: auto;
text-align: center;
color: var(--text-muted);
font-size: var(--font-size-sm);
}
.footer-love {
margin-top: var(--space-2);
font-size: var(--font-size-xs);
color: var(--text-light);
display: flex;
align-items: center;
justify-content: center;
gap: var(--space-1);
}
.cheese-heart {
vertical-align: middle;
flex-shrink: 0;
}
/* ----- Toast Notifications ----- */
.toast-container {
position: fixed;
top: var(--space-6);
right: var(--space-6);
z-index: 9999;
display: flex;
flex-direction: column;
gap: var(--space-3);
max-width: 400px;
}
.toast {
display: flex;
align-items: flex-start;
gap: var(--space-3);
padding: var(--space-4) var(--space-5);
background-color: var(--card-bg);
border-radius: var(--radius-xl);
box-shadow: var(--shadow-lg);
border-left: 4px solid var(--primary-color);
animation: toastIn 0.3s ease forwards;
}
.toast.toast-out {
animation: toastOut 0.3s ease forwards;
}
.toast-success {
border-left-color: var(--success-color);
}
.toast-error {
border-left-color: var(--danger-color);
}
.toast-warning {
border-left-color: var(--warning-color);
}
.toast-icon {
flex-shrink: 0;
width: 20px;
height: 20px;
}
.toast-success .toast-icon { color: var(--success-color); }
.toast-error .toast-icon { color: var(--danger-color); }
.toast-warning .toast-icon { color: var(--warning-color); }
.toast-content {
flex: 1;
}
.toast-message {
font-size: var(--font-size-sm);
color: var(--text-color);
line-height: 1.5;
}
.toast-close {
flex-shrink: 0;
background: none;
border: none;
cursor: pointer;
color: var(--text-muted);
padding: var(--space-1);
border-radius: var(--radius-md);
transition: all var(--transition-fast);
}
.toast-close:hover {
background-color: var(--bg-color);
color: var(--text-color);
}
.toast-close svg {
width: 16px;
height: 16px;
stroke: currentColor;
stroke-width: 2;
fill: none;
}
@keyframes toastIn {
from {
opacity: 0;
transform: translateX(100%);
}
to {
opacity: 1;
transform: translateX(0);
}
}
@keyframes toastOut {
from {
opacity: 1;
transform: translateX(0);
}
to {
opacity: 0;
transform: translateX(100%);
}
}
/* ----- Buttons ----- */
.btn {
display: inline-flex;
align-items: center;
justify-content: center;
gap: var(--space-2);
padding: var(--space-3) var(--space-6);
border-radius: var(--radius-lg);
font-family: var(--font-sans);
font-size: var(--font-size-sm);
font-weight: 500;
text-decoration: none;
text-align: center;
cursor: pointer;
border: none;
transition: all var(--transition-fast);
min-height: 44px;
vertical-align: middle;
}
.btn svg {
width: 18px;
height: 18px;
stroke: currentColor;
stroke-width: 2;
fill: none;
}
.btn-primary {
background-color: var(--primary-color);
color: white;
box-shadow: 0 1px 3px rgba(30, 58, 95, 0.15);
}
.btn-primary:hover {
background-color: var(--primary-hover);
box-shadow: 0 4px 12px rgba(30, 58, 95, 0.2);
transform: translateY(-1px);
color: white;
}
.btn-primary:active {
transform: translateY(0);
box-shadow: 0 1px 3px rgba(30, 58, 95, 0.1);
}
.btn-secondary {
background-color: var(--secondary-color);
color: white;
}
.btn-secondary:hover {
background-color: var(--secondary-hover);
color: white;
}
.btn-outline {
background-color: transparent;
border: 2px solid var(--primary-color);
color: var(--primary-color);
}
.btn-outline:hover {
background-color: var(--primary-color);
color: white;
}
.btn-success {
background-color: var(--success-color);
color: white;
}
.btn-success:hover {
background-color: #16a34a;
color: white;
}
.btn-danger {
background-color: var(--danger-color);
color: white;
}
.btn-danger:hover {
background-color: var(--danger-hover);
color: white;
}
.btn-ghost {
background-color: transparent;
color: var(--text-muted);
}
.btn-ghost:hover {
background-color: var(--bg-color);
color: var(--text-color);
}
.btn-block {
display: flex;
width: 100%;
}
.btn-sm {
padding: var(--space-2) var(--space-4);
font-size: var(--font-size-xs);
min-height: 36px;
}
/* Reminder Button Tooltip */
.remind-btn {
position: relative;
}
.remind-btn:hover::after {
content: attr(data-reminder-dates);
position: absolute;
bottom: 100%;
left: 50%;
transform: translateX(-50%);
background: var(--text-color);
color: var(--card-bg);
padding: var(--space-2) var(--space-3);
border-radius: var(--radius-md);
font-size: var(--font-size-xs);
white-space: nowrap;
z-index: 100;
margin-bottom: var(--space-2);
box-shadow: var(--shadow-lg);
}
.remind-btn:hover::before {
content: '';
position: absolute;
bottom: 100%;
left: 50%;
transform: translateX(-50%);
border: 6px solid transparent;
border-top-color: var(--text-color);
z-index: 100;
margin-bottom: -6px;
}
/* Show "No reminders sent yet" when dates array is empty */
.remind-btn[data-reminder-dates="[]"]::after {
content: "No reminders sent yet";
}
.btn-lg {
padding: var(--space-4) var(--space-8);
font-size: var(--font-size-base);
min-height: 52px;
}
/* Button loading state */
.btn-loading {
position: relative;
color: transparent !important;
pointer-events: none;
}
.btn-loading::after {
content: '';
position: absolute;
width: 18px;
height: 18px;
top: 50%;
left: 50%;
margin-top: -9px;
margin-left: -9px;
border: 2px solid transparent;
border-top-color: currentColor;
border-radius: 50%;
animation: spin 0.6s linear infinite;
}
.btn-primary.btn-loading::after {
border-top-color: white;
}
@keyframes spin {
to { transform: rotate(360deg); }
}
/* Focus ring for accessibility - WCAG 2.1 AA compliant */
.btn:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible,
a:focus-visible,
.toggle input:focus-visible + label {
outline: none;
box-shadow: 0 0 0 3px var(--primary-light), 0 0 0 5px var(--primary-color);
}
/* ----- Cards ----- */
.card {
background-color: var(--card-bg);
border-radius: var(--radius-xl);
padding: var(--space-8);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
border: 1px solid var(--border-color);
transition: all var(--transition-base);
}
.card:hover {
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.08);
transform: translateY(-2px);
}
.card-static {
background-color: var(--card-bg);
border-radius: var(--radius-xl);
padding: var(--space-8);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
border: 1px solid var(--border-color);
}
.event-card, .feature-card, .connection-card, .attendee-card {
background-color: var(--card-bg);
border-radius: var(--radius-xl);
padding: var(--space-8);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
border: 1px solid var(--border-color);
transition: all var(--transition-base);
}
.event-card:hover, .connection-card:hover, .attendee-card:hover {
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.08);
transform: translateY(-2px);
}
.event-card h3,
.connection-card h4,
.feature-card h3 {
color: var(--primary-color);
margin-bottom: var(--space-2);
}
.event-date, .event-location {
color: var(--text-muted);
font-size: var(--font-size-sm);
margin-bottom: var(--space-2);
}
.event-meta {
display: flex;
flex-wrap: wrap;
gap: var(--space-4);
color: var(--text-muted);
font-size: var(--font-size-sm);
margin-top: var(--space-4);
}
.event-card-actions {
display: flex;
flex-wrap: wrap;
gap: var(--space-3);
margin-top: var(--space-4);
}
.event-card-actions .btn,
.event-card-actions form .btn {
min-width: 140px;
padding: var(--space-3);
font-size: var(--font-size-sm);
}
.event-card-actions form {
display: inline-block;
}
/* ----- Grids ----- */
.events-grid, .features-grid, .connections-grid, .attendees-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
gap: var(--space-6);
margin-top: var(--space-6);
}
@media (min-width: 768px) and (max-width: 1024px) {
.events-grid, .features-grid, .connections-grid, .attendees-grid {
grid-template-columns: repeat(2, 1fr);
gap: var(--space-4);
}
}
@media (max-width: 480px) {
.events-grid, .features-grid, .connections-grid, .attendees-grid {
grid-template-columns: 1fr;
}
}
/* ----- Auth Forms ----- */
.auth-container {
display: flex;
justify-content: center;
align-items: center;
min-height: calc(100vh - 200px);
padding: var(--space-6) 0;
}
.auth-box {
background-color: var(--card-bg);
padding: var(--space-8);
border-radius: var(--radius-2xl);
box-shadow: var(--shadow-xl);
width: 100%;
max-width: 420px;
}
.auth-box h2 {
text-align: center;
margin-bottom: var(--space-6);
color: var(--text-color);
}
.user-type-tabs {
display: flex;
margin-bottom: var(--space-6);
background-color: var(--bg-color);
border-radius: var(--radius-lg);
padding: var(--space-1);
}
.tab-btn {
flex: 1;
padding: var(--space-3);
border: none;
background: transparent;
cursor: pointer;
font-size: var(--font-size-sm);
font-weight: 500;
color: var(--text-muted);
border-radius: var(--radius-md);
transition: all var(--transition-fast);
}
.tab-btn.active {
background-color: var(--card-bg);
color: var(--primary-color);
box-shadow: var(--shadow-sm);
}
.tab-btn:hover:not(.active) {
color: var(--text-color);
}
.auth-footer {
text-align: center;
margin-top: var(--space-6);
color: var(--text-muted);
font-size: var(--font-size-sm);
}
.attendee-link-box {
background-color: var(--primary-light);
border: 2px solid var(--primary-color);
border-radius: var(--radius-xl);
padding: var(--space-4);
margin-top: var(--space-6);
text-align: center;
}
.attendee-link-box p {
margin: 0;
color: var(--text-color);
font-size: var(--font-size-sm);
}
.attendee-link-box a {
color: var(--primary-color);
font-weight: 500;
}
/* ----- Forms ----- */
.form-group {
margin-bottom: var(--space-6);
}
.form-group label {
display: block;
margin-bottom: var(--space-3);
font-weight: 600;
font-size: var(--font-size-sm);
color: var(--text-color);
letter-spacing: 0.01em;
}
.form-group input,
.form-group textarea,
.form-group select {
width: 100%;
padding: var(--space-3) var(--space-4);
border: 1px solid var(--border-color);
border-radius: var(--radius-lg);
font-size: var(--font-size-base);
font-family: var(--font-sans);
color: var(--text-color);
background-color: var(--card-bg);
transition: all var(--transition-fast);
}
.form-group input::placeholder,
.form-group textarea::placeholder {
color: var(--text-light);
}
.form-group input:focus,
.form-group textarea:focus,
.form-group select:focus {
outline: none;
border-color: var(--primary-color);
box-shadow: 0 0 0 3px rgba(30, 58, 95, 0.1);
}
.form-group textarea {
min-height: 120px;
resize: vertical;
}
.input-readonly {
background-color: var(--bg-color);
color: var(--text-muted);
cursor: not-allowed;
}
.form-actions {
display: flex;
gap: var(--space-4);
margin-top: var(--space-6);
}
.form-actions .btn {
min-width: 120px;
}
.form-row {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: var(--space-5);
}
@media (max-width: 768px) {
.form-row {
grid-template-columns: 1fr;
}
}
/* Inline forms */
.inline-form {
display: inline-flex;
align-items: center;
}
/* ----- Tables ----- */
.table-container {
overflow-x: auto;
background-color: var(--card-bg);
border-radius: var(--radius-xl);
box-shadow: var(--shadow-md);
}
.attendees-table {
width: 100%;
border-collapse: collapse;
min-width: 600px;
}
.attendees-table th,
.attendees-table td {
padding: var(--space-4);
text-align: left;
border-bottom: 1px solid var(--border-color);
}
.attendees-table th {
background-color: var(--bg-color);
font-weight: 600;
font-size: var(--font-size-xs);
color: var(--text-muted);
text-transform: uppercase;
letter-spacing: 0.08em;
}
.attendees-table tr:last-child td {
border-bottom: none;
}
.attendees-table tr:hover td {
background-color: var(--bg-color);
}
@media (min-width: 768px) and (max-width: 1024px) {
.attendees-table th,
.attendees-table td {
padding: var(--space-3);
font-size: var(--font-size-sm);
}
}
@media (max-width: 768px) {
.table-container {
border-radius: var(--radius-lg);
}
.attendees-table {
font-size: var(--font-size-sm);
}
.attendees-table th,
.attendees-table td {
padding: var(--space-3) var(--space-2);
}
}
/* ----- Badges / Pills ----- */
.badge {
display: inline-flex;
align-items: center;
gap: var(--space-1);
padding: var(--space-1) var(--space-3);
border-radius: var(--radius-full);
font-size: var(--font-size-xs);
font-weight: 500;
}
.badge svg {
width: 12px;
height: 12px;
stroke: currentColor;
stroke-width: 2;
fill: none;
}
.badge-success {
background-color: var(--success-light);
color: #166534;
}
.badge-pending {
background-color: var(--warning-light);
color: #92400e;
}
.badge-rejected {
background-color: var(--danger-light);
color: #991b1b;
}
.badge-info {
background-color: var(--primary-light);
color: #1e40af;
}
.badge-sm {
font-size: 10px;
padding: 2px 6px;
}
/* ----- Dashboard ----- */
.dashboard h1,
.event-detail .event-header h1,
.profile-page h1,
.badges-page .badges-header h1 {
padding-bottom: var(--space-4);
border-bottom: 2px solid var(--border-color);
margin-bottom: var(--space-6);
}
.dashboard-header {
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
gap: var(--space-4);
margin-bottom: var(--space-6);
}
.dashboard-actions {
display: flex;
flex-wrap: wrap;
gap: var(--space-3);
margin-bottom: var(--space-6);
}
.events-list {
display: flex;
flex-direction: column;
gap: var(--space-4);
}
.event-item {
display: flex;
justify-content: space-between;
align-items: center;
gap: var(--space-4);
background-color: var(--card-bg);
padding: var(--space-5);
border-radius: var(--radius-xl);
box-shadow: var(--shadow-md);
transition: all var(--transition-fast);
}
.event-item:hover {
box-shadow: var(--shadow-lg);
}
.event-item-info {
flex: 1;
}
.event-item-info h3 {
margin-bottom: var(--space-2);
font-size: var(--font-size-lg);
}
.event-item-info p {
color: var(--text-muted);
font-size: var(--font-size-sm);
margin-bottom: 0;
}
.event-item-actions {
display: flex;
gap: var(--space-2);
flex-shrink: 0;
}
@media (max-width: 768px) {
.event-item {
flex-direction: column;
align-items: stretch;
gap: var(--space-4);
}
.event-item-actions {
justify-content: flex-start;
}
.dashboard-header {
flex-direction: column;
align-items: stretch;
}
}
/* ----- Form Container ----- */
.form-container,
.event-staff {
background-color: var(--card-bg);
padding: var(--space-8);
border-radius: var(--radius-xl);
box-shadow: var(--shadow-md);
max-width: 800px;
}
.form-container h1,
.event-staff h1 {
margin-bottom: var(--space-6);
}
/* ----- Event Detail Page ----- */
.event-header {
display: flex;
flex-direction: column;
gap: var(--space-4);
margin-bottom: var(--space-6);
}
.event-header h1 {
margin: 0;
}
.event-actions {
display: flex;
flex-wrap: wrap;
gap: var(--space-3);
}
/* Event Meta Box */
.event-meta-box,
.event-description-box {
background-color: var(--card-bg);
padding: var(--space-5);
border-radius: var(--radius-xl);
margin-bottom: var(--space-5);
}
.event-meta-box p,
.event-description-box p {
margin-bottom: var(--space-2);
}
.event-meta-box p:last-child,
.event-description-box p:last-child {
margin-bottom: 0;
}
/* ----- Badges Print Page ----- */
.badges-page {
padding: var(--space-6) 0;
}
.badges-header {
text-align: center;
margin-bottom: var(--space-6);
padding-bottom: var(--space-4);
border-bottom: 2px solid var(--border-color);
}
.badges-header h1 {
margin-bottom: var(--space-2);
}
.badges-header p {
color: var(--text-muted);
}
.badges-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
gap: var(--space-5);
}
.badge-card {
border: 2px solid #333;
border-radius: var(--radius-lg);
background: white;
overflow: hidden;
}
.badge-header {
background-color: var(--bg-color);
padding: var(--space-4);
border-bottom: 1px solid var(--border-color);
}
.badge-header h3 {
margin: 0;
font-size: var(--font-size-lg);
font-weight: 600;
}
.badge-body {
padding: var(--space-4);
min-height: 100px;
}
.badge-org {
font-weight: 600;
font-size: var(--font-size-base);
margin-bottom: var(--space-1);
}
.badge-role {
color: var(--text-muted);
font-size: var(--font-size-sm);
margin-bottom: var(--space-2);
}
.badge-intro {
font-size: var(--font-size-xs);
color: var(--text-muted);
font-style: italic;
}
.badge-footer {
display: flex;
justify-content: space-between;
align-items: center;
padding: var(--space-3) var(--space-4);
border-top: 1px solid var(--border-color);
font-size: var(--font-size-xs);
color: var(--text-muted);
}
.badge-check {
display: flex;
align-items: center;
gap: var(--space-1);
}
.badge-check.checked-in {
color: var(--success-color);
font-weight: 600;
}
.badge-check svg {
width: 14px;
height: 14px;
stroke: currentColor;
stroke-width: 2;
fill: none;
}
/* Print styles for badges */
@media print {
body * {
visibility: hidden;
}
.badges-page, .badges-page * {
visibility: visible;
}
.badges-page {
position: absolute;
left: 0;
top: 0;
width: 100%;
}
.badge-card {
page-break-inside: avoid;
border: 1px solid #000;
}
.badges-header {
display: none;
}
.btn, .no-print {
display: none !important;
}
}
/* ----- Profile Page ----- */
.profile-page h1 {
margin-bottom: var(--space-6);
}
.profile-container {
display: grid;
grid-template-columns: 280px 1fr;
gap: var(--space-8);
background-color: var(--card-bg);
padding: var(--space-8);
border-radius: var(--radius-2xl);
box-shadow: var(--shadow-lg);
}
@media (max-width: 768px) {
.profile-container {
grid-template-columns: 1fr;
gap: var(--space-6);
padding: var(--space-6);
}
}
.profile-photo-section {
text-align: center;
}
.current-photo {
margin-bottom: var(--space-4);
}
.no-photo {
width: 160px;
height: 160px;
border-radius: 50%;
background-color: var(--bg-color);
display: flex;
align-items: center;
justify-content: center;
margin: 0 auto;
font-size: 3rem;
color: var(--text-muted);
border: 4px solid var(--border-color);
}
.no-photo svg {
width: 48px;
height: 48px;
stroke: currentColor;
stroke-width: 1.5;
fill: none;
}
/* ----- Attendees Page ----- */
.attendees-page {
padding: 0;
}
.attendees-page h1 {
margin-bottom: var(--space-3);
}
.event-info-header {
margin-bottom: var(--space-6);
padding-bottom: var(--space-4);
border-bottom: 1px solid var(--border-color);
}
.event-info-header h1 {
margin-bottom: var(--space-2);
}
.event-description {
color: var(--text-muted);
margin-top: var(--space-2);
}
.page-subtitle {
color: var(--text-muted);
margin-bottom: var(--space-6);
}
.attendee-search {
margin-bottom: var(--space-6);
}
.attendee-search form {
display: flex;
gap: var(--space-4);
flex-wrap: wrap;
}
.attendee-search input {
flex: 1;
min-width: 250px;
max-width: 400px;
padding: var(--space-3) var(--space-4);
border: 1px solid var(--border-color);
border-radius: var(--radius-lg);
font-size: var(--font-size-base);
}
.search-hint {
color: var(--text-muted);
font-size: var(--font-size-sm);
margin-top: var(--space-2);
}
.search-too-broad {
color: var(--danger-color);
padding: var(--space-4);
background: var(--danger-light);
border-radius: var(--radius-lg);
margin-top: var(--space-3);
}
.attendee-card {
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
padding: var(--space-5);
}
.attendee-photo {
width: 80px;
height: 80px;
margin-bottom: var(--space-4);
}
.attendee-photo img {
width: 100%;
height: 100%;
border-radius: 50%;
object-fit: cover;
border: 3px solid var(--border-color);
}
.attendee-photo .no-photo {
width: 80px;
height: 80px;
font-size: 1.5rem;
}
.attendee-info h3 {
margin-bottom: var(--space-1);
}
.attendee-org {
font-weight: 600;
color: var(--primary-color);
font-size: var(--font-size-sm);
}
.attendee-role {
color: var(--text-muted);
font-size: var(--font-size-sm);
}
.attendee-intro {
font-size: var(--font-size-xs);
color: var(--text-muted);
margin-top: var(--space-2);
line-height: 1.5;
}
.attendee-actions {
margin-top: var(--space-4);
}
/* ----- Appointments & Connections ----- */
.pending-section,
.connections-section,
.appointments-section {
margin-top: var(--space-8);
}
.pending-section h2,
.connections-section h2,
.appointments-section h2 {
margin-bottom: var(--space-4);
}
.pending-list,
.appointments-list {
display: flex;
flex-direction: column;
gap: var(--space-4);
}
.pending-item,
.appointment-item {
display: flex;
justify-content: space-between;
align-items: center;
background-color: var(--card-bg);
padding: var(--space-5);
border-radius: var(--radius-xl);
box-shadow: var(--shadow-md);
gap: var(--space-4);
}
.pending-info,
.apt-info {
display: flex;
flex-direction: column;
gap: var(--space-1);
}
.pending-actions,
.apt-actions {
display: flex;
gap: var(--space-2);
}
.section-actions {
margin-bottom: var(--space-4);
}
.text-muted {
color: var(--text-muted);
font-size: var(--font-size-sm);
}
.text-light {
color: var(--text-light);
font-size: var(--font-size-sm);
}
.text-sm {
font-size: var(--font-size-sm);
}
.text-xs {
font-size: var(--font-size-xs);
}
.text-uppercase {
text-transform: uppercase;
letter-spacing: 0.05em;
}
.font-medium {
font-weight: 500;
}
.font-semibold {
font-weight: 600;
}
/* ----- Display Utilities ----- */
.d-none { display: none; }
.d-inline { display: inline; }
.d-block { display: block; }
.d-flex { display: flex; }
.d-grid { display: grid; }
/* ----- Vertical Alignment ----- */
.align-middle { vertical-align: middle; }
/* ----- Code Style ----- */
.code {
background: var(--bg-color);
padding: var(--space-1) var(--space-2);
border-radius: var(--radius-md);
font-size: var(--font-size-xs);
font-family: 'SF Mono', Monaco, 'Courier New', monospace;
}
/* ----- Text Colors ----- */
.text-success { color: var(--success-color); }
.text-danger { color: var(--danger-color); }
.text-warning { color: var(--warning-color); }
.text-primary { color: var(--primary-color); }
.text-muted { color: var(--text-muted); }
/* ----- Font Weights ----- */
.font-medium { font-weight: 500; }
.font-bold { font-weight: 700; }
/* ----- Spacing Utilities ----- */
.m-0 { margin: 0; }
.mt-2 { margin-top: var(--space-2); }
.mt-4 { margin-top: var(--space-4); }
.mb-0 { margin-bottom: 0; }
.ml-2 { margin-left: var(--space-2); }
.ml-4 { margin-left: var(--space-4); }
.p-0 { padding: 0; }
.p-4 { padding: var(--space-4); }
.px-4 { padding-left: var(--space-4); padding-right: var(--space-4); }
.py-2 { padding-top: var(--space-2); padding-bottom: var(--space-2); }
.py-4 { padding-top: var(--space-4); padding-bottom: var(--space-4); }
/* ----- Flexbox Utilities ----- */
.flex-wrap { flex-wrap: wrap; }
.items-center { align-items: center; }
.items-end { align-items: flex-end; }
.justify-between { justify-content: space-between; }
.gap-2 { gap: var(--space-2); }
.gap-3 { gap: var(--space-3); }
.gap-4 { gap: var(--space-4); }
/* ----- Width Utilities ----- */
.w-full { width: 100%; }
.w-auto { width: auto; }
/* ----- Text Alignment ----- */
.text-center { text-align: center; }
.text-left { text-align: left; }
.text-right { text-align: right; }
/* ----- Border ----- */
.border-top {
border-top: 1px solid var(--border-color);
padding-top: var(--space-4);
margin-top: var(--space-4);
}
.border-bottom {
border-bottom: 1px solid var(--border-color);
}
/* ----- Overflow ----- */
.overflow-hidden { overflow: hidden; }
/* ----- Forms ----- */
select {
padding: var(--space-2) var(--space-3);
border: 1px solid var(--border-color);
border-radius: var(--radius-lg);
font-size: var(--font-size-sm);
font-family: var(--font-sans);
background-color: var(--card-bg);
cursor: pointer;
}
select:focus {
outline: none;
border-color: var(--primary-color);
box-shadow: 0 0 0 3px rgba(30, 58, 95, 0.1);
}
/* ----- Table Column Widths ----- */
.checkbox-col { width: 40px; }
.th-40 { width: 40px; }
/* ----- Batch Type Select ----- */
.batch-type-select {
padding: var(--space-2) var(--space-3);
}
/* ----- Add Staff Form ----- */
.add-staff-form {
margin-bottom: var(--space-5);
padding: var(--space-5);
background: var(--bg-color);
border-radius: var(--radius-lg);
}
.add-staff-form.shown {
display: block;
}
/* ----- Modal Overlay ----- */
.modal-overlay {
display: none;
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: rgba(0, 0, 0, 0.5);
align-items: center;
justify-content: center;
z-index: 9999;
}
.modal-overlay.active {
display: flex;
}
.no-data {
color: var(--text-muted);
font-style: italic;
padding: var(--space-6);
text-align: center;
background-color: var(--card-bg);
border-radius: var(--radius-xl);
}
/* ----- Hero Section ----- */
.hero {
text-align: center;
padding: var(--space-16) 0;
}
.hero h1 {
font-size: var(--font-size-4xl);
margin-bottom: var(--space-4);
}
.hero p {
color: var(--text-muted);
font-size: var(--font-size-lg);
max-width: 600px;
margin: 0 auto var(--space-8);
}
.hero-buttons {
display: flex;
gap: var(--space-4);
justify-content: center;
flex-wrap: wrap;
}
@media (max-width: 768px) {
.hero {
padding: var(--space-10) 0;
}
.hero h1 {
font-size: var(--font-size-3xl);
}
.hero-buttons {
flex-direction: column;
align-items: center;
}
.hero-buttons .btn {
width: 100%;
max-width: 300px;
}
}
/* ----- Empty States ----- */
.empty-state {
text-align: center;
padding: var(--space-12) var(--space-6);
}
.empty-state-icon {
width: 64px;
height: 64px;
margin: 0 auto var(--space-4);
color: var(--text-light);
}
.empty-state-icon svg {
width: 100%;
height: 100%;
stroke: currentColor;
stroke-width: 1.5;
fill: none;
}
.empty-state h3 {
color: var(--text-muted);
margin-bottom: var(--space-2);
}
.empty-state p {
color: var(--text-light);
font-size: var(--font-size-sm);
}
/* ----- Page Headers ----- */
.page-header {
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
gap: var(--space-5);
margin-bottom: var(--space-8);
}
.page-header h1 {
margin-bottom: 0;
}
.page-header .page-subtitle {
color: var(--text-muted);
font-size: var(--font-size-base);
font-weight: 400;
margin-top: var(--space-2);
}
.page-label {
display: block;
font-size: var(--font-size-xs);
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.1em;
color: var(--text-light);
margin-bottom: var(--space-3);
}
/* ----- Alert / Info Boxes ----- */
.alert {
padding: var(--space-4) var(--space-5);
border-radius: var(--radius-lg);
margin-bottom: var(--space-4);
display: flex;
align-items: flex-start;
gap: var(--space-3);
}
.alert svg {
width: 20px;
height: 20px;
flex-shrink: 0;
stroke: currentColor;
stroke-width: 2;
fill: none;
}
.alert-info {
background-color: var(--primary-light);
color: #1e40af;
}
.alert-success {
background-color: var(--success-light);
color: #166534;
}
.alert-warning {
background-color: var(--warning-light);
color: #92400e;
}
.alert-danger {
background-color: var(--danger-light);
color: #991b1b;
}
/* ----- Modal ----- */
.modal-overlay {
display: none;
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: rgba(0, 0, 0, 0.5);
align-items: center;
justify-content: center;
z-index: 9999;
padding: var(--space-4);
}
.modal-overlay.active {
display: flex;
animation: fadeIn 0.2s ease;
}
.modal {
background-color: var(--card-bg);
border-radius: var(--radius-2xl);
padding: var(--space-6);
max-width: 500px;
width: 100%;
max-height: 90vh;
overflow-y: auto;
box-shadow: var(--shadow-xl);
animation: slideUp 0.3s ease;
}
.modal-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: var(--space-5);
}
.modal-header h2 {
margin: 0;
}
.modal-close {
background: none;
border: none;
cursor: pointer;
color: var(--text-muted);
padding: var(--space-2);
border-radius: var(--radius-md);
transition: all var(--transition-fast);
}
.modal-close:hover {
background-color: var(--bg-color);
color: var(--text-color);
}
.modal-close svg {
width: 20px;
height: 20px;
stroke: currentColor;
stroke-width: 2;
fill: none;
}
.modal-body {
margin-bottom: var(--space-5);
}
.modal-footer {
display: flex;
justify-content: flex-end;
gap: var(--space-3);
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
@keyframes slideUp {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
/* ----- Tabs / Tab Content ----- */
.tabs {
display: flex;
border-bottom: 2px solid var(--border-color);
margin-bottom: var(--space-6);
gap: var(--space-1);
}
.tab {
padding: var(--space-3) var(--space-5);
color: var(--text-muted);
font-weight: 500;
font-size: var(--font-size-sm);
border-bottom: 2px solid transparent;
margin-bottom: -2px;
cursor: pointer;
transition: all var(--transition-fast);
}
.tab:hover {
color: var(--text-color);
}
.tab.active {
color: var(--primary-color);
border-bottom-color: var(--primary-color);
}
.tab-content {
display: none;
}
.tab-content.active {
display: block;
}
/* ----- Progress Indicators ----- */
.progress-bar {
height: 8px;
background-color: var(--border-color);
border-radius: var(--radius-full);
overflow: hidden;
}
.progress-bar-fill {
height: 100%;
border-radius: var(--radius-full);
transition: width var(--transition-slow);
}
.progress-bar-fill.low { background-color: var(--danger-color); }
.progress-bar-fill.medium { background-color: var(--warning-color); }
.progress-bar-fill.high { background-color: var(--success-color); }
/* ----- Loading Skeleton ----- */
.skeleton {
background: linear-gradient(90deg, var(--border-light) 25%, var(--bg-color) 50%, var(--border-light) 75%);
background-size: 200% 100%;
animation: shimmer 1.5s infinite;
border-radius: var(--radius-md);
}
@keyframes shimmer {
0% { background-position: 200% 0; }
100% { background-position: -200% 0; }
}
/* ----- Scan Page Styles ----- */
.scan-page {
max-width: 600px;
margin: 0 auto;
padding: var(--space-6);
}
.scan-header {
text-align: center;
margin-bottom: var(--space-6);
}
.scan-header h1 {
margin-bottom: var(--space-2);
}
.scan-stats {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: var(--space-4);
margin-bottom: var(--space-6);
}
.scan-stat {
background-color: var(--card-bg);
padding: var(--space-4);
border-radius: var(--radius-xl);
text-align: center;
box-shadow: var(--shadow-md);
}
.scan-stat-value {
font-size: var(--font-size-2xl);
font-weight: 700;
color: var(--text-color);
}
.scan-stat-label {
font-size: var(--font-size-xs);
color: var(--text-muted);
text-transform: uppercase;
letter-spacing: 0.05em;
margin-top: var(--space-1);
}
.scan-stat-value.success { color: var(--success-color); }
.scan-stat-value.error { color: var(--danger-color); }
.scan-stat-value.warning { color: var(--warning-color); }
.scan-result {
background-color: var(--card-bg);
padding: var(--space-4);
border-radius: var(--radius-xl);
margin-bottom: var(--space-4);
display: flex;
align-items: center;
gap: var(--space-4);
}
.scan-result-icon {
width: 48px;
height: 48px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
}
.scan-result-icon svg {
width: 24px;
height: 24px;
stroke: currentColor;
stroke-width: 2;
fill: none;
}
.scan-result-icon.success {
background-color: var(--success-light);
color: var(--success-color);
}
.scan-result-icon.error {
background-color: var(--danger-light);
color: var(--danger-color);
}
.scan-result-icon.warning {
background-color: var(--warning-light);
color: var(--warning-color);
}
.scan-result-info {
flex: 1;
}
.scan-result-name {
font-weight: 600;
font-size: var(--font-size-lg);
margin-bottom: var(--space-1);
}
.scan-result-meta {
color: var(--text-muted);
font-size: var(--font-size-sm);
}
.recent-scans {
margin-top: var(--space-6);
}
.recent-scans h3 {
font-size: var(--font-size-sm);
color: var(--text-muted);
text-transform: uppercase;
letter-spacing: 0.05em;
margin-bottom: var(--space-3);
}
.recent-scan-item {
display: flex;
align-items: center;
gap: var(--space-3);
padding: var(--space-3);
background-color: var(--card-bg);
border-radius: var(--radius-lg);
margin-bottom: var(--space-2);
}
.recent-scan-item .check-icon {
width: 20px;
height: 20px;
color: var(--success-color);
}
.recent-scan-item .check-icon svg {
width: 100%;
height: 100%;
stroke: currentColor;
stroke-width: 2;
fill: none;
}
/* ----- Breakout Sessions ----- */
.session-card {
background-color: var(--card-bg);
border-radius: var(--radius-xl);
padding: var(--space-5);
margin-bottom: var(--space-4);
box-shadow: var(--shadow-md);
border-left: 4px solid var(--primary-color);
}
.session-card.breakout-full {
border-left-color: var(--danger-color);
}
.session-card-header {
display: flex;
justify-content: space-between;
align-items: flex-start;
gap: var(--space-4);
margin-bottom: var(--space-3);
}
.session-card-title {
font-size: var(--font-size-lg);
font-weight: 600;
margin: 0;
}
.session-card-meta {
color: var(--text-muted);
font-size: var(--font-size-sm);
margin-bottom: var(--space-3);
}
.session-card-meta span {
margin-right: var(--space-4);
}
.session-card-meta svg {
width: 14px;
height: 14px;
stroke: currentColor;
stroke-width: 2;
fill: none;
vertical-align: middle;
margin-right: var(--space-1);
}
.session-card-description {
color: var(--text-muted);
font-size: var(--font-size-sm);
margin-bottom: var(--space-4);
}
.session-card-actions {
display: flex;
gap: var(--space-3);
}
/* ----- Photo Cropper ----- */
.photo-cropper {
max-width: 400px;
margin: 0 auto;
}
.cropper-container {
position: relative;
width: 100%;
height: 300px;
background-color: var(--bg-color);
border-radius: var(--radius-lg);
overflow: hidden;
margin-bottom: var(--space-4);
}
.cropper-container img {
position: absolute;
max-width: 100%;
max-height: 100%;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
.crop-controls {
display: flex;
justify-content: center;
gap: var(--space-4);
margin-bottom: var(--space-4);
}
.zoom-control {
display: flex;
align-items: center;
gap: var(--space-2);
}
.zoom-control input[type="range"] {
width: 150px;
}
/* ----- Toggle Switch ----- */
.toggle {
position: relative;
display: inline-flex;
align-items: center;
cursor: pointer;
}
.toggle input {
position: absolute;
opacity: 0;
width: 0;
height: 0;
}
.toggle-slider {
width: 48px;
height: 26px;
background-color: var(--border-color);
border-radius: var(--radius-full);
transition: all var(--transition-fast);
position: relative;
}
.toggle-slider::before {
content: '';
position: absolute;
width: 20px;
height: 20px;
background-color: white;
border-radius: 50%;
top: 3px;
left: 3px;
transition: all var(--transition-fast);
box-shadow: var(--shadow-sm);
}
.toggle input:checked + .toggle-slider {
background-color: var(--success-color);
}
.toggle input:checked + .toggle-slider::before {
transform: translateX(22px);
}
.toggle-label {
margin-left: var(--space-3);
font-size: var(--font-size-sm);
color: var(--text-muted);
}
/* ----- Pagination ----- */
.pagination {
display: flex;
justify-content: center;
align-items: center;
gap: var(--space-2);
margin-top: var(--space-6);
}
.pagination-btn {
min-width: 40px;
height: 40px;
display: flex;
align-items: center;
justify-content: center;
border-radius: var(--radius-lg);
font-size: var(--font-size-sm);
font-weight: 500;
color: var(--text-muted);
background-color: var(--card-bg);
border: 1px solid var(--border-color);
transition: all var(--transition-fast);
}
.pagination-btn:hover:not(:disabled) {
background-color: var(--bg-color);
color: var(--text-color);
border-color: var(--text-muted);
}
.pagination-btn.active {
background-color: var(--primary-color);
color: white;
border-color: var(--primary-color);
}
.pagination-btn:disabled {
opacity: 0.5;
cursor: not-allowed;
}
.pagination-btn svg {
width: 16px;
height: 16px;
stroke: currentColor;
stroke-width: 2;
fill: none;
}
/* ----- Responsive Utilities ----- */
@media (max-width: 768px) {
.hide-mobile { display: none !important; }
.container { padding: 0 var(--space-4); }
.card { padding: var(--space-4); }
.form-container { padding: var(--space-5); }
}
@media (min-width: 769px) and (max-width: 1024px) {
.hide-tablet { display: none !important; }
}
@media (min-width: 1025px) {
.hide-desktop { display: none !important; }
}
/* ----- Connection Requests Page ----- */
.connection-requests {
max-width: 900px;
margin: 0 auto;
}
.connection-requests h1 {
margin-bottom: var(--space-2);
}
.connection-requests > p {
color: var(--text-muted);
margin-bottom: var(--space-6);
}
.requests-list {
display: flex;
flex-direction: column;
gap: var(--space-4);
}
.request-card {
display: flex;
gap: var(--space-5);
padding: var(--space-5);
border: 1px solid var(--border-color);
border-radius: var(--radius-xl);
background: var(--card-bg);
box-shadow: var(--shadow-md);
transition: all var(--transition-fast);
}
.request-card:hover {
box-shadow: var(--shadow-lg);
}
@media (max-width: 768px) {
.request-card {
flex-direction: column;
align-items: center;
text-align: center;
}
}
.request-profile {
flex-shrink: 0;
}
.request-profile .profile-photo {
width: 80px;
height: 80px;
border-radius: 50%;
object-fit: cover;
border: 3px solid var(--border-color);
}
.request-profile .profile-photo-placeholder {
width: 80px;
height: 80px;
border-radius: 50%;
background: var(--bg-color);
display: flex;
align-items: center;
justify-content: center;
font-size: var(--font-size-xl);
font-weight: 700;
color: var(--text-muted);
border: 3px solid var(--border-color);
}
.request-info {
flex: 1;
}
.request-info h3 {
margin: 0 0 var(--space-1) 0;
font-size: var(--font-size-lg);
}
.request-email {
color: var(--text-muted);
margin: 0 0 var(--space-1) 0;
font-size: var(--font-size-sm);
}
.request-org {
color: var(--secondary-color);
margin: 0 0 var(--space-3) 0;
font-size: var(--font-size-sm);
}
.request-intro {
font-style: italic;
color: var(--text-muted);
margin: 0 0 var(--space-3) 0;
font-size: var(--font-size-sm);
padding-left: var(--space-3);
border-left: 3px solid var(--border-color);
}
.request-time {
font-size: var(--font-size-xs);
color: var(--text-light);
margin: 0;
}
.request-actions {
display: flex;
flex-direction: column;
gap: var(--space-3);
justify-content: center;
}
@media (max-width: 768px) {
.request-actions {
flex-direction: row;
width: 100%;
}
.request-actions .btn {
flex: 1;
}
}
.no-requests {
text-align: center;
padding: var(--space-10);
color: var(--text-muted);
background: var(--card-bg);
border-radius: var(--radius-xl);
}
.back-link {
margin-top: var(--space-6);
}
/* ----- Attendee Dashboard ----- */
.attendee-dashboard {
padding: var(--space-6) 0;
max-width: 1600px;
margin: 0 auto;
}
.attendee-dashboard h1 {
margin-bottom: var(--space-6);
}
.event-info {
margin-bottom: var(--space-8);
}
.event-info h2 {
margin-bottom: var(--space-4);
}
.connection-org {
font-weight: 500;
color: var(--primary-color);
}
.connection-role {
color: var(--text-muted);
font-size: var(--font-size-sm);
}
/* ----- Badge Print Styles ----- */
.badge-header h3 {
margin: 0;
font-size: 30pt;
line-height: 1.1;
}
.badge-header h3 .first-name,
.badge-header h3 .last-name {
display: inline;
line-height: 1.1;
font-size: 30pt;
}
.badge-header h3 .last-name:before {
content: ' ';
}
.badge-qr img {
width: 100px;
height: 100px;
}
.header-actions {
display: flex;
flex-wrap: wrap;
gap: var(--space-3);
justify-content: center;
margin-top: var(--space-4);
}
.badge-event-bar {
background: #000;
color: #fff;
padding: var(--space-2) var(--space-4);
font-size: 12pt;
text-align: center;
margin-top: var(--space-3);
}
/* ----- Organizer Dashboard ----- */
.organizer-dashboard {
width: 100%;
margin: 0 auto;
padding: var(--space-6) 0;
max-width: 1600px;
}
.organizer-dashboard h1 {
margin-bottom: var(--space-6);
}
.organizer-dashboard .dashboard-actions {
margin-bottom: var(--space-6);
}
.my-events {
margin-top: var(--space-8);
}
.my-events h2 {
margin-bottom: var(--space-4);
}
.organizer-events-list {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(400px, 1fr));
gap: var(--space-5);
width: 100%;
}
@media (max-width: 768px) {
.organizer-events-list {
grid-template-columns: 1fr;
}
}
@media (min-width: 1400px) {
.organizer-events-list {
grid-template-columns: repeat(3, 1fr);
gap: var(--space-6);
}
}
@media (min-width: 1800px) {
.organizer-events-list {
grid-template-columns: repeat(4, 1fr);
}
}
.organizer-event-item {
display: flex;
flex-direction: column;
width: 100%;
padding: var(--space-5);
box-sizing: border-box;
}
.organizer-event-item .event-item-header {
display: flex;
justify-content: space-between;
align-items: flex-start;
flex-wrap: wrap;
gap: var(--space-3);
width: 100%;
margin-bottom: var(--space-4);
}
.organizer-event-item .event-item-header h3 {
margin: 0;
font-size: var(--font-size-lg);
}
.organizer-event-item .event-info {
width: 100%;
}
.organizer-event-item .event-info p {
margin-bottom: var(--space-1);
font-size: var(--font-size-sm);
color: var(--text-muted);
}
.organizer-progress-bar {
background: var(--border-color);
border-radius: var(--radius-full);
height: 8px;
width: 100%;
overflow: hidden;
margin-top: var(--space-2);
}
.organizer-progress-bar .progress-fill {
height: 100%;
background: var(--success-color);
transition: width var(--transition-slow);
border-radius: var(--radius-full);
}
.organizer-progress-bar .progress-fill.warning {
background: var(--warning-color);
}
.organizer-progress-bar .progress-fill.full {
background: var(--danger-color);
}
.organizer-event-capacity {
font-size: var(--font-size-sm);
color: var(--text-muted);
margin-top: var(--space-2);
}
.organizer-event-section {
margin-top: var(--space-4);
padding-top: var(--space-4);
border-top: 1px solid var(--border-color);
}
.section-toggle {
cursor: pointer;
padding: var(--space-3) var(--space-4);
background: var(--bg-color);
border-radius: var(--radius-lg);
margin-bottom: var(--space-3);
display: flex;
justify-content: space-between;
align-items: center;
transition: all var(--transition-fast);
}
.section-toggle:hover {
background: var(--border-color);
}
.section-toggle::after {
content: '';
width: 0;
height: 0;
border-left: 5px solid transparent;
border-right: 5px solid transparent;
border-top: 6px solid var(--text-muted);
transition: transform var(--transition-fast);
}
.section-toggle.collapsed::after {
transform: rotate(180deg);
}
.section-content {
padding: var(--space-3) 0;
width: 100%;
}
.section-content.collapsed {
display: none;
}
.item-list {
display: flex;
flex-direction: column;
gap: var(--space-2);
width: 100%;
}
.list-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: var(--space-3) var(--space-4);
background: var(--bg-color);
border-radius: var(--radius-lg);
width: 100%;
box-sizing: border-box;
}
.list-item-info {
flex: 1;
}
.list-item-info strong {
display: block;
font-size: var(--font-size-sm);
}
.list-item-info span {
font-size: var(--font-size-xs);
color: var(--text-muted);
}
.list-item-actions {
display: flex;
gap: var(--space-2);
}
.pagination-controls {
display: flex;
justify-content: center;
gap: var(--space-2);
margin-top: var(--space-4);
padding-top: var(--space-4);
border-top: 1px solid var(--border-color);
flex-wrap: wrap;
}
.pagination-controls button {
min-width: 36px;
height: 36px;
font-size: var(--font-size-sm);
}
.no-events {
text-align: center;
padding: var(--space-10);
color: var(--text-muted);
background: var(--card-bg);
border-radius: var(--radius-xl);
box-shadow: var(--shadow-md);
}
.no-events a {
font-weight: 500;
}
/* ----- Profile Page ----- */
.profile-page {
max-width: 900px;
margin: 0 auto;
padding: var(--space-6) 0;
}
.profile-page h1 {
margin-bottom: var(--space-6);
}
.profile-page .profile-container {
display: grid;
grid-template-columns: 280px 1fr;
gap: var(--space-8);
background: var(--card-bg);
padding: var(--space-8);
border-radius: var(--radius-2xl);
box-shadow: var(--shadow-lg);
}
@media (max-width: 768px) {
.profile-page .profile-container {
grid-template-columns: 1fr;
gap: var(--space-6);
padding: var(--space-6);
}
}
.profile-photo-box {
background: var(--bg-color);
border: 1px solid var(--border-color);
border-radius: var(--radius-xl);
padding: var(--space-5);
text-align: center;
}
.profile-photo-box h3 {
margin-bottom: var(--space-4);
color: var(--text-color);
}
.profile-page .profile-photo-section {
display: flex;
flex-direction: column;
align-items: center;
}
/* ----- Circular Crop Container ----- */
.photo-crop-container {
width: 280px;
height: 280px;
border-radius: 50%;
overflow: hidden;
position: relative;
background: var(--border-color);
cursor: move;
margin-bottom: var(--space-4);
}
.photo-crop-container .crop-image {
position: absolute;
top: 0;
left: 0;
cursor: move;
user-select: none;
-webkit-user-drag: none;
}
.photo-crop-container .crop-ring {
position: absolute;
inset: 0;
border-radius: 50%;
border: 3px solid rgba(255, 255, 255, 0.85);
box-shadow: 0 0 0 9999px rgba(0, 0, 0, 0.35);
pointer-events: none;
}
.photo-crop-container .no-photo-circle {
position: absolute;
inset: 0;
border-radius: 50%;
background: var(--bg-color);
display: flex;
align-items: center;
justify-content: center;
color: var(--text-muted);
border: 3px solid var(--border-color);
}
.photo-crop-container .no-photo-circle svg {
width: 64px;
height: 64px;
}
/* ----- Zoom Slider ----- */
.crop-slider-group {
display: flex;
align-items: center;
gap: var(--space-2);
margin-bottom: var(--space-4);
width: 100%;
max-width: 280px;
}
.crop-slider-icon {
width: 16px;
height: 16px;
color: var(--text-muted);
flex-shrink: 0;
}
.crop-slider {
flex: 1;
accent-color: var(--primary-color);
height: 6px;
cursor: pointer;
}
.crop-slider-group span {
font-size: var(--font-size-sm);
color: var(--text-muted);
min-width: 42px;
text-align: center;
flex-shrink: 0;
}
/* ----- Photo Action Buttons ----- */
.photo-actions {
display: flex;
gap: var(--space-3);
align-items: center;
}
.switch-group {
display: flex;
align-items: center;
gap: var(--space-4);
}
.switch-group label {
margin-bottom: 0;
}
.profile-form {
width: 100%;
}
@media (max-width: 768px) {
.profile-form .form-actions {
flex-direction: column;
}
.profile-form .form-actions .btn {
width: 100%;
}
}
/* ----- Event Registration Page ----- */
.event-registration-page {
max-width: 900px;
margin: 0 auto;
padding: var(--space-6) 0;
}
.event-registration-page .event-header {
text-align: center;
margin-bottom: var(--space-8);
padding-bottom: var(--space-6);
border-bottom: 2px solid var(--border-color);
}
.event-registration-page .event-header h1 {
color: var(--text-color);
margin-bottom: var(--space-4);
}
.registration-content {
display: grid;
gap: var(--space-8);
}
.registration-form-section,
.breakout-sessions-section {
background: var(--card-bg);
padding: var(--space-6);
border-radius: var(--radius-2xl);
box-shadow: var(--shadow-lg);
}
.registration-form-section h2,
.breakout-sessions-section h2 {
margin-bottom: var(--space-4);
color: var(--text-color);
}
.section-intro {
color: var(--text-muted);
margin-bottom: var(--space-5);
}
.char-count {
display: block;
text-align: right;
color: var(--text-muted);
font-size: var(--font-size-xs);
margin-top: var(--space-1);
}
.login-link {
text-align: center;
margin-top: var(--space-5);
color: var(--text-muted);
}
.session-card {
display: flex;
justify-content: space-between;
align-items: center;
padding: var(--space-5);
margin-bottom: var(--space-4);
background: var(--bg-color);
border-radius: var(--radius-xl);
border-left: 4px solid var(--primary-color);
gap: var(--space-4);
}
.session-card.session-full {
border-left-color: var(--danger-color);
opacity: 0.8;
}
.session-info {
flex: 1;
}
.session-info h3 {
margin: 0 0 var(--space-2) 0;
color: var(--text-color);
}
.session-info p {
margin: var(--space-1) 0;
color: var(--text-muted);
font-size: var(--font-size-sm);
}
.session-actions {
flex-shrink: 0;
}
.full-label {
background: var(--danger-color);
color: white;
padding: var(--space-2) var(--space-4);
border-radius: var(--radius-lg);
font-size: var(--font-size-sm);
}
.no-sessions {
text-align: center;
color: var(--text-muted);
padding: var(--space-8);
}
.registration-complete {
margin-top: var(--space-8);
padding: var(--space-5);
background: var(--success-light);
border-radius: var(--radius-xl);
text-align: center;
}
.registration-complete p {
margin-bottom: var(--space-4);
}
.breakout-sessions-selection {
margin-top: var(--space-6);
padding-top: var(--space-5);
border-top: 2px solid var(--border-color);
}
.breakout-sessions-selection > label {
font-size: var(--font-size-lg);
color: var(--text-color);
margin-bottom: var(--space-2);
display: block;
}
.selection-hint {
color: var(--text-muted);
font-size: var(--font-size-sm);
margin-bottom: var(--space-4);
}
.sessions-checkboxes {
display: grid;
gap: var(--space-3);
max-height: 400px;
overflow-y: auto;
padding: var(--space-4);
background: var(--bg-color);
border-radius: var(--radius-xl);
}
.session-checkbox-item {
display: flex;
align-items: flex-start;
padding: var(--space-4);
background: var(--card-bg);
border-radius: var(--radius-lg);
border: 1px solid var(--border-color);
transition: all var(--transition-fast);
}
.session-checkbox-item:hover {
border-color: var(--primary-color);
box-shadow: var(--shadow-md);
}
.session-checkbox-item.session-full {
opacity: 0.6;
background: var(--bg-color);
}
.session-checkbox-item input[type="checkbox"] {
width: 20px;
height: 20px;
margin-right: var(--space-3);
margin-top: var(--space-1);
cursor: pointer;
accent-color: var(--primary-color);
}
.session-checkbox-item input[type="checkbox"]:disabled {
cursor: not-allowed;
}
.session-checkbox-item label {
flex: 1;
cursor: pointer;
margin: 0;
}
.session-checkbox-item label strong {
display: block;
color: var(--text-color);
margin-bottom: var(--space-1);
}
.session-checkbox-item label span {
display: block;
font-size: var(--font-size-sm);
color: var(--text-muted);
}
.session-checkbox-item label .session-time {
color: var(--primary-color);
font-weight: 500;
}
.session-checkbox-item label .session-location {
color: var(--text-light);
}
.session-checkbox-item label .session-capacity {
margin-top: var(--space-2);
font-weight: 500;
}
.session-checkbox-item label .session-capacity.full {
color: var(--danger-color);
}
@media (max-width: 768px) {
.session-card {
flex-direction: column;
align-items: stretch;
}
.session-actions {
margin-left: 0;
margin-top: var(--space-3);
}
.session-actions .btn {
width: 100%;
}
}
/* ----- Event Detail Page ----- */
.event-detail {
max-width: 1200px;
margin: 0 auto;
padding: var(--space-6);
}
.event-detail .section-box {
background: var(--card-bg);
border: 1px solid var(--border-color);
border-radius: var(--radius-2xl);
padding: var(--space-8);
margin-bottom: var(--space-6);
}
.event-detail .section-box h2 {
margin-top: 0;
margin-bottom: var(--space-5);
color: var(--text-color);
}
.event-detail .section-actions {
margin-bottom: var(--space-4);
display: flex;
flex-wrap: wrap;
gap: var(--space-3);
}
.event-detail .staff-table,
.event-detail .sessions-table,
.event-detail .types-table {
width: 100%;
border-collapse: collapse;
}
.event-detail .staff-table th,
.event-detail .sessions-table th,
.event-detail .types-table th,
.event-detail .staff-table td,
.event-detail .sessions-table td,
.event-detail .types-table td {
padding: var(--space-3) var(--space-4);
text-align: left;
border-bottom: 1px solid var(--border-color);
}
.event-detail .staff-table th,
.event-detail .sessions-table th,
.event-detail .types-table th {
background: var(--bg-color);
font-weight: 600;
font-size: var(--font-size-sm);
color: var(--text-muted);
}
.event-detail th.sortable {
cursor: pointer;
user-select: none;
transition: background var(--transition-fast);
}
.event-detail th.sortable:hover {
background: var(--border-color);
}
.event-detail .sort-icon {
margin-left: var(--space-2);
opacity: 0.4;
display: inline-block;
width: 0;
height: 0;
vertical-align: middle;
}
.event-detail th.sort-asc .sort-icon {
opacity: 1;
border-left: 4px solid transparent;
border-right: 4px solid transparent;
border-bottom: 6px solid var(--text-color);
}
.event-detail th.sort-desc .sort-icon {
opacity: 1;
border-left: 4px solid transparent;
border-right: 4px solid transparent;
border-top: 6px solid var(--text-color);
}
.event-detail .event-meta-box {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: var(--space-4);
background: var(--bg-color);
padding: var(--space-5);
border-radius: var(--radius-xl);
margin-bottom: var(--space-5);
}
.event-detail .event-meta-box p {
margin: var(--space-1) 0;
}
.no-types, .no-staff, .no-sessions, .no-attendees {
color: var(--text-muted);
font-style: italic;
}
@media (min-width: 1400px) {
.event-detail .event-meta-box {
grid-template-columns: repeat(3, 1fr);
}
}
@media (max-width: 768px) {
.event-detail {
padding: var(--space-4);
}
.event-detail .section-box {
padding: var(--space-4);
}
.event-detail .event-meta-box {
grid-template-columns: 1fr;
}
.event-detail .section-actions {
flex-direction: column;
}
.event-detail .section-actions .btn {
width: 100%;
justify-content: center;
}
.staff-table,
.sessions-table,
.types-table,
.attendees-table {
display: block;
overflow-x: auto;
white-space: nowrap;
}
}
/* ----- Batch Select Bar ----- */
.batch-select-bar {
margin-bottom: var(--space-4);
padding: var(--space-4);
background: var(--bg-color);
border-radius: var(--radius-lg);
display: flex;
flex-wrap: wrap;
gap: var(--space-4);
align-items: center;
}
.batch-select-bar input[type="checkbox"] {
width: auto;
accent-color: var(--primary-color);
}
.batch-select-bar label {
margin: 0;
font-weight: 500;
}
.batch-select-bar select {
padding: var(--space-2) var(--space-3);
border: 1px solid var(--border-color);
border-radius: var(--radius-lg);
font-size: var(--font-size-sm);
}
/* ----- All Attendee Types Page ----- */
.all-attendee-types-page h1 {
margin-bottom: var(--space-2);
}
.all-attendee-types-page > p {
color: var(--text-muted);
margin-bottom: var(--space-6);
}
.all-attendee-types-page .event-card {
background: var(--card-bg);
border: 1px solid var(--border-color);
border-radius: var(--radius-xl);
padding: var(--space-5);
margin-bottom: var(--space-5);
}
.all-attendee-types-page .event-card h2 {
margin-top: 0;
margin-bottom: var(--space-4);
color: var(--text-color);
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
gap: var(--space-3);
}
.all-attendee-types-page .event-card h2 a {
font-size: var(--font-size-sm);
font-weight: normal;
}
.back-link {
margin-bottom: var(--space-5);
display: inline-block;
color: var(--primary-color);
font-weight: 500;
}
.back-link:hover {
color: var(--primary-hover);
}
/* ----- Attendee Types Page ----- */
.attendee-types-page .section-box {
background: var(--card-bg);
border: 1px solid var(--border-color);
border-radius: var(--radius-xl);
padding: var(--space-8);
margin-bottom: var(--space-6);
}
.attendee-types-page .section-box h2 {
margin-top: 0;
margin-bottom: var(--space-5);
color: var(--text-color);
}
/* ----- Staff Scan Page ----- */
.staff-scan-page .scanner-container {
background: #000;
border-radius: var(--radius-xl);
overflow: hidden;
min-height: 300px;
display: flex;
align-items: center;
justify-content: center;
position: relative;
margin-bottom: var(--space-5);
}
.staff-scan-page .qr-reader {
width: 100%;
}
.staff-scan-page .qr-reader video {
width: 100% !important;
border-radius: var(--radius-xl);
}
.staff-scan-page .scan-result {
text-align: center;
padding: var(--space-8) var(--space-4);
background: var(--card-bg);
width: 100%;
}
.staff-scan-page .scan-result.hidden {
display: none;
}
.staff-scan-page .result-icon {
width: 64px;
height: 64px;
margin: 0 auto var(--space-4);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
}
.staff-scan-page .result-icon svg {
width: 32px;
height: 32px;
stroke-width: 2;
fill: none;
}
.staff-scan-page .result-icon.success {
background: var(--success-light);
color: var(--success-color);
}
.staff-scan-page .result-icon.error {
background: var(--danger-light);
color: var(--danger-color);
}
.staff-scan-page .result-icon.duplicate {
background: var(--warning-light);
color: var(--warning-color);
}
.staff-scan-page .stat {
text-align: center;
flex: 1;
}
.staff-scan-page .stat-number {
display: block;
font-size: var(--font-size-3xl);
font-weight: 700;
color: var(--text-color);
}
.staff-scan-page .stat-label {
font-size: var(--font-size-sm);
color: var(--text-muted);
}
.staff-scan-page .recent-checkins {
background: var(--card-bg);
border-radius: var(--radius-xl);
padding: var(--space-5);
border: 1px solid var(--border-color);
}
.staff-scan-page .recent-checkins h3 {
margin: 0 0 var(--space-4) 0;
font-size: var(--font-size-base);
}
.staff-scan-page .recent-checkins ul {
list-style: none;
padding: 0;
margin: 0;
max-height: 200px;
overflow-y: auto;
}
.staff-scan-page .recent-checkins li {
padding: var(--space-3) 0;
border-bottom: 1px solid var(--border-light);
display: flex;
justify-content: space-between;
align-items: center;
}
.staff-scan-page .recent-checkins li:last-child {
border-bottom: none;
}
.staff-scan-page .attendee-name {
font-weight: 500;
}
.staff-scan-page .checkin-time {
color: var(--success-color);
font-size: var(--font-size-sm);
}
/* ----- Payment Page ----- */
.payment-page {
max-width: 600px;
margin: 0 auto;
padding: var(--space-6) 0;
}
.payment-page .back-link {
display: block;
margin-bottom: var(--space-5);
color: var(--primary-color);
font-weight: 500;
}
.payment-page .back-link:hover {
color: var(--primary-hover);
}
.payment-box {
padding: var(--space-8);
}
.payment-box h1 {
margin-bottom: var(--space-5);
}
.order-summary {
background: var(--bg-color);
border-radius: var(--radius-xl);
padding: var(--space-5);
margin-bottom: var(--space-6);
}
.order-summary h3 {
margin-top: 0;
margin-bottom: var(--space-4);
}
.order-item {
display: flex;
justify-content: space-between;
padding: var(--space-3) 0;
border-bottom: 1px solid var(--border-color);
font-size: var(--font-size-sm);
}
.order-item:last-child {
border-bottom: none;
}
.order-total {
display: flex;
justify-content: space-between;
padding-top: var(--space-4);
margin-top: var(--space-3);
border-top: 2px solid var(--border-color);
font-size: var(--font-size-lg);
font-weight: 600;
}
.payment-box .price {
color: var(--success-color);
font-weight: 600;
}
.card-row {
display: grid;
grid-template-columns: 1fr 1fr;
gap: var(--space-4);
}
@media (max-width: 480px) {
.card-row {
grid-template-columns: 1fr;
}
}
.payment-notice {
background: var(--primary-light);
border: 1px solid var(--primary-color);
border-radius: var(--radius-lg);
padding: var(--space-4);
margin-bottom: var(--space-6);
color: var(--primary-color);
font-size: var(--font-size-sm);
display: flex;
align-items: flex-start;
gap: var(--space-2);
}
.payment-notice p {
margin: 0;
}
.payment-notice svg {
width: 18px;
height: 18px;
flex-shrink: 0;
margin-top: 1px;
}
.security-note {
text-align: center;
margin-top: var(--space-4);
color: var(--text-muted);
font-size: var(--font-size-xs);
display: flex;
align-items: center;
justify-content: center;
gap: var(--space-2);
}
.security-note svg {
width: 14px;
height: 14px;
stroke: currentColor;
stroke-width: 2;
fill: none;
}
/* ----- Event Staff Page ----- */
.event-staff {
max-width: 1000px;
margin: 0 auto;
padding: var(--space-6);
}
.event-staff .staff-header {
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
gap: var(--space-4);
margin-bottom: var(--space-6);
}
.event-staff .staff-header h1 {
margin: 0;
}
.event-staff .add-staff-form,
.event-staff .staff-list {
padding: var(--space-6);
margin-bottom: var(--space-5);
}
.event-staff .add-staff-form h2,
.event-staff .staff-list h2 {
margin-bottom: var(--space-4);
}
.staff-table th.sortable {
cursor: pointer;
user-select: none;
transition: background var(--transition-fast);
}
.staff-table th.sortable:hover {
background: var(--bg-color);
}
.modal-overlay {
display: none;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.5);
backdrop-filter: blur(4px);
align-items: center;
justify-content: center;
z-index: 9999;
}
.modal-overlay.active {
display: flex;
}
.modal-content {
background: var(--card-bg);
border-radius: var(--radius-2xl);
padding: var(--space-8);
max-width: 500px;
width: 90%;
box-shadow: var(--shadow-xl);
}
.modal-sm {
max-width: 400px;
}
.modal-content h3 {
margin-bottom: var(--space-4);
}
.modal-content p {
margin-bottom: var(--space-6);
color: var(--text-muted);
}
.modal-actions {
display: flex;
gap: var(--space-3);
justify-content: flex-end;
}
.modal-header {
margin-bottom: var(--space-6);
}
.modal-header h2 {
margin: 0 0 var(--space-3) 0;
}
.modal-header p {
margin: 0;
color: var(--text-muted);
}
/* ----- Personal Page ----- */
.personal-page {
max-width: 900px;
margin: 0 auto;
padding: var(--space-6) 0;
}
.personal-page h1 {
color: var(--text-color);
margin-bottom: var(--space-1);
}
.welcome-subtitle {
color: var(--text-muted);
margin-bottom: var(--space-6);
}
.personal-page .event-section {
padding: var(--space-6);
margin-bottom: var(--space-5);
}
.personal-page .event-section h2 {
color: var(--text-color);
margin-bottom: var(--space-4);
padding-bottom: var(--space-3);
border-bottom: 2px solid var(--primary-color);
}
.personal-page .event-details {
background: var(--bg-color);
padding: var(--space-4);
border-radius: var(--radius-xl);
margin-bottom: var(--space-5);
}
.personal-page .event-details p {
margin: var(--space-2) 0;
color: var(--text-muted);
}
.status-registered {
color: var(--success-color);
font-weight: 600;
display: inline-flex;
align-items: center;
gap: var(--space-1);
}
.status-registered svg {
width: 16px;
height: 16px;
stroke: currentColor;
stroke-width: 2;
fill: none;
}
.personal-page h3 {
margin: var(--space-5) 0 var(--space-4) 0;
}
.sessions-list {
display: flex;
flex-direction: column;
gap: var(--space-3);
}
.session-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: var(--space-4);
background: var(--bg-color);
border-radius: var(--radius-xl);
border-left: 4px solid var(--secondary-color);
gap: var(--space-4);
}
.session-item.registered {
border-left-color: var(--success-color);
background: var(--success-light);
}
.session-info {
flex: 1;
}
.session-info strong {
display: block;
color: var(--text-color);
margin-bottom: var(--space-1);
}
.session-info span {
display: block;
font-size: var(--font-size-sm);
color: var(--text-muted);
}
.session-info .session-time {
color: var(--primary-color);
font-weight: 500;
display: flex;
align-items: center;
gap: var(--space-1);
}
.session-info .session-time svg {
width: 14px;
height: 14px;
stroke: currentColor;
stroke-width: 2;
fill: none;
}
.session-info .session-location {
color: var(--text-light);
display: flex;
align-items: center;
gap: var(--space-1);
}
.session-info .session-location svg {
width: 14px;
height: 14px;
stroke: currentColor;
stroke-width: 2;
fill: none;
}
.session-info .session-description {
color: var(--text-muted);
margin-top: var(--space-2);
font-style: italic;
}
.session-status {
flex-shrink: 0;
}
.no-sessions {
text-align: center;
color: var(--text-muted);
padding: var(--space-6);
background: var(--bg-color);
border-radius: var(--radius-xl);
display: flex;
align-items: center;
justify-content: center;
gap: var(--space-2);
}
.no-sessions svg {
width: 20px;
height: 20px;
stroke: currentColor;
stroke-width: 2;
fill: none;
}
.personal-page .actions {
text-align: center;
margin-top: var(--space-8);
}
/* ----- Breakout Sessions Page ----- */
.breakout-sessions {
max-width: 900px;
margin: 0 auto;
padding: var(--space-6) 0;
}
.breakout-sessions h1 {
margin-bottom: var(--space-6);
}
.breakout-sessions .back-link {
margin-top: var(--space-6);
display: block;
}
/* ----- Change Confirmation Modal ----- */
.confirm-changes-page .changes-list {
background: var(--bg-color);
border-radius: var(--radius-xl);
padding: var(--space-4);
margin-bottom: var(--space-5);
}
.confirm-changes-page .change-item {
padding: var(--space-3) 0;
border-bottom: 1px solid var(--border-color);
}
.confirm-changes-page .change-item:last-child {
border-bottom: none;
}
.confirm-changes-page .change-label {
font-weight: 600;
color: var(--text-color);
margin-bottom: var(--space-2);
}
.confirm-changes-page .change-values {
display: flex;
gap: var(--space-3);
align-items: center;
font-size: var(--font-size-sm);
}
.confirm-changes-page .change-values .arrow {
color: var(--text-muted);
}
.confirm-changes-page .change-values .arrow svg {
width: 16px;
height: 16px;
stroke: currentColor;
stroke-width: 2;
fill: none;
}
.confirm-changes-page .old-value {
color: var(--danger-color);
text-decoration: line-through;
opacity: 0.7;
}
.confirm-changes-page .new-value {
color: var(--success-color);
font-weight: 500;
}
/* ----- Staff Events Dashboard ----- */
.staff-events-dashboard {
max-width: 800px;
margin: 0 auto;
padding: var(--space-6) 0;
}
.staff-events-dashboard .staff-header {
margin-bottom: var(--space-6);
}
.staff-events-dashboard .staff-header h1 {
margin-bottom: var(--space-1);
}
.staff-events-dashboard .staff-header p {
color: var(--text-muted);
margin: 0;
}
.staff-events-dashboard .section-box {
padding: var(--space-8);
}
.staff-events-dashboard .events-list {
display: flex;
flex-direction: column;
gap: var(--space-5);
}
.staff-events-dashboard .event-card {
display: flex;
justify-content: space-between;
align-items: center;
padding: var(--space-6);
gap: var(--space-5);
}
.staff-events-dashboard .event-info h3 {
margin: 0 0 var(--space-2) 0;
}
.staff-events-dashboard .event-info p {
margin: var(--space-1) 0;
color: var(--text-muted);
font-size: var(--font-size-sm);
}
.staff-events-dashboard .event-actions {
flex-shrink: 0;
}
.staff-events-dashboard .no-events {
text-align: center;
color: var(--text-muted);
padding: var(--space-8);
display: flex;
align-items: center;
justify-content: center;
gap: var(--space-2);
}
.staff-events-dashboard .no-events svg {
width: 20px;
height: 20px;
stroke: currentColor;
stroke-width: 2;
fill: none;
}
@media (max-width: 768px) {
.staff-events-dashboard .event-card {
flex-direction: column;
align-items: stretch;
}
.staff-events-dashboard .event-actions {
margin-left: 0;
margin-top: var(--space-4);
}
.staff-events-dashboard .event-actions .btn {
width: 100%;
justify-content: center;
}
}
/* ----- Edit Attendee Type Page ----- */
.edit-attendee-type-page h1 {
margin-bottom: var(--space-5);
}
/* ----- Communications Page ----- */
.communications-page .page-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: var(--space-8);
}
.communications-section {
display: flex;
flex-direction: column;
gap: var(--space-6);
}
.section-header {
margin-bottom: var(--space-5);
}
.section-header h2 {
margin-bottom: var(--space-2);
}
.templates-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
gap: var(--space-5);
}
.template-card {
background: var(--card-bg);
border: 1px solid var(--border-color);
border-radius: var(--radius-xl);
padding: var(--space-5);
}
.template-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: var(--space-4);
}
.template-header h3 {
margin: 0;
}
.template-preview p {
margin-bottom: var(--space-2);
font-size: var(--font-size-sm);
}
.template-body {
color: var(--text-muted);
font-size: var(--font-size-xs);
background: var(--bg-color);
padding: var(--space-3);
border-radius: var(--radius-md);
max-height: 80px;
overflow: hidden;
}
.send-email-form .checkbox-label {
display: flex;
align-items: center;
gap: var(--space-2);
padding: var(--space-2) 0;
cursor: pointer;
}
.recipient-list {
max-height: 300px;
overflow-y: auto;
border: 1px solid var(--border-color);
border-radius: var(--radius-lg);
padding: var(--space-4);
}
/* ----- Attendee Communications ----- */
.communications-list {
display: flex;
flex-direction: column;
gap: var(--space-4);
}
.communication-card {
background: var(--card-bg);
border: 1px solid var(--border-color);
border-radius: var(--radius-xl);
padding: var(--space-6);
}
.communication-header {
display: flex;
justify-content: space-between;
margin-bottom: var(--space-3);
}
.communication-event {
font-size: var(--font-size-xs);
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.05em;
color: var(--primary-color);
}
.communication-date {
font-size: var(--font-size-xs);
color: var(--text-muted);
}
.communication-card h3 {
margin-bottom: var(--space-3);
}
.communication-body {
color: var(--text-muted);
white-space: pre-wrap;
}
/* ----- Data Table ----- */
.data-table {
width: 100%;
border-collapse: collapse;
}
.data-table th,
.data-table td {
padding: var(--space-3) var(--space-4);
text-align: left;
border-bottom: 1px solid var(--border-color);
}
.data-table th {
font-weight: 600;
font-size: var(--font-size-sm);
text-transform: uppercase;
letter-spacing: 0.05em;
color: var(--text-muted);
}
.data-table tbody tr:hover {
background-color: var(--bg-color);
}
/* ----- Pagination ----- */
.pagination {
display: flex;
align-items: center;
justify-content: center;
gap: var(--space-3);
margin-top: var(--space-6);
padding: var(--space-4) 0;
}
.pagination .btn {
padding: var(--space-2) var(--space-3);
}
.pagination .btn.disabled {
opacity: 0.5;
pointer-events: none;
}
.pagination-info {
color: var(--text-muted);
font-size: var(--font-size-sm);
padding: 0 var(--space-3);
}
/* ----- Session Detail Page ----- */
.session-detail-page {
max-width: 1200px;
margin: 0 auto;
padding: var(--space-6);
}
.session-detail-page .page-header {
display: flex;
justify-content: space-between;
align-items: flex-start;
flex-wrap: wrap;
gap: var(--space-6);
margin-bottom: var(--space-8);
}
.session-detail-page .header-content h1 {
margin-bottom: var(--space-2);
}
.session-detail-page .header-content .page-subtitle {
color: var(--text-muted);
margin-bottom: 0;
}
.session-detail-page .header-actions {
display: flex;
gap: var(--space-3);
flex-wrap: wrap;
}
.session-meta-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: var(--space-4);
margin-bottom: var(--space-6);
}
.meta-card {
display: flex;
align-items: center;
gap: var(--space-4);
background: var(--card-bg);
padding: var(--space-5);
border-radius: var(--radius-xl);
border: 1px solid var(--border-color);
box-shadow: var(--shadow-sm);
}
.meta-icon {
width: 48px;
height: 48px;
display: flex;
align-items: center;
justify-content: center;
background: var(--primary-light);
border-radius: var(--radius-lg);
color: var(--primary-color);
}
.meta-icon svg {
width: 24px;
height: 24px;
stroke: currentColor;
stroke-width: 2;
fill: none;
}
.meta-content {
display: flex;
flex-direction: column;
}
.meta-label {
font-size: var(--font-size-xs);
color: var(--text-muted);
text-transform: uppercase;
letter-spacing: 0.05em;
font-weight: 600;
}
.meta-value {
font-size: var(--font-size-lg);
font-weight: 600;
color: var(--text-color);
}
.session-description-card {
background: var(--card-bg);
padding: var(--space-6);
border-radius: var(--radius-xl);
border: 1px solid var(--border-color);
margin-bottom: var(--space-6);
}
.session-description-card h3 {
margin-bottom: var(--space-3);
color: var(--text-muted);
font-size: var(--font-size-sm);
text-transform: uppercase;
letter-spacing: 0.05em;
}
.session-description-card p {
color: var(--text-color);
margin-bottom: 0;
}
.session-sections {
display: flex;
flex-direction: column;
gap: var(--space-6);
}
.section-card {
background: var(--card-bg);
border-radius: var(--radius-xl);
padding: var(--space-6);
border: 1px solid var(--border-color);
box-shadow: var(--shadow-sm);
}
.section-header {
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
gap: var(--space-4);
margin-bottom: var(--space-5);
padding-bottom: var(--space-4);
border-bottom: 1px solid var(--border-color);
}
.section-header h2 {
margin-bottom: 0;
font-size: var(--font-size-lg);
}
/* Presenters Section */
.add-presenter-form {
background: var(--bg-color);
padding: var(--space-5);
border-radius: var(--radius-lg);
margin-bottom: var(--space-5);
}
.add-presenter-form .form-row {
margin-bottom: var(--space-4);
}
.presenters-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
gap: var(--space-4);
}
.presenter-card {
display: flex;
align-items: center;
gap: var(--space-4);
padding: var(--space-4);
background: var(--bg-color);
border-radius: var(--radius-lg);
border: 1px solid var(--border-color);
}
.presenter-info {
display: flex;
align-items: center;
gap: var(--space-3);
flex: 1;
}
.presenter-avatar {
width: 48px;
height: 48px;
border-radius: 50%;
background: var(--primary-color);
color: white;
display: flex;
align-items: center;
justify-content: center;
font-weight: 600;
font-size: var(--font-size-sm);
}
.presenter-details h4 {
margin: 0 0 var(--space-1) 0;
font-size: var(--font-size-sm);
}
.presenter-details p {
margin: 0;
font-size: var(--font-size-xs);
color: var(--text-muted);
}
.presenter-qr {
display: flex;
flex-direction: column;
align-items: center;
gap: var(--space-1);
}
.qr-code-display {
display: flex;
flex-direction: column;
align-items: center;
padding: var(--space-2) var(--space-3);
background: white;
border: 2px dashed var(--border-color);
border-radius: var(--radius-md);
}
.qr-label {
font-size: 9px;
color: var(--text-muted);
text-transform: uppercase;
letter-spacing: 0.05em;
}
.qr-code {
font-family: 'SF Mono', Monaco, 'Courier New', monospace;
font-size: var(--font-size-xs);
font-weight: 600;
letter-spacing: 0.1em;
color: var(--primary-color);
}
.presenter-actions {
display: flex;
gap: var(--space-2);
}
.btn-remove:hover {
color: var(--danger-color);
}
/* Attendees Section */
.attendees-table {
width: 100%;
}
.attendees-table th {
background: var(--bg-color);
font-size: var(--font-size-xs);
text-transform: uppercase;
letter-spacing: 0.05em;
color: var(--text-muted);
}
.attendee-name-cell {
display: flex;
align-items: center;
gap: var(--space-3);
}
.attendee-avatar-sm {
width: 32px;
height: 32px;
border-radius: 50%;
background: var(--primary-light);
color: var(--primary-color);
display: flex;
align-items: center;
justify-content: center;
font-size: var(--font-size-xs);
font-weight: 600;
}
/* ----- Presenter Dashboard ----- */
.presenter-dashboard {
max-width: 1100px;
margin: 0 auto;
padding: var(--space-6);
}
.presenter-dashboard .dashboard-header {
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
gap: var(--space-5);
margin-bottom: var(--space-8);
}
.presenter-dashboard .welcome-section h1 {
margin-bottom: var(--space-2);
}
.welcome-subtitle {
color: var(--text-muted);
margin-bottom: 0;
}
.presenter-dashboard .my-sessions {
margin-top: var(--space-6);
}
.presenter-dashboard .section-header {
margin-bottom: var(--space-6);
}
.sessions-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(380px, 1fr));
gap: var(--space-6);
}
@media (max-width: 480px) {
.sessions-grid {
grid-template-columns: 1fr;
}
}
.session-card-lg {
background: var(--card-bg);
border-radius: var(--radius-xl);
padding: var(--space-6);
border: 1px solid var(--border-color);
box-shadow: var(--shadow-md);
display: flex;
flex-direction: column;
gap: var(--space-5);
}
.session-card-header {
display: flex;
justify-content: space-between;
align-items: flex-start;
gap: var(--space-4);
}
.session-card-header h3 {
margin: 0;
font-size: var(--font-size-xl);
}
.session-meta-list {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: var(--space-3);
}
@media (max-width: 480px) {
.session-meta-list {
grid-template-columns: 1fr;
}
}
.meta-item {
display: flex;
align-items: center;
gap: var(--space-2);
font-size: var(--font-size-sm);
color: var(--text-muted);
}
.meta-item svg {
width: 16px;
height: 16px;
stroke: currentColor;
stroke-width: 2;
fill: none;
flex-shrink: 0;
}
.session-scan-section {
background: var(--primary-light);
border-radius: var(--radius-lg);
padding: var(--space-5);
display: flex;
flex-direction: column;
align-items: center;
gap: var(--space-4);
text-align: center;
}
.scan-prompt {
display: flex;
flex-direction: column;
align-items: center;
gap: var(--space-2);
color: var(--primary-color);
}
.scan-prompt svg {
width: 32px;
height: 32px;
stroke: currentColor;
stroke-width: 2;
fill: none;
}
.scan-prompt span {
font-size: var(--font-size-sm);
font-weight: 500;
}
.btn-lg {
padding: var(--space-4) var(--space-8);
font-size: var(--font-size-base);
}
.session-card-actions {
display: flex;
justify-content: flex-end;
gap: var(--space-3);
padding-top: var(--space-4);
border-top: 1px solid var(--border-color);
}
.empty-state-card {
background: var(--card-bg);
border-radius: var(--radius-xl);
padding: var(--space-10);
text-align: center;
border: 1px solid var(--border-color);
}
.empty-state-card .empty-state-icon {
width: 64px;
height: 64px;
margin: 0 auto var(--space-4);
color: var(--text-light);
}
.empty-state-card .empty-state-icon svg {
width: 100%;
height: 100%;
stroke: currentColor;
stroke-width: 1.5;
fill: none;
}
.empty-state-card h3 {
color: var(--text-muted);
margin-bottom: var(--space-2);
}
.empty-state-card p {
color: var(--text-light);
margin-bottom: 0;
}
/* ----- Presenter Scan Page ----- */
.presenter-scan-page {
max-width: 800px;
margin: 0 auto;
padding: var(--space-6);
}
.presenter-scan-page .scan-header {
display: flex;
justify-content: space-between;
align-items: flex-start;
flex-wrap: wrap;
gap: var(--space-5);
margin-bottom: var(--space-8);
}
.session-info-header h1 {
margin-bottom: var(--space-3);
}
.session-meta {
display: flex;
flex-wrap: wrap;
gap: var(--space-4);
color: var(--text-muted);
font-size: var(--font-size-sm);
}
.session-meta span {
display: flex;
align-items: center;
gap: var(--space-2);
}
.session-meta svg {
width: 16px;
height: 16px;
stroke: currentColor;
stroke-width: 2;
fill: none;
}
.presenter-scan-container {
display: flex;
flex-direction: column;
gap: var(--space-6);
}
.scanner-section {
background: var(--card-bg);
border-radius: var(--radius-xl);
padding: var(--space-6);
border: 1px solid var(--border-color);
}
.scanner-box {
position: relative;
background: #000;
border-radius: var(--radius-lg);
overflow: hidden;
min-height: 300px;
}
.scanner-box .qr-reader {
width: 100%;
}
.scanner-box .qr-reader video {
width: 100%;
border-radius: var(--radius-lg);
}
.scan-result {
text-align: center;
padding: var(--space-8) var(--space-4);
background: var(--card-bg);
width: 100%;
}
.scan-result.hidden {
display: none;
}
.scan-result .result-icon {
width: 64px;
height: 64px;
margin: 0 auto var(--space-4);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
}
.scan-result .result-icon svg {
width: 32px;
height: 32px;
stroke-width: 2;
fill: none;
}
.scan-result .result-icon.success {
background: var(--success-light);
color: var(--success-color);
}
.scan-result .result-icon.warning {
background: var(--warning-light);
color: var(--warning-color);
}
.scan-result .result-icon.error {
background: var(--danger-light);
color: var(--danger-color);
}
.scan-result h2 {
margin-bottom: var(--space-2);
}
.scan-result p {
color: var(--text-muted);
margin-bottom: var(--space-5);
}
.stats-section {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: var(--space-4);
}
.stat-card {
background: var(--card-bg);
padding: var(--space-5);
border-radius: var(--radius-xl);
text-align: center;
border: 1px solid var(--border-color);
}
.stat-card .stat-number {
display: block;
font-size: var(--font-size-3xl);
font-weight: 700;
color: var(--text-color);
}
.stat-card .stat-label {
font-size: var(--font-size-xs);
color: var(--text-muted);
text-transform: uppercase;
letter-spacing: 0.05em;
}
.stat-card-success {
background: var(--success-light);
border-color: var(--success-color);
}
.stat-card-success .stat-number {
color: var(--success-color);
}
.stat-card-warning {
background: var(--warning-light);
border-color: var(--warning-color);
}
.attendees-list-section {
background: var(--card-bg);
border-radius: var(--radius-xl);
padding: var(--space-6);
border: 1px solid var(--border-color);
}
.attendees-list-section h3 {
margin-bottom: var(--space-4);
font-size: var(--font-size-base);
}
.attendees-scroll-list {
max-height: 400px;
overflow-y: auto;
}
.attendees-checkin-list {
list-style: none;
padding: 0;
margin: 0;
}
.attendee-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: var(--space-4);
border-bottom: 1px solid var(--border-light);
transition: all var(--transition-fast);
}
.attendee-item:last-child {
border-bottom: none;
}
.attendee-item.checked-in {
background: var(--success-light);
}
.attendee-item .attendee-info {
display: flex;
align-items: center;
gap: var(--space-3);
}
.attendee-item .attendee-avatar {
width: 40px;
height: 40px;
border-radius: 50%;
background: var(--primary-light);
color: var(--primary-color);
display: flex;
align-items: center;
justify-content: center;
font-weight: 600;
font-size: var(--font-size-sm);
}
.attendee-item.checked-in .attendee-avatar {
background: var(--success-color);
color: white;
}
.attendee-details {
display: flex;
flex-direction: column;
}
.attendee-name {
font-weight: 500;
font-size: var(--font-size-sm);
}
.attendee-email {
font-size: var(--font-size-xs);
color: var(--text-muted);
}
.status-badge {
display: inline-flex;
align-items: center;
gap: var(--space-1);
padding: var(--space-1) var(--space-3);
border-radius: var(--radius-full);
font-size: var(--font-size-xs);
font-weight: 500;
}
.status-badge svg {
width: 14px;
height: 14px;
stroke: currentColor;
stroke-width: 2;
fill: none;
}
.status-checked-in {
background: var(--success-light);
color: var(--success-color);
}
.status-pending {
background: var(--warning-light);
color: var(--warning-color);
}
.empty-state-item {
text-align: center;
padding: var(--space-8);
color: var(--text-muted);
}