
 :root {
  /* PyRoller theme foundation. New UI styling should use these semantic tokens instead of hardcoded colors. */
  --py-bg: #cfe8ff;
  --py-bg-strong: #d6ebff;
  --py-bg-soft: #eaf5ff;
  --py-topbar: #9ed0ff;
  --py-panel: #ffffff;
  --py-panel-soft: #f7fbff;
  --py-panel-soft-2: #f8fcff;
  --py-panel-tint: #eef7ff;
  --py-notice-bg: #f3f9ff;
  --py-border: #8bb8e8;
  --py-border-strong: #8bb5ea;
  --py-border-soft: #d5e6f7;
  --py-border-soft-2: #deedfb;
  --py-border-faint: #dcecf9;
  --py-text: #123a63;
  --py-text-strong: #10385b;
  --py-text-deep: #0f3d67;
  --py-muted: #557ea6;
  --py-muted-strong: #587aa3;
  --py-primary: #2b6cb0;
  --py-primary-2: #3b82c4;
  --py-primary-dark: #244c7d;
  --py-primary-mid: #2b6fb3;
  --py-on-primary: #ffffff;
  --py-danger: #b83232;
  --py-danger-strong: #b72a2d;
  --py-success: #2f855a;
  --py-success-deep: #276749;
  --py-hover-ring: rgba(43,108,176,.12);
  --py-hover-ring-strong: rgba(43,108,176,.16);
  --py-shadow-color: rgba(17,63,109,.12);
  --py-shadow-soft: 0 8px 24px var(--py-shadow-color);
  --py-header-bg-start: rgba(214,235,255,.97);
  --py-header-bg-end: rgba(238,247,255,.97);
  --py-header-shadow: rgba(17,63,109,.04);
  --py-shadow-panel: rgba(17,63,109,.18);
  --py-shadow-panel-strong: rgba(17,63,109,.24);
  --py-panel-glass: rgba(246,251,255,.98);
  --py-panel-glass-strong: rgba(255,255,255,.98);
  --py-primary-glass: rgba(214,235,255,.62);
  --py-primary-border-alpha: rgba(43,108,176,.32);
  --py-primary-border-alpha-strong: rgba(43,108,176,.35);
  --py-primary-border-alpha-soft: rgba(43,108,176,.25);
  --py-hero-wash: rgba(247,251,255,.94);
  --py-hero-radial: rgba(59,130,196,.22);
  --py-hero-glow: rgba(255,255,255,.9);
  --py-hero-orb-border: rgba(139,184,232,.22);
  --py-elevated-panel: rgba(255,255,255,.78);
  --py-table-stripe: var(--py-panel-soft);
  --py-input-bg: var(--py-panel);
  --py-success-bg: rgba(240,255,246,.98);
  --py-success-border: rgba(47,133,90,.25);
  --py-success-ring: rgba(47,133,90,.22);
  --py-danger-bg: rgba(255,244,244,.98);
  --py-danger-border: rgba(195,44,47,.32);
  --py-dark-popover: rgba(8,15,28,.88);
  --py-dark-popover-text: #eef3ff;

  /* Legacy aliases kept so existing app styles keep working while CSS is migrated. */
  --bg: var(--py-bg);
  --bg2: var(--py-bg-soft);
  --panel: var(--py-panel);
  --line: var(--py-border);
  --text: var(--py-text);
  --muted: var(--py-muted);
  --accent: var(--py-primary);
  --accent2: var(--py-primary-2);
  --accent-strong: var(--py-primary-dark);
  --danger: var(--py-danger);
  --success: var(--py-success);
  --shadow: var(--py-shadow-soft);
}
* { box-sizing: border-box; }
[hidden] { display: none !important; }
html, body { margin:0; padding:0; font-family: Arial, Helvetica, sans-serif; color: var(--text); background: linear-gradient(180deg, var(--bg), var(--bg2)); }
a { color: var(--accent); text-decoration: none; }
.app-shell { min-height: 100vh; }
.topbar { background: var(--py-topbar); border-bottom: 2px solid var(--line); padding: 16px 24px; position: sticky; top:0; z-index: 5; }

.brand-row{display:flex;align-items:center;gap:14px;flex-wrap:wrap;}
.home-brand-link{color:inherit;text-decoration:none;}
.home-brand-link:visited{color:inherit;}
.home-brand-link:hover .brand{text-decoration:none;}
.brand-icon{width:42px;height:42px;object-fit:cover;border-radius:12px;border:2px solid var(--line);background:var(--py-panel);box-shadow:var(--shadow);}
.brand-fallback{display:inline-flex;align-items:center;justify-content:center;width:42px;height:42px;border-radius:12px;border:2px solid var(--line);background:var(--py-panel);font-size:24px;box-shadow:var(--shadow);}
.brand { font-size: 28px; font-weight: 800; }
.subbrand { font-size: 14px; color: var(--muted); margin-top:4px; }
.nav-links { display:flex; gap:12px; flex-wrap:wrap; margin-top: 14px; }
.nav-pill { padding: 10px 14px; border-radius: 999px; border: 2px solid var(--line); background: var(--py-panel); color: var(--text); font-weight: 700; }
.nav-pill.active { background: var(--accent); color: var(--py-on-primary); border-color: var(--accent); }
.nav-pill.disabled { opacity: .55; cursor: default; }
.container { max-width: 1100px; margin: 0 auto; padding: 24px; }
.hero-card, .panel { background: var(--panel); border: 2px solid var(--line); border-radius: 18px; box-shadow: var(--shadow); }
.hero-card { padding: 24px; }
.grid { display:grid; gap:20px; }
.grid.two { grid-template-columns: 2fr 1fr; }
@media (max-width: 900px){ .grid.two { grid-template-columns: 1fr; } }

/* Character Forge desktop width polish: widen the centered builder shell without changing the rest of the site. */
.creator-app .container {
  max-width: 1560px;
  padding: 24px 28px 32px;
}
.creator-app .grid.two {
  grid-template-columns: minmax(0, 2.15fr) minmax(340px, 0.95fr);
  align-items: start;
}
.creator-app .hero-card {
  min-width: 0;
}
.creator-app .summary-box {
  min-width: 0;
}
@media (max-width: 1200px) {
  .creator-app .container {
    max-width: 1320px;
  }
  .creator-app .grid.two {
    grid-template-columns: minmax(0, 1.85fr) minmax(300px, 0.95fr);
  }
}
@media (max-width: 900px) {
  .creator-app .container {
    max-width: 100%;
    padding: 20px 16px 28px;
  }
  .creator-app .grid.two {
    grid-template-columns: 1fr;
  }
}

/* v29.12 creator ability-card correction: keep the wider canvas row-based and fit all six ability cards on one desktop row. */
.creator-app .builder-page { margin-top: 0; }
.creator-app .ability-score-grid{
  grid-template-columns: repeat(6, minmax(0, 1fr));
  gap: 8px;
}
.creator-app .ability-score-card{
  min-width: 0;
  padding: 10px 9px;
  border-radius: 14px;
}
.creator-app .ability-score-top{
  gap: 4px;
}
.creator-app .ability-score-name{
  font-size: clamp(13px, 0.92vw, 17px);
  line-height: 1.1;
}
.creator-app .ability-score-total{
  font-size: clamp(24px, 1.75vw, 32px);
}
.creator-app .ability-score-mod{
  font-size: clamp(18px, 1.32vw, 23px);
}
.creator-app .ability-breakdown{
  margin-top: 8px;
  gap: 4px;
}
.creator-app .ability-breakdown-row{
  gap: 6px;
  font-size: clamp(10.5px, 0.72vw, 12px);
  padding-top: 4px;
}
.creator-app .ability-breakdown-row span{
  min-width: 0;
  overflow-wrap: anywhere;
}
@media (max-width: 900px){
  .creator-app .ability-score-grid{ grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
@media (max-width: 640px){
  .creator-app .ability-score-grid{ grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 440px){
  .creator-app .ability-score-grid{ grid-template-columns: 1fr; }
}
.section-title { font-size: 30px; margin:0 0 8px; font-weight: 800; text-align:center; }
.section-sub { color: var(--muted); margin-bottom: 12px; }
.step-tabs { display:flex; gap:12px; flex-wrap:wrap; margin: 18px 0 24px; }
.step-tab { padding: 10px 14px; border-radius: 12px; border: 2px solid var(--line); background:var(--py-input-bg); color: var(--text); font-weight: 800; }
.step-tab.active { background: var(--accent2); color:var(--py-on-primary); border-color: var(--accent2); }
.step-tab.disabled { opacity: .55; }
.field-grid { display:grid; gap:16px; grid-template-columns: repeat(2, minmax(0,1fr)); }
.field-grid.three { grid-template-columns: repeat(3, minmax(0,1fr)); }
@media (max-width: 760px){ .field-grid, .field-grid.three { grid-template-columns: 1fr; } }
.field { display:flex; flex-direction:column; gap:8px; }
label { font-weight: 800; }
input[type=text], input[type=number], select, textarea { width: 100%; padding: 12px 14px; border-radius: 12px; border: 2px solid var(--line); background:var(--py-input-bg); color: var(--text); font-size: 16px; }
select:disabled { background:var(--py-panel-tint); color:var(--py-muted); }
.small-note { font-size: 13px; color: var(--muted); }
.card-list { display:grid; gap:12px; }
.option-card { display:flex; justify-content:space-between; align-items:center; padding:16px; border:2px solid var(--line); border-radius:16px; background:var(--py-panel); }
.option-card.disabled { opacity:.6; }
.option-card h4 { margin:0; font-size:24px; }
.option-card p { margin:4px 0 0; color:var(--muted); }

.option-card { gap: 20px; }
.option-card > div { flex: 1 1 auto; min-width: 0; }
.option-card .btn { flex: 0 0 auto; }
.sheet-option-card { min-height: 92px; }
.sheet-option-card h4 { margin-right: 12px; }
@media (max-width: 700px){
  .option-card { flex-direction: column; align-items: flex-start; }
  .option-card .btn { width: 100%; }
}
.btn { display:inline-flex; align-items:center; justify-content:center; gap:8px; padding: 10px 14px; border-radius: 12px; border: 2px solid var(--accent); background:var(--py-panel); color: var(--accent); font-weight:800; cursor:pointer; }
.btn.primary { background: var(--accent); color: var(--py-on-primary); }
.btn.danger { border-color: var(--danger); color: var(--danger); }
.btn:disabled { opacity:.5; cursor:not-allowed; }
.summary-box { padding:16px; }
.summary-box h3 { margin:0 0 10px; }
.notice { padding: 12px 14px; border-radius: 12px; border: 2px solid var(--line); background: var(--py-notice-bg); }
.notice.coming { background: var(--py-panel-tint); }
.choice-block { margin-top: 16px; padding: 16px; border: 2px solid var(--line); border-radius: 16px; background: var(--py-panel-soft-2); min-width:0; max-width:100%; box-sizing:border-box; overflow-wrap:anywhere; }
.choice-block h3 { margin:0 0 10px; }
hr.sep { border:none; border-top: 2px solid var(--py-border-soft-2); margin: 22px 0; }
.feature-list { display:grid; gap:10px; }
.feature-item { padding: 12px; border:1px solid var(--py-border-soft); border-radius: 12px; background:var(--py-panel); min-width:0; max-width:100%; box-sizing:border-box; overflow-wrap:anywhere; }
.modal-backdrop { position: fixed; inset: 0; background: rgba(8,32,59,.35); display:none; align-items:center; justify-content:center; padding:20px; z-index:20; }
.modal-backdrop.show { display:flex; }
.modal { max-width: 860px; width: 100%; max-height: 88vh; overflow:auto; background:var(--py-panel); border:2px solid var(--line); border-radius: 18px; box-shadow: var(--shadow); }
.modal-header { display:flex; justify-content:space-between; align-items:center; padding: 18px 20px; border-bottom:2px solid var(--py-border-soft-2); }
.modal-body { padding: 20px; }
.footer-actions { display:flex; justify-content:flex-end; gap:12px; padding: 16px 20px; border-top:2px solid var(--py-border-soft-2); position: sticky; bottom:0; background:var(--py-panel); }
.hidden { display:none !important; }
.kv { display:grid; grid-template-columns: 180px 1fr; gap:8px 12px; }
.tag { display:inline-block; font-size: 12px; font-weight:800; padding:6px 9px; border-radius:999px; background:var(--py-border-soft-2); color:var(--accent); margin-right:8px; }
.export-box textarea { min-height: 220px; font-family: Consolas, monospace; }
.placeholder-page { padding: 32px; text-align:center; }

.level-feature-group { margin-top: 12px; }
.level-feature-title { font-weight: 800; font-size: 18px; margin-bottom: 8px; color: var(--accent); }
.nested-choice { background: var(--py-panel-soft); }
.feature-item .small-note { line-height: 1.45; }

.stat-strip{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;}
@media (max-width:760px){.stat-strip{grid-template-columns:repeat(2,minmax(0,1fr));}}
.stat-card{background:var(--py-panel-soft);border:2px solid var(--line);border-radius:16px;padding:14px 16px;box-shadow:var(--shadow)}
.stat-label{font-size:12px;font-weight:800;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}
.stat-value{font-size:24px;font-weight:800;margin-top:6px;color:var(--text)}
.choice-description{margin-top:10px;padding:12px 14px;border-radius:12px;background:var(--py-panel);border:1px solid var(--py-border-soft);color:var(--text)}
.blurb-box{margin-top:12px;padding:12px 14px;border-radius:12px;background:var(--py-panel-tint);border:1px solid var(--py-border-soft);color:var(--text);min-width:0;max-width:100%;box-sizing:border-box;overflow-wrap:anywhere}

.view-toggle{display:flex;gap:10px;flex-wrap:wrap;}
.view-toggle .btn.active{background:var(--accent);color:var(--py-on-primary);}
.subclass-card-list{display:grid;gap:12px;margin-top:12px;min-width:0;max-width:100%;box-sizing:border-box;}
.subclass-card{border:2px solid var(--line);border-radius:16px;background:var(--py-panel);padding:14px;cursor:pointer;width:100%;min-width:0;max-width:100%;box-sizing:border-box;text-align:left;overflow-wrap:anywhere;}
.subclass-card.selected{border-color:var(--accent);box-shadow:0 0 0 3px var(--py-hover-ring);}
.subclass-card-title{font-weight:800;font-size:18px;}
.full-width-description{margin-top:14px;padding:14px 16px;border-radius:12px;background:var(--py-panel);border:1px solid var(--py-border-soft);color:var(--text);white-space:pre-wrap;}
.spell-card-list{display:grid;gap:12px;}
.spell-card{border:2px solid var(--line);border-radius:16px;background:var(--py-panel);padding:14px;}
.spell-card-has-corner-action{position:relative;}
.spell-card-has-corner-action .spell-card-actions{position:absolute;right:14px;bottom:14px;margin-top:0;}
.cleric-prepared-spell-list{padding-left:14px;border-left:3px solid rgba(15,23,42,.12);}
.cleric-prepared-level-group{margin-left:6px;}
.spell-card-top{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;}
.spell-meta{font-size:12px;color:var(--muted);margin-top:4px;display:flex;gap:8px;flex-wrap:wrap;}
.spell-card details{margin-top:10px;}
.counter-row{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:16px;}
.counter-pill{padding:10px 14px;border-radius:999px;background:var(--py-panel);border:2px solid var(--line);font-weight:800;}


.spell-progression-table{width:100%;border-collapse:collapse;font-size:14px;}
.spell-progression-table th,.spell-progression-table td{border:1px solid rgba(255,255,255,0.12);padding:8px 10px;text-align:left;vertical-align:top;}
.spell-progression-table thead th{background:rgba(255,255,255,0.06);}
.spell-progression-table tbody th{background:rgba(255,255,255,0.03);font-weight:700;}


.feature-table{width:100%;border-collapse:collapse;margin-top:8px;font-size:12px;}
.feature-table th,.feature-table td{border:1px solid #3a3f52;padding:6px 8px;text-align:left;vertical-align:top;}
.feature-table th{background:#1f2433;font-weight:600;}

.feature-table { width: 100%; border-collapse: collapse; margin-top: 10px; }
.feature-table th, .feature-table td { border: 1px solid rgba(255,255,255,0.14); padding: 8px 10px; text-align: left; vertical-align: top; }
.feature-table th { background: rgba(255,255,255,0.06); }
.feature-table tbody tr:nth-child(even) { background: rgba(255,255,255,0.03); }

button.nav-pill, button.step-tab { font: inherit; cursor: pointer; }
button.nav-pill.disabled, button.step-tab.disabled { cursor: default; }
.builder-page { margin-top: 0; }
.page-jump-row { display:flex; gap:12px; flex-wrap:wrap; margin-top:18px; }

.background-table {
  border-collapse: separate;
  border-spacing: 0;
  width: 100%;
  overflow: hidden;
  border: 1px solid var(--py-border-soft);
  border-radius: 14px;
  background: var(--py-panel);
  box-shadow: 0 4px 12px var(--py-shadow-color);
}
.background-table th,
.background-table td {
  border: 0;
  border-bottom: 1px solid var(--py-border-faint);
  padding: 10px 12px;
  text-align: left;
  vertical-align: top;
  font-size: 13px;
  color: var(--text);
}
.background-table thead th {
  background: var(--py-panel-tint);
  color: var(--py-text-deep);
  font-weight: 800;
}
.background-table tbody tr:nth-child(even) {
  background: var(--py-table-stripe);
}
.background-table tbody tr:last-child td {
  border-bottom: 0;
}
.background-table .btn {
  padding: 7px 10px;
  min-width: 56px;
}
.duplicate-note {
  padding: 8px 10px;
  border-radius: 10px;
  background: #fff7e8;
  border: 1px solid #f2cf8b;
  color: #7a4b00;
}

.section-divider{border:0;border-top:1px solid rgba(255,255,255,0.12);}


.species-description-card{padding:16px 18px}
.species-header-line{display:flex;align-items:center;justify-content:space-between;gap:12px}
.species-intro-text{margin-top:8px;line-height:1.5}
.species-overview-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:10px;margin-top:14px}
.species-overview-row{background:var(--py-panel);border:1px solid var(--py-border-soft);border-radius:10px;padding:10px 12px}
.species-overview-label{font-weight:700;color:var(--py-text-deep);font-size:12px;margin-bottom:4px}
.species-overview-value{font-size:13px;line-height:1.45;color:var(--text)}
.species-grants-block{margin-top:12px;line-height:1.7}
.species-feature-list{display:grid;gap:10px;margin-top:12px}
.species-feature-item{background:var(--py-panel);border:1px solid var(--py-border-soft);border-radius:10px;padding:10px 12px}
.species-feature-name{font-weight:700;color:var(--py-text-deep);margin-bottom:4px}
.species-feature-text{line-height:1.5;white-space:normal}


.ability-method-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;margin-top:14px}
.ability-method-card{background:var(--py-panel);border:2px solid var(--line);border-radius:16px;padding:14px;cursor:pointer;text-align:left}
.ability-method-card.selected{border-color:var(--accent);box-shadow:0 0 0 3px var(--py-hover-ring)}
.ability-method-title{font-weight:800;font-size:18px;margin-bottom:6px}
.ability-method-copy{font-size:13px;color:var(--muted);line-height:1.45}
.ability-score-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px;margin-top:14px}
.ability-score-card{background:var(--py-panel-soft);border:2px solid var(--line);border-radius:16px;padding:14px}
.ability-score-top{display:grid;justify-items:center;text-align:center;gap:6px}
.ability-score-name{font-weight:800;font-size:18px;line-height:1.2}
.ability-score-label{font-size:12px;color:var(--muted);font-weight:700;letter-spacing:.02em;text-transform:uppercase}
.ability-score-total{font-size:34px;font-weight:800;line-height:1}
.ability-score-mod{font-size:24px;font-weight:800;color:var(--accent)}
.ability-score-status{display:flex;gap:6px;flex-wrap:wrap;justify-content:center;min-height:24px}
.ability-breakdown{margin-top:12px;display:grid;gap:6px}
.ability-breakdown-row{display:flex;justify-content:space-between;gap:12px;font-size:13px;border-top:1px solid var(--py-border-faint);padding-top:6px}
.derived-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:12px;margin-top:14px}
.skill-group{margin-top:16px;padding:14px;border:2px solid var(--line);border-radius:16px;background:var(--py-panel-soft-2)}
.skill-group-title{font-weight:800;font-size:18px;margin-bottom:10px}
.skill-row{display:grid;grid-template-columns:1.2fr auto 1.2fr;gap:12px;align-items:center;padding:10px 0;border-top:1px solid var(--py-border-soft-2)}
.skill-row:first-of-type{border-top:0;padding-top:0}
.skill-name{font-weight:700}
.skill-total{font-size:22px;font-weight:800;color:var(--accent)}
.skill-tags{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}
.skill-math{font-size:12px;color:var(--muted);margin-top:4px}
.badge-prof{display:inline-block;font-size:11px;font-weight:800;padding:5px 8px;border-radius:999px;background:var(--py-border-soft-2);color:var(--accent)}
.roll-chip-row{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}
.roll-chip{padding:8px 10px;border-radius:999px;border:2px solid var(--line);background:var(--py-panel);font-weight:800}
.point-buy-table{margin-top:12px}
.point-buy-costs{margin-top:10px;font-size:13px;color:var(--muted)}
.inline-button-row{display:flex;gap:10px;flex-wrap:wrap;margin-top:12px}
@media (max-width:760px){.skill-row{grid-template-columns:1fr;}.skill-tags{justify-content:flex-start}}

.notice.warning { background:#fff4e5; border-color:#d6a553; }
.ability-score-card.over-cap{ border-color:#d6a553; background:#fffaf1; }
.ability-cap-warning{ margin:8px 0 10px; padding:8px 10px; border-radius:10px; background:#fff4e5; border:1px solid #d6a553; font-weight:700; text-align:center; }

.inventory-list{display:grid;gap:10px;margin-top:12px}
.inventory-row{border:2px solid var(--line);border-radius:14px;background:var(--py-panel);padding:12px}
.inventory-row-top{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;flex-wrap:wrap}
.inventory-item-name{font-weight:800;font-size:16px}
.inventory-controls{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.inventory-expanded{margin-top:12px;display:grid;gap:12px}
.quantity-input{width:88px}
@media (max-width:760px){.inventory-row-top{flex-direction:column}.inventory-controls{width:100%}}

.collapsible-header{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;flex-wrap:wrap;margin-bottom:10px}
.collapsible-body{display:block}
.inventory-controls .quantity-input{width:72px}

.equipment-description-blocks {
  margin-top: 10px;
}
.equipment-table-wrap {
  margin-top: 12px;
  overflow-x: auto;
}
.equipment-table-title {
  font-weight: 700;
  margin-bottom: 6px;
}
.equipment-description-table {
  width: 100%;
  border-collapse: collapse;
  min-width: 320px;
}
.equipment-description-table th,
.equipment-description-table td {
  border: 1px solid rgba(255,255,255,0.12);
  padding: 8px 10px;
  text-align: left;
  vertical-align: top;
}
.equipment-description-table th {
  background: rgba(255,255,255,0.08);
}


.spell-card-actions{display:flex;justify-content:flex-end;margin-top:10px;}

.modern-spell-level-browser{display:grid;gap:12px;min-width:0;}
.spell-level-pill-row{display:flex;flex-wrap:wrap;gap:10px;align-items:center;}
.spell-level-pill{min-width:48px;min-height:44px;padding:8px 14px;border:2px solid var(--line);border-radius:999px;background:var(--py-panel);color:var(--text);font:inherit;font-weight:800;cursor:pointer;box-shadow:0 3px 10px color-mix(in srgb,var(--accent) 10%,transparent);}
.spell-level-pill:hover{border-color:var(--accent);}
.spell-level-pill.selected{background:var(--accent);border-color:var(--accent);color:var(--py-on-primary);}
.spell-level-pill:focus-visible{outline:3px solid color-mix(in srgb,var(--accent) 35%,transparent);outline-offset:2px;}
.spell-level-pill-content{min-width:0;}
.spell-level-list-heading{margin:0 0 10px;font-size:1rem;font-weight:800;color:var(--text);}


.inventory-row-added{animation:inventoryAddFlash .85s ease-out 1;}
.inventory-add-confirmed{background:#dff3e4;border-color:#6ba97b;color:#214d2f;}
.action-button-confirmed{animation:actionButtonPulse .85s ease-out 1;background:#dff3e4 !important;border-color:#6ba97b !important;color:#214d2f !important;}
.action-button-failed{animation:actionButtonPulse .85s ease-out 1;background:#fde7e7 !important;border-color:#c96c6c !important;color:#7f1d1d !important;}
@keyframes actionButtonPulse{0%{transform:scale(1);}25%{transform:scale(1.03);}100%{transform:scale(1);}}
@keyframes inventoryAddFlash{0%{box-shadow:0 0 0 0 rgba(76,132,92,.42);background:#eef9f1;}100%{box-shadow:0 0 0 10px rgba(76,132,92,0);background:var(--py-panel);}}

/* v25.1.2a spell concentration confirmation */
.digital-app-confirm-backdrop { position: fixed; inset: 0; z-index: 9999; display: none; align-items: center; justify-content: center; padding: 20px; background: rgba(3, 18, 34, 0.46); }
.digital-app-confirm-backdrop.show { display: flex; }
.digital-app-confirm-card { width: min(420px, 92vw); border: 1px solid var(--py-border-soft); border-radius: 16px; background: var(--py-panel-soft); box-shadow: 0 18px 50px var(--py-shadow-color); padding: 16px; color: var(--text); }
.digital-app-confirm-title { font-weight: 800; font-size: 1rem; margin-bottom: 8px; }
.digital-app-confirm-message { font-size: 0.92rem; line-height: 1.35; margin-bottom: 14px; }
.digital-app-confirm-actions { display: flex; justify-content: flex-end; gap: 10px; }


.digital-app-choice-card { width: min(680px, 92vw); max-height: 82vh; overflow: hidden; }
.digital-app-confirm-actions.vertical { display: grid; grid-template-columns: repeat(auto-fit, minmax(132px, 1fr)); gap: 10px; justify-content: stretch; max-height: 48vh; overflow-y: auto; padding-right: 2px; }
.digital-app-choice-button { width: 100%; min-height: 52px; white-space: normal; line-height: 1.15; text-align: center; display: inline-flex; align-items: center; justify-content: center; }
.digital-app-choice-button.wild-magic-confirm-choice.is-selected { background:var(--accent); border-color:var(--accent); color:var(--py-on-primary); }
.digital-app-confirm-actions [data-wild-magic-confirm-apply]:disabled { opacity:.55; cursor:not-allowed; }


/* Structured D&D-style stat blocks for feature side panels and creator feature previews. */
.dnd-statblock{
  margin: 14px 0;
  border: 2px solid var(--line);
  border-radius: 14px;
  background: var(--panel);
  color: var(--text);
  overflow: hidden;
  box-shadow: 0 4px 14px rgba(17, 63, 109, 0.08);
}
.dnd-statblock-title{
  padding: 10px 12px;
  background: var(--accent);
  color: var(--py-on-primary);
  font-weight: 900;
  font-size: 18px;
  letter-spacing: .02em;
}
.dnd-statblock-subtitle{
  padding: 10px 12px;
  font-style: italic;
  border-bottom: 1px solid var(--line);
  background: color-mix(in srgb, var(--accent) 8%, transparent);
}
.dnd-statblock-row,
.dnd-statblock-trait{
  padding: 9px 12px;
  border-bottom: 1px solid var(--line);
  line-height: 1.4;
}
.dnd-statblock-ability-grid{
  display: grid;
  grid-template-columns: repeat(6, minmax(0, 1fr));
  border-bottom: 1px solid var(--line);
  background: color-mix(in srgb, var(--accent) 10%, var(--panel));
}
.dnd-statblock-ability{
  padding: 9px 6px;
  text-align: center;
  border-right: 1px solid var(--line);
}
.dnd-statblock-ability:last-child{border-right:0;}
.dnd-statblock-ability span{
  display:block;
  font-weight: 900;
  font-size: 12px;
  color: var(--muted);
  margin-bottom: 4px;
}
.dnd-statblock-ability strong{
  display:block;
  font-size: 14px;
}
.dnd-statblock-section{
  padding: 9px 12px;
  background: var(--accent);
  color: var(--py-on-primary);
  font-weight: 900;
  letter-spacing: .02em;
}
.dnd-statblock-roll-row{
  display:flex;
  gap:8px;
  flex-wrap:wrap;
  margin-top:8px;
}
.statblock-mini-roll{
  margin-top:6px;
  border:1px solid var(--line);
  border-radius:999px;
  background:var(--panel);
  color:var(--accent-strong);
  font-weight:800;
  font-size:11px;
  padding:4px 8px;
  cursor:pointer;
}
.statblock-mini-roll:hover{border-color:var(--accent);}
@media (max-width: 700px){
  .dnd-statblock-ability-grid{grid-template-columns: repeat(3, minmax(0, 1fr));}
  .dnd-statblock-ability:nth-child(3n){border-right:0;}
}

/* Structured Spirit Tales table for College of Spirits feature text. */
.spirit-tales-header,
.spirit-tales-row{
  display:grid;
  grid-template-columns:minmax(72px, 110px) minmax(0, 1fr);
  border-bottom:1px solid #e2dcc0;
}
.spirit-tales-header{
  background:#8a8148;
  color:var(--py-on-primary);
  font-weight:900;
  letter-spacing:.02em;
}
.spirit-tales-header span,
.spirit-tales-die,
.spirit-tales-text{padding:9px 12px; line-height:1.35;}
.spirit-tales-die{font-weight:900; text-align:center; border-right:1px solid #e2dcc0; background:#fffdf3;}
.spirit-tales-text{background:#fffdf3;}
@media (max-width:700px){
  .spirit-tales-header,.spirit-tales-row{grid-template-columns:70px minmax(0, 1fr);}
  .spirit-tales-header span,.spirit-tales-die,.spirit-tales-text{padding:8px 9px;}
}

/* Splash / site home page */
.site-home-shell {
  background:
    radial-gradient(circle at 12% 0%, var(--py-hero-glow), transparent 28%),
    radial-gradient(circle at 88% 12%, var(--py-hero-radial), transparent 30%),
    linear-gradient(180deg, var(--bg), var(--bg2));
}
.site-home-topbar { position: static; }
.site-home-container { display: grid; gap: 20px; padding-top: 26px; }
.site-hero-card {
  display: grid;
  grid-template-columns: minmax(0, 1.42fr) minmax(280px, .9fr);
  gap: 24px;
  align-items: stretch;
  padding: 30px;
}
.site-toolkit-hero {
  position: relative;
  overflow: hidden;
  background:
    linear-gradient(135deg, var(--py-panel-glass-strong), var(--py-hero-wash)),
    radial-gradient(circle at top right, var(--py-hover-ring-strong), transparent 34%);
}
.site-toolkit-hero::after {
  content: "";
  position: absolute;
  right: -70px;
  top: -90px;
  width: 220px;
  height: 220px;
  border-radius: 999px;
  border: 34px solid var(--py-hero-orb-border);
  pointer-events: none;
}
.site-hero-copy { position: relative; z-index: 1; display: flex; flex-direction: column; align-items: flex-start; justify-content: center; gap: 12px; }
.site-kicker {
  margin-right: 0;
  padding: 0;
  border-radius: 0;
  background: transparent;
  border: 0;
  color: var(--muted);
  font-size: 12px;
  font-weight: 900;
  letter-spacing: .08em;
  text-transform: uppercase;
}
.site-title { font-size: clamp(42px, 6.4vw, 72px); line-height: .96; margin: 0; font-weight: 900; letter-spacing: -0.055em; color: var(--text); }
.site-lede { font-size: clamp(18px, 2vw, 23px); line-height: 1.45; color: var(--muted); max-width: 760px; margin: 0; }
.site-hero-actions { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 8px; }
.site-launch-btn { font-size: 17px; padding: 12px 18px; }
.site-pill-row { display: flex; flex-wrap: wrap; gap: 9px; margin-top: 4px; }
.site-mini-pill {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 0;
  border-radius: 0;
  background: transparent;
  border: 0;
  color: var(--muted);
  font-size: 12px;
  font-weight: 850;
}
.site-mini-pill:not(:last-child)::after {
  content: "•";
  color: var(--accent);
  opacity: .72;
  font-weight: 900;
  margin-left: 1px;
}
.site-card-status {
  align-self: center;
  color: var(--muted);
  font-size: 13px;
  font-weight: 900;
  letter-spacing: .04em;
  text-transform: uppercase;
  white-space: nowrap;
}
.site-hero-panel { position: relative; z-index: 1; display: flex; }
.site-status-card { width: 100%; padding: 22px; border: 2px solid var(--line); border-radius: 18px; background: var(--py-elevated-panel); box-shadow: 0 14px 36px var(--py-shadow-color); display: flex; flex-direction: column; justify-content: center; gap: 10px; }
.site-status-label, .site-tool-eyebrow { font-size: 12px; font-weight: 900; color: var(--muted); text-transform: uppercase; letter-spacing: .08em; }
.site-status-title { font-size: 32px; line-height: 1; font-weight: 900; letter-spacing: -.035em; color: var(--text); }
.site-status-card p { margin: 0; color: var(--muted); line-height: 1.4; }
.site-status-list { display: grid; gap: 8px; margin-top: 4px; font-size: 14px; color: var(--text); }
.site-status-list div { padding: 9px 10px; border-radius: 12px; background: var(--py-notice-bg); border: 1px solid var(--py-border-soft); }
.site-update-banner { display: grid; grid-template-columns: auto 1fr; gap: 12px; align-items: center; border-width: 2px; background: linear-gradient(90deg, var(--py-notice-bg), var(--py-panel)); }
.site-banner-label { font-weight: 900; color: var(--accent); text-transform: uppercase; letter-spacing: .05em; font-size: 12px; }
.site-banner-text { font-weight: 800; }
.site-main-grid { align-items: start; grid-template-columns: minmax(0, 1.75fr) minmax(300px, .95fr); }
.site-section-title { text-align: left; font-size: 28px; }
.site-module-panel, .site-info-panel { padding: 22px; }
.site-card-list { gap: 14px; }
.site-card-list .option-card h4 { font-size: 25px; }
.site-tool-card { min-height: 104px; transition: transform .16s ease, box-shadow .16s ease, border-color .16s ease; }
.site-primary-card { background: linear-gradient(180deg, var(--py-panel), var(--py-panel-soft)); border-color: var(--accent); }
.site-primary-card:hover { transform: translateY(-2px); box-shadow: 0 14px 34px rgba(17,63,109,.16); }
.site-primary-card:hover .btn.primary { background: var(--py-primary-dark); border-color: var(--py-primary-dark); }
.site-coming-card { background: var(--py-panel-soft); }
.site-coming-card h4 { color: var(--py-text-strong); }
.site-info-panel .section-title { margin-bottom: 14px; }
.site-beta-list .feature-item { padding: 14px 16px; }
.site-beta-list .species-feature-name { font-weight: 900; color: var(--text); margin-bottom: 6px; }
.site-beta-list .species-feature-text { line-height: 1.45; color: var(--text); }
.site-legal-note { font-size: 13px; line-height: 1.55; color: var(--muted); background: var(--py-elevated-panel); }
@media (max-width: 900px) {
  .site-hero-card { grid-template-columns: 1fr; }
  .site-main-grid { grid-template-columns: 1fr; }
  .site-update-banner { grid-template-columns: 1fr; }
}
@media (max-width: 620px) {
  .site-home-container { padding: 18px; }
  .site-hero-card, .site-module-panel, .site-info-panel { padding: 18px; }
  .site-card-list .option-card h4 { font-size: 22px; }
}

/* PyRoller module launcher polish */
.module-launcher-shell {
  background:
    radial-gradient(circle at 10% 0%, var(--py-hero-glow), transparent 28%),
    radial-gradient(circle at 88% 10%, var(--py-hero-radial), transparent 32%),
    linear-gradient(180deg, var(--bg), var(--bg2));
}
.module-launcher-container { display: grid; gap: 20px; padding-top: 30px; }
.module-launcher-hero {
  display: grid;
  grid-template-columns: minmax(0, 1.55fr) minmax(280px, .85fr);
  gap: 22px;
  align-items: stretch;
  padding: 30px;
  position: relative;
  overflow: hidden;
  background:
    linear-gradient(135deg, var(--py-panel-glass-strong), var(--py-hero-wash)),
    radial-gradient(circle at top right, var(--py-hover-ring-strong), transparent 34%);
}
.module-launcher-hero::after {
  content: "";
  position: absolute;
  right: -72px;
  top: -92px;
  width: 220px;
  height: 220px;
  border-radius: 999px;
  border: 34px solid var(--py-hero-orb-border);
  pointer-events: none;
}
.module-launcher-copy { position: relative; z-index: 1; display: flex; flex-direction: column; justify-content: center; align-items: flex-start; gap: 12px; }
.module-launcher-kicker { margin-right: 0; }
.module-launcher-title { font-size: clamp(38px, 5.4vw, 64px); line-height: .98; margin: 0; font-weight: 900; letter-spacing: -0.055em; color: var(--text); }
.module-launcher-lede { font-size: clamp(17px, 1.9vw, 22px); line-height: 1.45; color: var(--muted); max-width: 760px; margin: 0; }
.module-launcher-status { position: relative; z-index: 1; display: grid; gap: 10px; align-content: center; padding: 22px; border: 2px solid var(--line); border-radius: 18px; background: var(--py-elevated-panel); box-shadow: 0 14px 36px var(--py-shadow-color); }
.module-launcher-status div { padding: 11px 12px; border-radius: 12px; background: var(--py-notice-bg); border: 1px solid var(--py-border-soft); color: var(--text); line-height: 1.35; }
.module-launcher-panel { padding: 24px; }
.module-launcher-card-list { gap: 14px; }
.module-option-card {
  color: var(--text);
  min-height: 112px;
  transition: transform .16s ease, box-shadow .16s ease, border-color .16s ease, background .16s ease;
}
.module-option-card h4 { color: var(--text); font-size: 26px; }
.module-option-card:hover {
  transform: translateY(-2px);
  border-color: var(--accent);
  box-shadow: 0 14px 34px rgba(17,63,109,.16);
  background: linear-gradient(180deg, var(--py-panel), var(--py-panel-soft));
}
.module-option-card:hover .module-card-button { background: var(--py-primary-dark); border-color: var(--py-primary-dark); }
.module-card-button { pointer-events: none; white-space: nowrap; }
@media (max-width: 900px) {
  .module-launcher-hero { grid-template-columns: 1fr; }
}
@media (max-width: 700px) {
  .module-launcher-container { padding: 18px; }
  .module-launcher-hero, .module-launcher-panel { padding: 18px; }
  .module-option-card { flex-direction: column; align-items: flex-start; }
  .module-card-button { width: 100%; }
}

/* v27.32 Theme presets. Theme color and display mode are browser preferences, not character-save data. */
[data-py-accent="red"] {
  --py-bg: #ffe0e0;
  --py-bg-strong: #ffd6d6;
  --py-bg-soft: #fff0f0;
  --py-topbar: #ffb6b6;
  --py-panel-tint: #fff2f2;
  --py-notice-bg: #fff6f6;
  --py-border: #e9a2a2;
  --py-border-strong: #e58c8c;
  --py-border-soft: #f1d1d1;
  --py-border-soft-2: #f6dddd;
  --py-border-faint: #f8e6e6;
  --py-text: #5b1b1b;
  --py-text-strong: #4e1515;
  --py-text-deep: #6b1d1d;
  --py-muted: #8a5555;
  --py-muted-strong: #8d4e4e;
  --py-primary: #b73535;
  --py-primary-2: #d44747;
  --py-primary-dark: #7b2020;
  --py-primary-mid: #c23b3b;
  --py-hover-ring: rgba(183,53,53,.12);
  --py-hover-ring-strong: rgba(183,53,53,.18);
  --py-shadow-color: rgba(94,23,23,.14);
  --py-header-bg-start: rgba(255,220,220,.97);
  --py-header-bg-end: rgba(255,242,242,.97);
  --py-primary-glass: rgba(255,220,220,.62);
  --py-primary-border-alpha: rgba(183,53,53,.32);
  --py-primary-border-alpha-strong: rgba(183,53,53,.36);
  --py-primary-border-alpha-soft: rgba(183,53,53,.24);
}

[data-py-accent="green"] {
  --py-bg: #d9f3e3;
  --py-bg-strong: #cfefd9;
  --py-bg-soft: #eefaf2;
  --py-topbar: #aee3c4;
  --py-panel-tint: #effaf3;
  --py-notice-bg: #f4fcf7;
  --py-border: #8fcaa7;
  --py-border-strong: #78bd94;
  --py-border-soft: #cfe8d8;
  --py-border-soft-2: #ddefe4;
  --py-border-faint: #e5f3ea;
  --py-text: #173f2a;
  --py-text-strong: #123622;
  --py-text-deep: #16492d;
  --py-muted: #557c66;
  --py-muted-strong: #4f7a61;
  --py-primary: #2f855a;
  --py-primary-2: #38a169;
  --py-primary-dark: #276749;
  --py-primary-mid: #31845a;
  --py-hover-ring: rgba(47,133,90,.13);
  --py-hover-ring-strong: rgba(47,133,90,.18);
  --py-shadow-color: rgba(18,75,47,.14);
  --py-header-bg-start: rgba(207,239,217,.97);
  --py-header-bg-end: rgba(239,250,243,.97);
  --py-primary-glass: rgba(207,239,217,.62);
  --py-primary-border-alpha: rgba(47,133,90,.32);
  --py-primary-border-alpha-strong: rgba(47,133,90,.36);
  --py-primary-border-alpha-soft: rgba(47,133,90,.24);
}

[data-py-accent="purple"] {
  --py-bg: #eadfff;
  --py-bg-strong: #e3d6ff;
  --py-bg-soft: #f5f0ff;
  --py-topbar: #cdb6ff;
  --py-panel-tint: #f5f1ff;
  --py-notice-bg: #f9f6ff;
  --py-border: #b39be9;
  --py-border-strong: #a78bdd;
  --py-border-soft: #ded2f6;
  --py-border-soft-2: #e8dff9;
  --py-border-faint: #efe8fb;
  --py-text: #33205f;
  --py-text-strong: #2a194f;
  --py-text-deep: #3b236f;
  --py-muted: #716096;
  --py-muted-strong: #6b5a92;
  --py-primary: #6b46c1;
  --py-primary-2: #805ad5;
  --py-primary-dark: #4c2f91;
  --py-primary-mid: #6f4cc6;
  --py-hover-ring: rgba(107,70,193,.13);
  --py-hover-ring-strong: rgba(107,70,193,.18);
  --py-shadow-color: rgba(52,32,101,.14);
  --py-header-bg-start: rgba(227,214,255,.97);
  --py-header-bg-end: rgba(245,241,255,.97);
  --py-primary-glass: rgba(227,214,255,.62);
  --py-primary-border-alpha: rgba(107,70,193,.32);
  --py-primary-border-alpha-strong: rgba(107,70,193,.36);
  --py-primary-border-alpha-soft: rgba(107,70,193,.24);
}

[data-py-accent="rose"] {
  --py-bg: #ffe3ef;
  --py-bg-strong: #ffd8e9;
  --py-bg-soft: #fff2f7;
  --py-topbar: #ffbbd6;
  --py-panel-tint: #fff3f8;
  --py-notice-bg: #fff7fa;
  --py-border: #eba1bd;
  --py-border-strong: #e58bb0;
  --py-border-soft: #f3d2df;
  --py-border-soft-2: #f8deea;
  --py-border-faint: #fae8ef;
  --py-text: #60223e;
  --py-text-strong: #511832;
  --py-text-deep: #70244a;
  --py-muted: #955a73;
  --py-muted-strong: #8f5570;
  --py-primary: #c13f77;
  --py-primary-2: #db5d94;
  --py-primary-dark: #8a2853;
  --py-primary-mid: #c8457d;
  --py-hover-ring: rgba(193,63,119,.13);
  --py-hover-ring-strong: rgba(193,63,119,.18);
  --py-shadow-color: rgba(94,24,57,.14);
  --py-header-bg-start: rgba(255,216,233,.97);
  --py-header-bg-end: rgba(255,243,248,.97);
  --py-primary-glass: rgba(255,216,233,.62);
  --py-primary-border-alpha: rgba(193,63,119,.32);
  --py-primary-border-alpha-strong: rgba(193,63,119,.36);
  --py-primary-border-alpha-soft: rgba(193,63,119,.24);
}

[data-py-mode="dark"] {
  --py-bg: #0b1220;
  --py-bg-strong: #0f172a;
  --py-bg-soft: #111827;
  --py-topbar: #111d31;
  --py-panel: #172033;
  --py-panel-soft: #111b2d;
  --py-panel-soft-2: #121d30;
  --py-panel-tint: #14233a;
  --py-notice-bg: #111d31;
  --py-border: #334766;
  --py-border-strong: #466080;
  --py-border-soft: #2a3d59;
  --py-border-soft-2: #26364f;
  --py-border-faint: #22324a;
  --py-text: #e8f0ff;
  --py-text-strong: #f5f8ff;
  --py-text-deep: #ffffff;
  --py-muted: #a9bdd6;
  --py-muted-strong: #c2d0e3;
  --py-on-primary: #ffffff;
  --py-shadow-color: rgba(0,0,0,.36);
  --py-header-bg-start: rgba(17,29,49,.98);
  --py-header-bg-end: rgba(20,35,58,.98);
  --py-header-shadow: rgba(0,0,0,.28);
  --py-shadow-panel: rgba(0,0,0,.32);
  --py-shadow-panel-strong: rgba(0,0,0,.42);
  --py-panel-glass: rgba(23,32,51,.98);
  --py-panel-glass-strong: rgba(26,37,58,.98);
  --py-success-bg: rgba(14,48,35,.96);
  --py-success-border: rgba(72,187,120,.35);
  --py-danger-bg: rgba(64,22,28,.96);
  --py-danger-border: rgba(245,101,101,.38);
  --py-dark-popover: rgba(5,10,18,.94);
  --py-dark-popover-text: #f6f8ff;
}

[data-py-mode="dark"] input[type=text],
[data-py-mode="dark"] input[type=number],
[data-py-mode="dark"] select,
[data-py-mode="dark"] textarea {
  background: var(--py-input-bg);
  color: var(--py-text);
  border-color: var(--py-border);
}

[data-py-mode="dark"] select:disabled {
  background: var(--py-panel-soft);
  color: var(--py-muted);
}

[data-py-mode="dark"] input[type=file] {
  color: var(--py-text);
}

[data-py-mode="dark"] .btn {
  background: var(--py-panel-soft);
}

[data-py-mode="dark"] .btn.primary,
[data-py-mode="dark"] .nav-pill.active,
[data-py-mode="dark"] .step-tab.active,
[data-py-mode="dark"] .view-toggle .btn.active {
  background: var(--py-primary);
  color: var(--py-on-primary);
}


/* v27.33 dark-mode contrast hardening and compact theme control */
[data-py-mode="dark"] {
  --py-hero-wash: rgba(19,32,52,.94);
  --py-hero-radial: rgba(96,165,250,.12);
  --py-hero-glow: rgba(55,76,110,.30);
  --py-hero-orb-border: rgba(120,157,202,.18);
  --py-elevated-panel: rgba(20,31,50,.82);
  --py-table-stripe: rgba(255,255,255,.035);
  --py-input-bg: #10192a;
}

[data-py-mode="dark"][data-py-accent="blue"] {
  --py-primary: #3b82c4;
  --py-primary-2: #2f73b6;
  --py-primary-dark: #60a5fa;
  --py-primary-mid: #3f8bd7;
  --py-hover-ring: rgba(96,165,250,.15);
  --py-hover-ring-strong: rgba(96,165,250,.20);
  --py-primary-border-alpha: rgba(96,165,250,.36);
  --py-primary-border-alpha-strong: rgba(96,165,250,.44);
  --py-primary-border-alpha-soft: rgba(96,165,250,.26);
}
[data-py-mode="dark"][data-py-accent="red"] {
  --py-primary: #cf5252;
  --py-primary-2: #bd3f3f;
  --py-primary-dark: #ff8585;
  --py-primary-mid: #dc6262;
  --py-hover-ring: rgba(255,133,133,.15);
  --py-hover-ring-strong: rgba(255,133,133,.20);
  --py-primary-border-alpha: rgba(255,133,133,.34);
  --py-primary-border-alpha-strong: rgba(255,133,133,.42);
  --py-primary-border-alpha-soft: rgba(255,133,133,.25);
}
[data-py-mode="dark"][data-py-accent="green"] {
  --py-primary: #3f9b69;
  --py-primary-2: #2f855a;
  --py-primary-dark: #68d391;
  --py-primary-mid: #45ad75;
  --py-hover-ring: rgba(104,211,145,.15);
  --py-hover-ring-strong: rgba(104,211,145,.20);
  --py-primary-border-alpha: rgba(104,211,145,.34);
  --py-primary-border-alpha-strong: rgba(104,211,145,.42);
  --py-primary-border-alpha-soft: rgba(104,211,145,.25);
}
[data-py-mode="dark"][data-py-accent="purple"] {
  --py-primary: #7c5fd0;
  --py-primary-2: #6b46c1;
  --py-primary-dark: #b59cff;
  --py-primary-mid: #8b6ee1;
  --py-hover-ring: rgba(181,156,255,.15);
  --py-hover-ring-strong: rgba(181,156,255,.20);
  --py-primary-border-alpha: rgba(181,156,255,.34);
  --py-primary-border-alpha-strong: rgba(181,156,255,.42);
  --py-primary-border-alpha-soft: rgba(181,156,255,.25);
}
[data-py-mode="dark"][data-py-accent="rose"] {
  --py-primary: #d45a91;
  --py-primary-2: #c13f77;
  --py-primary-dark: #ff9bc8;
  --py-primary-mid: #df6aa0;
  --py-hover-ring: rgba(255,155,200,.15);
  --py-hover-ring-strong: rgba(255,155,200,.20);
  --py-primary-border-alpha: rgba(255,155,200,.34);
  --py-primary-border-alpha-strong: rgba(255,155,200,.42);
  --py-primary-border-alpha-soft: rgba(255,155,200,.25);
}

[data-py-mode="dark"] .site-status-card,
[data-py-mode="dark"] .module-launcher-status,
[data-py-mode="dark"] .site-legal-note {
  background: var(--py-elevated-panel);
  color: var(--text);
}

[data-py-mode="dark"] .site-title,
[data-py-mode="dark"] .site-status-title,
[data-py-mode="dark"] .module-launcher-title,
[data-py-mode="dark"] .section-title,
[data-py-mode="dark"] .brand,
[data-py-mode="dark"] h1,
[data-py-mode="dark"] h2,
[data-py-mode="dark"] h3,
[data-py-mode="dark"] h4,
[data-py-mode="dark"] label {
  color: var(--py-text-strong);
}

[data-py-mode="dark"] .section-sub,
[data-py-mode="dark"] .subbrand,
[data-py-mode="dark"] .small-note,
[data-py-mode="dark"] .ability-method-copy,
[data-py-mode="dark"] .spell-meta {
  color: var(--py-muted);
}

[data-py-mode="dark"] .hero-card,
[data-py-mode="dark"] .panel,
[data-py-mode="dark"] .choice-block,
[data-py-mode="dark"] .feature-item,
[data-py-mode="dark"] .option-card,
[data-py-mode="dark"] .spell-card,
[data-py-mode="dark"] .inventory-row,
[data-py-mode="dark"] .subclass-card,
[data-py-mode="dark"] .ability-method-card,
[data-py-mode="dark"] .ability-score-card,
[data-py-mode="dark"] .skill-group,
[data-py-mode="dark"] .background-table,
[data-py-mode="dark"] .notice {
  background: var(--py-panel);
}

[data-py-mode="dark"] .site-toolkit-hero,
[data-py-mode="dark"] .module-launcher-hero {
  background:
    linear-gradient(135deg, var(--py-panel-glass-strong), var(--py-hero-wash)),
    radial-gradient(circle at top right, var(--py-hover-ring-strong), transparent 34%);
}

[data-py-mode="dark"] .background-table thead th,
[data-py-mode="dark"] .equipment-description-table th,
[data-py-mode="dark"] .feature-table th {
  background: var(--py-panel-tint);
  color: var(--py-text-strong);
}

[data-py-mode="dark"] .background-table tbody tr:nth-child(even),
[data-py-mode="dark"] .equipment-description-table tbody tr:nth-child(even),
[data-py-mode="dark"] .feature-table tbody tr:nth-child(even) {
  background: var(--py-table-stripe);
}

[data-py-mode="dark"] .btn:not(.primary),
[data-py-mode="dark"] .nav-pill:not(.active),
[data-py-mode="dark"] .step-tab:not(.active) {
  color: var(--py-primary-dark);
  border-color: var(--py-border);
  background: var(--py-panel-soft);
}

[data-py-mode="dark"] .nav-pill.disabled,
[data-py-mode="dark"] .step-tab.disabled,
[data-py-mode="dark"] .option-card.disabled {
  opacity: .62;
}

.theme-controls {
  margin-left: auto;
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: nowrap;
  padding: 7px;
  border: 2px solid var(--py-border-soft);
  border-radius: 999px;
  background: var(--py-panel-glass);
  box-shadow: 0 4px 14px var(--py-shadow-color);
  transition: width .18s ease, padding .18s ease, background .18s ease, border-color .18s ease;
}
.theme-toggle-button {
  width: 40px;
  height: 40px;
  min-width: 40px;
  border-radius: 999px;
  border: 2px solid var(--py-border);
  background: var(--py-panel-soft);
  color: var(--py-primary-dark);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 20px;
  font-weight: 900;
  cursor: pointer;
}
.theme-toggle-button:hover { border-color: var(--accent); box-shadow: 0 0 0 3px var(--py-hover-ring); }
.theme-fields { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }
.theme-controls:not(.theme-expanded) { gap: 0; }
.theme-controls:not(.theme-expanded) .theme-fields { display: none; }
.theme-controls.theme-expanded { border-color: var(--py-primary-border-alpha-strong); }

.theme-field {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 12px;
  font-weight: 800;
  color: var(--py-muted);
  text-transform: uppercase;
  letter-spacing: .04em;
}

.theme-field select {
  min-width: 94px;
  width: auto;
  padding: 7px 28px 7px 10px;
  border-radius: 999px;
  font-size: 13px;
  text-transform: none;
  letter-spacing: 0;
  font-weight: 800;
}

@media (max-width: 760px) {
  .theme-controls {
    width: auto;
    margin-left: auto;
    justify-content: flex-end;
    border-radius: 999px;
  }
  .theme-controls.theme-expanded {
    width: 100%;
    margin-left: 0;
    justify-content: space-between;
    border-radius: 16px;
  }
  .theme-field {
    flex: 1 1 160px;
    justify-content: space-between;
  }
  .theme-field select {
    min-width: 110px;
  }
}

.module-launcher-shell .topbar {
  display: flex;
  align-items: center;
  gap: 14px;
  flex-wrap: wrap;
}

.module-launcher-shell .home-brand-link {
  flex: 1 1 auto;
}

/* v27.33 compact theme control placement */
.topbar > .theme-controls {
  position: absolute;
  top: 14px;
  right: 24px;
  z-index: 20;
}
.topbar > .theme-controls.theme-expanded {
  max-width: min(520px, calc(100vw - 48px));
}
@media (max-width: 760px) {
  .topbar > .theme-controls {
    position: static;
    margin-top: 12px;
  }
}

/* v27.34 theme QA polish: compact control, light-mode theme tinting, and dark-mode readability. */
[data-py-mode="light"][data-py-accent="red"] {
  --py-panel-soft: #fff7f7;
  --py-panel-soft-2: #fff4f4;
  --py-table-stripe: #fff6f6;
  --py-input-bg: #fffdfd;
}
[data-py-mode="light"][data-py-accent="green"] {
  --py-panel-soft: #f5fbf7;
  --py-panel-soft-2: #f1faf5;
  --py-table-stripe: #f4fbf7;
  --py-input-bg: #fdfffe;
}
[data-py-mode="light"][data-py-accent="purple"] {
  --py-panel-soft: #faf7ff;
  --py-panel-soft-2: #f7f2ff;
  --py-table-stripe: #faf6ff;
  --py-input-bg: #fffefe;
}
[data-py-mode="light"][data-py-accent="rose"] {
  --py-panel-soft: #fff7fa;
  --py-panel-soft-2: #fff3f8;
  --py-table-stripe: #fff6fa;
  --py-input-bg: #fffdfd;
}

.theme-controls.theme-expanded {
  gap: 8px;
}
.theme-field select {
  width: 112px;
  min-width: 112px;
  max-width: 112px;
  box-sizing: border-box;
}
.theme-field select[data-py-theme-mode] {
  width: 108px;
  min-width: 108px;
  max-width: 108px;
}
.theme-field select option {
  font: inherit;
}

/* Creator/editor contrast hardening for theme colors and dark mode. */
.subclass-card-title,
.ability-method-title,
.ability-score-name,
.skill-group-title,
.skill-name,
.level-feature-title,
.species-feature-name,
.species-overview-label,
.choice-block h3,
.feature-item strong {
  color: var(--py-text-strong);
}
.subclass-card,
.ability-method-card,
.ability-score-card,
.skill-group,
.choice-block,
.feature-item,
.blurb-box,
.choice-description,
.background-table,
.spell-card,
.inventory-row,
.notice,
.counter-pill,
.stat-card {
  background-color: var(--py-panel-soft);
}
.hero-card,
.panel,
.modal,
.summary-box,
.option-card {
  background-color: var(--py-panel);
}
.background-table thead th,
.equipment-description-table th,
.feature-table th {
  background: var(--py-panel-tint);
  color: var(--py-text-strong);
}
.background-table tbody tr:nth-child(even),
.equipment-description-table tbody tr:nth-child(even),
.feature-table tbody tr:nth-child(even) {
  background: var(--py-table-stripe);
}
input::placeholder,
textarea::placeholder {
  color: var(--py-muted);
  opacity: .82;
}
.export-box,
.export-panel,
.pdf-export-box,
.digital-export-box,
[data-export-section],
[class*="export"] .small-note,
[class*="export"] p,
[class*="export"] strong {
  color: var(--py-text);
}
[data-py-mode="dark"] .subclass-card-title,
[data-py-mode="dark"] .ability-method-title,
[data-py-mode="dark"] .ability-score-name,
[data-py-mode="dark"] .skill-group-title,
[data-py-mode="dark"] .skill-name,
[data-py-mode="dark"] .level-feature-title,
[data-py-mode="dark"] .species-feature-name,
[data-py-mode="dark"] .species-overview-label,
[data-py-mode="dark"] .choice-block h3,
[data-py-mode="dark"] .feature-item strong,
[data-py-mode="dark"] .export-box h2,
[data-py-mode="dark"] .export-box h3,
[data-py-mode="dark"] .export-box strong,
[data-py-mode="dark"] [class*="export"] h2,
[data-py-mode="dark"] [class*="export"] h3,
[data-py-mode="dark"] [class*="export"] strong {
  color: var(--py-text-strong) !important;
}
[data-py-mode="dark"] .subclass-card,
[data-py-mode="dark"] .ability-method-card,
[data-py-mode="dark"] .ability-score-card,
[data-py-mode="dark"] .skill-group,
[data-py-mode="dark"] .choice-block,
[data-py-mode="dark"] .feature-item,
[data-py-mode="dark"] .blurb-box,
[data-py-mode="dark"] .choice-description,
[data-py-mode="dark"] .background-table,
[data-py-mode="dark"] .spell-card,
[data-py-mode="dark"] .inventory-row,
[data-py-mode="dark"] .notice,
[data-py-mode="dark"] .counter-pill,
[data-py-mode="dark"] .stat-card {
  background: var(--py-panel-soft) !important;
  color: var(--py-text) !important;
}
[data-py-mode="dark"] input::placeholder,
[data-py-mode="dark"] textarea::placeholder {
  color: var(--py-muted-strong);
  opacity: .9;
}
[data-py-mode="dark"] .export-box,
[data-py-mode="dark"] .export-panel,
[data-py-mode="dark"] .pdf-export-box,
[data-py-mode="dark"] .digital-export-box,
[data-py-mode="dark"] [data-export-section],
[data-py-mode="dark"] [class*="export"] .small-note,
[data-py-mode="dark"] [class*="export"] p {
  color: var(--py-text) !important;
}

/* Digital sheet menu owns the display preferences on the live sheet view. */
.sheet-menu-theme-group {
  display: grid;
  gap: 8px;
  padding-top: 8px;
  margin-top: 4px;
  border-top: 1px solid var(--py-border-faint);
}
.sheet-menu-theme-label {
  color: var(--py-muted);
  font-size: 11px;
  font-weight: 900;
  letter-spacing: .06em;
  text-transform: uppercase;
}
.sheet-menu-theme-control {
  margin-left: 0;
  width: 100%;
  justify-content: stretch;
  border-radius: 14px;
  box-shadow: none;
  padding: 8px;
}
.sheet-menu-theme-control .theme-fields {
  display: grid;
  gap: 8px;
  width: 100%;
}
.sheet-menu-theme-control .theme-field {
  justify-content: space-between;
  width: 100%;
}
.sheet-menu-theme-control .theme-field select,
.sheet-menu-theme-control .theme-field select[data-py-theme-mode] {
  width: 118px;
  min-width: 118px;
  max-width: 118px;
}


/* v27.35 theme rollback/polish: light theme colors tint only in light mode; dark mode owns all large surfaces. */
[data-py-mode="dark"] {
  --py-panel: #172033;
  --py-panel-soft: #111b2d;
  --py-panel-soft-2: #121d30;
  --py-panel-tint: #14233a;
  --py-notice-bg: #111d31;
  --py-input-bg: #10192a;
  --py-table-stripe: rgba(255,255,255,.035);
  --py-elevated-panel: rgba(20,31,50,.82);
  --py-panel-glass: rgba(23,32,51,.98);
  --py-panel-glass-strong: rgba(26,37,58,.98);
}

/* Preserve useful contrast in light mode without leaving old blue islands. */
[data-py-mode="light"] .choice-block,
[data-py-mode="light"] .skill-group,
[data-py-mode="light"] .ability-score-card,
[data-py-mode="light"] .choice-description,
[data-py-mode="light"] .feature-item,
[data-py-mode="light"] .stat-card,
[data-py-mode="light"] .notice {
  background: var(--py-panel-soft);
}
[data-py-mode="light"] .subclass-card,
[data-py-mode="light"] .ability-method-card,
[data-py-mode="light"] .spell-card,
[data-py-mode="light"] .inventory-row,
[data-py-mode="light"] .blurb-box {
  background: var(--py-panel);
}

/* Tables/description blocks should look intentional when their section has a tinted backing. */
.choice-description,
.blurb-box,
.background-table,
.feature-table,
.equipment-description-table {
  border-radius: 14px;
}
.choice-description,
.blurb-box {
  overflow: hidden;
}
.choice-description .feature-table,
.blurb-box .feature-table,
.choice-description .background-table,
.blurb-box .background-table {
  margin-top: 10px;
  overflow: hidden;
}
.feature-table,
.equipment-description-table {
  border-collapse: separate;
  border-spacing: 0;
  overflow: hidden;
  border: 1px solid var(--py-border-soft);
}
.feature-table th,
.feature-table td,
.equipment-description-table th,
.equipment-description-table td {
  border-color: var(--py-border-faint) !important;
  color: var(--py-text) !important;
}
.feature-table thead th,
.equipment-description-table thead th,
.feature-table th,
.equipment-description-table th {
  background: var(--py-panel-tint) !important;
  color: var(--py-text-strong) !important;
}
.feature-table tbody tr,
.equipment-description-table tbody tr {
  background: var(--py-panel) !important;
}
.feature-table tbody tr:nth-child(even),
.equipment-description-table tbody tr:nth-child(even) {
  background: var(--py-table-stripe) !important;
}
.background-table tbody tr {
  background: var(--py-panel) !important;
}
.background-table tbody tr:nth-child(even) {
  background: var(--py-table-stripe) !important;
}

/* Button-card text inherits black from browser button defaults unless forced through theme tokens. */
.subclass-card,
.ability-method-card,
.option-card,
.spell-card,
.inventory-row,
.choice-block,
.feature-item,
.stat-card,
.counter-pill {
  color: var(--py-text);
}
.subclass-card-title,
.ability-method-title,
.option-card h4,
.choice-block h3,
.feature-item strong,
.stat-value,
.counter-pill,
.roll-chip {
  color: var(--py-text-strong) !important;
}
[data-py-mode="dark"] .subclass-card,
[data-py-mode="dark"] .ability-method-card,
[data-py-mode="dark"] .option-card,
[data-py-mode="dark"] .spell-card,
[data-py-mode="dark"] .inventory-row,
[data-py-mode="dark"] .choice-block,
[data-py-mode="dark"] .choice-description,
[data-py-mode="dark"] .blurb-box,
[data-py-mode="dark"] .feature-item,
[data-py-mode="dark"] .stat-card,
[data-py-mode="dark"] .counter-pill,
[data-py-mode="dark"] .background-table {
  background: var(--py-panel-soft) !important;
  color: var(--py-text) !important;
}
[data-py-mode="dark"] .feature-table tbody tr,
[data-py-mode="dark"] .equipment-description-table tbody tr,
[data-py-mode="dark"] .background-table tbody tr {
  background: var(--py-panel) !important;
}
[data-py-mode="dark"] .feature-table tbody tr:nth-child(even),
[data-py-mode="dark"] .equipment-description-table tbody tr:nth-child(even),
[data-py-mode="dark"] .background-table tbody tr:nth-child(even) {
  background: var(--py-table-stripe) !important;
}
[data-py-mode="dark"] input::placeholder,
[data-py-mode="dark"] textarea::placeholder,
[data-py-mode="dark"] .search-input::placeholder,
[data-py-mode="dark"] [type="search"]::placeholder {
  color: var(--py-muted-strong) !important;
  opacity: .95 !important;
}
[data-py-mode="dark"] input,
[data-py-mode="dark"] select,
[data-py-mode="dark"] textarea {
  background: var(--py-input-bg) !important;
  color: var(--py-text) !important;
  border-color: var(--py-border) !important;
}
[data-py-mode="dark"] [class*="export"],
[data-py-mode="dark"] [class*="export"] *,
[data-py-mode="dark"] .export-box,
[data-py-mode="dark"] .export-box *,
[data-py-mode="dark"] .pdf-export-box,
[data-py-mode="dark"] .pdf-export-box *,
[data-py-mode="dark"] .digital-export-box,
[data-py-mode="dark"] .digital-export-box * {
  color: var(--py-text) !important;
}
[data-py-mode="dark"] [class*="export"] h1,
[data-py-mode="dark"] [class*="export"] h2,
[data-py-mode="dark"] [class*="export"] h3,
[data-py-mode="dark"] [class*="export"] h4,
[data-py-mode="dark"] [class*="export"] strong,
[data-py-mode="dark"] .export-box h1,
[data-py-mode="dark"] .export-box h2,
[data-py-mode="dark"] .export-box h3,
[data-py-mode="dark"] .export-box h4,
[data-py-mode="dark"] .export-box strong {
  color: var(--py-text-strong) !important;
}

/* Native select popups cannot be fully rounded/styled across browsers, but the closed controls should stay compact. */
.theme-field select,
.theme-field select[data-py-theme-mode] {
  min-width: 108px;
  width: 108px;
  max-width: 108px;
  padding-right: 24px;
}
[data-py-mode="dark"] .theme-field select {
  background: var(--py-input-bg) !important;
  color: var(--py-text) !important;
}


/* v27.36: Theme dark-mode surface priority and contrast polish.
   Dark mode owns large surfaces; theme colors stay on borders/buttons/pills only. */
[data-py-mode="dark"] {
  --py-panel-tint: var(--py-panel-soft);
  --py-notice-bg: var(--py-panel-soft);
  --py-table-stripe: rgba(255,255,255,.025);
  --py-elevated-panel: rgba(23,32,51,.94);
  --py-input-bg: #10192a;
  --py-primary-glass: rgba(255,255,255,.055);
  --py-primary-border-alpha: rgba(148,163,184,.32);
  --py-primary-border-alpha-soft: rgba(148,163,184,.22);
  --py-primary-border-alpha-strong: rgba(148,163,184,.42);
}
[data-py-mode="dark"][data-py-accent="blue"] { --py-accent-pill-bg: rgba(96,165,250,.14); --py-accent-pill-border: rgba(96,165,250,.54); --py-accent-pill-text: #9dccff; }
[data-py-mode="dark"][data-py-accent="red"] { --py-accent-pill-bg: rgba(255,133,133,.13); --py-accent-pill-border: rgba(255,133,133,.52); --py-accent-pill-text: #ff9b9b; }
[data-py-mode="dark"][data-py-accent="green"] { --py-accent-pill-bg: rgba(104,211,145,.13); --py-accent-pill-border: rgba(104,211,145,.50); --py-accent-pill-text: #88e0aa; }
[data-py-mode="dark"][data-py-accent="purple"] { --py-accent-pill-bg: rgba(181,156,255,.13); --py-accent-pill-border: rgba(181,156,255,.52); --py-accent-pill-text: #c7b6ff; }
[data-py-mode="dark"][data-py-accent="rose"] { --py-accent-pill-bg: rgba(255,155,200,.13); --py-accent-pill-border: rgba(255,155,200,.52); --py-accent-pill-text: #ffb3d0; }

[data-py-mode="dark"] .choice-description,
[data-py-mode="dark"] .blurb-box,
[data-py-mode="dark"] .full-width-description,
[data-py-mode="dark"] .species-overview-row,
[data-py-mode="dark"] .feature-item,
[data-py-mode="dark"] .notice,
[data-py-mode="dark"] .choice-block,
[data-py-mode="dark"] .nested-choice,
[data-py-mode="dark"] .background-table,
[data-py-mode="dark"] .simple-table,
[data-py-mode="dark"] .simple-table th,
[data-py-mode="dark"] .simple-table td,
[data-py-mode="dark"] .spell-card,
[data-py-mode="dark"] .counter-pill,
[data-py-mode="dark"] .stat-card,
[data-py-mode="dark"] .option-card,
[data-py-mode="dark"] .subclass-card,
[data-py-mode="dark"] .ability-generation-card,
[data-py-mode="dark"] .generation-card,
[data-py-mode="dark"] .background-feature-card,
[data-py-mode="dark"] .creator-card,
[data-py-mode="dark"] .creator-panel {
  background-color: var(--py-panel-soft) !important;
  background-image: none !important;
  color: var(--py-text) !important;
  border-color: var(--py-border) !important;
}
[data-py-mode="dark"] .background-table thead th,
[data-py-mode="dark"] .simple-table thead th,
[data-py-mode="dark"] .feature-table th {
  background: var(--py-panel) !important;
  color: var(--py-text-strong) !important;
}
[data-py-mode="dark"] .background-table tbody tr:nth-child(even),
[data-py-mode="dark"] .simple-table tbody tr:nth-child(even),
[data-py-mode="dark"] .feature-table tbody tr:nth-child(even) {
  background: var(--py-table-stripe) !important;
}
[data-py-mode="dark"] .background-table *,
[data-py-mode="dark"] .simple-table *,
[data-py-mode="dark"] .feature-table *,
[data-py-mode="dark"] .choice-description *,
[data-py-mode="dark"] .blurb-box *,
[data-py-mode="dark"] .full-width-description * {
  color: inherit;
}
[data-py-mode="dark"] .tag,
[data-py-mode="dark"] .digital-spell-level-pill,
[data-py-mode="dark"] .digital-spell-tag,
[data-py-mode="dark"] .digital-inline-meta-pill {
  background: var(--py-accent-pill-bg, var(--py-primary-glass)) !important;
  border-color: var(--py-accent-pill-border, var(--py-primary-border-alpha)) !important;
  color: var(--py-accent-pill-text, var(--py-primary-dark)) !important;
}

/* Keep light-mode data tables visibly striped, but make the panels' rounded shape intentional. */
[data-py-mode="light"] .background-table,
[data-py-mode="light"] .simple-table,
[data-py-mode="light"] .choice-description,
[data-py-mode="light"] .blurb-box,
[data-py-mode="light"] .full-width-description {
  border-radius: 14px;
  overflow: hidden;
}
[data-py-mode="light"] .background-table tbody tr:nth-child(even),
[data-py-mode="light"] .simple-table tbody tr:nth-child(even) {
  background: var(--py-table-stripe);
}

/* v27.37 creator subsection framing + compact theme-control reopen hardening. */
.choice-description,
.blurb-box,
.nested-choice,
.background-feature-card,
.creator-card,
.creator-panel,
.full-width-description {
  border: 1px solid var(--py-border-soft);
  border-radius: 16px;
  overflow: hidden;
}
.nested-choice {
  padding: 12px 14px;
  background: var(--py-panel-soft-2);
}
.choice-description > .background-table,
.choice-description > .feature-table,
.blurb-box > .background-table,
.blurb-box > .feature-table,
.nested-choice > .background-table,
.nested-choice > .feature-table {
  margin-left: 0;
  margin-right: 0;
}
.background-table,
.feature-table,
.equipment-description-table {
  border-radius: 14px;
}
[data-py-mode="dark"] .choice-description,
[data-py-mode="dark"] .blurb-box,
[data-py-mode="dark"] .nested-choice,
[data-py-mode="dark"] .background-feature-card,
[data-py-mode="dark"] .creator-card,
[data-py-mode="dark"] .creator-panel,
[data-py-mode="dark"] .full-width-description {
  background: var(--py-panel-soft) !important;
  border-color: var(--py-border) !important;
  color: var(--py-text) !important;
}
[data-py-mode="dark"] .nested-choice .small-note,
[data-py-mode="dark"] .choice-description .small-note,
[data-py-mode="dark"] .blurb-box .small-note {
  color: var(--py-text) !important;
}
/* Make the collapsed/expanded theme control deterministic after repeated open/close cycles. */
.theme-controls {
  min-width: 58px;
  width: auto;
  overflow: visible;
}
.theme-controls .theme-fields {
  flex: 0 0 auto;
  min-width: 0;
}
.theme-controls.theme-expanded .theme-fields {
  display: flex !important;
}
.topbar > .theme-controls.theme-expanded,
.module-launcher-shell .topbar > .theme-controls.theme-expanded {
  width: max-content;
  min-width: 390px;
  max-width: min(520px, calc(100vw - 48px));
}
.topbar > .theme-controls:not(.theme-expanded) {
  width: 58px;
  min-width: 58px;
  max-width: 58px;
}
@media (max-width: 760px) {
  .topbar > .theme-controls.theme-expanded,
  .module-launcher-shell .topbar > .theme-controls.theme-expanded {
    width: calc(100vw - 32px);
    min-width: 0;
    max-width: calc(100vw - 32px);
  }
  .theme-controls.theme-expanded .theme-fields {
    width: 100%;
  }
}


/* v27.38 theme control stability + sheet menu containment. */
.topbar > .theme-controls.theme-expanded,
.module-launcher-shell .topbar > .theme-controls.theme-expanded {
  width: 392px !important;
  min-width: 392px !important;
  max-width: min(392px, calc(100vw - 48px)) !important;
  box-sizing: border-box;
}
.topbar > .theme-controls.theme-expanded .theme-fields,
.module-launcher-shell .topbar > .theme-controls.theme-expanded .theme-fields {
  display: flex !important;
  flex-wrap: nowrap;
  align-items: center;
  justify-content: flex-end;
  min-width: 0;
}
.topbar > .theme-controls:not(.theme-expanded) .theme-fields,
.module-launcher-shell .topbar > .theme-controls:not(.theme-expanded) .theme-fields {
  display: none !important;
  width: 0 !important;
  min-width: 0 !important;
  overflow: hidden !important;
}
.theme-controls:not(.sheet-menu-theme-control) .theme-field {
  white-space: nowrap;
}
.theme-controls:not(.sheet-menu-theme-control) .theme-field select {
  flex: 0 0 auto;
}

/* The digital-sheet hamburger menu is narrow, so its display preferences use a stacked layout instead of the topbar pill layout. */
.sheet-menu-theme-control,
.digital-header-menu-panel .sheet-menu-theme-control {
  width: 100% !important;
  min-width: 0 !important;
  max-width: 100% !important;
  box-sizing: border-box;
  overflow: hidden !important;
}
.sheet-menu-theme-control .theme-fields,
.digital-header-menu-panel .sheet-menu-theme-control .theme-fields {
  display: grid !important;
  grid-template-columns: 1fr;
  width: 100% !important;
  min-width: 0 !important;
  gap: 10px;
}
.sheet-menu-theme-control .theme-field,
.digital-header-menu-panel .sheet-menu-theme-control .theme-field {
  display: grid !important;
  grid-template-columns: 1fr;
  width: 100% !important;
  min-width: 0 !important;
  gap: 4px;
  align-items: stretch;
}
.sheet-menu-theme-control .theme-field select,
.sheet-menu-theme-control .theme-field select[data-py-theme-mode],
.digital-header-menu-panel .sheet-menu-theme-control .theme-field select,
.digital-header-menu-panel .sheet-menu-theme-control .theme-field select[data-py-theme-mode] {
  width: 100% !important;
  min-width: 0 !important;
  max-width: 100% !important;
  box-sizing: border-box;
}
@media (max-width: 760px) {
  .topbar > .theme-controls.theme-expanded,
  .module-launcher-shell .topbar > .theme-controls.theme-expanded {
    width: calc(100vw - 32px) !important;
    min-width: 0 !important;
    max-width: calc(100vw - 32px) !important;
  }
  .topbar > .theme-controls.theme-expanded .theme-fields,
  .module-launcher-shell .topbar > .theme-controls.theme-expanded .theme-fields {
    flex-wrap: wrap;
    justify-content: stretch;
  }
}

/* v28.01 splash page feedback pass: full-card tool links and clearer theme naming. */
.site-card-action {
  color: inherit;
  text-decoration: none;
  cursor: pointer;
}
.site-card-action h4,
.site-card-action p {
  color: inherit;
}
.site-card-action:focus-visible {
  outline: 3px solid var(--py-focus-ring, var(--py-hover-ring-strong));
  outline-offset: 3px;
}
.site-card-cta {
  pointer-events: none;
  white-space: nowrap;
}
.site-tool-card h4 {
  margin-top: 4px;
}


/* v28.08 creator leave-confirm modal */
.creator-leave-modal .modal {
  max-width: 520px;
}
.creator-leave-modal .modal-body {
  line-height: 1.45;
}
.creator-leave-modal .footer-actions .btn.danger {
  background: var(--danger);
  border-color: var(--danger);
  color: var(--py-on-primary);
}

/* v29.13 ability-card readability tune: keep six-card desktop rows, but make breakdown text readable. */
.creator-app .ability-breakdown-row{
  font-size: clamp(12.5px, 0.78vw, 13.5px);
  line-height: 1.25;
  padding-top: 5px;
}
.creator-app .ability-breakdown-row strong{
  font-size: inherit;
}
@media (max-width: 900px){
  .creator-app .ability-breakdown-row{ font-size: 13px; }
}

/* PyMonsters-style interactive rolls inside sheet stat blocks. */
.dnd-statblock .pm-ability.pm-ability-roll{
  display:block;
  width:100%;
  border:0;
  border-right:1px solid var(--line);
  border-radius:0;
  background:transparent;
  color:var(--text);
  font:inherit;
  text-align:center;
  cursor:pointer;
  transition:box-shadow .14s ease, background-color .14s ease, transform .14s ease, color .14s ease;
}
.dnd-statblock .pm-ability.pm-ability-roll:last-child{border-right:0;}
.dnd-statblock .pm-ability.pm-ability-roll span{display:block; pointer-events:none;}
.dnd-statblock .pm-ability-name{font-size:12px;font-weight:900;letter-spacing:.08em;color:var(--muted);margin-bottom:4px;}
.dnd-statblock .pm-ability-score{font-size:16px;font-weight:900;color:var(--text);margin-bottom:2px;}
.dnd-statblock .pm-ability-mod{font-size:13px;font-weight:800;color:var(--text);}
.dnd-statblock .pm-ability.pm-ability-roll:hover,
.dnd-statblock .pm-ability.pm-ability-roll:focus-visible{
  background:color-mix(in srgb,var(--accent) 12%,var(--panel));
  color:var(--py-text-strong);
  box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 24%,transparent) inset, 0 0 18px color-mix(in srgb,var(--accent) 18%,transparent);
  outline:none;
  transform:translateY(-1px);
}
.dnd-statblock .pm-ability.pm-ability-roll:active{transform:translateY(0);}
.dnd-statblock .pm-action-toolbar .roll-chip{
  border:2px solid color-mix(in srgb,var(--accent) 72%,#111);
  background:color-mix(in srgb,var(--accent) 14%,transparent);
  color:var(--py-text-strong);
  border-radius:999px;
  font-size:13px;
  font-weight:900;
  padding:6px 10px;
  cursor:pointer;
}
.dnd-statblock .pm-action-toolbar .roll-chip:hover,
.dnd-statblock .pm-action-toolbar .roll-chip:focus-visible{
  background:var(--accent);
  color:var(--py-on-primary);
  outline:none;
}

/* v0.19b: keep progression/reference tables inside creator panels. */
.feature-table-scroll { width: 100%; max-width: 100%; min-width:0; overflow-x: auto; overscroll-behavior-inline: contain; box-sizing:border-box; }
.feature-table-scroll > .feature-table { min-width: 760px; }
.sorcerer-progression-scroll { overflow-x:hidden; }
.sorcerer-progression-scroll > .sorcerer-spell-progression-table { width:100%; min-width:0; max-width:100%; table-layout:fixed; font-size:12px; }
.sorcerer-spell-progression-table col.sorcerer-col-level { width:12%; }
.sorcerer-spell-progression-table col.sorcerer-col-compact { width:9%; }
.sorcerer-spell-progression-table col.sorcerer-col-slot { width:6.78%; }
.sorcerer-spell-progression-table th,
.sorcerer-spell-progression-table td { padding:6px 4px; text-align:center; overflow-wrap:anywhere; word-break:normal; }
.sorcerer-spell-progression-table th:first-child,
.sorcerer-spell-progression-table td:first-child { text-align:left; }
.feature-clarity-block p { margin:0 0 10px; }
.feature-clarity-block p:last-child { margin-bottom:0; }
.hound-of-ill-omen-details > summary { cursor: pointer; }


/* v0.19c: readable Metamagic reference names and class-preview polish. */
.metamagic-table-scroll { margin-top: 8px; }
.metamagic-table-scroll > .sorcerer-metamagic-reference-table { min-width: 680px; table-layout: auto; }
.sorcerer-metamagic-reference-table col.sorcerer-metamagic-name-col { width: 170px; }
.sorcerer-metamagic-reference-table th:first-child,
.sorcerer-metamagic-reference-table td:first-child {
  width: 170px;
  min-width: 170px;
  white-space: normal;
  overflow-wrap: normal;
  word-break: normal;
  hyphens: none;
}
.sorcerer-metamagic-reference-table td:first-child strong { white-space: normal; }
@media (max-width: 760px) {
  .metamagic-table-scroll > .sorcerer-metamagic-reference-table { min-width: 620px; }
  .sorcerer-metamagic-reference-table col.sorcerer-metamagic-name-col,
  .sorcerer-metamagic-reference-table th:first-child,
  .sorcerer-metamagic-reference-table td:first-child { width: 145px; min-width: 145px; }
}


/* Wild Magic Surge table: narrow d100 columns, wide effect columns. */
.wild-magic-table-scroll{max-width:100%;overflow-x:auto;}
.wild-magic-surge-table{width:100%;table-layout:fixed;min-width:780px;}
.wild-magic-surge-table .wild-magic-roll-col{width:70px;}
.wild-magic-surge-table .wild-magic-effect-col{width:auto;}
.wild-magic-surge-table th:first-child,
.wild-magic-surge-table th:nth-child(3),
.wild-magic-surge-table td.wild-magic-range{width:70px;text-align:center;white-space:nowrap;font-weight:800;}
.wild-magic-surge-table td{overflow-wrap:normal;word-break:normal;vertical-align:top;}
.wild-magic-surge-table td p{margin:0;}
@media (max-width:900px){.wild-magic-surge-table{min-width:720px;}}


/* v0.19e: Wild Magic creator table stays inside the feature card without a horizontal scrollbar. */
.wild-magic-reference .wild-magic-table-scroll {
  width: 100%;
  max-width: 100%;
  min-width: 0;
  overflow-x: hidden;
  box-sizing: border-box;
}
.wild-magic-reference .wild-magic-surge-table {
  width: 100%;
  max-width: 100%;
  min-width: 0;
  table-layout: fixed;
  box-sizing: border-box;
  font-size: 11.5px;
}
.wild-magic-reference .wild-magic-surge-table .wild-magic-roll-col { width: 68px; }
.wild-magic-reference .wild-magic-surge-table th,
.wild-magic-reference .wild-magic-surge-table td {
  padding: 6px 7px;
  min-width: 0;
  overflow-wrap: anywhere;
  word-break: normal;
}
.wild-magic-reference .wild-magic-surge-table td.wild-magic-range {
  width: 68px;
  white-space: nowrap;
  overflow-wrap: normal;
}

/* v0.19g: Wild Magic creator table uses the same alternating rows as other feature tables. */
[data-py-mode="light"] .wild-magic-reference .wild-magic-surge-table tbody tr:nth-child(odd) {
  background: var(--py-panel-soft) !important;
}
[data-py-mode="light"] .wild-magic-reference .wild-magic-surge-table tbody tr:nth-child(even) {
  background: var(--py-table-stripe) !important;
}
[data-py-mode="dark"] .wild-magic-reference .wild-magic-surge-table tbody tr:nth-child(odd) {
  background: var(--py-panel) !important;
}
[data-py-mode="dark"] .wild-magic-reference .wild-magic-surge-table tbody tr:nth-child(even) {
  background: var(--py-table-stripe) !important;
}

/* v0.19i: Wild Magic creator table uses the normal light-mode alternating table pattern. */
[data-py-mode="light"] .wild-magic-reference .wild-magic-surge-table tbody tr:nth-child(odd) { background: var(--py-panel) !important; }
[data-py-mode="light"] .wild-magic-reference .wild-magic-surge-table tbody tr:nth-child(even) { background: var(--py-table-stripe) !important; }

/* Parameterized monster stat blocks */
.monster-template-controls{margin:0 0 14px;padding:12px;border:1px solid var(--line);border-radius:12px;background:var(--py-panel-soft)}.monster-template-controls-heading{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin-bottom:10px}.monster-template-controls-heading span{font-size:.82rem;color:var(--muted)}.monster-template-fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(145px,1fr));gap:9px}.monster-template-field{display:grid;gap:4px;font-size:.78rem;font-weight:700}.monster-template-field input,.monster-template-field select{width:100%;min-height:36px;padding:6px 9px;border:1px solid var(--line);border-radius:8px;background:var(--py-panel);color:var(--text);font:inherit}.monster-template-field input:focus,.monster-template-field select:focus{outline:2px solid var(--accent);outline-offset:1px}


/* v0.28b: Drakewarden origin selection and Beast Master companion controls. */
.drakewarden-origin-select-table{table-layout:auto;min-width:620px;}
.drakewarden-origin-select-table th:first-child,
.drakewarden-origin-select-table td:first-child{width:44px;text-align:center;vertical-align:middle;}
.drakewarden-origin-select-table th:last-child,
.drakewarden-origin-select-table td:last-child{width:132px;min-width:132px;text-align:center;vertical-align:middle;}
.drakewarden-origin-select-table .btn{min-width:104px;white-space:nowrap;word-break:normal;}
.drakewarden-origin-select-table .selected-origin-row{
  background:color-mix(in srgb,var(--accent) 12%,var(--py-panel)) !important;
  box-shadow:inset 4px 0 0 var(--accent);
}
.drakewarden-origin-select-table .selected-origin-row td{border-color:color-mix(in srgb,var(--accent) 45%,var(--line));}
.drakewarden-origin-select-table .btn.selected{cursor:default;background:var(--accent);color:var(--py-on-primary);border-color:var(--accent);}
.beast-master-controls .digital-inline-field{min-width:min(430px,100%);}
.beast-master-controls .digital-inspection-action-row.compact{align-items:end;}
@media (max-width:720px){
  .drakewarden-origin-select-table th:last-child,
  .drakewarden-origin-select-table td:last-child{width:112px;min-width:112px;}
}

/* v0.29a: Character Forge spell search and override controls. */
.creator-spell-browser{
  display:grid;
  gap:12px;
  margin:0 0 14px;
  padding:14px;
  min-width:0;
  border:1px solid var(--line);
  border-radius:16px;
  background:var(--py-panel-soft);
  box-sizing:border-box;
}
.creator-spell-browser-help{margin:0;}
.creator-spell-browser-search-row{display:flex;align-items:stretch;gap:10px;flex-wrap:wrap;min-width:0;}
.creator-spell-browser-search{
  flex:1 1 300px;
  min-width:180px;
  min-height:42px;
  padding:9px 12px;
  border:2px solid var(--line);
  border-radius:12px;
  background:var(--py-panel);
  color:var(--text);
  font:inherit;
}
.creator-spell-browser-search:focus,
.creator-spell-browser-select:focus{outline:2px solid var(--accent);outline-offset:2px;border-color:var(--accent);}
.creator-spell-browser-level-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
.creator-spell-filter-button{
  min-width:42px;
  min-height:38px;
  padding:7px 12px;
  border:2px solid var(--line);
  border-radius:999px;
  background:var(--py-panel);
  color:var(--text);
  font:inherit;
  font-weight:850;
  cursor:pointer;
}
.creator-spell-filter-button:hover{border-color:var(--accent);}
.creator-spell-filter-button.active{background:var(--accent);border-color:var(--accent);color:var(--py-on-primary);}
.creator-spell-browser-advanced-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap;}
.creator-spell-browser-select{
  min-height:40px;
  padding:7px 34px 7px 10px;
  border:2px solid var(--line);
  border-radius:11px;
  background:var(--py-panel);
  color:var(--text);
  font:inherit;
}
.creator-spell-browser-toggle{
  display:inline-flex;
  align-items:center;
  gap:7px;
  min-height:40px;
  padding:7px 11px;
  border:1px solid var(--line);
  border-radius:11px;
  background:var(--py-panel);
  color:var(--text);
  font-weight:750;
  cursor:pointer;
}
.creator-spell-browser-toggle input,
.creator-spell-browser-override input{accent-color:var(--accent);}
.creator-spell-browser-override{
  display:flex;
  align-items:flex-start;
  gap:10px;
  padding:11px 12px;
  border:2px solid var(--line);
  border-radius:13px;
  background:var(--py-panel);
  color:var(--text);
  cursor:pointer;
}
.creator-spell-browser-override>input{margin-top:3px;flex:0 0 auto;}
.creator-spell-browser-override>span{display:grid;gap:3px;min-width:0;}
.creator-spell-browser-override small{color:var(--muted);font-weight:500;line-height:1.4;}
.creator-spell-browser-override.active{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 10%,var(--py-panel));}
.creator-spell-browser-result-count{color:var(--muted);font-size:.85rem;font-weight:850;}
.creator-spell-browser-empty{padding:14px;border:1px dashed var(--line);border-radius:12px;text-align:center;}
.creator-spell-override-tag{border-color:var(--accent) !important;}
@media(max-width:640px){
  .creator-spell-browser{padding:12px;}
  .creator-spell-browser-search-row>.btn{width:100%;}
  .creator-spell-browser-select{width:100%;}
}


/* v0.29b: paged spell results and clearer Wizard spellcasting subsections. */
.creator-spell-browser-pagination{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:12px;
  padding-top:2px;
}
.creator-spell-browser-pagination .btn{min-width:92px;}
.creator-spell-browser-pagination .btn:disabled{opacity:.48;cursor:not-allowed;}
.creator-spell-browser-page-label{color:var(--text);font-size:.88rem;font-weight:900;text-align:center;}
.wizard-spellcasting-rules{display:grid;gap:10px;margin-top:10px;line-height:1.55;}
.wizard-spellcasting-rule-heading{color:var(--text);font-size:.98rem;font-weight:950;margin-top:4px;}
.wizard-spellcasting-rule-paragraph{white-space:pre-wrap;}
.wizard-spellcasting-rule-formula{padding:8px 10px;border-left:3px solid var(--accent);background:var(--py-panel-soft);border-radius:0 8px 8px 0;}
@media(max-width:480px){
  .creator-spell-browser-pagination{display:grid;grid-template-columns:1fr 1fr;}
  .creator-spell-browser-page-label{grid-column:1 / -1;grid-row:1;}
  .creator-spell-browser-pagination .btn{min-width:0;width:100%;}
}


/* v0.29c: compact spell filters and consistent Wizard section headings. */
.creator-spell-browser-advanced-row{display:block;}
.creator-spell-browser-select{width:100%;}
.creator-spell-browser-toggle-row{
  display:flex;
  align-items:center;
  gap:10px;
  flex-wrap:wrap;
}
.creator-spell-browser-toggle.active{
  border-color:var(--accent);
  background:color-mix(in srgb,var(--accent) 10%,var(--py-panel));
}
.wizard-spellcasting-rules p{margin:0;}
.wizard-spellcasting-rules p + p{margin-top:10px;}
.wizard-spellcasting-rules strong{color:var(--text);font-weight:950;}
@media(max-width:720px){
  .creator-spell-browser-toggle-row{align-items:stretch;}
  .creator-spell-browser-toggle{flex:1 1 170px;}
}

/* v0.29aa: compact spell-scroll management in Character Forge. */
.creator-scroll-filter-grid{display:grid;grid-template-columns:repeat(3,minmax(130px,220px));gap:10px;align-items:end;max-width:760px;margin-bottom:10px;}
.creator-scroll-filter-grid .field.compact{min-width:0;}
.creator-scroll-filter-grid .field.compact select{min-height:42px;padding:7px 10px;}
.creator-scroll-search-field{margin-bottom:10px;}
.creator-scroll-search-row{display:grid;grid-template-columns:minmax(220px,1fr) auto auto;gap:8px;align-items:center;}
.creator-scroll-search-row input{min-width:0;}
.creator-scroll-results .inventory-row-top{align-items:center;}
.creator-scroll-results .inventory-controls{flex-wrap:nowrap;}
.creator-scroll-pager{margin-top:10px;}
@media(max-width:760px){.creator-scroll-filter-grid{grid-template-columns:repeat(3,minmax(0,1fr));max-width:none}.creator-scroll-search-row{grid-template-columns:minmax(0,1fr) auto auto}.creator-scroll-results .inventory-row-top{align-items:flex-start}}
@media(max-width:560px){.creator-scroll-filter-grid{grid-template-columns:1fr 1fr}.creator-scroll-search-row{grid-template-columns:1fr 1fr}.creator-scroll-search-row input{grid-column:1/-1}.creator-scroll-results .inventory-controls{width:auto}}
.creator-scroll-search-row .btn{white-space:nowrap;min-width:max-content;padding-inline:14px;}
.creator-scroll-filter-grid .field>label,.creator-scroll-search-field>label{font-size:11px;letter-spacing:.07em;}
.creator-scroll-results .inventory-item-name{white-space:normal;text-align:left;}


/* v0.29aq Warlock invocation and pact-boon creator polish. */
.warlock-invocation-reference-table { width:100%; table-layout:fixed; }
.warlock-invocation-reference-table th:first-child { width:24%; }
.warlock-invocation-reference-table th,
.warlock-invocation-reference-table td { vertical-align:top; overflow-wrap:anywhere; }
.warlock-invocation-reference-table td p:first-child { margin-top:0; }
.warlock-invocation-reference-table td p:last-child { margin-bottom:0; }
.warlock-pact-boon-rules p { margin:.55rem 0; }


/* Warlock creator polish: keep Pact Magic subsection headings aligned with feature-copy emphasis. */
.warlock-pact-magic-rules strong {
  color: var(--py-text-strong) !important;
}
.warlock-invocation-selector-note {
  margin: 0 0 12px;
}


/* v0.29bh: Barbarian class/subclass preview clarity and table sizing. */
.subclass-preview-blurb,
.subclass-selection-blurb {
  margin: 0 0 18px;
  padding: 12px 14px;
  white-space: normal;
  background: var(--py-panel-soft-2) !important;
}
.subclass-selection-blurb {
  margin-top: 14px;
}
.barbarian-feature-table-wrap {
  width: 100%;
  max-width: 100%;
  min-width: 0;
  box-sizing: border-box;
  overflow: hidden;
}
.barbarian-feature-table-wrap > .feature-table,
.barbarian-choice-table {
  width: 100%;
  max-width: 100%;
  min-width: 0;
  table-layout: fixed;
  font-size: 14px;
}
.barbarian-feature-table-wrap > .feature-table th,
.barbarian-feature-table-wrap > .feature-table td,
.barbarian-choice-table th,
.barbarian-choice-table td {
  padding: 9px 12px;
  word-break: normal;
  overflow-wrap: break-word;
  hyphens: none;
}
.barbarian-feature-table-wrap > .feature-table th:first-child,
.barbarian-feature-table-wrap > .feature-table td:first-child,
.barbarian-choice-table th:first-child,
.barbarian-choice-table td:first-child {
  width: 124px;
  min-width: 124px;
  white-space: normal;
  overflow-wrap: normal;
  word-break: keep-all;
}
.barbarian-feature-table-wrap > .feature-table th:nth-child(n+2),
.barbarian-feature-table-wrap > .feature-table td:nth-child(n+2),
.barbarian-choice-table th:nth-child(n+2),
.barbarian-choice-table td:nth-child(n+2) {
  width: auto;
}
.barbarian-feature-table-wrap .feature-table th,
.barbarian-choice-table th {
  font-weight: 800;
}
.barbarian-feature-table-wrap .feature-table th:first-child {
  vertical-align: top;
}
.barbarian-choice-table th:first-child,
.barbarian-choice-table td:first-child {
  width: 58px;
  min-width: 58px;
  text-align: center;
}
.barbarian-table-wild-magic-table > .feature-table th:first-child,
.barbarian-table-wild-magic-table > .feature-table td:first-child {
  width: 58px;
  min-width: 58px;
  text-align: center;
}
.barbarian-table-rage-progression > .feature-table th:first-child,
.barbarian-table-rage-progression > .feature-table td:first-child {
  width: 150px;
  min-width: 150px;
}
.barbarian-table-totem-spirit-options > .feature-table th:first-child,
.barbarian-table-aspect-of-the-beast-options > .feature-table th:first-child,
.barbarian-table-totemic-attunement-options > .feature-table th:first-child,
.barbarian-table-totem-spirit-options > .feature-table td:first-child,
.barbarian-table-aspect-of-the-beast-options > .feature-table td:first-child,
.barbarian-table-totemic-attunement-options > .feature-table td:first-child {
  width: 96px;
  min-width: 96px;
}
@media (max-width: 760px) {
  .barbarian-feature-table-wrap > .feature-table {
    font-size: 12px;
  }
  .barbarian-feature-table-wrap > .feature-table th,
  .barbarian-feature-table-wrap > .feature-table td {
    padding: 7px 8px;
  }
  .barbarian-feature-table-wrap > .feature-table th:first-child,
  .barbarian-feature-table-wrap > .feature-table td:first-child {
    width: 96px;
    min-width: 96px;
  }
}


/* v0.29bi: Bard and Fighter creator/reference-table polish. */
#subclassModalBlurb.subclass-preview-blurb,
.choice-block .subclass-selection-blurb,
.blurb-box.subclass-selection-blurb {
  background: var(--py-panel-soft-2) !important;
  color: var(--text);
  border-color: var(--line);
}
.spirit-tales-table,
.fighter-maneuver-reference-table,
.fighter-rune-reference-table,
.fighter-arcane-shot-reference-table,
.fighter-style-reference-table {
  width: 100%;
  max-width: 100%;
  min-width: 0;
  table-layout: fixed;
}
.spirit-tales-table th,
.spirit-tales-table td,
.fighter-maneuver-reference-table th,
.fighter-maneuver-reference-table td,
.fighter-rune-reference-table th,
.fighter-rune-reference-table td,
.fighter-arcane-shot-reference-table th,
.fighter-arcane-shot-reference-table td,
.fighter-style-reference-table th,
.fighter-style-reference-table td {
  word-break: normal;
  overflow-wrap: break-word;
  hyphens: none;
  vertical-align: top;
}
.spirit-tales-table th:first-child,
.spirit-tales-table td:first-child {
  width: 170px;
  min-width: 170px;
  overflow-wrap: normal;
}
.fighter-maneuver-reference-table th:first-child,
.fighter-maneuver-reference-table td:first-child,
.fighter-arcane-shot-reference-table th:first-child,
.fighter-arcane-shot-reference-table td:first-child {
  width: 190px;
  min-width: 190px;
  overflow-wrap: normal;
}
.fighter-rune-reference-table th:first-child,
.fighter-rune-reference-table td:first-child {
  width: 150px;
  min-width: 150px;
  overflow-wrap: normal;
}
.fighter-style-reference-table th:first-child,
.fighter-style-reference-table td:first-child {
  width: 210px;
  min-width: 210px;
  white-space: nowrap;
  overflow-wrap: normal;
}
.bard-magical-secrets-rules,
.eldritch-knight-off-school-rules {
  margin-top: 12px;
  padding-top: 10px;
  border-top: 1px solid var(--line);
}
.bard-magical-secrets-rules p,
.eldritch-knight-off-school-rules p { margin: 0; }
@media (max-width: 760px) {
  .spirit-tales-table th:first-child,
  .spirit-tales-table td:first-child { width: 140px; min-width: 140px; }
  .fighter-maneuver-reference-table th:first-child,
  .fighter-maneuver-reference-table td:first-child,
  .fighter-arcane-shot-reference-table th:first-child,
  .fighter-arcane-shot-reference-table td:first-child { width: 145px; min-width: 145px; }
  .fighter-rune-reference-table th:first-child,
  .fighter-rune-reference-table td:first-child { width: 120px; min-width: 120px; }
  .fighter-style-reference-table th:first-child,
  .fighter-style-reference-table td:first-child { width: 165px; min-width: 165px; }
}


/* v0.29bj: unified creator selectors, known-choice tables, and equipment inspection panel. */
.fighter-known-maneuvers-table,
.fighter-known-arcane-shots-table,
.fighter-known-runes-table {
  width: 100%; max-width: 100%; min-width: 0; table-layout: fixed;
}
.fighter-known-maneuvers-table th,
.fighter-known-maneuvers-table td,
.fighter-known-arcane-shots-table th,
.fighter-known-arcane-shots-table td,
.fighter-known-runes-table th,
.fighter-known-runes-table td {
  word-break: normal; overflow-wrap: break-word; hyphens: none; vertical-align: top;
}
.fighter-known-name-col { width: 190px; }
.fighter-known-style-col { width: 190px; min-width: 190px; }
.fighter-known-fighting-styles-table {
  table-layout: fixed;
}
.fighter-known-fighting-styles-table th:first-child,
.fighter-known-fighting-styles-table td:first-child {
  width: 190px;
  min-width: 190px;
  white-space: normal;
  word-break: normal;
  overflow-wrap: normal;
}
.fighter-known-rune-col { width: 150px; }
.creator-spell-mode-field,
.creator-warlock-spell-mode-field { margin-bottom: 12px; }
.creator-spell-mode-field .creator-spell-source-description,
.creator-warlock-spell-mode-field .warlock-spell-source-description {
  color: var(--muted);
  font-size: 15px;
  font-weight: 400;
  letter-spacing: normal;
  line-height: 1.4;
  text-transform: none;
}
.creator-spell-mode-field > select,
.creator-warlock-spell-mode-field > select {
  font-weight: 400 !important;
  letter-spacing: normal;
  text-transform: none;
}
.warlock-tome-source-note { margin: 2px 0 12px; }
.creator-equipment-item-button {
  appearance: none; border: 0; background: transparent; color: inherit; padding: 0; margin: 0;
  text-align: left; cursor: pointer; text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 3px;
}
.creator-equipment-item-button:hover { color: var(--accent); }
.creator-equipment-search-row {
  display: grid; grid-template-columns: minmax(0,1fr) auto auto; gap: 10px; align-items: center;
}
.creator-equipment-search-row .btn { min-width: 104px; white-space: nowrap; }
.creator-item-inspection-drawer {
  position: fixed; inset: 0; z-index: 1500; pointer-events: none; background: transparent;
}
.creator-item-inspection-drawer.open { pointer-events: auto; background: color-mix(in srgb, var(--text) 28%, transparent); }
.creator-item-inspection-card {
  position: absolute; top: 0; right: 0; width: min(520px, 96vw); height: 100%;
  background: var(--py-panel-soft); color: var(--text); border-left: 2px solid var(--line); box-shadow: -12px 0 34px rgba(0,0,0,.2);
  transform: translateX(105%); transition: transform .18s ease; display: grid; grid-template-rows: auto minmax(0,1fr);
}
.creator-item-inspection-drawer.open .creator-item-inspection-card { transform: translateX(0); }
.creator-item-inspection-drawer.wide .creator-item-inspection-card { width: min(760px, 97vw); }
.creator-item-inspection-header {
  display: flex; justify-content: space-between; gap: 18px; align-items: flex-start; padding: 24px 26px 18px; border-bottom: 2px solid var(--line); background: var(--py-panel-soft);
}
.creator-item-inspection-header h2 { margin: 4px 0 2px; font-size: 30px; line-height: 1.08; }
.creator-item-inspection-body { overflow-y: auto; overflow-x: hidden; padding: 22px 26px 34px; background: var(--py-panel-soft); }
.creator-item-inspection-controls { margin-top: 22px; padding-top: 18px; border-top: 2px solid var(--line); }
.creator-item-inspection-body .equipment-table-wrap { overflow: visible; max-width: 100%; }
.creator-item-inspection-body .equipment-description-table { width: 100%; max-width: 100%; table-layout: fixed; }
.creator-item-inspection-body .equipment-description-table th,
.creator-item-inspection-body .equipment-description-table td { overflow-wrap: break-word; word-break: normal; }

/* v0.29bk: creator item drawers follow the standard themed side-panel surfaces. */
[data-py-mode="dark"] .creator-item-inspection-card,
[data-py-mode="dark"] .creator-item-inspection-header,
[data-py-mode="dark"] .creator-item-inspection-body {
  background: var(--py-panel) !important;
  color: var(--py-text) !important;
  border-color: var(--py-border) !important;
}
[data-py-mode="light"] .creator-item-inspection-card,
[data-py-mode="light"] .creator-item-inspection-header,
[data-py-mode="light"] .creator-item-inspection-body {
  background: var(--py-panel-soft) !important;
  color: var(--py-text) !important;
}
.creator-item-inspection-body .equipment-description-text {
  margin-top: 16px;
  padding: 0;
  border: 0;
  border-radius: 0;
  background: transparent;
  color: inherit;
  line-height: 1.55;
  overflow: visible;
  white-space: pre-wrap;
}
.creator-item-inspection-body .equipment-description-text:first-child { margin-top: 10px; }
.creator-item-inspection-body .equipment-description-text > :first-child { margin-top: 0; }
.creator-item-inspection-body .equipment-description-text > :last-child { margin-bottom: 0; }
@media (max-width: 760px) {
  .fighter-known-name-col { width: 140px; }
  .fighter-known-style-col { width: 145px; min-width: 145px; }
  .fighter-known-fighting-styles-table th:first-child,
  .fighter-known-fighting-styles-table td:first-child { width: 145px; min-width: 145px; }
  .fighter-known-rune-col { width: 115px; }
  .creator-equipment-search-row { grid-template-columns: minmax(0,1fr) auto; }
  .creator-equipment-search-row input { grid-column: 1 / -1; }
  .creator-equipment-search-row .btn { min-width: 96px; }
  .creator-item-inspection-header, .creator-item-inspection-body { padding-left: 18px; padding-right: 18px; }
}

/* Creator Ranger feature-track cleanup: keep selected rules and fields in the existing choice panel instead of adding another inset panel. */
.ranger-inline-feature-text{margin-top:12px;}
.ranger-inline-choice-content{margin-top:12px;}
.ranger-inline-choice-content > .ranger-inline-feature-text:first-child{margin-top:0;}
.ranger-inline-choice-content > .field,
.ranger-inline-feature-text + .field{margin-top:12px;}
.primal-companion-statblock-details{margin-top:12px;}
.primal-companion-statblock-list{display:grid;gap:14px;}
.primal-companion-statblock-list > .small-note{margin-bottom:0;}
.primal-companion-statblock-list .dnd-statblock{margin:0;}


/* v0.29bn: flatter Ranger feature presentation and integrated Wizard spell-feature selection. */
.ranger-inline-choice-content > h3{margin:0 0 6px;}
.ranger-inline-feature-card .ranger-inline-feature-text{margin-top:6px;}
.ranger-subclass-feature-list{width:100%;}
.ranger-subclass-feature-item > .feature-reference-table{margin-top:12px;}
.ranger-selected-option-text{padding-top:10px;border-top:1px solid var(--py-border-faint);}
.primal-companion-statblock-details{margin-top:12px;}
.primal-companion-statblock-details > summary{cursor:pointer;font-weight:800;}
.primal-companion-statblock-list{display:grid;gap:12px;margin-top:12px;}
.wizard-spell-selection-features{margin-top:16px;}
.wizard-spell-selection-mode-list{display:grid;gap:9px;margin-top:12px;}
.wizard-spell-selection-mode{display:grid;grid-template-columns:auto minmax(0,1fr);gap:10px;align-items:start;padding:11px 12px;border:1px solid var(--py-border-soft);border-radius:12px;background:var(--py-panel-soft);cursor:pointer;}
.wizard-spell-selection-mode.selected{border-color:var(--accent);background:var(--py-primary-glass);box-shadow:0 0 0 2px var(--py-hover-ring);}
.wizard-spell-selection-mode input{margin-top:3px;width:18px;height:18px;accent-color:var(--accent);}
.wizard-spell-selection-mode span{display:grid;gap:3px;}
.wizard-spell-selection-mode small{color:var(--muted);font-size:12px;line-height:1.35;}
.creator-spell-feature-check{display:inline-flex;align-items:center;gap:7px;border:2px solid var(--line);border-radius:999px;padding:7px 10px;background:var(--py-panel-soft);font-size:12px;font-weight:900;cursor:pointer;white-space:nowrap;}
.creator-spell-feature-check:has(input:checked){border-color:var(--accent);background:var(--py-primary-glass);color:var(--py-text-strong);}
.creator-spell-feature-check input{width:16px;height:16px;margin:0;accent-color:var(--accent);}
[data-py-mode="dark"] .wizard-spell-selection-mode,
[data-py-mode="dark"] .creator-spell-feature-check{background:var(--py-panel);}


/* v0.29bo: Ranger comparison previews and modern spell-level navigation. */
.creator-preview-choice-details{margin-top:10px;}
.creator-preview-choice-details > summary{cursor:pointer;}
.ranger-subclass-feature-item > .creator-preview-choice-details{margin-top:10px;}
.drake-companion-statblock-list .dnd-statblock{margin-bottom:0;}

/* v0.29bp: integrated feature choices, responsive Drakewarden origin tables, and learned-spell actions. */
.feature-reference-heading{margin-top:12px;}
.drakewarden-origin-table-wrap{width:100%;max-width:100%;min-width:0;overflow:visible;box-sizing:border-box;}
.drakewarden-origin-reference-table,
.drakewarden-origin-select-table{width:100%;max-width:100%;min-width:0;table-layout:fixed;}
.drakewarden-origin-reference-table col.drake-origin-die-col,
.drakewarden-origin-select-table col.drake-origin-die-col{width:54px;}
.drakewarden-origin-select-table col.drake-origin-selection-col{width:126px;}
.drakewarden-origin-reference-table th:first-child,
.drakewarden-origin-reference-table td:first-child,
.drakewarden-origin-select-table th:first-child,
.drakewarden-origin-select-table td:first-child{width:54px;min-width:0;text-align:center;vertical-align:middle;white-space:nowrap;word-break:normal;overflow-wrap:normal;}
.drakewarden-origin-reference-table th,
.drakewarden-origin-reference-table td,
.drakewarden-origin-select-table th,
.drakewarden-origin-select-table td{min-width:0;overflow-wrap:anywhere;word-break:normal;}
.drakewarden-origin-select-table th:last-child,
.drakewarden-origin-select-table td:last-child{width:126px;min-width:0;text-align:center;vertical-align:middle;}
.drakewarden-origin-select-table .btn{display:inline-flex;width:100%;min-width:0;max-width:108px;justify-content:center;white-space:nowrap;word-break:normal;padding-inline:10px;}
.barbarian-integrated-feature-choices{padding-top:12px;border-top:1px solid var(--py-border-faint);}
.spell-card-actions{display:flex;justify-content:flex-end;align-items:center;gap:8px;flex-wrap:wrap;}
.spell-card-actions .btn{width:auto;min-width:92px;}
@media (max-width:720px){
  .drakewarden-origin-select-table col.drake-origin-selection-col{width:104px;}
  .drakewarden-origin-select-table th:last-child,
  .drakewarden-origin-select-table td:last-child{width:104px;min-width:0;padding-inline:5px;}
  .drakewarden-origin-select-table .btn{max-width:90px;padding-inline:7px;}
  .spell-card-top{flex-wrap:wrap;}
  .spell-card-actions{width:100%;justify-content:flex-start;}
}

/* v0.29bq: species page and integrated subclass-choice modernization. */
.species-variant-block{margin-top:14px}
.species-choices-block>.level-feature-title{margin-bottom:12px}
.species-choices-block .field>.small-note{
  text-transform:none !important;
  letter-spacing:normal !important;
  font-weight:400 !important;
  line-height:1.45;
}
.species-feature-details{overflow:visible}
.species-feature-table-details{margin-top:10px}
.species-feature-table-details>summary{cursor:pointer;padding:8px 0}
.species-feature-table-wrap{width:100%;max-width:100%;overflow:visible;margin-top:8px}
.species-modern-table{width:100%;max-width:100%;min-width:0;table-layout:fixed}
.species-modern-table th,.species-modern-table td{white-space:normal;overflow-wrap:anywhere;word-break:normal;vertical-align:top}
.integrated-feature-choice{margin-top:14px;min-width:0;max-width:100%}
.integrated-feature-choice>.field-grid,.integrated-feature-choice>.field{margin-top:10px}
.integrated-feature-choice>.choice-block{margin-top:10px}


/* v0.29br: creator navigation, ability collapsibles, proficiency-source alerts, and themed controls. */
.theme-controls {
  background: var(--py-panel-soft) !important;
  background: color-mix(in srgb, var(--py-panel) 84%, var(--py-primary) 16%) !important;
}
.abilities-collapsible-section > summary {
  cursor: pointer;
  font-size: 1.15rem;
  color: var(--py-text-deep);
  list-style-position: outside;
}
.abilities-collapsible-section > .abilities-section-note { margin-top: 8px; }
.abilities-collapsible-section[open] > summary { margin-bottom: 2px; }
.species-named-option { margin: 12px 0 0; line-height: 1.5; }
.species-named-option:first-child { margin-top: 0; }
#subclassModalFeatures .feature-reference-table { max-width: 100%; overflow: hidden; }
#subclassModalFeatures .fighter-maneuver-reference-table,
#subclassModalFeatures .fighter-arcane-shot-reference-table { width: 100%; max-width: 100%; table-layout: fixed; }
#subclassModalFeatures .fighter-maneuver-reference-table th,
#subclassModalFeatures .fighter-maneuver-reference-table td,
#subclassModalFeatures .fighter-arcane-shot-reference-table th,
#subclassModalFeatures .fighter-arcane-shot-reference-table td { min-width: 0; overflow-wrap: anywhere; word-break: normal; }
#subclassModalFeatures .fighter-maneuver-reference-table th:first-child,
#subclassModalFeatures .fighter-maneuver-reference-table td:first-child,
#subclassModalFeatures .fighter-arcane-shot-reference-table th:first-child,
#subclassModalFeatures .fighter-arcane-shot-reference-table td:first-child { width: 26%; min-width: 0; }
.proficiency-source-label { font-size: .76rem; font-weight: 800; color: var(--py-muted); }
.proficiency-source-pill { display: inline-flex; align-items: center; max-width: 100%; padding: 5px 9px; border: 1px solid var(--py-border); border-radius: 999px; background: color-mix(in srgb, var(--py-panel) 82%, var(--py-primary) 18%); color: var(--py-text); font-size: .76rem; line-height: 1.25; overflow-wrap: anywhere; }
[data-py-mode="dark"] .proficiency-source-pill,


/* v0.29bs: abilities, preview blurbs, Echo reference, and responsive spell tables. */
.abilities-collapsible-section > summary.abilities-collapsible-summary {
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:16px;
  cursor:pointer;
  list-style:none;
  color:var(--py-text-deep);
  font-size:1.15rem;
  padding:0;
}
.abilities-collapsible-section > summary.abilities-collapsible-summary::-webkit-details-marker { display:none; }
.abilities-collapse-control {
  display:inline-flex;
  align-items:center;
  justify-content:center;
  flex:0 0 auto;
  min-width:92px;
  min-height:38px;
  padding:7px 14px;
  border:2px solid var(--py-border);
  border-radius:12px;
  background:var(--py-panel);
  color:var(--py-text-deep);
  font-size:.82rem;
  font-weight:900;
  line-height:1;
}
.abilities-collapsible-summary:hover .abilities-collapse-control,
.abilities-collapsible-summary:focus-visible .abilities-collapse-control { border-color:var(--py-primary); }
.abilities-collapsible-section > .abilities-section-note { margin-top:10px; }
.abilities-collapsible-section[open] > summary.abilities-collapsible-summary { margin-bottom:2px; }

.creator-preview-blurb,
#subclassModalBlurb.creator-preview-blurb,
#modalBlurb.creator-preview-blurb {
  margin:14px 0 20px;
  padding:0 !important;
  border:0 !important;
  border-radius:0 !important;
  background:transparent !important;
  box-shadow:none !important;
  color:var(--py-text);
  line-height:1.5;
  white-space:normal;
}

.spell-progression-reference {
  width:100%;
  max-width:100%;
  min-width:0;
  margin-top:12px;
  overflow:hidden;
  box-sizing:border-box;
}
.spell-progression-reference > summary { cursor:pointer; }
.spell-progression-reference-body {
  width:100%;
  max-width:100%;
  min-width:0;
  margin-top:10px;
  overflow:hidden;
}
.creator-spell-progression-table,
.spell-side-progression-details .spell-progression-table {
  width:100%;
  max-width:100%;
  min-width:0;
  table-layout:fixed;
  border-collapse:collapse;
  font-size:11px;
}
.creator-spell-progression-table th,
.creator-spell-progression-table td,
.spell-side-progression-details .spell-progression-table th,
.spell-side-progression-details .spell-progression-table td {
  min-width:0;
  padding:6px 4px;
  text-align:center;
  vertical-align:middle;
  white-space:normal;
  word-break:normal;
  overflow-wrap:anywhere;
}
.creator-spell-progression-table th:first-child,
.creator-spell-progression-table td:first-child,
.spell-side-progression-details .spell-progression-table th:first-child,
.spell-side-progression-details .spell-progression-table td:first-child { text-align:left; }
.warlock-spell-progression-table { font-size:12px; }
.third-caster-spell-progression-table,
.ranger-spell-progression-table,
.paladin-spell-progression-table { font-size:13px; }
.spell-side-progression-details { width:100%; max-width:100%; min-width:0; overflow:hidden; }
.spell-side-progression-details > .choice-description { border:0; padding:0; background:transparent; }

.echo-knight-stat-block { margin-top:12px; width:100%; max-width:100%; min-width:0; overflow:hidden; }
.echo-stat-block-body { margin-top:10px; min-width:0; }
.echo-stat-block-heading { display:flex; flex-wrap:wrap; justify-content:space-between; gap:6px 14px; margin-bottom:8px; }
.echo-stat-block-heading span { color:var(--py-muted); font-size:.86rem; }
.echo-stat-table { width:100%; max-width:100%; min-width:0; table-layout:fixed; }
.echo-stat-table th { width:28%; }
.echo-stat-table th,.echo-stat-table td { min-width:0; white-space:normal; overflow-wrap:anywhere; vertical-align:top; }
.echo-stat-notes p { margin:.7rem 0 0; }

#subclassModalFeatures .fighter-rune-reference-table,
#subclassModalFeatures .creator-spell-progression-table,
#modalFeatures .creator-spell-progression-table {
  width:100%;
  max-width:100%;
  min-width:0;
  table-layout:fixed;
}
#subclassModalFeatures .fighter-rune-reference-table th:first-child,
#subclassModalFeatures .fighter-rune-reference-table td:first-child { width:22%; min-width:0; }
#subclassModalFeatures .fighter-rune-reference-table th,
#subclassModalFeatures .fighter-rune-reference-table td { min-width:0; white-space:normal; overflow-wrap:anywhere; }

@media (max-width:760px) {
  .abilities-collapsible-section > summary.abilities-collapsible-summary { align-items:flex-start; }
  .abilities-collapse-control { min-width:78px; min-height:34px; padding:6px 10px; }
  .creator-spell-progression-table,
  .spell-side-progression-details .spell-progression-table { font-size:9px; }
  .creator-spell-progression-table th,
  .creator-spell-progression-table td,
  .spell-side-progression-details .spell-progression-table th,
  .spell-side-progression-details .spell-progression-table td { padding:5px 2px; }
  .echo-stat-table th { width:36%; }
}

/* Keep spell-side progression tables inside their panel without horizontal scrollbars. */
#spellModeWrap details .spell-progression-table,
#spellModeWrap details .simple-table,
#spellModeWrap details .sorcerer-spell-progression-table {
  width:100%;
  max-width:100%;
  min-width:0;
  table-layout:fixed;
  font-size:11px;
}
#spellModeWrap details .spell-progression-table th,
#spellModeWrap details .spell-progression-table td,
#spellModeWrap details .simple-table th,
#spellModeWrap details .simple-table td,
#spellModeWrap details .sorcerer-spell-progression-table th,
#spellModeWrap details .sorcerer-spell-progression-table td {
  min-width:0;
  padding:6px 4px;
  white-space:normal;
  overflow-wrap:anywhere;
  word-break:normal;
  text-align:center;
}
#spellModeWrap details .spell-progression-table th:first-child,
#spellModeWrap details .spell-progression-table td:first-child,
#spellModeWrap details .simple-table th:first-child,
#spellModeWrap details .simple-table td:first-child { text-align:left; }

/* Embedded class/subclass spell tables use the same no-scroll responsive treatment. */
.embedded-spell-table-reference,
.embedded-spell-table-body {
  width:100%;
  max-width:100%;
  min-width:0;
  overflow:hidden;
}
.creator-embedded-spell-table {
  width:100%;
  max-width:100%;
  min-width:0;
  table-layout:fixed;
  border-collapse:collapse;
}
.creator-embedded-spell-table th,
.creator-embedded-spell-table td {
  min-width:0;
  padding:7px 6px;
  white-space:normal;
  word-break:normal;
  overflow-wrap:anywhere;
  vertical-align:top;
}
.creator-spell-capacity-modal .compact-modal{max-width:620px}
.creator-spell-capacity-modal .modal-body{display:grid;gap:16px}
.creator-spell-capacity-modal .modal-body p{margin:0;line-height:1.5}
.creator-spell-browser-advanced-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
@media(max-width:760px){.creator-spell-browser-advanced-row{grid-template-columns:1fr}}

/* v0.29bv — Character Forge proficiency summary and compact equipment filters */
.creator-class-proficiency-lines{margin-top:8px}
.creator-class-proficiency-lines p{margin:.45rem 0;line-height:1.45}
.creator-class-proficiency-lines p:first-child{margin-top:0}
.creator-class-proficiency-lines p:last-child{margin-bottom:0}

.creator-equipment-filter-grid{
  display:grid;
  grid-template-columns:minmax(150px,1fr) minmax(150px,.85fr) minmax(180px,1fr) auto;
  gap:12px;
  align-items:end;
}
.creator-equipment-filter-grid .field{min-width:0}
.creator-equipment-proficient-filter{
  align-self:end;
  display:inline-flex;
  flex-direction:row;
  align-items:center;
  justify-content:center;
  gap:8px;
  min-height:48px;
  width:max-content;
  max-width:100%;
  padding:8px 12px;
  white-space:nowrap;
}
.creator-equipment-proficient-filter input[type="checkbox"]{
  width:18px;
  height:18px;
  min-width:18px;
  margin:0;
  flex:0 0 18px;
}
@media(max-width:980px){
  .creator-equipment-filter-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .creator-equipment-proficient-filter{width:100%}
}
@media(max-width:560px){
  .creator-equipment-filter-grid{grid-template-columns:1fr}
}

/* v0.29by — Sorcerer creator, Lunar, and preview-table polish */
.lunar-phase-feature-text .lunar-phase-option{
  margin:12px 0 0;
  line-height:1.5;
}
.lunar-phase-feature-text .lunar-phase-option:first-of-type{margin-top:10px;}

.lunar-spells-reference,
.wild-magic-reference{
  width:100%;
  max-width:100%;
  min-width:0;
  overflow:hidden;
  box-sizing:border-box;
}
.lunar-spells-reference .lunar-spells-table,
.wild-magic-reference .wild-magic-surge-table{
  width:100%;
  max-width:100%;
  min-width:0;
  table-layout:fixed;
  box-sizing:border-box;
}
.lunar-spells-reference .lunar-spells-table th,
.lunar-spells-reference .lunar-spells-table td,
.wild-magic-reference .wild-magic-surge-table th,
.wild-magic-reference .wild-magic-surge-table td{
  min-width:0;
  padding:7px 6px;
  white-space:normal;
  overflow-wrap:anywhere;
  word-break:normal;
  vertical-align:top;
}
.lunar-spells-reference .lunar-spells-table th:first-child,
.lunar-spells-reference .lunar-spells-table td:first-child{
  width:18%;
  text-align:left;
  font-weight:800;
}
.lunar-spells-reference .lunar-spells-table th:not(:first-child),
.lunar-spells-reference .lunar-spells-table td:not(:first-child){width:27.333%;}
.wild-magic-reference .wild-magic-surge-table .wild-magic-roll-col,
.wild-magic-reference .wild-magic-surge-table th:first-child,
.wild-magic-reference .wild-magic-surge-table td:first-child{
  width:72px;
  min-width:72px;
  text-align:center;
  white-space:nowrap;
  overflow-wrap:normal;
}
.wild-magic-reference .wild-magic-surge-table td p{margin:0;}

.shadow-quirk-roll-row{
  justify-content:flex-start;
  margin-top:10px;
}
.compact-die-button{
  width:auto!important;
  min-width:50px!important;
  min-height:38px!important;
  padding:7px 12px!important;
  line-height:1!important;
}
.shadow-sorcerer-quirks-table{
  width:100%;
  max-width:100%;
  min-width:0;
  table-layout:fixed;
}
.shadow-sorcerer-quirks-table th,
.shadow-sorcerer-quirks-table td{
  min-width:0;
  white-space:normal;
  overflow-wrap:anywhere;
  word-break:normal;
  vertical-align:top;
}
.shadow-sorcerer-quirks-table th:first-child,
.shadow-sorcerer-quirks-table td:first-child{
  width:54px;
  text-align:center;
  white-space:nowrap;
}

#spell-rollToast.creator-roll-toast{
  position:fixed;
  left:50%;
  right:auto;
  bottom:22px;
  width:min(470px,calc(100vw - 32px));
  padding:13px 18px 14px;
  border:0;
  border-radius:16px;
  background:color-mix(in srgb,var(--accent) 82%,#111);
  color:var(--py-on-primary);
  box-shadow:0 16px 38px rgba(0,0,0,.34);
  opacity:0;
  transform:translate(-50%,18px);
  transition:opacity .18s ease,transform .18s ease;
  pointer-events:none;
  z-index:1600;
  text-align:left;
  font-weight:800;
}
#spell-rollToast.creator-roll-toast.show{
  opacity:1;
  transform:translate(-50%,0);
}
.creator-roll-toast .roll-popup-eyebrow{
  font-size:10px;
  line-height:1;
  letter-spacing:.1em;
  text-transform:uppercase;
  opacity:.68;
  font-weight:950;
}
.creator-roll-toast .roll-popup-main{
  display:flex;
  align-items:baseline;
  justify-content:space-between;
  gap:16px;
  margin-top:3px;
}
.creator-roll-toast .roll-popup-title{
  min-width:0;
  font-size:19px;
  line-height:1.1;
  font-weight:950;
}
.creator-roll-toast .roll-popup-total{
  flex:0 0 auto;
  font-size:34px;
  line-height:.95;
  font-weight:950;
}
.creator-roll-toast .roll-popup-equation{
  margin-top:4px;
  font-size:13px;
  line-height:1.15;
  font-weight:850;
}
.creator-roll-toast .roll-popup-meta{
  margin-top:5px;
  font-size:12px;
  line-height:1.3;
  opacity:.82;
  font-weight:750;
}
[data-py-mode="dark"] #spell-rollToast.creator-roll-toast{
  background:color-mix(in srgb,var(--py-elevated-panel) 90%,#000);
  color:var(--py-text-strong);
  border:1px solid color-mix(in srgb,var(--accent) 55%,transparent);
}

@media(max-width:720px){
  .lunar-spells-reference .lunar-spells-table{font-size:11px;}
  .lunar-spells-reference .lunar-spells-table th,
  .lunar-spells-reference .lunar-spells-table td{padding:6px 4px;}
  .wild-magic-reference .wild-magic-surge-table .wild-magic-roll-col,
  .wild-magic-reference .wild-magic-surge-table th:first-child,
  .wild-magic-reference .wild-magic-surge-table td:first-child{
    width:58px;
    min-width:58px;
  }
}


/* v0.29cc — Circle of the Land creator spell polish */
.druid-land-spells-table{table-layout:fixed;}
.druid-land-spells-table col.druid-land-level-col{width:28%;}
.druid-land-spells-table th:first-child,
.druid-land-spells-table td:first-child{width:28%;}
.druid-spell-bonus-cantrip-choice{margin:0 0 16px;}
.druid-spell-bonus-cantrip-choice .known-choice-table{margin-bottom:2px;}
.druid-bonus-cantrip-selection-table{table-layout:fixed;}
.druid-bonus-cantrip-selection-table col.druid-bonus-cantrip-name-col{width:24%;}
.druid-bonus-cantrip-selection-table th:first-child,
.druid-bonus-cantrip-selection-table td:first-child{width:24%;overflow-wrap:anywhere;}


/* v0.29cd–v0.29ce — Druid subclass expansion and polish */
.druid-subclass-spells-table,
.druid-star-map-table{
  width:100%;
  table-layout:fixed;
}
.druid-subclass-spells-table col.druid-subclass-level-col,
.druid-subclass-spells-table th:first-child,
.druid-subclass-spells-table td:first-child{
  width:24%;
}
.druid-star-map-table col.druid-star-map-roll-col,
.druid-star-map-table th:first-child,
.druid-star-map-table td:first-child{
  width:72px;
  min-width:72px;
  text-align:center;
}
.druid-star-map-choice{margin-top:12px;}
.druid-star-map-choice .field{margin-bottom:12px;}
.wildfire-spirit-statblock-details{margin-top:14px;}
.wildfire-spirit-statblock-details > summary{cursor:pointer;}
.wildfire-spirit-statblock-list .primal-companion-statblock{margin-top:10px;}
@media(max-width:720px){
  .druid-subclass-spells-table col.druid-subclass-level-col,
  .druid-subclass-spells-table th:first-child,
  .druid-subclass-spells-table td:first-child{width:30%;}
  .druid-star-map-table col.druid-star-map-roll-col,
  .druid-star-map-table th:first-child,
  .druid-star-map-table td:first-child{width:54px;min-width:54px;}
}

/* v0.29cf — Druid creator completion and Warlock reference polish */
.warlock-subclass-spell-reference,
.accursed-specter-stat-block-details,
.known-warlock-invocations-table{
  margin-top:14px;
}
.warlock-subclass-spell-reference > summary,
.accursed-specter-stat-block-details > summary,
.warlock-invocation-reference > summary{
  cursor:pointer;
}
.warlock-subclass-spell-table,
.warlock-known-invocations-table,
.accursed-specter-core-table,
.accursed-specter-ability-table{
  width:100%;
  max-width:100%;
  min-width:0;
  table-layout:fixed;
}
.warlock-subclass-spell-table th,
.warlock-subclass-spell-table td,
.warlock-known-invocations-table th,
.warlock-known-invocations-table td,
.accursed-specter-core-table th,
.accursed-specter-core-table td,
.accursed-specter-ability-table th,
.accursed-specter-ability-table td{
  min-width:0;
  white-space:normal;
  overflow-wrap:anywhere;
  vertical-align:top;
}
.warlock-subclass-spell-table col.warlock-spell-level-col,
.warlock-subclass-spell-table th:first-child,
.warlock-subclass-spell-table td:first-child{
  width:20%;
}
.warlock-genie-spell-table col.warlock-spell-level-col,
.warlock-genie-spell-table th:first-child,
.warlock-genie-spell-table td:first-child{
  width:11%;
}
.warlock-genie-spell-table th,
.warlock-genie-spell-table td{
  padding-left:7px;
  padding-right:7px;
}
.warlock-known-invocations-table col.warlock-known-invocation-name-col,
.warlock-known-invocations-table th:first-child,
.warlock-known-invocations-table td:first-child{
  width:25%;
}
.accursed-specter-stat-block-body{margin-top:10px;min-width:0;}
.accursed-specter-stat-heading{
  display:flex;
  flex-wrap:wrap;
  justify-content:space-between;
  gap:6px 14px;
  margin-bottom:8px;
}
.accursed-specter-stat-heading span{color:var(--py-muted);font-size:.86rem;}
.accursed-specter-core-table th{width:28%;}
.accursed-specter-ability-table{margin-top:10px;text-align:center;}
.accursed-specter-details p{margin:.7rem 0 0;}
@media(max-width:720px){
  .warlock-subclass-spell-table col.warlock-spell-level-col,
  .warlock-subclass-spell-table th:first-child,
  .warlock-subclass-spell-table td:first-child{width:27%;}
  .warlock-genie-spell-table{font-size:10px;}
  .warlock-genie-spell-table col.warlock-spell-level-col,
  .warlock-genie-spell-table th:first-child,
  .warlock-genie-spell-table td:first-child{width:13%;}
  .warlock-genie-spell-table th,
  .warlock-genie-spell-table td{padding:5px 3px;}
  .warlock-known-invocations-table col.warlock-known-invocation-name-col,
  .warlock-known-invocations-table th:first-child,
  .warlock-known-invocations-table td:first-child{width:34%;}
  .accursed-specter-core-table th{width:36%;}
  .accursed-specter-ability-table{font-size:10px;}
  .accursed-specter-ability-table th,
  .accursed-specter-ability-table td{padding:5px 2px;}
}


/* v0.29cg — polished subclass overviews and Genie creator tables. */
.polished-subclass-blurb-title {
  font-size: 1rem;
  line-height: 1.25;
  margin-bottom: 8px;
  color: var(--py-text-strong, var(--py-text));
}
.polished-subclass-blurb-copy {
  margin: 0;
  line-height: 1.55;
}
.polished-subclass-blurb-copy > p { margin: .55rem 0; }
.polished-subclass-blurb-copy > p:first-child { margin-top: 0; }
.polished-subclass-blurb-copy > p:last-child { margin-bottom: 0; }
#subclassModalBlurb .polished-subclass-blurb-copy {
  width: 100%;
  max-width: 100%;
}
.warlock-genie-choice-copy {
  margin: 0 0 10px;
  line-height: 1.5;
}
.warlock-genie-roll-row {
  justify-content: flex-start;
  margin: 10px 0 8px;
}
.warlock-genie-kind-choice,
.warlock-genie-vessel-choice {
  width: 100%;
  max-width: 100%;
  box-sizing: border-box;
  margin-top: 12px;
}
.warlock-genie-kind-reference,
.warlock-genie-vessel-reference {
  width: 100%;
  max-width: 100%;
  min-width: 0;
  box-sizing: border-box;
  overflow: hidden;
}
.warlock-genie-kind-table,
.warlock-genie-vessel-table {
  width: 100%;
  max-width: 100%;
  min-width: 0;
  table-layout: fixed;
}
.warlock-genie-kind-table th,
.warlock-genie-kind-table td,
.warlock-genie-vessel-table th,
.warlock-genie-vessel-table td {
  vertical-align: top;
  white-space: normal;
  overflow-wrap: break-word;
}
.warlock-genie-kind-table th:first-child,
.warlock-genie-kind-table td:first-child,
.warlock-genie-vessel-table th:first-child,
.warlock-genie-vessel-table td:first-child {
  width: 64px;
  text-align: center;
  white-space: nowrap;
}
.warlock-genie-kind-table th:nth-child(2),
.warlock-genie-kind-table td:nth-child(2) { width: 38%; }
.warlock-genie-kind-preview-item .warlock-genie-kind-reference,
.feature-item .warlock-genie-vessel-reference { margin-top: 10px; }

.creator-spell-mode-description {
  margin: 12px 0;
}
.creator-spell-mode-description > strong {
  display: block;
  font-size: 16px;
}
.creator-spell-mode-description-body > :first-child {
  margin-top: 0;
}
.creator-spell-mode-description-body > :last-child {
  margin-bottom: 0;
}

/* v0.29co — preserve readable wide progression and elemental-reference tables. */
.monk-elemental-discipline-table-scroll {
  width: 100%;
  max-width: 100%;
  min-width: 0;
  overflow-x: auto;
  overscroll-behavior-inline: contain;
  box-sizing: border-box;
}
.monk-elemental-discipline-table-scroll > .monk-elemental-discipline-reference-table {
  width: 100%;
  min-width: 820px;
  max-width: none;
  table-layout: fixed;
}
.monk-elemental-discipline-reference-table col.monk-elemental-name-col { width: 210px; }
.monk-elemental-discipline-reference-table col.monk-elemental-prerequisite-col { width: 170px; }
.monk-elemental-discipline-reference-table col.monk-elemental-effect-col { width: auto; }
.monk-elemental-discipline-reference-table th,
.monk-elemental-discipline-reference-table td {
  min-width: 0;
  white-space: normal;
  overflow-wrap: break-word;
  word-break: normal;
  hyphens: none;
  vertical-align: top;
}


/* v0.29cp — Sorcerer progression split and subclass-origin controls. */
.sorcerer-no-scroll-reference,
.sorcerer-no-scroll-reference .spell-progression-reference-body {
  width:100%;
  max-width:100%;
  min-width:0;
  overflow:visible;
}
.sorcerer-no-scroll-reference .sorcerer-spell-progression-table,
#spellModeWrap .sorcerer-no-scroll-reference .sorcerer-spell-progression-table {
  width:100%;
  max-width:100%;
  min-width:0;
  table-layout:fixed;
  font-size:11px;
}
.sorcerer-no-scroll-reference .sorcerer-spell-progression-table col.sorcerer-col-level { width:11%; }
.sorcerer-no-scroll-reference .sorcerer-spell-progression-table col.sorcerer-col-compact { width:12%; }
.sorcerer-no-scroll-reference .sorcerer-spell-progression-table col.sorcerer-col-slot { width:7.22%; }
.sorcerer-no-scroll-reference .sorcerer-spell-progression-table th,
.sorcerer-no-scroll-reference .sorcerer-spell-progression-table td {
  min-width:0;
  padding:6px 3px;
  white-space:normal;
  overflow-wrap:anywhere;
  word-break:normal;
  text-align:center;
}
.sorcerer-no-scroll-reference .sorcerer-spell-progression-table th:first-child,
.sorcerer-no-scroll-reference .sorcerer-spell-progression-table td:first-child { text-align:left; }
.sorcerer-point-progression-table { width:100%; max-width:520px; table-layout:fixed; }
.sorcerer-point-progression-table th,
.sorcerer-point-progression-table td { width:50%; }
.sorcerer-d6-choice-block { margin-top:12px; }
.sorcerer-d6-choice-block .compact-die-button { margin:10px 0 8px; }
.sorcerer-d6-choice-table { width:100%; max-width:100%; min-width:0; table-layout:fixed; }
.sorcerer-d6-choice-table col.sorcerer-d6-roll-col { width:58px; }
.sorcerer-d6-choice-table th,
.sorcerer-d6-choice-table td { min-width:0; white-space:normal; overflow-wrap:anywhere; vertical-align:top; }
.sorcerer-d6-choice-table th:first-child,
.sorcerer-d6-choice-table td:first-child { text-align:center; }
@media(max-width:760px){
  .sorcerer-no-scroll-reference .sorcerer-spell-progression-table,
  #spellModeWrap .sorcerer-no-scroll-reference .sorcerer-spell-progression-table { font-size:8.5px; }
  .sorcerer-no-scroll-reference .sorcerer-spell-progression-table th,
  .sorcerer-no-scroll-reference .sorcerer-spell-progression-table td { padding:5px 1px; }
}


/* v0.29ct — keep class and subclass preview scrollbars inside rounded modal corners. */
#classModalBackdrop .modal,
#subclassModalBackdrop .modal {
  display:flex;
  flex-direction:column;
  overflow:hidden;
}
#classModalBackdrop .modal-header,
#subclassModalBackdrop .modal-header,
#classModalBackdrop .footer-actions,
#subclassModalBackdrop .footer-actions {
  flex:0 0 auto;
}
#classModalBackdrop .modal-body,
#subclassModalBackdrop .modal-body {
  flex:1 1 auto;
  min-height:0;
  overflow:auto;
}
#classModalBackdrop .footer-actions,
#subclassModalBackdrop .footer-actions {
  position:static;
}

.paladin-oath-spells-table {
  width:100%;
  max-width:100%;
  table-layout:fixed;
}
.paladin-oath-spells-table .paladin-oath-level-col { width:28%; }
.paladin-oath-spells-table .paladin-oath-spells-col { width:72%; }
.paladin-oath-spells-table th,
.paladin-oath-spells-table td {
  overflow-wrap:anywhere;
}

/* v0.29da: feat descriptions follow the live creator theme instead of a fixed light card. */
.feat-description-card {
  background: var(--py-panel-soft-2);
  border-color: var(--py-border-soft);
  color: var(--py-text);
  white-space: normal;
}
.feat-description-card .feature-rich-text,
.feat-description-card .feature-rich-text * {
  color: inherit;
}
[data-py-mode="dark"] .feat-description-card {
  background: var(--py-panel-soft) !important;
  border-color: var(--py-border) !important;
  color: var(--py-text) !important;
}
[data-py-mode="light"] .feat-description-card {
  background: var(--py-panel-soft-2) !important;
  color: var(--py-text) !important;
}
