/* =================================================================== 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); } .profile-img { width: 160px; height: 160px; border-radius: 50%; object-fit: cover; border: 4px solid var(--border-color); } .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; } .photo-upload-form { margin-top: var(--space-4); } /* ----- 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; } .profile-page .current-photo { width: 150px; height: 150px; margin-bottom: var(--space-4); overflow: hidden; position: relative; background: var(--border-color); } .profile-page .current-photo .profile-img { position: absolute; top: 0; left: 0; width: 100%; height: 100%; object-fit: cover; cursor: move; } .profile-page .no-photo { width: 150px; height: 150px; border-radius: 50%; background: var(--bg-color); display: flex; align-items: center; justify-content: center; color: var(--text-muted); font-size: var(--font-size-sm); border: 3px solid var(--border-color); } .zoom-controls { display: flex; gap: var(--space-2); align-items: center; margin-bottom: var(--space-4); } .zoom-controls span { font-size: var(--font-size-sm); color: var(--text-muted); min-width: 50px; text-align: 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); }