:root { --bg-0: #070d15; --bg-1: #0f1a2c; --bg-2: #17243a; --panel-0: rgba(10, 16, 28, 0.86); --panel-1: rgba(23, 36, 58, 0.88); --line: rgba(130, 178, 228, 0.24); --line-strong: rgba(130, 178, 228, 0.5); --text-0: #f4f8fd; --text-1: #c2d0e4; --text-2: #90a3bf; --accent: #60c4ff; --accent-strong: #8fd8ff; --accent-warm: #e8b273; --shadow: 0 16px 42px rgba(0, 0, 0, 0.42); color: var(--text-0); background: var(--bg-0); font-family: "Avenir Next", "Trebuchet MS", "Segoe UI", sans-serif; } *, *::before, *::after { box-sizing: border-box; } html, body, #root { width: 100%; height: 100%; margin: 0; } html { font-size: 16px; } body { font-size: 16px; } body { overflow: hidden; background: radial-gradient(circle at 15% -5%, rgba(62, 117, 194, 0.45), transparent 42%), radial-gradient(circle at 86% 0%, rgba(235, 167, 86, 0.4), transparent 40%), linear-gradient(165deg, var(--bg-0) 0%, #0b1322 100%); } .shell { width: 100%; height: 100%; display: grid; grid-template-columns: 1fr; grid-template-rows: auto 1fr; position: relative; min-height: 0; } .app-topbar { display: grid; grid-template-columns: auto minmax(0, 1fr) minmax(200px, 320px); align-items: center; gap: 12px; padding: 10px 14px; border-bottom: 1px solid var(--line); background: radial-gradient(circle at 16% 0%, rgba(71, 131, 206, 0.34), transparent 34%), radial-gradient(circle at 88% -8%, rgba(234, 163, 78, 0.28), transparent 40%), linear-gradient(180deg, rgba(14, 24, 40, 0.96), rgba(9, 16, 28, 0.97)); /* backdrop-filter: blur(12px); */ position: relative; overflow: visible; isolation: isolate; z-index: 30; } .app-topbar-brand { display: grid; gap: 2px; } .app-topbar-kicker { margin: 0; color: var(--accent-warm); font-size: 0.72rem; letter-spacing: 0.16em; text-transform: uppercase; } .app-topbar-title { margin: 0; font-size: 1.05rem; line-height: 1.1; } .app-topbar-nav { min-width: 0; max-width: 100%; display: flex; align-items: center; align-content: center; flex-wrap: wrap; justify-content: flex-start; row-gap: 8px; gap: 8px; overflow: visible; position: relative; z-index: 35; } .topbar-menu { position: relative; flex: 0 0 auto; overflow: visible; } .topbar-menu-toggle { border: 1px solid rgba(126, 181, 234, 0.48); border-radius: 10px; background: rgba(13, 24, 39, 0.92); color: #d6e6fa; font-size: 0.92rem; font-weight: 620; padding: 8px 11px; cursor: pointer; display: inline-flex; align-items: center; gap: 7px; white-space: nowrap; transition: border-color 120ms ease, background-color 120ms ease, color 120ms ease; } .topbar-menu-toggle:hover, .topbar-menu.is-open .topbar-menu-toggle, .topbar-menu-toggle.is-active { border-color: rgba(130, 203, 255, 0.8); background: linear-gradient(150deg, rgba(57, 116, 191, 0.86), rgba(31, 72, 121, 0.9)); color: #f3f8ff; } .topbar-caret { color: #a4c7ec; font-size: 0.84rem; } .topbar-dropdown-menu { position: absolute; left: 0; top: calc(100% + 8px); min-width: 280px; max-width: min(1100px, calc(100vw - 32px)); max-height: min(70vh, 680px); overflow: auto; display: block; padding: 0; border: 1px solid rgba(126, 181, 234, 0.38); border-radius: 12px; background: linear-gradient(180deg, rgba(11, 20, 33, 0.985), rgba(7, 13, 24, 0.992)); box-shadow: 0 10px 24px rgba(0, 0, 0, 0.35); z-index: 60; } .topbar-dropdown-columns { display: grid; grid-auto-flow: column; grid-auto-columns: minmax(280px, 340px); align-items: start; } .topbar-dropdown-column { display: flex; flex-direction: column; gap: 3px; min-width: 0; padding: 8px; border-right: 1px solid rgba(111, 167, 224, 0.32); } .topbar-dropdown-column:last-child { border-right: 0; } .topbar-dropdown-item { width: 100%; border: 1px solid transparent; border-radius: 8px; background: transparent; color: #d3e4f8; font-size: 0.86rem; text-align: left; padding: 7px 8px; cursor: pointer; white-space: normal; line-height: 1.3; } .topbar-dropdown-item--submenu { display: flex; align-items: center; justify-content: space-between; gap: 8px; } .topbar-submenu-caret { color: #a7c3e3; font-size: 0.8rem; } .topbar-dropdown-item:hover { border-color: rgba(113, 171, 230, 0.45); background: rgba(36, 67, 103, 0.36); color: #f4f8ff; } .topbar-dropdown-item.is-active { border-color: rgba(130, 203, 255, 0.84); background: linear-gradient(150deg, rgba(54, 114, 188, 0.7), rgba(29, 69, 114, 0.88)); color: #f4f8ff; } .topbar-dropdown-divider { height: 1px; border: 0; background: rgba(111, 167, 224, 0.32); margin: 4px 2px; } .topbar-dropdown-label { padding: 4px 8px 2px; color: #9db5d3; font-size: 0.78rem; letter-spacing: 0.03em; text-transform: uppercase; } .topbar-item-content { min-width: 0; display: inline-flex; align-items: center; gap: 8px; } .topbar-item-date { color: #8ea8c8; min-width: 2.15rem; text-align: right; font-size: 0.74rem; line-height: 1; } .topbar-item-source { width: 3px; height: 0.98rem; border-radius: 999px; flex: 0 0 3px; } .topbar-item-text { min-width: 0; } .topbar-submenu { display: grid; gap: 4px; margin: 2px 0; } .topbar-submenu--nested { margin-left: 8px; padding-left: 8px; border-left: 1px solid rgba(111, 167, 224, 0.3); } .topbar-submenu-title { padding: 4px 8px; color: #c9dbf1; font-size: 0.84rem; font-weight: 620; } .topbar-submenu-title--interactive { width: 100%; border: 1px solid transparent; border-radius: 8px; background: transparent; color: #c9dbf1; text-align: left; cursor: pointer; } .topbar-submenu-title--interactive:hover { border-color: rgba(113, 171, 230, 0.45); background: rgba(40, 71, 107, 0.42); color: #f4f8ff; } .topbar-submenu-items { display: grid; gap: 2px; } .app-topbar-search { min-width: 0; width: 100%; display: flex; } .app-topbar-search input { width: 100%; border: 1px solid rgba(110, 168, 229, 0.5); border-radius: 11px; background: rgba(4, 11, 21, 0.92); color: #e5f0fd; font-size: 0.95rem; padding: 9px 12px; } .app-topbar-search input::placeholder { color: #9db6d4; } .app-topbar-search input:focus { outline: 1px solid rgba(131, 208, 255, 0.72); border-color: rgba(131, 208, 255, 0.9); } .workspace { min-width: 0; min-height: 0; padding: 12px 14px 14px; display: grid; grid-template-rows: 1fr; gap: 0; position: relative; z-index: 1; } .frame-shell { min-height: 0; border: 1px solid var(--line); border-radius: 16px; overflow: hidden; box-shadow: var(--shadow); background: rgba(0, 0, 0, 0.35); animation: frame-enter 220ms ease; } .frame-shell--full { height: 100%; } .character-shell { padding: 14px; display: grid; min-height: 0; } .wiki-frame { width: 100%; height: 100%; border: 0; display: block; } .status-wrap { width: 100%; height: 100%; display: grid; place-items: center; padding: 24px; } .status-panel { width: min(680px, 100%); border: 1px solid var(--line-strong); border-radius: 12px; padding: 20px; background: linear-gradient(145deg, #18273f 0%, #101726 100%); box-shadow: var(--shadow); } .status-panel h1 { margin: 0 0 8px; font-size: 1.15rem; } .status-panel p { margin: 0; color: var(--text-1); } .setup-wrap { padding: 20px; } .setup-panel { width: min(860px, 100%); display: grid; gap: 12px; } .setup-meta { color: var(--text-2) !important; font-size: 0.85rem; } .setup-error { color: #ff9b9b !important; } .setup-form { margin-top: 4px; display: grid; gap: 12px; } .setup-mode-row { display: flex; gap: 8px; } .setup-mode-btn { border: 1px solid var(--line-strong); border-radius: 9px; background: rgba(10, 16, 28, 0.8); color: var(--text-1); padding: 7px 10px; cursor: pointer; } .setup-mode-btn.is-active { border-color: rgba(120, 205, 255, 0.75); background: linear-gradient(140deg, rgba(63, 132, 207, 0.38), rgba(36, 75, 116, 0.82)); color: var(--text-0); } .setup-field { display: grid; gap: 5px; } .setup-field span { color: var(--text-1); font-size: 0.85rem; } .setup-field input { width: 100%; border: 1px solid var(--line-strong); border-radius: 10px; background: rgba(8, 14, 24, 0.88); color: var(--text-0); padding: 10px 12px; } .setup-zip-row { display: grid; grid-template-columns: 1fr auto; gap: 8px; } .setup-zip-pick { border: 1px solid var(--line-strong); border-radius: 10px; background: rgba(18, 32, 50, 0.94); color: var(--text-1); padding: 10px 12px; cursor: pointer; } .setup-checkbox { display: flex; align-items: center; gap: 8px; color: var(--text-1); } .setup-submit { justify-self: start; border: 1px solid rgba(120, 205, 255, 0.65); border-radius: 10px; background: linear-gradient(140deg, rgba(56, 126, 198, 0.9), rgba(29, 87, 146, 0.95)); color: var(--text-0); font-weight: 600; padding: 10px 14px; cursor: pointer; } .setup-submit:disabled { opacity: 0.7; cursor: default; } .character-modal-backdrop { position: relative; grid-column: 1; grid-row: 1; z-index: 3; min-width: 0; min-height: 0; padding: 14px; display: grid; place-items: stretch; } .character-modal { width: 100%; height: 100%; max-height: 100%; border: 1px solid var(--line-strong); border-radius: 16px; background: linear-gradient(180deg, rgba(14, 22, 35, 0.98), rgba(8, 14, 24, 0.99)); box-shadow: var(--shadow); /* display: grid; */ /* grid-template-rows: auto auto 1fr; */ overflow: scroll; } .character-modal button, .character-modal select, .character-modal input, .character-modal textarea { font: inherit; } .character-modal button { border: 1px solid var(--line-strong); border-radius: 10px; background: rgba(17, 31, 50, 0.95); color: var(--text-1); padding: 8px 12px; cursor: pointer; } .character-modal button:hover { border-color: rgba(120, 205, 255, 0.75); color: var(--text-0); } .character-modal button.is-subtle { background: rgba(10, 17, 28, 0.9); } .character-modal button.is-danger { border-color: rgba(214, 116, 116, 0.7); background: rgba(74, 28, 28, 0.9); color: #ffd1d1; } .character-modal button:disabled { opacity: 0.6; cursor: default; } .character-modal-header { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 14px 16px; border-bottom: 1px solid var(--line); } .character-modal-header h2 { margin: 0; font-size: 1.15rem; } .character-modal-actions { display: flex; flex-wrap: wrap; gap: 8px; } .character-alert { margin: 0; padding: 10px 16px; border-bottom: 1px solid var(--line); font-size: 0.9rem; } .character-alert--info { color: #bfe6ff; background: rgba(30, 65, 98, 0.45); } .character-alert--error { color: #ffd3d3; background: rgba(96, 35, 35, 0.42); } .character-list-wrap, .character-editor-wrap { min-height: 0; overflow: auto; padding: 16px; } .character-list-header { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-bottom: 10px; } .character-list-header h3 { margin: 0; } .character-empty { margin: 0; color: var(--text-2); font-size: 0.92rem; } .character-list { margin: 0; padding: 0; list-style: none; display: grid; gap: 10px; } .character-list-item { border: 1px solid var(--line); border-radius: 12px; padding: 10px 12px; display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; background: rgba(20, 33, 52, 0.5); } .character-list-title { margin: 0; font-size: 1rem; color: var(--text-0); } .character-list-meta, .character-list-time { margin: 4px 0 0; color: var(--text-2); font-size: 0.82rem; } .character-list-actions { display: flex; gap: 8px; flex-shrink: 0; } .character-stepper { margin: 0 0 14px; padding: 0; list-style: none; display: grid; grid-template-columns: repeat(auto-fit, minmax(130px, 1fr)); gap: 8px; } .character-stepper button { width: 100%; text-align: left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .character-stepper button.is-active { border-color: rgba(120, 205, 255, 0.8); background: linear-gradient(140deg, rgba(63, 132, 207, 0.38), rgba(36, 75, 116, 0.82)); color: var(--text-0); } .character-step-content { border: 1px solid var(--line); border-radius: 12px; padding: 14px; background: rgba(13, 22, 34, 0.75); } .entity-layout { display: grid; grid-template-columns: 1.15fr 0.85fr; gap: 12px; } .entity-list-panel { min-width: 0; } .entity-card-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; } .entity-card { width: 100%; border: 1px solid var(--line-strong); border-radius: 11px; background: rgba(10, 18, 31, 0.92); color: var(--text-1); text-align: left; padding: 8px; display: grid; grid-template-columns: 54px 1fr; gap: 8px; align-items: center; } .entity-card.is-selected { border-color: rgba(120, 205, 255, 0.8); background: linear-gradient(140deg, rgba(51, 118, 190, 0.34), rgba(29, 65, 102, 0.9)); color: var(--text-0); } .entity-card-thumb { width: 54px; height: 54px; border-radius: 8px; border: 1px solid var(--line); background: rgba(14, 28, 46, 0.9); display: grid; place-items: center; overflow: hidden; } .entity-card-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; } .entity-card-thumb span { font-weight: 700; color: var(--text-2); } .entity-card-body { display: grid; gap: 2px; } .entity-card-title { color: var(--text-0); font-weight: 650; line-height: 1.2; } .entity-card-meta { color: var(--accent-strong); font-size: 0.74rem; } .entity-card-desc { color: var(--text-2); font-size: 0.74rem; line-height: 1.2; } .entity-pagination { margin-top: 10px; display: flex; align-items: center; justify-content: space-between; gap: 8px; } .entity-pagination span { color: var(--text-2); font-size: 0.8rem; text-align: center; flex: 1; } .entity-detail-panel { min-width: 0; } .entity-detail { border: 1px solid var(--line); border-radius: 11px; background: rgba(10, 18, 29, 0.93); padding: 10px; display: grid; gap: 10px; } .entity-detail h4 { margin: 0; font-size: 1rem; } .entity-detail p { margin: 0; color: var(--text-1); font-size: 0.86rem; line-height: 1.4; } .entity-detail-text { margin: 0; color: var(--text-1); font-size: 0.86rem; line-height: 1.4; } .entity-detail-text a, .entity-feature-text a { color: var(--accent-strong); text-decoration: underline dotted; } .entity-detail-text .help, .entity-feature-text .help { cursor: help; } .entity-detail-text .help--hover, .entity-feature-text .help--hover { cursor: help; } .entity-detail-meta { color: var(--text-2) !important; font-size: 0.78rem !important; } .entity-feature-list { display: grid; gap: 8px; } .entity-feature-card { border: 1px solid var(--line); border-radius: 9px; padding: 8px; background: rgba(17, 30, 47, 0.62); } .entity-feature-card header { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 4px; } .entity-feature-card header span { color: var(--text-2); font-size: 0.74rem; } .entity-feature-card p { margin: 0; color: var(--text-2); font-size: 0.8rem; } .entity-feature-text { margin: 0; color: var(--text-2); font-size: 0.8rem; line-height: 1.4; } .entity-json { border-top: 1px solid var(--line); padding-top: 8px; } .entity-json summary { cursor: pointer; color: var(--accent-strong); font-size: 0.82rem; } .entity-json pre { margin: 8px 0 0; padding: 9px; border-radius: 8px; border: 1px solid var(--line); background: rgba(7, 13, 22, 0.95); color: var(--text-1); font-size: 0.74rem; max-height: 260px; overflow: auto; white-space: pre-wrap; } .character-section h3 { margin: 0 0 12px; font-size: 1rem; } .character-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; } .character-field { display: grid; gap: 4px; margin-bottom: 10px; } .character-field span { color: var(--text-2); font-size: 0.8rem; } .character-field input, .character-field select, .character-field textarea { width: 100%; border: 1px solid var(--line-strong); border-radius: 10px; background: rgba(7, 13, 22, 0.92); color: var(--text-0); padding: 9px 11px; } .character-source-grid, .character-toggle-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; margin-bottom: 10px; } .character-checkbox { display: flex; align-items: center; gap: 8px; color: var(--text-1); font-size: 0.86rem; } .ability-method-row { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 10px; } .ability-method-row button.is-active { border-color: rgba(120, 205, 255, 0.8); background: linear-gradient(140deg, rgba(63, 132, 207, 0.38), rgba(36, 75, 116, 0.82)); color: var(--text-0); } .ability-roll-actions { margin-bottom: 10px; } .ability-pool { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; margin-bottom: 10px; } .ability-pool-chip { border: 1px solid var(--line); border-radius: 8px; padding: 7px 8px; background: rgba(18, 30, 47, 0.62); display: flex; align-items: center; justify-content: space-between; gap: 8px; } .ability-pool-chip strong { color: var(--text-0); } .ability-pool-chip span { color: var(--text-2); font-size: 0.75rem; } .ability-assignment-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; } .ability-assignment-card { border: 1px solid var(--line); border-radius: 10px; padding: 10px; background: rgba(18, 31, 49, 0.62); } .ability-assignment-card h4 { margin: 0 0 8px; font-size: 0.96rem; } .ability-inline-meta { margin: 0; color: var(--text-2); font-size: 0.8rem; } .ability-layout { min-height: 0; display: grid; grid-template-columns: minmax(280px, 0.42fr) minmax(0, 1fr); gap: 12px; align-items: start; } .ability-sidebar { min-height: 0; display: grid; gap: 10px; align-content: start; } .ability-main { min-height: 0; display: grid; gap: 10px; align-content: start; align-self: start; } .ability-panel { border: 1px solid var(--line-strong); border-radius: 11px; background: rgba(12, 20, 32, 0.9); padding: 10px; display: grid; gap: 10px; } .ability-panel h4 { margin: 0; font-size: 1.02rem; color: var(--text-0); } .ability-panel-headline { display: flex; justify-content: space-between; align-items: baseline; gap: 10px; } .ability-panel-meta { color: var(--text-2); font-size: 0.76rem; } .ability-background-summary { color: var(--text-1); font-size: 0.84rem; line-height: 1.45; } .ability-roll-list { display: grid; gap: 6px; } .ability-roll-row { display: grid; grid-template-columns: 1fr auto auto; align-items: center; gap: 8px; } .ability-roll-row span { color: var(--text-1); font-size: 0.85rem; } .ability-roll-row strong { color: var(--text-0); font-size: 0.96rem; min-width: 32px; text-align: right; } .ability-background-selectors { display: grid; gap: 8px; } .ability-score-strip { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; } .ability-score-chip { border: 1px solid var(--line-strong); border-radius: 10px; background: rgba(12, 22, 36, 0.92); padding: 9px 10px; display: flex; align-items: baseline; justify-content: space-between; gap: 10px; } .ability-score-chip strong { font-size: 1.2rem; color: var(--text-0); } .ability-score-chip span { color: var(--text-1); font-size: 0.88rem; } .ability-assignment-grid--ability-step { grid-template-columns: repeat(2, minmax(0, 1fr)); align-items: start; } .ability-assignment-card--detailed { background: rgba(12, 20, 34, 0.85); border-color: var(--line-strong); padding: 10px; gap: 8px; display: grid; } .skill-checkbox-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; margin-bottom: 10px; } .ability-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; } .ability-card { border: 1px solid var(--line); border-radius: 10px; padding: 10px; display: grid; gap: 6px; background: rgba(18, 31, 49, 0.62); } .ability-card-name { font-weight: 700; letter-spacing: 0.05em; } .ability-card input { border: 1px solid var(--line-strong); border-radius: 9px; background: rgba(7, 12, 21, 0.9); color: var(--text-0); padding: 8px 10px; } .ability-card-mod { color: var(--text-2); font-size: 0.8rem; } .currency-grid { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 8px; } .character-summary { border: 1px solid var(--line); border-radius: 10px; background: rgba(18, 31, 49, 0.62); padding: 10px; margin-bottom: 10px; } .character-summary p { margin: 0 0 4px; } .character-finish-actions { display: flex; gap: 8px; } .character-step-footer { display: flex; justify-content: space-between; gap: 10px; margin-top: 10px; } @keyframes frame-enter { from { opacity: 0.5; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } } @media (width <= 1500px) { .shell { grid-template-columns: 1fr; } .app-topbar { grid-template-columns: minmax(0, 1fr) minmax(210px, 0.56fr); grid-template-rows: auto auto; } .app-topbar-brand { grid-column: 1; grid-row: 1; } .app-topbar-search { grid-column: 2; grid-row: 1; } .app-topbar-nav { grid-column: 1 / -1; grid-row: 2; } .entity-layout { grid-template-columns: 1fr; } .entity-card-grid { grid-template-columns: 1fr; } .skill-checkbox-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } .character-source-grid, .character-toggle-grid { grid-template-columns: 1fr; } } @media (width <= 900px) { .app-topbar { grid-template-columns: 1fr; grid-template-rows: auto auto; gap: 8px; padding: 10px; } .app-topbar-brand { display: none; } .app-topbar-nav { grid-column: 1; grid-row: 1; } .app-topbar-search { grid-column: 1; grid-row: 2; } .topbar-menu { width: 100%; } .topbar-menu-toggle { width: 100%; justify-content: space-between; } .topbar-dropdown-menu { position: static; min-width: 0; max-width: 100%; max-height: min(45vh, 420px); margin-top: 6px; } .topbar-dropdown-columns { display: block; } .topbar-dropdown-column { border-right: 0; border-bottom: 1px solid rgba(111, 167, 224, 0.2); } .topbar-dropdown-column:last-child { border-bottom: 0; } .character-modal-backdrop { padding: 12px; } .character-modal { width: 100%; max-height: 100%; } .workspace { padding: 10px; } .character-shell { padding: 10px; } .character-grid, .ability-grid, .ability-pool, .ability-assignment-grid, .currency-grid { grid-template-columns: 1fr; } .skill-checkbox-grid { grid-template-columns: 1fr; } } /* Roll20-inspired character builder shell */ .character-modal.is-editor { border-color: var(--line-strong); background: radial-gradient(1200px 520px at 75% 8%, rgba(36, 93, 168, 0.22), transparent 60%), radial-gradient(900px 560px at 20% 100%, rgba(22, 48, 82, 0.35), transparent 70%), linear-gradient(180deg, rgba(9, 11, 14, 0.98), rgba(6, 8, 11, 0.99)); } .character-modal.is-editor .character-modal-header { display: none; } .character-modal.is-editor .character-alert { border-bottom-color: var(--line); } .character-editor-wrap { display: grid; grid-template-rows: auto 1fr; min-height: 0; overflow: hidden; padding: 12px; gap: 12px; } .character-builder-header { border: 1px solid var(--line-strong); border-radius: 14px; background: rgba(9, 11, 15, 0.86); display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 10px 14px; } .character-builder-step { display: flex; align-items: center; gap: 10px; min-width: 0; } .character-builder-step h3 { margin: 0; font-size: 1.25rem; color: #f3f4f7; letter-spacing: 0.01em; } .character-builder-step-state { display: inline-flex; align-items: center; border-radius: 999px; padding: 4px 10px; font-size: 0.76rem; font-weight: 700; letter-spacing: 0.03em; text-transform: uppercase; } .character-builder-step-state.is-complete { color: #ddf7e8; background: rgba(25, 131, 78, 0.5); border: 1px solid rgba(76, 196, 129, 0.6); } .character-builder-step-state.is-pending { color: #ffe7a8; background: rgba(121, 92, 18, 0.35); border: 1px solid rgba(227, 187, 73, 0.6); } .character-builder-actions { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; justify-content: flex-end; } .character-step-content { min-height: 0; display: grid; grid-template-rows: minmax(0, 1fr) auto; gap: 12px; border: 1px solid var(--line-strong); border-radius: 14px; padding: 12px; background: rgba(7, 9, 12, 0.78); } .character-step-content > .character-section { min-height: 0; overflow: auto; padding-right: 6px; } .character-section { display: grid; gap: 12px; } .character-section h3 { margin: 0 0 8px; color: #f7f7f8; border-bottom: 1px solid var(--line-strong); padding-bottom: 8px; font-size: 1.1rem; } .character-field { margin-bottom: 0; } .character-field span { color: #c1c5cf; font-size: 0.82rem; } .character-field input, .character-field select, .character-field textarea { border-color: var(--line-strong); border-radius: 10px; background: rgba(10, 12, 16, 0.92); color: #ecedf2; } .character-field input:focus, .character-field select:focus, .character-field textarea:focus { outline: 1px solid rgba(120, 205, 255, 0.75); border-color: rgba(120, 205, 255, 0.82); } .character-source-grid, .character-toggle-grid { grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 10px; } .character-checkbox { color: #d5d8de; } .entity-layout { min-height: 0; grid-template-columns: minmax(0, 1fr); gap: 14px; } .entity-list-panel, .entity-detail-panel { min-height: 0; border: 1px solid var(--line-strong); border-radius: 12px; background: rgba(12, 14, 19, 0.84); padding: 10px; } .entity-list-panel { display: flex; flex-direction: column; gap: 10px; } .entity-list-panel--solo { min-height: 0; } .entity-list-actions { display: flex; justify-content: flex-end; gap: 8px; margin-top: 2px; } .entity-card-grid { flex: 1; min-height: 0; max-height: clamp(260px, 44vh, 560px); overflow: auto; padding-right: 4px; gap: 10px; } .entity-card { min-height: 90px; border-radius: 12px; border-color: rgba(68, 97, 140, 0.62); background: rgba(17, 20, 27, 0.94); } .entity-card.is-selected { border-color: rgba(120, 205, 255, 0.95); background: linear-gradient(140deg, rgba(45, 92, 147, 0.72), rgba(18, 28, 43, 0.96)); box-shadow: 0 0 0 1px rgba(120, 205, 255, 0.38); } .entity-card-thumb { width: 58px; height: 58px; border-color: rgba(85, 105, 134, 0.68); } .entity-card-title { font-size: 1.02rem; } .entity-card-meta { color: var(--accent-strong); font-size: 0.76rem; } .entity-card-desc { font-size: 0.78rem; } .entity-pagination { margin-top: 2px; } .entity-detail { min-height: 100%; border-color: var(--line-strong); background: rgba(14, 16, 21, 0.9); } .entity-feature-card { border-color: var(--line); background: rgba(21, 23, 30, 0.86); } .entity-detail-text a, .entity-feature-text a { color: #8ec7ff; } .ability-method-row button.is-active { border-color: rgba(120, 205, 255, 0.8); background: linear-gradient(140deg, rgba(63, 132, 207, 0.38), rgba(36, 75, 116, 0.82)); } .ability-assignment-card { border-color: var(--line-strong); background: rgba(18, 21, 28, 0.84); } .ability-pool-chip { border-color: var(--line-strong); background: rgba(23, 27, 35, 0.86); } .character-summary { border-color: var(--line-strong); background: rgba(16, 19, 26, 0.88); } .character-finish-actions { gap: 10px; } .character-flow-footer { display: grid; grid-template-columns: auto 1fr auto; gap: 10px; align-items: center; border-top: 1px solid var(--line); padding-top: 10px; } .character-flow-nav { min-width: 118px; border-radius: 999px; border-color: var(--line-strong); background: rgba(18, 21, 29, 0.96); } .character-flow-rail { min-width: 0; display: flex; align-items: center; justify-content: center; gap: 8px; overflow-x: auto; padding: 2px 0; } .character-flow-step { border-radius: 999px; min-height: 36px; min-width: 36px; padding: 0 10px; display: inline-flex; align-items: center; gap: 8px; border-color: var(--line-strong); background: rgba(16, 19, 25, 0.96); color: #d3d7df; flex-shrink: 0; } .character-flow-step.is-pending .character-flow-step-index { color: #ffca5e; } .character-flow-step.is-complete { border-color: rgba(44, 168, 102, 0.7); background: rgba(21, 108, 67, 0.74); color: #eff8f2; } .character-flow-step.is-active { border-color: rgba(120, 205, 255, 0.95); background: linear-gradient(140deg, rgba(88, 164, 242, 0.95), rgba(48, 100, 165, 0.95)); color: #f4f9ff; font-weight: 700; } .character-flow-step.is-review { background: rgba(25, 29, 38, 0.95); } .character-flow-step.is-review.is-active { border-color: rgba(111, 181, 255, 0.88); background: linear-gradient(140deg, rgba(68, 129, 196, 0.9), rgba(44, 90, 142, 0.92)); color: #f2f7ff; } .character-flow-step-index { display: inline-flex; align-items: center; justify-content: center; min-width: 16px; font-size: 0.78rem; font-weight: 700; } .character-flow-step-label { font-size: 0.8rem; white-space: nowrap; } .character-section--ability h3 { border-bottom-color: var(--line-strong); } .character-section--ability .ability-method-row button.is-active { border-color: rgba(120, 205, 255, 0.8); background: linear-gradient(140deg, rgba(63, 132, 207, 0.38), rgba(36, 75, 116, 0.82)); color: var(--text-0); } .character-section--ability .character-field input, .character-section--ability .character-field select, .character-section--ability .character-field textarea { border-color: var(--line-strong); background: rgba(7, 13, 22, 0.92); } .character-section--ability .character-field input:focus, .character-section--ability .character-field select:focus, .character-section--ability .character-field textarea:focus { outline: 1px solid rgba(120, 205, 255, 0.7); border-color: rgba(120, 205, 255, 0.86); } .character-section--ability .ability-panel, .character-section--ability .ability-score-chip, .character-section--ability .ability-assignment-card--detailed { border-color: var(--line-strong); } /* Roll20-like option tiles and chooser panels */ .entity-card-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(112px, 1fr)); gap: 8px; align-content: start; } .entity-tile { width: 100%; border: 1px solid rgba(93, 123, 166, 0.7); border-radius: 12px; background: rgba(8, 13, 22, 0.95); color: #edf4ff; overflow: hidden; text-align: left; padding: 0 !important; display: block; min-height: 0; aspect-ratio: 1 / 1; cursor: pointer; transition: border-color 120ms ease, box-shadow 120ms ease, transform 120ms ease; } .entity-tile:hover { border-color: rgba(134, 183, 247, 0.88); box-shadow: 0 0 0 1px rgba(121, 178, 249, 0.28); transform: translateY(-1px); } .entity-tile-media { position: relative; display: block; width: 100%; height: 100%; background: radial-gradient(circle at 72% 0%, rgba(245, 172, 83, 0.3), transparent 45%), radial-gradient(circle at 20% 100%, rgba(56, 132, 220, 0.32), transparent 55%), rgba(12, 20, 34, 0.95); overflow: hidden; } .entity-tile-media img { width: 100%; height: 100%; object-fit: cover; display: block; } .entity-tile-fallback { position: absolute; inset: 0; display: grid; place-items: center; font-size: 2rem; font-weight: 700; color: rgba(229, 235, 247, 0.85); } .entity-tile-media::after { content: ""; position: absolute; inset: auto 0 0 0; height: 58%; background: linear-gradient(to top, rgba(0, 0, 0, 0.92), rgba(0, 0, 0, 0)); } .entity-tile-source { position: absolute; top: 6px; right: 6px; z-index: 2; border-radius: 6px; background: rgba(129, 35, 35, 0.95); color: #fff5f5; font-size: 0.68rem; font-weight: 700; line-height: 1; padding: 4px 6px; } .entity-tile-titlebar { position: absolute; inset: auto 8px 8px 8px; z-index: 2; display: grid; gap: 2px; } .entity-tile-label { display: block; font-size: 0.92rem; font-weight: 700; line-height: 1.15; color: #f2f5ff; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; } .entity-tile-meta { display: block; color: var(--accent-strong); font-size: 0.68rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .entity-tile.is-selected { border-color: rgba(252, 84, 84, 0.8); box-shadow: 0 0 0 1px rgba(252, 84, 84, 0.42); } .entity-tile.is-disabled { opacity: 0.45; filter: grayscale(0.5); cursor: not-allowed; } .character-class-list { border: 1px solid var(--line); border-radius: 12px; background: rgba(9, 14, 24, 0.72); padding: 10px; display: grid; gap: 8px; } .character-class-list h4 { margin: 0; color: #eef4ff; font-size: 0.96rem; } .character-class-list-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 8px; } .character-class-chip { border: 1px solid var(--line); border-radius: 10px; background: rgba(7, 11, 20, 0.84); padding: 8px; display: grid; gap: 8px; } .character-class-chip header { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; } .character-class-chip header strong { color: #eef4ff; } .character-class-chip header span { font-size: 0.76rem; color: var(--text-2); } .character-class-chip-badges { display: inline-flex; align-items: center; gap: 6px; } .character-class-chip-role { border: 1px solid rgba(73, 92, 120, 0.8); border-radius: 999px; padding: 1px 7px; font-size: 0.68rem !important; color: #c5d4ea !important; background: rgba(19, 28, 42, 0.74); } .character-class-chip-role.is-primary { border-color: rgba(51, 158, 102, 0.8); color: #dcfff1 !important; background: rgba(21, 108, 67, 0.64); } .character-class-chip-note { margin: -2px 0 0; font-size: 0.76rem; color: var(--text-2); } .character-class-chip-actions { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; } .character-class-chip-actions span { font-size: 0.86rem; color: var(--text-1); } .entity-popover-backdrop { position: fixed; inset: 0; z-index: 330; display: grid; place-items: center; padding: 18px; background: rgba(2, 6, 12, 0.74); /* backdrop-filter: blur(2px); */ } .entity-popover { width: 70%; max-height: calc(70vh - 36px); overflow: hidden; display: flex; flex-direction: column; border: 1px solid var(--line-strong); border-radius: 14px; background: rgba(8, 12, 20, 0.98); box-shadow: 0 24px 64px rgba(0, 0, 0, 0.45); } .entity-popover-header { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 12px; border-bottom: 1px solid var(--line); } .entity-popover-header h4 { margin: 0; color: #f7fbff; font-size: 1.05rem; } .entity-popover-body { flex: 1 1 auto; min-height: 0; overflow: auto; padding: 12px; } .entity-popover-footer { display: flex; justify-content: flex-end; gap: 10px; padding: 12px; border-top: 1px solid var(--line); background: rgba(5, 9, 16, 0.94); } .entity-detail--popover { min-height: 0; } .chooser-header { display: flex; align-items: center; justify-content: space-between; gap: 8px; } .chooser-header p { margin: 0; color: var(--text-1); font-size: 0.9rem; } .chooser-layout { min-height: 0; max-height: 62vh; display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 12px; } .chooser-panel { min-height: 0; border: 1px solid var(--line-strong); border-radius: 12px; background: rgba(12, 16, 24, 0.86); padding: 10px; } .chooser-panel--scroll { overflow: auto; display: grid; align-content: start; gap: 10px; } .chooser-panel h4 { margin: 0; font-size: 1.05rem; color: #f4f7ff; } .chip-row { display: flex; flex-wrap: wrap; gap: 6px; } .chip { border: 1px solid var(--line-strong); border-radius: 999px; background: rgba(28, 38, 58, 0.82); color: #dce7ff; font-size: 0.75rem; font-weight: 600; padding: 4px 9px; } .chip--locked { border-color: rgba(78, 171, 117, 0.62); background: rgba(29, 92, 63, 0.68); } .chip--removable { cursor: pointer; } .feat-list { display: grid; gap: 8px; } .feat-card { width: 100%; border: 1px solid rgba(95, 126, 173, 0.7); border-radius: 11px; background: rgba(16, 23, 36, 0.9); color: #dbe5f6; text-align: left; padding: 10px; display: grid; gap: 3px; } .feat-card.is-selected { border-color: rgba(111, 203, 255, 0.92); background: linear-gradient(150deg, rgba(46, 94, 150, 0.62), rgba(16, 26, 40, 0.95)); } .feat-card-title { font-size: 0.95rem; font-weight: 700; color: #f4f8ff; } .feat-card-meta { color: var(--accent-strong); font-size: 0.73rem; } .feat-card-summary { color: var(--text-2); font-size: 0.76rem; line-height: 1.35; } .feature-choice-card { border: 1px solid var(--line); border-radius: 11px; background: rgba(20, 27, 40, 0.76); padding: 10px; display: grid; gap: 9px; } .feature-choice-card h4 { margin: 0; display: flex; align-items: baseline; justify-content: space-between; gap: 8px; } .feature-choice-count { color: #ffce66; font-size: 0.78rem; } .feature-choice-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; } .feature-choice-hint { margin: 0; color: var(--text-2); font-size: 0.8rem; line-height: 1.4; } .chip-toggle-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; } .chip-toggle { width: 100%; border-radius: 999px; border: 1px solid rgba(93, 123, 166, 0.7); background: rgba(12, 21, 34, 0.95); color: #dbe7fc; font-size: 0.8rem; padding: 6px 10px; } .chip-toggle.is-active { border-color: rgba(94, 211, 147, 0.8); background: linear-gradient(145deg, rgba(31, 131, 85, 0.86), rgba(22, 87, 60, 0.85)); color: #effff5; } .skill-matrix { overflow: auto; border: 1px solid var(--line); border-radius: 10px; } .skill-matrix table { width: 100%; border-collapse: collapse; min-width: 420px; } .skill-matrix th, .skill-matrix td { border-bottom: 1px solid rgba(93, 118, 155, 0.38); padding: 8px 9px; text-align: left; font-size: 0.82rem; color: #d8e2f2; } .skill-matrix th { background: rgba(20, 29, 44, 0.92); color: #f1f5ff; position: sticky; top: 0; } .spell-cap-row { display: flex; flex-wrap: wrap; gap: 10px; } .spell-cap-row span { border: 1px solid var(--line); border-radius: 999px; background: rgba(24, 33, 48, 0.78); color: #d3dff1; font-size: 0.8rem; padding: 5px 10px; } .spell-card-list { display: grid; gap: 10px; } .spell-level-group { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; } .spell-level-group h5 { grid-column: 1 / -1; margin: 0; color: #f2f5ff; font-size: 0.9rem; } .spell-pick-card { width: 100%; border: 1px solid rgba(95, 126, 173, 0.7); border-radius: 10px; background: rgba(13, 20, 33, 0.92); color: #deebff; text-align: left; padding: 8px 10px; display: grid; gap: 3px; } .spell-pick-card.is-selected { border-color: rgba(248, 94, 94, 0.9); background: linear-gradient(145deg, rgba(121, 39, 39, 0.64), rgba(25, 22, 33, 0.95)); } .spell-pick-card.is-disabled { opacity: 0.7; } .spell-pick-title { font-size: 0.9rem; font-weight: 700; } .spell-pick-meta { color: var(--text-2); font-size: 0.76rem; } .slot-matrix { display: flex; flex-wrap: wrap; gap: 8px; } .slot-chip { min-width: 58px; border: 1px solid var(--line-strong); border-radius: 9px; background: rgba(16, 25, 40, 0.9); color: #e2ecff; font-size: 0.78rem; padding: 6px 8px; display: grid; gap: 1px; justify-items: center; } .slot-chip strong { font-size: 0.9rem; color: #f6fbff; } .slot-detail-list { display: flex; flex-wrap: wrap; gap: 6px; } .slot-detail-list span { border: 1px solid rgba(92, 116, 152, 0.62); border-radius: 999px; background: rgba(17, 24, 37, 0.9); color: var(--text-2); font-size: 0.72rem; padding: 4px 8px; } .spell-selected-list { display: grid; gap: 8px; } .spell-selected-card { border: 1px solid var(--line); border-radius: 9px; background: rgba(17, 24, 36, 0.84); padding: 8px 9px; display: grid; gap: 2px; } .spell-selected-card strong { color: #f4f8ff; font-size: 0.9rem; } .spell-selected-card span { color: var(--text-2); font-size: 0.76rem; } .add-item-row { display: grid; grid-template-columns: 1fr auto; gap: 8px; } .add-item-row input { width: 100%; } .inventory-list { display: grid; gap: 8px; } .inventory-item { border: 1px solid var(--line); border-radius: 9px; background: rgba(15, 24, 39, 0.86); color: #dbe7fb; padding: 8px 10px; display: flex; align-items: center; justify-content: space-between; gap: 8px; } .inventory-item strong { border: 1px solid rgba(105, 129, 166, 0.76); border-radius: 999px; min-width: 28px; text-align: center; font-size: 0.78rem; padding: 2px 7px; } @media (width <= 1450px) { .ability-layout { grid-template-columns: 1fr; } } @media (width <= 1450px) { .entity-layout { grid-template-columns: 1fr; } } @media (width <= 1100px) { .character-builder-header { flex-direction: column; align-items: flex-start; } .character-builder-actions { width: 100%; justify-content: flex-start; } .character-flow-footer { grid-template-columns: 1fr; } .character-flow-nav { width: 100%; } /* .ability-score-strip, .ability-assignment-grid--ability-step { grid-template-columns: 1fr; } */ .chooser-layout { grid-template-columns: 1fr; } .feature-choice-grid { grid-template-columns: 1fr; } .chip-toggle-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } .entity-card-grid { grid-template-columns: repeat(auto-fill, minmax(104px, 1fr)); } } @media (width <= 900px) { .spell-level-group { grid-template-columns: 1fr; } } @media (width <= 900px) { .entity-list-actions { justify-content: stretch; } .entity-list-actions button { width: 100%; } .entity-card-grid { grid-template-columns: repeat(auto-fill, minmax(96px, 1fr)); gap: 7px; } .entity-tile-titlebar { inset: auto 7px 7px 7px; } .entity-tile-label { font-size: 0.84rem; } .entity-tile-meta { font-size: 0.62rem; } .entity-popover-backdrop { padding: 10px; } .entity-popover { width: calc(100vw - 20px); max-height: calc(100vh - 20px); border-radius: 12px; } .entity-popover-header { align-items: flex-start; } } @media (width <= 620px) { .entity-pagination { flex-direction: column; align-items: stretch; } .entity-pagination span { order: -1; } .entity-card-grid { grid-template-columns: repeat(auto-fill, minmax(86px, 1fr)); } }