/*
 * ═══════════════════════════════════════════════════════════════════════════
 * MMS UI Components  —  Reusable Design System
 * ═══════════════════════════════════════════════════════════════════════════
 *
 * Usage:
 *   <link href="assets/css/ui-components.css" rel="stylesheet">
 *
 * Required CDN dependencies (add to <head>):
 *   Google Fonts – IBM Plex Sans:
 *   <link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@300;400;500;600;700&display=swap" rel="stylesheet">
 *
 *   Material Icons:
 *   <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
 *
 * Framework7 integration:
 *   Import this file AFTER Framework7 bundle CSS to override F7 defaults.
 *   ⚠ Class name conflicts with F7 — see §00 notes:
 *     .page-content  — F7 uses this as the scrollable page wrapper.
 *                      In MMS admin context this refers to the main flex area.
 *                      When inside F7 pages, use .mms-content instead.
 *     .page-title    — F7 uses this in navbar. In MMS context it's the topbar heading.
 *                      When inside F7 navbars, use .mms-page-title instead.
 *     .card          — F7 also defines .card. MMS styles will override.
 *     .badge         — F7 also defines .badge. MMS styles will override.
 *
 * ═══════════════════════════════════════════════════════════════════════════
 *  01  Design Tokens (CSS Custom Properties)
 *  02  Typography Utilities
 *  03  Buttons
 *  04  Badges & Status Indicators
 *  05  Cards
 *  06  Stat Cards
 *  07  Form Controls — Basic
 *  08  Form Controls — Enhanced (Form Builder)
 *  09  Filter Bar
 *  10  Data Tables
 *  11  Activity Feed
 *  12  Progress Bars
 *  13  Event Cards & Grid
 *  14  Timeline
 *  15  Settings Tabs
 *  16  Messages & Chat
 *  17  Detail Pages (Cover Hero, Profile Header)
 *  18  Page Layout Helpers (Grid Patterns)
 *  19  Online Status & Notification Dot
 *  20  Chart Legend Items
 *  21  Code Reference Tag
 *  22  Amount Display
 *  23  Pagination
 *  24  Urgency Row Indicators (Table)
 *  25  Back Link / Breadcrumb
 *  26  Section Title
 *  27  Pill Toggle
 *  28  Cover Drop Zone & Preview
 *  29  Sticky Sidebar
 *  30  Visibility Option Card (Radio)
 *  31  Amount Input with Prefix
 *  32  Agenda Builder
 *  33  Speaker Cards
 *  34  Ticket Cards
 *  35  Checklist Items
 *  36  Animations & Utility Classes
 *  37  Responsive Breakpoints
 * ═══════════════════════════════════════════════════════════════════════════
 */

/* ── 01  Design Tokens ───────────────────────────────────────────────────── */
:root {
  /* Brand colours */
  --brand-dark:    #0c1e3c;
  --brand-primary: #1a4e8a;
  --brand-accent:  #3b82f6;
  --brand-light:   #dbeafe;

  /* Surface / background colours */
  --surface:       #f1f5f9;
  --surface-2:     #e8eef7;
  --white:         #ffffff;

  /* Text colours */
  --text-main:     #0f172a;
  --text-sub:      #334155;
  --text-muted:    #64748b;

  /* Semantic colours */
  --success:       #10b981; --success-bg: #d1fae5;
  --warning:       #f59e0b; --warning-bg: #fef3c7;
  --danger:        #ef4444; --danger-bg:  #fee2e2;
  --info:          #06b6d4; --info-bg:    #cffafe;

  /* Border radii */
  --r-sm:  8px;
  --r-md:  12px;
  --r-lg:  16px;
  --r-xl:  21px;

  /* Shadows */
  --shadow-sm:     0 1px 3px rgba(15,23,42,.08), 0 1px 2px rgba(15,23,42,.06);
  --shadow-md:     0 4px 14px rgba(15,23,42,.10), 0 2px 4px rgba(15,23,42,.06);
  --shadow-lg:     0 10px 28px rgba(15,23,42,.13), 0 4px 8px rgba(15,23,42,.08);
  --shadow-accent: 0 4px 14px rgba(59,130,246,.35);

  /* Transition */
  --t: all .2s cubic-bezier(.4,0,.2,1);

  /* Fibonacci spacing scale */
  --f5:   5px;
  --f8:   8px;
  --f13:  13px;
  --f21:  21px;
  --f34:  34px;
  --f55:  55px;
  --f89:  89px;
  --f144: 144px;
}

/* ── 02  Typography Utilities ────────────────────────────────────────────── */
.text-main   { color: var(--text-main) }
.text-sub    { color: var(--text-sub) }
.text-muted  { color: var(--text-muted) }
.text-accent { color: var(--brand-accent) }
.text-success{ color: var(--success) }
.text-warning{ color: var(--warning) }
.text-danger { color: var(--danger) }
.text-info   { color: var(--info) }

.fw-300 { font-weight: 300 }
.fw-400 { font-weight: 400 }
.fw-500 { font-weight: 500 }
.fw-600 { font-weight: 600 }
.fw-700 { font-weight: 700 }
.fw-800 { font-weight: 800 }

.text-xs  { font-size: 11px }
.text-sm  { font-size: 12px }
.text-base{ font-size: 13px }
.text-md  { font-size: 15px }
.text-lg  { font-size: 18px }
.text-xl  { font-size: 22px }
.text-2xl { font-size: 30px }

.truncate { white-space: nowrap; overflow: hidden; text-overflow: ellipsis }

/* ── 03  Buttons ─────────────────────────────────────────────────────────── */
/*
 * Usage:  <button class="btn btn-primary">...</button>
 *         <button class="btn btn-outline btn-sm">...</button>
 *         <button class="btn-icon"><span class="material-icons">edit</span></button>
 */

.btn {
  font-family: inherit;
  font-size: 13px;
  font-weight: 600;
  border-radius: var(--r-sm);
  padding: var(--f8) var(--f21);
  transition: var(--t);
  cursor: pointer;
  border: none;
  display: inline-flex;
  align-items: center;
  gap: var(--f8);
  text-decoration: none;
  white-space: nowrap;
}
.btn .material-icons { font-size: 16px }

/* Standalone variant — works without .btn base class */
.btn-primary,
.btn-outline,
.btn-ghost,
.btn-success,
.btn-danger,
.btn-warning {
  font-family: inherit;
  font-size: 13px;
  font-weight: 600;
  border-radius: var(--r-sm);
  padding: var(--f8) var(--f21);
  transition: var(--t);
  cursor: pointer;
  border: none;
  display: inline-flex;
  align-items: center;
  gap: var(--f8);
  text-decoration: none;
  white-space: nowrap;
}

.btn-primary  { background: var(--brand-accent); color: white; box-shadow: var(--shadow-accent) }
.btn-primary:hover { background: #2563eb; transform: translateY(-1px); box-shadow: 0 6px 20px rgba(59,130,246,.4) }

.btn-outline  { background: transparent; border: 1px solid #e2e8f0; color: var(--text-sub) }
.btn-outline:hover { border-color: var(--brand-accent); color: var(--brand-accent); background: var(--brand-light) }

.btn-ghost    { background: var(--surface); color: var(--text-sub); border: 1px solid transparent }
.btn-ghost:hover { background: var(--surface-2); color: var(--brand-accent) }

.btn-success  { background: var(--success); color: white }
.btn-success:hover { background: #059669; transform: translateY(-1px) }

.btn-danger   { background: var(--danger); color: white }
.btn-danger:hover { background: #dc2626; transform: translateY(-1px) }

.btn-warning  { background: var(--warning); color: white }
.btn-warning:hover { background: #d97706; transform: translateY(-1px) }

/* Sizes */
.btn-sm { font-size: 12px; padding: var(--f5) var(--f13) }
.btn-sm .material-icons { font-size: 14px }

/* Icon-only button */
.btn-icon {
  padding: var(--f8);
  border-radius: var(--r-sm);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  border: none;
  background: transparent;
  color: var(--text-muted);
  transition: var(--t);
  text-decoration: none;
}
.btn-icon:hover { background: var(--surface); color: var(--brand-accent) }
.btn-icon .material-icons { font-size: 18px }

.btn-icon-danger       { color: var(--danger) }
.btn-icon-danger:hover { background: var(--danger-bg); color: var(--danger) }

/* Topbar icon button */
.topbar-icon-btn {
  width: 34px; height: 34px;
  border-radius: var(--r-sm);
  border: none;
  background: var(--surface);
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: var(--t);
  position: relative;
  color: var(--text-muted);
}
.topbar-icon-btn:hover { background: var(--surface-2); color: var(--brand-accent) }
.topbar-icon-btn .material-icons { font-size: 20px }

/* ── 04  Badges & Status Indicators ─────────────────────────────────────── */
/*
 * Usage:  <span class="badge badge-active"><span class="dot"></span>Active</span>
 *         <span class="badge badge-pending">Pending</span>
 */

.badge {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 3px var(--f8);
  border-radius: 20px;
  font-size: 11px;
  font-weight: 700;
  line-height: 1.4;
}
.badge .dot { width: 6px; height: 6px; border-radius: 50%; background: currentColor }

/* Status variants */
.badge-active   { background: var(--success-bg);  color: var(--success) }
.badge-pending  { background: var(--warning-bg);  color: var(--warning) }
.badge-expired  { background: #f1f5f9;            color: var(--text-muted) }
.badge-failed   { background: var(--danger-bg);   color: var(--danger) }
.badge-review   { background: var(--info-bg);     color: var(--info) }
.badge-approved { background: var(--success-bg);  color: var(--success) }
.badge-rejected { background: var(--danger-bg);   color: var(--danger) }
.badge-draft    { background: var(--warning-bg);  color: var(--warning) }
.badge-open     { background: var(--success-bg);  color: var(--success) }
.badge-closed   { background: #f1f5f9;            color: var(--text-muted) }
.badge-new      { background: var(--brand-light); color: var(--brand-accent) }

/* Semantic shorthand aliases */
.badge-success  { background: var(--success-bg);  color: var(--success) }
.badge-warning  { background: var(--warning-bg);  color: var(--warning) }
.badge-danger   { background: var(--danger-bg);   color: var(--danger) }
.badge-info     { background: var(--info-bg);     color: var(--info) }

/* ── 05  Cards ───────────────────────────────────────────────────────────── */
/*
 * Usage:
 *   <div class="card">
 *     <div class="card-header-row">
 *       <div><div class="card-title">Title</div><div class="card-sub">Subtitle</div></div>
 *       <button class="btn btn-primary btn-sm">Action</button>
 *     </div>
 *     <div class="card-body">...</div>
 *   </div>
 */

.card {
  background: var(--white);
  border-radius: var(--r-md);
  border: 1px solid #f1f5f9;
  box-shadow: var(--shadow-sm);
  overflow: hidden;
}
.card-header-row {
  padding: var(--f21) var(--f21) 0;
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.card-title { font-size: 15px; font-weight: 700; color: var(--text-main) }
.card-sub   { font-size: 12px; color: var(--text-muted); margin-top: 2px }
.card-body  { padding: var(--f21) }

/* Aliases for backward compatibility */
.table-card   { background: var(--white); border-radius: var(--r-md); border: 1px solid #f1f5f9; box-shadow: var(--shadow-sm); overflow: hidden }
.table-header { padding: var(--f21) var(--f21) 0; display: flex; align-items: center; justify-content: space-between }
.table-title  { font-size: 15px; font-weight: 700; color: var(--text-main) }
.chart-header { padding: var(--f21) var(--f21) 0; display: flex; align-items: center; justify-content: space-between }
.chart-title  { font-size: 15px; font-weight: 700; color: var(--text-main) }
.chart-wrap   { position: relative; width: 100% }

/* ── 06  Stat Cards ──────────────────────────────────────────────────────── */
/*
 * Usage:
 *   <div class="stat-row">
 *     <div class="stat-card c-accent">
 *       <div class="stat-header">
 *         <span class="stat-icon c-accent"><span class="material-icons">people</span></span>
 *         <span class="stat-delta up"><span class="material-icons">arrow_upward</span>+5%</span>
 *       </div>
 *       <div class="stat-value">1,234</div>
 *       <div class="stat-label">Total Members</div>
 *     </div>
 *   </div>
 */

.stat-row,
.stats-row {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  gap: var(--f21);
}
.stat-card {
  background: var(--white);
  border-radius: var(--r-md);
  padding: var(--f21);
  box-shadow: var(--shadow-sm);
  border: 1px solid #f1f5f9;
  transition: var(--t);
  position: relative;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  gap: var(--f13);
}
.stat-card::before {
  content: '';
  position: absolute;
  top: 0; left: 0; right: 0;
  height: 3px;
  border-radius: var(--r-md) var(--r-md) 0 0;
}
.stat-card.c-accent::before  { background: var(--brand-accent) }
.stat-card.c-success::before { background: var(--success) }
.stat-card.c-warning::before { background: var(--warning) }
.stat-card.c-danger::before  { background: var(--danger) }
.stat-card.c-info::before    { background: var(--info) }
.stat-card:hover { transform: translateY(-3px); box-shadow: var(--shadow-md) }

.stat-header { display: flex; align-items: center; justify-content: space-between }
.stat-icon {
  width: 44px; height: 44px;
  border-radius: var(--r-sm);
  display: flex; align-items: center; justify-content: center;
}
.stat-icon .material-icons { font-size: 22px }
.stat-icon.c-accent  { background: var(--brand-light); color: var(--brand-accent) }
.stat-icon.c-success { background: var(--success-bg);  color: var(--success) }
.stat-icon.c-warning { background: var(--warning-bg);  color: var(--warning) }
.stat-icon.c-danger  { background: var(--danger-bg);   color: var(--danger) }
.stat-icon.c-info    { background: var(--info-bg);     color: var(--info) }

.stat-delta {
  font-size: 12px; font-weight: 600;
  padding: 2px 8px; border-radius: 20px;
  display: flex; align-items: center; gap: 3px;
}
.stat-delta.up      { background: var(--success-bg); color: var(--success) }
.stat-delta.down    { background: var(--danger-bg);  color: var(--danger) }
.stat-delta.neutral { background: var(--surface);    color: var(--text-muted) }
.stat-delta .material-icons { font-size: 13px }

.stat-value { font-size: 30px; font-weight: 800; color: var(--text-main); line-height: 1 }
.stat-label { font-size: 13px; color: var(--text-muted) }

/* Aliases */
.stat-body  { display: flex; flex-direction: column; gap: 4px }
.stat-meta  { display: flex; flex-direction: column; gap: 4px }
.stat-trend { font-size: 12px; display: flex; align-items: center; gap: 4px; margin-top: 4px }
.stat-trend .material-icons { font-size: 13px }
.trend-up   { color: var(--success) }
.trend-down { color: var(--danger) }

/* ── 07  Form Controls — Basic ───────────────────────────────────────────── */
/*
 * Usage:
 *   <div class="filter-group">
 *     <label>Search</label>
 *     <input class="form-control" type="text" placeholder="...">
 *   </div>
 *   <select class="form-select">...</select>
 */

.form-control,
.form-select {
  font-family: inherit;
  font-size: 13px;
  padding: var(--f8) var(--f13);
  border: 1px solid #e2e8f0;
  border-radius: var(--r-sm);
  background: var(--surface);
  color: var(--text-main);
  transition: var(--t);
  outline: none;
  width: 100%;
}
.form-control:focus,
.form-select:focus {
  border-color: var(--brand-accent);
  background: white;
  box-shadow: 0 0 0 3px rgba(59,130,246,.1);
}
.form-control::placeholder { color: var(--text-muted) }

/* Aliases for legacy usage */
.filter-input {
  font-family: inherit; font-size: 13px; padding: var(--f8) var(--f13);
  border: 1px solid #e2e8f0; border-radius: var(--r-sm);
  background: var(--surface); color: var(--text-main); transition: var(--t);
  outline: none; flex: 1; min-width: 160px;
}
.filter-input:focus { border-color: var(--brand-accent); background: white; box-shadow: 0 0 0 3px rgba(59,130,246,.1) }
.filter-input::placeholder { color: var(--text-muted) }
.filter-select {
  font-family: inherit; font-size: 13px; padding: var(--f8) var(--f13);
  border: 1px solid #e2e8f0; border-radius: var(--r-sm);
  background: var(--surface); color: var(--text-main); transition: var(--t); outline: none;
}
.filter-select:focus { border-color: var(--brand-accent); background: white; box-shadow: 0 0 0 3px rgba(59,130,246,.1) }

/* ── 08  Form Controls — Enhanced (Form Builder) ─────────────────────────── */
/*
 * Usage (from event-create pattern):
 *   <div class="form-row">
 *     <label class="form-label">Title <span class="req">*</span></label>
 *     <input class="form-input" type="text">
 *     <div class="form-hint">Max 100 characters</div>
 *   </div>
 *   <div class="form-2col">
 *     <div class="form-row">...</div>
 *     <div class="form-row">...</div>
 *   </div>
 */

.form-row           { display: flex; flex-direction: column; gap: 4px; margin-bottom: 16px }
.form-row:last-child{ margin-bottom: 0 }

.form-label         { font-size: 12px; font-weight: 600; color: #475569 }
.form-label .req    { color: #ef4444 }

.form-input {
  width: 100%; padding: 9px 12px;
  font-size: 13px; font-family: inherit;
  border: 1.5px solid #e2e8f0; border-radius: var(--r-sm);
  color: var(--text-main); background: #fff;
  outline: none; transition: border-color .15s;
  box-sizing: border-box;
}
.form-input:focus         { border-color: var(--brand-accent); box-shadow: 0 0 0 3px rgba(59,130,246,.10) }
.form-input[readonly]     { background: #f8fafc; color: var(--text-muted); cursor: not-allowed }

.form-select-enhanced {
  width: 100%; padding: 9px 36px 9px 12px;
  font-size: 13px; font-family: inherit;
  border: 1.5px solid #e2e8f0; border-radius: var(--r-sm);
  color: var(--text-main); background: #fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24'%3E%3Cpath fill='%2394a3b8' d='M7 10l5 5 5-5z'/%3E%3C/svg%3E") right 12px center no-repeat;
  -webkit-appearance: none; appearance: none;
  outline: none; cursor: pointer;
  transition: border-color .15s; box-sizing: border-box;
}
.form-select-enhanced:focus { border-color: var(--brand-accent); box-shadow: 0 0 0 3px rgba(59,130,246,.10) }

.form-textarea {
  width: 100%; padding: 10px 12px;
  font-size: 13px; font-family: inherit;
  border: 1.5px solid #e2e8f0; border-radius: var(--r-sm);
  color: var(--text-main); background: #fff;
  outline: none; resize: vertical;
  transition: border-color .15s; line-height: 1.65; box-sizing: border-box;
}
.form-textarea:focus { border-color: var(--brand-accent); box-shadow: 0 0 0 3px rgba(59,130,246,.10) }

.form-hint   { font-size: 11px; color: var(--text-muted); margin-top: 3px }

/* Grid form layouts */
.form-2col {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 12px;
  margin-bottom: 16px;
}
.form-2col:last-child { margin-bottom: 0 }
.form-3col { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 10px }

/* ── 09  Filter Bar ──────────────────────────────────────────────────────── */
/*
 * Usage:
 *   <div class="filter-bar">
 *     <div class="filter-group">
 *       <label>Status</label>
 *       <select class="form-select">...</select>
 *     </div>
 *     <button class="btn btn-primary">Search</button>
 *   </div>
 */

.filter-bar {
  background: var(--white);
  border-radius: var(--r-md);
  padding: var(--f21);
  box-shadow: var(--shadow-sm);
  border: 1px solid #f1f5f9;
  display: flex;
  gap: var(--f13);
  align-items: flex-end;
  flex-wrap: wrap;
}
.filter-group {
  display: flex;
  flex-direction: column;
  gap: var(--f5);
  flex: 1;
  min-width: 160px;
}
.filter-group label {
  font-size: 11px;
  font-weight: 700;
  color: var(--text-muted);
  text-transform: uppercase;
  letter-spacing: .05em;
}

/* ── 10  Data Tables ─────────────────────────────────────────────────────── */
/*
 * Usage:
 *   <div class="table-card">
 *     <div class="table-header">
 *       <div class="table-title">Members</div>
 *       <button class="btn btn-primary btn-sm">Export</button>
 *     </div>
 *     <table class="data-table">
 *       <thead><tr><th>Name</th><th>Status</th></tr></thead>
 *       <tbody>
 *         <tr class="urgency-h">
 *           <td><div class="member-cell">
 *             <img class="member-avatar" src="..." alt="">
 *             <div><div class="member-name">Name</div><div class="member-email">email</div></div>
 *           </div></td>
 *           <td><span class="badge badge-active">Active</span></td>
 *         </tr>
 *       </tbody>
 *     </table>
 *   </div>
 */

.data-table { width: 100%; border-collapse: collapse; font-size: 13px }
.data-table thead tr { background: var(--surface); border-bottom: 1px solid #e2e8f0 }
.data-table th {
  padding: var(--f13) var(--f21);
  text-align: left;
  font-size: 11px; font-weight: 700; color: var(--text-muted);
  text-transform: uppercase; letter-spacing: .05em; white-space: nowrap;
}
.data-table td {
  padding: var(--f13) var(--f21);
  border-bottom: 1px solid #f1f5f9;
  color: var(--text-sub); vertical-align: middle;
}
.data-table tbody tr { transition: var(--t) }
.data-table tbody tr:hover { background: #fafcff }
.data-table tbody tr:last-child td { border-bottom: none }

.member-cell   { display: flex; align-items: center; gap: var(--f13) }
.member-avatar { width: 34px; height: 34px; border-radius: 50%; object-fit: cover }
.member-name   { font-weight: 600; color: var(--text-main) }
.member-email  { font-size: 11px; color: var(--text-muted) }

/* ── 11  Activity Feed ───────────────────────────────────────────────────── */
/*
 * Usage:
 *   <div class="activity-list">
 *     <div class="activity-item">
 *       <div class="activity-dot c-success"><span class="material-icons">check</span></div>
 *       <div>
 *         <div class="activity-text"><strong>Name</strong> action description</div>
 *         <div class="activity-time">2 hours ago</div>
 *       </div>
 *     </div>
 *   </div>
 */

.activity-list { display: flex; flex-direction: column }
.activity-item {
  display: flex;
  gap: var(--f13);
  padding: var(--f13) 0;
  border-bottom: 1px solid #f1f5f9;
}
.activity-item:last-child { border-bottom: none }
.activity-dot {
  width: 34px; height: 34px;
  border-radius: 50%;
  display: flex; align-items: center; justify-content: center; flex-shrink: 0;
}
.activity-dot .material-icons { font-size: 16px }
.activity-dot.c-accent  { background: var(--brand-light); color: var(--brand-accent) }
.activity-dot.c-success { background: var(--success-bg);  color: var(--success) }
.activity-dot.c-warning { background: var(--warning-bg);  color: var(--warning) }
.activity-dot.c-danger  { background: var(--danger-bg);   color: var(--danger) }
.activity-dot.c-info    { background: var(--info-bg);     color: var(--info) }
.activity-text            { font-size: 13px; color: var(--text-sub) }
.activity-text strong     { color: var(--text-main); font-weight: 600 }
.activity-time            { font-size: 11px; color: var(--text-muted); margin-top: 2px }

/* ── 12  Progress Bars ───────────────────────────────────────────────────── */
/*
 * Usage:
 *   <div class="progress"><div class="progress-bar success" style="width:72%"></div></div>
 */

.progress     { background: var(--surface-2); border-radius: 20px; height: 8px; overflow: hidden }
.progress-bar { height: 100%; border-radius: 20px; background: var(--brand-accent); transition: width 1s ease }
.progress-bar.success { background: var(--success) }
.progress-bar.warning { background: var(--warning) }
.progress-bar.danger  { background: var(--danger) }

/* ── 13  Event Cards & Grid ──────────────────────────────────────────────── */
/*
 * Usage:
 *   <div class="event-grid">
 *     <div class="event-card">
 *       <div class="event-img-wrap">
 *         <img src="..." alt="">
 *         <span class="event-type-tag">Conference</span>
 *       </div>
 *       <div class="event-body">
 *         <div class="event-title">Title</div>
 *         <div class="event-meta"><span class="material-icons">calendar_today</span>Date</div>
 *       </div>
 *       <div class="event-footer">...</div>
 *     </div>
 *   </div>
 */

.event-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: var(--f21) }
.event-card {
  background: var(--white);
  border-radius: var(--r-md);
  overflow: hidden;
  box-shadow: var(--shadow-sm);
  border: 1px solid #f1f5f9;
  transition: var(--t);
  display: flex;
  flex-direction: column;
}
.event-card:hover { transform: translateY(-4px); box-shadow: var(--shadow-md) }

/* Image container with tag overlay */
.event-img-wrap           { position: relative; overflow: hidden }
.event-img-wrap img       { width: 100%; height: var(--f144); object-fit: cover; display: block }
.event-img-wrap .event-type-tag {
  position: absolute; top: var(--f13); left: var(--f13);
  background: rgba(12,30,60,.85); color: white;
  font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: .08em;
  padding: 3px var(--f8); border-radius: 20px;
}

/* Event card body (expanded card variant from original) */
.event-card-img    { width: 100%; height: var(--f144); object-fit: cover }
.event-card-body   { padding: var(--f21); flex: 1; display: flex; flex-direction: column; gap: var(--f8) }
.event-card-title  { font-size: 15px; font-weight: 700; color: var(--text-main) }
.event-meta-row    { display: flex; align-items: center; gap: var(--f8); font-size: 12px; color: var(--text-muted) }
.event-meta-row .material-icons { font-size: 14px }
.event-card-footer {
  padding: var(--f13) var(--f21);
  border-top: 1px solid #f1f5f9;
  display: flex; align-items: center; justify-content: space-between;
  background: var(--surface);
}
.event-type-tag { font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: .08em; color: var(--brand-accent) }

/* Compact card variant */
.event-body   { padding: var(--f21); flex: 1; display: flex; flex-direction: column; gap: var(--f8) }
.event-title  { font-size: 15px; font-weight: 700; color: var(--text-main) }
.event-meta   { display: flex; align-items: center; gap: var(--f8); font-size: 12px; color: var(--text-muted) }
.event-meta .material-icons { font-size: 14px }
.event-footer {
  padding: var(--f13) var(--f21);
  border-top: 1px solid #f1f5f9;
  display: flex; align-items: center; justify-content: space-between;
  background: var(--surface);
}

/* ── 14  Timeline ────────────────────────────────────────────────────────── */
/*
 * Usage (standard):
 *   <div class="timeline">
 *     <div class="timeline-item">
 *       <div class="timeline-dot"><span class="material-icons">check</span></div>
 *       <div>
 *         <div class="timeline-event">Application submitted</div>
 *         <div class="timeline-time">Jan 5, 2025 · 9:22 AM</div>
 *       </div>
 *     </div>
 *   </div>
 *
 * Usage (compact):
 *   <div class="timeline">
 *     <div class="tl-item">
 *       <div class="tl-dot" style="background:var(--success)"></div>
 *       <div class="tl-body">
 *         <div class="tl-title">Application approved</div>
 *         <div class="tl-meta">Jan 6, 2025</div>
 *       </div>
 *     </div>
 *   </div>
 */

.timeline         { display: flex; flex-direction: column; position: relative }
.timeline::before {
  content: '';
  position: absolute; left: 16px; top: 8px; bottom: 8px;
  width: 2px; background: #e2e8f0;
}
.timeline-item    { display: flex; gap: var(--f21); padding: var(--f13) 0 }
.timeline-dot {
  width: 34px; height: 34px; border-radius: 50%;
  background: white; border: 2px solid var(--brand-accent);
  display: flex; align-items: center; justify-content: center;
  flex-shrink: 0; z-index: 1;
}
.timeline-dot .material-icons { font-size: 16px; color: var(--brand-accent) }
.timeline-event   { font-size: 13px; font-weight: 600; color: var(--text-main); padding-top: var(--f5) }
.timeline-time    { font-size: 11px; color: var(--text-muted); margin-top: 2px }

/* Compact timeline */
.tl-item  { display: flex; gap: 12px; padding: 10px 0; position: relative; z-index: 1 }
.tl-dot   { width: 14px; height: 14px; border-radius: 50%; flex-shrink: 0; margin-top: 3px; box-shadow: 0 0 0 3px #fff }
.tl-body  { flex: 1 }
.tl-title { font-size: 13px; font-weight: 600; color: var(--text-main) }
.tl-meta  { font-size: 11px; color: var(--text-muted); margin-top: 2px }

/* ── 15  Settings Tabs ───────────────────────────────────────────────────── */
/*
 * Usage:
 *   <div class="settings-tabs">
 *     <button class="stab active"><span class="material-icons">info</span>General</button>
 *     <button class="stab"><span class="material-icons">lock</span>Security</button>
 *   </div>
 *   <div class="settings-pane active" id="pane-general">...</div>
 *   <div class="settings-pane" id="pane-security">...</div>
 *
 * JS toggle:
 *   stabs.forEach(b => b.addEventListener('click', () => { activateTab(b.dataset.pane) }))
 */

.settings-tabs { display: flex; gap: 4px; border-bottom: 2px solid #e2e8f0 }
.stab {
  padding: var(--f13) var(--f21);
  font-size: 13px; font-weight: 600; color: var(--text-muted);
  cursor: pointer; border: none; background: none;
  border-bottom: 2px solid transparent; margin-bottom: -2px;
  transition: var(--t);
  display: flex; align-items: center; gap: var(--f8);
  font-family: inherit;
}
.stab .material-icons { font-size: 16px }
.stab:hover    { color: var(--brand-accent) }
.stab.active   { color: var(--brand-accent); border-bottom-color: var(--brand-accent) }
.settings-pane { display: none }
.settings-pane.active { display: block }

/* ── 16  Messages & Chat ─────────────────────────────────────────────────── */
/*
 * Usage:
 *   <div class="chat-layout">
 *     <div class="chat-sidebar">
 *       <div class="chat-search">...</div>
 *       <div class="conv-item active">
 *         <div class="conv-avatar-wrap">
 *           <img src="..." alt="">
 *           <span class="online-dot"></span>
 *         </div>
 *         <div class="flex-1">
 *           <div class="conv-header">
 *             <span class="conv-name">Name</span>
 *             <span class="conv-time">3:45 PM</span>
 *           </div>
 *           <div class="conv-preview">Preview text...</div>
 *           <div class="conv-id">MMS-2021-0042</div>
 *         </div>
 *         <span class="conv-badge">2</span>
 *       </div>
 *     </div>
 *     <div class="chat-main">...</div>
 *   </div>
 */

/* Full-height chat layout — replaces inline grid style */
.chat-layout {
  display: grid;
  grid-template-columns: 320px 1fr;
  flex: 1;
  overflow: hidden;
  height: calc(100vh - var(--topbar-h, 64px));
}
.chat-sidebar {
  border-right: 1px solid #e2e8f0;
  overflow-y: auto;
  background: var(--white);
  display: flex;
  flex-direction: column;
}
.chat-search { padding: 12px; border-bottom: 1px solid #e2e8f0 }
.chat-main   { display: flex; flex-direction: column; overflow: hidden }

/* Conversation list item */
.conv-item {
  display: flex; align-items: center; gap: var(--f13);
  padding: var(--f13); border-radius: var(--r-sm);
  cursor: pointer; transition: var(--t);
}
.conv-item:hover   { background: var(--surface) }
.conv-item.active  { background: var(--brand-light) }
.conv-item img     { width: 42px; height: 42px; border-radius: 50%; object-fit: cover; flex-shrink: 0 }

/* Avatar with online indicator */
.conv-avatar-wrap  { position: relative; flex-shrink: 0 }
.conv-avatar-wrap img { width: 40px; height: 40px; border-radius: 50%; object-fit: cover }

.conv-name    { font-size: 13px; font-weight: 700; color: var(--text-main) }
.conv-time    { font-size: 11px; color: var(--text-muted) }
.conv-header  { display: flex; justify-content: space-between; align-items: center }
.conv-preview { font-size: 12px; color: var(--text-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis }
.conv-id      { font-size: 11px; color: var(--text-muted) }
.conv-badge {
  background: var(--brand-accent); color: white;
  font-size: 10px; font-weight: 700;
  width: 20px; height: 20px; border-radius: 50%;
  display: flex; align-items: center; justify-content: center; flex-shrink: 0;
}
.conv-unread {
  background: var(--danger); color: white;
  font-size: 10px; font-weight: 700;
  padding: 2px 6px; border-radius: 10px; flex-shrink: 0;
}

/* Message bubbles */
.msg-bubble {
  max-width: 70%;
  padding: var(--f13) var(--f21);
  border-radius: var(--r-lg);
  font-size: 13px; line-height: 1.5;
}
.msg-bubble.incoming { background: var(--surface); color: var(--text-main); border-bottom-left-radius: 4px }
.msg-bubble.outgoing { background: var(--brand-accent); color: white; border-bottom-right-radius: 4px }
.msg-time            { font-size: 11px; color: var(--text-muted); margin-top: 4px }

/* ── 17  Detail Pages ────────────────────────────────────────────────────── */
/*
 * Member cover with gradient background:
 *   <div class="member-hero">
 *     <div class="member-hero-inner">
 *       <img class="member-hero-avatar" src="..." alt="">
 *       <div>
 *         <div class="member-hero-name">Name</div>
 *         <div class="member-hero-meta">email · phone</div>
 *       </div>
 *       <span class="badge badge-active">Active</span>
 *     </div>
 *   </div>
 *   <div class="member-hero-spacer"></div>
 *
 * Event cover hero:
 *   <div class="cover-hero">
 *     <img src="..." alt="" class="cover-hero-img">
 *     <div class="cover-hero-overlay"></div>
 *     <div class="cover-hero-tag"><span>Conference</span></div>
 *     <div class="cover-hero-body">
 *       <div class="cover-hero-title">Event Title</div>
 *       <div class="cover-hero-meta">...</div>
 *     </div>
 *   </div>
 *
 * Info rows (within detail cards):
 *   <div class="info-row">
 *     <span class="info-lbl">Email</span>
 *     <span class="info-val">user@email.com</span>
 *   </div>
 *
 * Fieldlet (compact label+value stacked):
 *   <div class="fieldlet">
 *     <div class="fieldlet-lbl">Date of Birth</div>
 *     <div class="fieldlet-val">September 22, 1988</div>
 *   </div>
 */

/* Member profile hero (cover bar + avatar overlay) */
.member-hero {
  background: linear-gradient(135deg, var(--brand-dark) 0%, var(--brand-primary) 100%);
  border-radius: var(--r-md);
  overflow: hidden;
  position: relative;
  height: 120px;
}
.member-hero-inner {
  position: absolute;
  bottom: -30px; left: 24px;
  display: flex; align-items: flex-end; gap: 16px;
  z-index: 2;
}
.member-hero-avatar {
  width: 88px; height: 88px;
  border-radius: 50%;
  border: 4px solid #fff;
  object-fit: cover;
  box-shadow: 0 4px 16px rgba(0,0,0,.25);
}
.member-hero-name { font-size: 18px; font-weight: 700; color: #fff; margin-bottom: 2px }
.member-hero-meta { font-size: 12px; color: #93c5fd }
.member-hero-spacer { height: 44px }

/* Event cover hero */
.cover-hero {
  border-radius: var(--r-md);
  overflow: hidden;
  position: relative;
  height: 220px;
}
.cover-hero-img    { width: 100%; height: 100%; object-fit: cover; display: block }
.cover-hero-overlay {
  position: absolute; inset: 0;
  background: linear-gradient(to right, rgba(12,30,60,.75) 40%, transparent 100%);
}
.cover-hero-tag    { position: absolute; top: 20px; left: 24px }
.cover-hero-tag span {
  background: var(--brand-accent); color: #fff;
  font-size: 11px; font-weight: 700; letter-spacing: .5px;
  padding: 4px 12px; border-radius: 20px; text-transform: uppercase;
}
.cover-hero-body   { position: absolute; bottom: 24px; left: 24px }
.cover-hero-title  { font-size: 22px; font-weight: 700; color: #fff; margin-bottom: 4px }
.cover-hero-meta   { font-size: 13px; color: #bfdbfe; display: flex; align-items: center; gap: 16px; flex-wrap: wrap }
.cover-hero-meta .material-icons { font-size: 14px; vertical-align: -2px }

/* Standard detail page components */
.detail-cover-bar {
  height: 89px;
  border-radius: var(--r-md) var(--r-md) 0 0;
  background: linear-gradient(135deg, var(--brand-dark) 0%, var(--brand-primary) 50%, var(--brand-accent) 100%);
}
.detail-avatar-lg {
  width: 89px; height: 89px;
  border-radius: var(--r-md); object-fit: cover;
  border: 4px solid white; box-shadow: var(--shadow-md);
  margin-top: -44px; position: relative; z-index: 1; flex-shrink: 0;
}
.detail-name { font-size: 22px; font-weight: 800; color: var(--text-main) }
.detail-meta { display: flex; flex-wrap: wrap; gap: var(--f13); font-size: 13px; color: var(--text-muted); align-items: center }

/* Info rows */
.info-row {
  display: flex; justify-content: space-between;
  padding: var(--f8) 0;
  border-bottom: 1px solid #f1f5f9;
  font-size: 13px;
}
.info-row:last-child { border-bottom: none }
.info-lbl { color: var(--text-muted) }
.info-val  { color: var(--text-sub); font-weight: 600 }

/* Compact label+value stacked pair */
.fieldlet-lbl { font-size: 11px; color: var(--text-muted) }
.fieldlet-val { font-size: 13px; color: var(--text-sub); margin-top: 1px }

/* Section header in detail cards */
.section-hdr {
  font-weight: 700; font-size: 13px; color: #475569;
  margin-bottom: 12px;
  text-transform: uppercase; letter-spacing: .5px;
  display: flex; align-items: center; gap: 6px;
}
.section-hdr .material-icons { font-size: 16px }

/* ── 18  Page Layout Helpers (Grid Patterns) ─────────────────────────────── */
/*
 * Named grid layout helpers extracted from inline styles.
 * Usage:
 *   <div class="layout-2col">...</div>
 *   <div class="layout-sidebar-right">...</div>
 *   <div class="layout-3col-sidebar">...</div>
 *   <div class="layout-content-sidebar">...</div>
 *   <div class="layout-charts-row">...</div>
 */

/* 2 equal columns */
.layout-2col {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--f21);
}
/* 1fr + fixed 300px sidebar */
.layout-sidebar-right {
  display: grid;
  grid-template-columns: 1fr 300px;
  gap: 20px;
}
/* 1fr + 320px sidebar */
.layout-content-sidebar {
  display: grid;
  grid-template-columns: 1fr 320px;
  gap: 20px;
}
/* 1fr + 360px sidebar */
.layout-content-wide {
  display: grid;
  grid-template-columns: 1fr 360px;
  gap: var(--f21);
}
/* 420px + 1fr (dashboard chart + table) */
.layout-chart-wide {
  display: grid;
  grid-template-columns: 420px 1fr;
  gap: var(--f21);
}
/* 2fr + 1fr (reports) */
.layout-reports-row {
  display: grid;
  grid-template-columns: 2fr 1fr;
  gap: 20px;
}
/* 3 columns with 280px sidebar */
.layout-3col-sidebar {
  display: grid;
  grid-template-columns: 1fr 1fr 280px;
  gap: 16px;
}
/* 3 equal columns */
.layout-3col {
  display: grid;
  grid-template-columns: 1fr 1fr 300px;
  gap: var(--f21);
}
/* 4 stat columns */
.layout-4col {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: var(--f21);
}

/* ── 19  Online Status & Notification Dot ────────────────────────────────── */
/*
 * Usage:
 *   <div class="avatar-wrap">
 *     <img src="..." alt="">
 *     <span class="online-dot"></span>
 *   </div>
 *
 *   <div class="topbar-icon-btn">
 *     <span class="material-icons">notifications</span>
 *     <span class="notif-dot"></span>
 *   </div>
 */

.avatar-wrap  { position: relative; display: inline-block }
.online-dot {
  position: absolute; bottom: 0; right: 0;
  width: 10px; height: 10px;
  background: var(--success); border-radius: 50%;
  border: 2px solid var(--white);
}
.notif-dot {
  position: absolute; top: 6px; right: 6px;
  width: 8px; height: 8px;
  background: var(--danger); border-radius: 50%;
  border: 2px solid white;
  animation: pulse-dot 2s ease infinite;
}

/* ── 20  Chart Legend Items ──────────────────────────────────────────────── */
/*
 * Usage:
 *   <div class="legend-grid">
 *     <div class="legend-item">
 *       <span class="legend-dot" style="background:#3b82f6"></span>Regular
 *     </div>
 *   </div>
 */

.legend-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 8px var(--f21);
  font-size: 12px;
}
.legend-item { display: flex; align-items: center; gap: var(--f8) }
.legend-dot  { width: 10px; height: 10px; border-radius: 2px; display: inline-block; flex-shrink: 0 }

/* ── 21  Code Reference Tag ──────────────────────────────────────────────── */
/*
 * Usage:  <code class="code-tag">PAY-2041</code>
 */
.code-tag {
  background: #f1f5f9;
  padding: 2px 6px;
  border-radius: 4px;
  font-size: 11px;
  font-family: 'IBM Plex Mono', 'Courier New', monospace;
}

/* ── 22  Amount Display ───────────────────────────────────────────────────── */
/*
 * Usage:  <span class="amount-positive">₱ 4,200</span>
 *         <span class="amount-negative">₱ 1,800</span>
 *         <span class="amount-neutral">₱ 500</span>
 */
.amount-positive { font-weight: 600; color: #0f766e }
.amount-negative { font-weight: 600; color: var(--danger) }
.amount-neutral  { font-weight: 600; color: var(--text-sub) }

/* ── 23  Pagination ──────────────────────────────────────────────────────── */
/*
 * Usage:
 *   <div class="pagination">
 *     <button class="page-btn">«</button>
 *     <button class="page-btn active">1</button>
 *     <button class="page-btn">2</button>
 *     <button class="page-btn">»</button>
 *   </div>
 */

.pagination { display: flex; align-items: center; gap: var(--f5) }
.page-btn {
  min-width: 34px; height: 34px;
  border-radius: var(--r-sm);
  border: 1px solid #e2e8f0; background: white;
  font-size: 13px; cursor: pointer; transition: var(--t);
  display: flex; align-items: center; justify-content: center;
  color: var(--text-sub); font-family: inherit;
}
.page-btn:hover  { border-color: var(--brand-accent); color: var(--brand-accent) }
.page-btn.active { background: var(--brand-accent); border-color: var(--brand-accent); color: white; box-shadow: var(--shadow-accent) }

/* ── 24  Urgency Row Indicators (Table) ──────────────────────────────────── */
/*
 * Usage:  <tr class="urgency-h">  (high urgency – red)
 *         <tr class="urgency-m">  (medium – yellow)
 *         <tr class="urgency-l">  (low – green)
 */
.urgency-h td:first-child { border-left: 3px solid var(--danger) }
.urgency-m td:first-child { border-left: 3px solid var(--warning) }
.urgency-l td:first-child { border-left: 3px solid var(--success) }

/* ── 25  Back Link / Breadcrumb ──────────────────────────────────────────── */
/*
 * Usage:
 *   <a href="members.html" class="back-link">
 *     <span class="material-icons">arrow_back</span>Back to Members
 *   </a>
 */
.back-link {
  color: var(--text-muted);
  text-decoration: none;
  font-size: 13px;
  display: inline-flex;
  align-items: center;
  gap: 4px;
  margin-bottom: 4px;
  transition: var(--t);
}
.back-link:hover { color: var(--brand-accent) }
.back-link .material-icons { font-size: 16px }

/* ── 26  Section Title ───────────────────────────────────────────────────── */
/*
 * Usage:
 *   <div class="sec-title">
 *     <span class="material-icons">event</span>Schedule
 *   </div>
 */
.sec-title {
  font-size: 11px; font-weight: 700; color: var(--text-muted);
  text-transform: uppercase; letter-spacing: .6px;
  margin-bottom: 16px;
  display: flex; align-items: center; gap: 7px;
}
.sec-title .material-icons { font-size: 16px; color: var(--brand-accent) }

/* ── 27  Pill Toggle ─────────────────────────────────────────────────────── */
/*
 * Usage:
 *   <div class="pill-toggle">
 *     <button class="pill-btn active"><span class="material-icons">public</span>Public</button>
 *     <button class="pill-btn"><span class="material-icons">lock</span>Members Only</button>
 *   </div>
 */
.pill-toggle {
  display: flex; gap: 1px;
  border: 1.5px solid #e2e8f0; border-radius: var(--r-sm);
  overflow: hidden; background: #f8fafc;
}
.pill-btn {
  flex: 1; padding: 7px 10px;
  font-size: 12px; font-weight: 600; color: var(--text-muted);
  background: transparent; border: none; cursor: pointer;
  display: flex; align-items: center; justify-content: center; gap: 5px;
  transition: var(--t); font-family: inherit;
}
.pill-btn .material-icons { font-size: 15px }
.pill-btn.active { background: var(--brand-accent); color: #fff }

/* ── 28  Cover Drop Zone & Preview ──────────────────────────────────────── */
/*
 * Usage:
 *   <div class="cover-drop" onclick="...">
 *     <span class="material-icons">upload</span>
 *     <div>Drop image here or click to browse</div>
 *   </div>
 *   <!-- After upload: -->
 *   <div class="cover-preview">
 *     <img src="..." alt="">
 *     <div class="cover-overlay">
 *       <button class="btn btn-outline btn-sm">Change</button>
 *     </div>
 *   </div>
 */
.cover-drop {
  border: 2px dashed #cbd5e1; border-radius: var(--r-md);
  padding: 36px 20px; text-align: center;
  cursor: pointer; transition: var(--t); background: #f8fafc;
}
.cover-drop:hover { border-color: var(--brand-accent); background: #eff6ff }

.cover-preview {
  position: relative; border-radius: var(--r-md);
  overflow: hidden; height: 188px;
}
.cover-preview img { width: 100%; height: 100%; object-fit: cover; display: block }
.cover-overlay {
  position: absolute; inset: 0;
  background: rgba(0,0,0,.4);
  display: flex; align-items: center; justify-content: center; gap: 8px;
  opacity: 0; transition: opacity .15s;
}
.cover-preview:hover .cover-overlay { opacity: 1 }

/* ── 29  Sticky Sidebar ──────────────────────────────────────────────────── */
/*
 * Usage:  <div class="sticky-sidebar">...</div>
 */
.sticky-sidebar {
  position: sticky;
  top: 20px;
  display: flex;
  flex-direction: column;
  gap: 16px;
}

/* ── 30  Visibility Option Card (Radio) ──────────────────────────────────── */
/*
 * Usage:
 *   <label class="vis-opt">
 *     <input type="radio" name="visibility" value="public">
 *     <span class="material-icons">public</span>Public
 *   </label>
 */
.vis-opt {
  display: flex; align-items: center; gap: var(--f8);
  cursor: pointer; font-size: 12px; color: #475569;
  padding: 8px 10px;
  border: 1.5px solid #e2e8f0; border-radius: var(--r-sm);
  transition: border-color .15s; margin-bottom: 6px;
}
.vis-opt:last-child { margin-bottom: 0 }
.vis-opt:has(input:checked) { border-color: var(--brand-accent); background: #eff6ff }
.vis-opt input  { accent-color: var(--brand-accent) }

/* ── 31  Amount Input with Prefix ────────────────────────────────────────── */
/*
 * Usage:
 *   <div class="amt-wrap">
 *     <span class="amt-pfx">₱</span>
 *     <input class="form-input" type="number" placeholder="0.00">
 *   </div>
 */
.amt-wrap       { position: relative }
.amt-wrap .amt-pfx {
  position: absolute; left: 10px; top: 50%; transform: translateY(-50%);
  font-size: 12px; color: var(--text-muted); font-weight: 600; pointer-events: none;
}
.amt-wrap .form-input { padding-left: 26px }

/* ── 32  Agenda Builder ──────────────────────────────────────────────────── */
/*
 * Usage:
 *   <div class="agenda-item">
 *     <span class="material-icons agenda-drag">drag_indicator</span>
 *     <div class="agenda-time"><input class="form-input" type="time"></div>
 *     <div class="agenda-fields">
 *       <input class="form-input" placeholder="Session title">
 *       <input class="form-input" placeholder="Location">
 *     </div>
 *     <span class="material-icons agenda-remove">delete</span>
 *   </div>
 */
.agenda-item {
  display: flex; gap: 10px; align-items: flex-start;
  padding: 12px; background: #f8fafc;
  border-radius: 10px; border: 1px solid #e2e8f0;
  margin-bottom: 8px;
}
.agenda-drag   { color: #cbd5e1; cursor: grab; margin-top: 11px; flex-shrink: 0; font-size: 20px }
.agenda-time   { width: 86px; flex-shrink: 0 }
.agenda-fields { flex: 1; display: flex; flex-direction: column; gap: 6px }
.agenda-remove { color: #cbd5e1; cursor: pointer; margin-top: 10px; flex-shrink: 0; font-size: 20px; transition: color .15s }
.agenda-remove:hover { color: var(--danger) }

/* ── 33  Speaker Cards ───────────────────────────────────────────────────── */
/*
 * Usage:
 *   <div class="speaker-item">
 *     <div class="speaker-avatar">
 *       <img src="..." alt="">
 *     </div>
 *     <div class="speaker-grid">
 *       <div class="form-row">...</div>
 *       <div class="form-row speaker-full">...</div>
 *     </div>
 *     <span class="material-icons speaker-remove">delete</span>
 *   </div>
 */
.speaker-item {
  display: flex; gap: 12px; padding: 14px;
  background: #f8fafc; border-radius: 10px; border: 1px solid #e2e8f0;
  margin-bottom: 8px; align-items: flex-start;
}
.speaker-avatar {
  width: 52px; height: 52px; border-radius: 50%;
  background: #e2e8f0;
  display: flex; align-items: center; justify-content: center;
  flex-shrink: 0; overflow: hidden;
}
.speaker-avatar img { width: 100%; height: 100%; object-fit: cover }
.speaker-grid   { flex: 1; display: grid; grid-template-columns: 1fr 1fr; gap: 8px }
.speaker-full   { grid-column: 1 / -1 }
.speaker-remove { color: #cbd5e1; cursor: pointer; margin-top: 4px; flex-shrink: 0; font-size: 20px; transition: color .15s }
.speaker-remove:hover { color: var(--danger) }

/* ── 34  Ticket Cards ────────────────────────────────────────────────────── */
/*
 * Usage:
 *   <div class="ticket-card">...</div>
 *   <div class="ticket-card vip">...</div>
 */
.ticket-card     { border: 1.5px solid #e2e8f0; border-radius: 10px; padding: 14px; margin-bottom: 8px }
.ticket-card.vip { border-color: #ddd6fe }

/* ── 35  Checklist Items ─────────────────────────────────────────────────── */
/*
 * Usage:
 *   <div class="chk-item">
 *     <span class="material-icons chk-icon done">check_circle</span>Title complete
 *   </div>
 *   <div class="chk-item">
 *     <span class="material-icons chk-icon pending">radio_button_unchecked</span>Missing info
 *   </div>
 */
.chk-item    { display: flex; align-items: center; gap: 8px; padding: 5px 0; font-size: 12px; color: var(--text-muted) }
.chk-icon    { font-size: 17px; flex-shrink: 0 }
.chk-icon.done    { color: var(--success) }
.chk-icon.pending { color: #e2e8f0 }

/* ── 36  Animations & Utility Classes ───────────────────────────────────── */
@keyframes pulse-dot  { 0%,100%{transform:scale(1);opacity:1} 50%{transform:scale(1.4);opacity:.7} }
@keyframes spin-slow  { from{transform:rotate(0deg)} to{transform:rotate(360deg)} }
@keyframes bounce-y   { 0%,100%{transform:translateY(0)} 50%{transform:translateY(-5px)} }
@keyframes pulse-icon { 0%,100%{transform:scale(1)} 50%{transform:scale(1.18)} }
@keyframes slide-in   { from{opacity:0;transform:translateY(16px)} to{opacity:1;transform:translateY(0)} }
@keyframes fade-in    { from{opacity:0} to{opacity:1} }
@keyframes count-up   { from{opacity:0;transform:translateY(8px)} to{opacity:1;transform:translateY(0)} }

.icon-spin   { animation: spin-slow 4s linear infinite }
.icon-bounce { animation: bounce-y 2.5s ease-in-out infinite }
.icon-pulse  { animation: pulse-icon 2s ease-in-out infinite }
.animate-in  { animation: slide-in .4s ease forwards }
.fade-in     { animation: fade-in .3s ease forwards }

/* ── 37  Responsive Breakpoints ─────────────────────────────────────────── */
@media (max-width: 1024px) {
  .layout-3col        { grid-template-columns: 1fr 1fr }
  .layout-3col-sidebar{ grid-template-columns: 1fr 1fr }
  .layout-4col        { grid-template-columns: repeat(2, 1fr) }
  .layout-chart-wide  { grid-template-columns: 1fr }
  .chat-layout        { grid-template-columns: 280px 1fr }
}

@media (max-width: 768px) {
  .layout-2col        { grid-template-columns: 1fr }
  .layout-sidebar-right    { grid-template-columns: 1fr }
  .layout-content-sidebar  { grid-template-columns: 1fr }
  .layout-content-wide     { grid-template-columns: 1fr }
  .layout-reports-row      { grid-template-columns: 1fr }
  .layout-3col-sidebar     { grid-template-columns: 1fr }
  .layout-3col             { grid-template-columns: 1fr }
  .chat-layout             { grid-template-columns: 1fr }
  .chat-sidebar            { display: none }
  .chat-sidebar.open       { display: flex; position: fixed; inset: 0 64px 0 0; z-index: 200; width: 320px }
  .cover-hero              { height: 160px }
  .cover-hero-title        { font-size: 18px }
  .detail-meta             { flex-direction: column; gap: var(--f8) }
  .form-2col               { grid-template-columns: 1fr }
  .form-3col               { grid-template-columns: 1fr }
  .stat-row, .stats-row    { grid-template-columns: repeat(2, 1fr) }
}

@media (max-width: 480px) {
  .stat-row, .stats-row    { grid-template-columns: 1fr }
  .event-grid              { grid-template-columns: 1fr }
  .layout-4col             { grid-template-columns: 1fr }
  .member-hero-name        { font-size: 15px }
}
