.roll-prompt__actions .roll-prompt__roll{min-height:3rem;padding:.85rem 1.75rem;font-size:1.05rem;border-radius:10px}.roll-prompt__actions .roll-prompt__submit{min-height:2.75rem;padding:.7rem 1.5rem}.roll-prompt__actions .roll-prompt__link{min-height:2.75rem;padding:.6rem .75rem}.roll-prompt__actions--manual .roll-prompt__input{min-height:2.75rem;width:5rem;font-size:1.2rem}.roll-die--used{border-color:var(--c-gold);box-shadow:0 0 0 2px var(--c-gold-glow)}.roll-die--unused{opacity:.55;filter:grayscale(.3)}@media (prefers-reduced-motion: no-preference){.roll-die--settled{animation:roll-die-pop .22s ease-out}}@keyframes roll-die-pop{0%{transform:scale(.85)}55%{transform:scale(1.12)}to{transform:scale(1)}}.roll-outcome.roll-outcome--fumble{border-color:var(--c-danger);background:var(--c-danger-soft);box-shadow:0 0 0 1px var(--c-danger)}.roll-outcome--fumble .roll-outcome__verdict{color:var(--c-danger)}.roll-outcome__die--used{color:var(--c-text);font-weight:700}.roll-outcome__die--unused{color:var(--c-text-faint);text-decoration:line-through;text-decoration-color:var(--c-text-faint)}.die{--die-body: var(--c-gold);--die-edge: var(--c-gold-deep, #9a7b1f);--die-ink: #241a06;position:relative;display:inline-flex;align-items:center;justify-content:center;width:2.9rem;height:2.9rem;flex:none;transform-origin:50% 55%;will-change:transform}.die__svg{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;overflow:visible;filter:drop-shadow(0 2px 3px rgba(0,0,0,.4))}.die__body{fill:var(--die-body);stroke:var(--die-edge);stroke-width:4;stroke-linejoin:round}.die__facet{fill:none;stroke:#00000029;stroke-width:2;stroke-linejoin:round}.die__num{position:relative;z-index:1;font-family:var(--font-display, serif);font-weight:800;font-size:1.15rem;line-height:1;color:var(--die-ink);text-shadow:0 1px 0 rgba(255,255,255,.25)}.die__num--snug{font-size:1rem}.die__num--tight{font-size:.95rem;transform:translateY(.35rem)}.die--crit{--die-edge: var(--c-gold)}.die--crit .die__svg{filter:drop-shadow(0 0 6px var(--c-gold)) drop-shadow(0 2px 3px rgba(0,0,0,.4))}.die--fumble{--die-body: var(--c-danger);--die-edge: var(--c-danger);--die-ink: #fff}.die--fumble .die__num{text-shadow:none}.die--dim{opacity:.5;filter:grayscale(.4)}@media (prefers-reduced-motion: no-preference){.die--rolling{animation:die-tumble .52s linear infinite}.die--settled{animation:die-land .34s cubic-bezier(.2,1.4,.4,1)}}@keyframes die-tumble{0%{transform:rotate(-14deg) translateY(0)}25%{transform:rotate(10deg) translateY(-5px)}50%{transform:rotate(-8deg) translateY(0)}75%{transform:rotate(13deg) translateY(-4px)}to{transform:rotate(-14deg) translateY(0)}}@keyframes die-land{0%{transform:scale(.78) rotate(-10deg)}55%{transform:scale(1.14) rotate(2deg)}to{transform:scale(1) rotate(0)}}.dice-tray{position:fixed;right:var(--sp-3);bottom:var(--sp-3);z-index:40;display:flex;flex-direction:column;gap:var(--sp-2);max-width:min(20rem,calc(100vw - 2 * var(--sp-3)));padding:var(--sp-3);border:1px solid var(--c-gold);border-radius:10px;background:radial-gradient(120% 140% at 50% 0%,var(--c-gold-glow),transparent 65%),var(--c-surface-2);box-shadow:0 0 0 1px var(--c-gold-glow),0 6px 24px #00000040;pointer-events:none}.dice-tray__roll{display:flex;flex-direction:column;gap:var(--sp-2);align-items:center;text-align:center}.dice-tray__label{font-family:var(--font-display);font-weight:600;font-size:.95rem;color:var(--c-text)}.dice-tray__dice{display:flex;flex-wrap:wrap;gap:var(--sp-2);justify-content:center}.dice-tray__die{width:2.6rem;height:2.6rem;font-size:1.1rem}.dice-tray__dice--many .die{width:2.2rem;height:2.2rem}.dice-tray__dice--many .die__num{font-size:.9rem}.dice-tray__dice--lots .die{width:1.55rem;height:1.55rem}.dice-tray__dice--lots .die__num{font-size:.72rem}.dice-tray__result{display:flex;flex-wrap:wrap;gap:var(--sp-2);align-items:baseline;justify-content:center;font-family:var(--font-mono);font-size:.85rem;color:var(--c-text-dim)}.dice-tray__vs{color:var(--c-text-faint)}.dice-tray__verdict{font-family:var(--font-mono);font-size:.72rem;letter-spacing:.1em;text-transform:uppercase;color:var(--c-gold)}.dice-tray__verdict--fail,.dice-tray__verdict--fumble{color:var(--c-danger)}.dice-tray__verdict--success{color:var(--c-teal)}.dice-tray__queued{align-self:flex-end;font-family:var(--font-mono);font-size:.7rem;color:var(--c-text-faint)}@media (max-width: 640px){.dice-tray{left:var(--sp-3);right:var(--sp-3);max-width:none}.dice-tray__die{width:2.2rem;height:2.2rem;font-size:1rem}}.combat-tracker{background:var(--c-surface);border:1px solid var(--c-hairline);border-radius:var(--radius-lg);box-shadow:var(--shadow-card);padding:var(--sp-3) var(--sp-4);display:flex;flex-direction:column;gap:var(--sp-2)}.combat-tracker__header{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2);flex-wrap:wrap}.combat-tracker__heading{display:flex;align-items:baseline;gap:var(--sp-2);margin:0;font-size:1rem}.combat-tracker__round{font-family:var(--font-mono);font-size:.6875rem;letter-spacing:.08em;text-transform:uppercase;color:var(--c-text-faint)}.combat-tracker__hide-toggle{font-family:var(--font-mono);font-size:.6875rem;letter-spacing:.04em;color:var(--c-text-dim);background:transparent;border:1px solid var(--c-border);border-radius:999px;padding:.2rem .6rem;cursor:pointer;min-height:1.75rem}.combat-tracker__hide-toggle:hover{border-color:var(--c-gold);color:var(--c-text)}.combat-tracker__hide-toggle--on{background:var(--c-gold-glow);border-color:var(--c-gold);color:var(--c-text)}.combat-tracker__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--sp-2)}.combat-tracker__row{display:flex;flex-direction:column;gap:.3rem;padding:.4rem .55rem;border-radius:var(--radius-sm);border-left:3px solid transparent;background:transparent;transition:background-color .12s ease,border-color .12s ease}.combat-tracker__row--current{background:var(--c-gold-glow);border-left-color:var(--c-gold)}.combat-tracker__row--down{opacity:.55}.combat-tracker__row-top{display:flex;align-items:center;gap:var(--sp-2);min-height:1.6rem}.combat-tracker__init{font-family:var(--font-mono);font-size:.75rem;color:var(--c-text-faint);min-width:1.7rem;text-align:right;flex:none}.combat-tracker__name{font-size:.85rem;color:var(--c-text-dim);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.combat-tracker__row--current .combat-tracker__name{color:var(--c-text);font-weight:700}.combat-tracker__row--down .combat-tracker__name{text-decoration:line-through}.combat-tracker__hp{margin-left:auto;font-family:var(--font-mono);font-size:.75rem;color:var(--c-text-faint);flex:none;white-space:nowrap}.combat-tracker__badges{display:flex;flex-wrap:wrap;align-items:center;gap:.3rem}.combat-tracker__badge{display:inline-flex;align-items:center;gap:.25rem;font-family:var(--font-mono);font-size:.625rem;letter-spacing:.05em;text-transform:uppercase;border-radius:999px;padding:.05rem .45rem;line-height:1.5;cursor:default}.combat-tracker__badge--status{background:var(--c-teal-glow);color:var(--c-teal)}.combat-tracker__badge--danger{background:var(--c-danger-soft);color:var(--c-danger)}.combat-tracker__badge--tag{background:var(--c-gold-glow);color:var(--c-gold-bright)}.combat-tracker__badge-remove{border:none;background:transparent;color:inherit;cursor:pointer;font-size:.7rem;line-height:1;padding:0;min-width:.9rem}.combat-tracker__badge-remove:hover{color:var(--c-danger)}.combat-tracker__add-tag{font-family:var(--font-mono);font-size:.625rem;letter-spacing:.04em;color:var(--c-text-faint);background:transparent;border:1px dashed var(--c-border);border-radius:999px;padding:.05rem .4rem;min-height:1.3rem}.combat-tracker__add-tag:hover,.combat-tracker__add-tag:focus-visible{border-color:var(--c-gold);color:var(--c-text)}.combat-tracker__temp{display:inline-flex;align-items:center;gap:.15rem;font-family:var(--font-mono);font-size:.6875rem;color:var(--c-text-faint)}.combat-tracker__temp-value{min-width:1.1rem;text-align:center;color:var(--c-teal)}.combat-tracker__temp-btn{border:1px solid var(--c-border);background:transparent;color:var(--c-text-dim);border-radius:var(--radius-sm);width:1.1rem;height:1.1rem;line-height:1;padding:0;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;font-size:.7rem}.combat-tracker__temp-btn:hover{border-color:var(--c-gold);color:var(--c-text)}.combat-tracker__note{font-size:.68rem;color:var(--c-text-faint);margin:0}.combat-tracker__hide-toggle,.combat-tracker__badge-remove,.combat-tracker__temp-btn,.combat-tracker__add-tag{touch-action:manipulation}@media (prefers-reduced-motion: reduce){.combat-tracker__row{transition:none}}.logo,.logo-full{--logo-strong: var(--c-text);--logo-soft: var(--c-teal);--logo-hi: var(--c-surface)}.logo{display:inline-flex;align-items:center;gap:.5rem;min-width:0}.logo__mark{display:inline-flex;flex:none;line-height:0}.logo-full{display:inline-block;line-height:0}.logo__mark svg,.logo-full svg{display:block;width:100%;height:100%}.logo__wordmark{font-family:var(--font-display);font-size:1.15rem;font-weight:600;letter-spacing:.03em;color:var(--c-text);white-space:nowrap;line-height:1}.launcher__hero h1.launcher__brand{display:inline-flex;font-size:1rem;line-height:1}.theme-gallery{position:relative;display:inline-flex}.theme-gallery__trigger{width:2.1rem;height:2.1rem;padding:0;display:inline-flex;align-items:center;justify-content:center;border-radius:999px;border:1px solid transparent;background:none;cursor:pointer}.theme-gallery__trigger:hover{background:var(--c-surface-2)}.theme-gallery__trigger:focus-visible{outline:var(--focus-ring);outline-offset:var(--focus-offset)}.theme-gallery__chip{width:1.15rem;height:1.15rem;border-radius:999px;background:linear-gradient(135deg,var(--c-gold) 0 50%,var(--c-teal) 50% 100%);border:1px solid var(--c-hairline)}.theme-gallery__panel{position:absolute;top:calc(100% + 8px);right:0;z-index:60;width:min(17.5rem,calc(100vw - 2rem));max-height:min(75vh,30rem);overflow-y:auto;padding:var(--sp-2);background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-pop)}@media (prefers-reduced-motion: no-preference){.theme-gallery__panel{animation:theme-gallery-pop .13s ease-out}}@keyframes theme-gallery-pop{0%{opacity:0;transform:translateY(-4px) scale(.97)}to{opacity:1;transform:none}}.theme-gallery__group+.theme-gallery__group{margin-top:var(--sp-2);padding-top:var(--sp-2);border-top:1px solid var(--c-hairline)}.theme-gallery__group-title{padding:.2rem .3rem .4rem;font-family:var(--font-mono);font-size:.625rem;letter-spacing:.12em;text-transform:uppercase;color:var(--c-text-faint)}.theme-gallery__grid{display:grid;grid-template-columns:repeat(2,1fr);gap:.35rem}.theme-gallery__tile{position:relative;display:flex;flex-direction:column;gap:.4rem;width:100%;padding:.4rem;background:none;border:1px solid transparent;border-radius:var(--radius-md);color:inherit;text-align:left;cursor:pointer}.theme-gallery__tile:hover{background:var(--c-surface-2)}@media (prefers-reduced-motion: no-preference){.theme-gallery__tile{transition:transform .11s ease,background-color .11s ease,border-color .11s ease}.theme-gallery__tile:hover{transform:translateY(-1px)}}.theme-gallery__tile:focus-visible{outline:var(--focus-ring);outline-offset:var(--focus-offset)}.theme-gallery__tile--active{border-color:var(--c-gold-deep);background:var(--c-gold-glow)}.theme-gallery__preview{display:flex;height:2.4rem;border-radius:var(--radius-sm);overflow:hidden;border:1px solid var(--c-hairline)}.theme-gallery__preview>span{flex:1}.theme-gallery__preview>span:first-child{flex:1.7}.theme-gallery__tile--active .theme-gallery__preview{box-shadow:0 0 0 2px var(--c-gold-deep)}.theme-gallery__name{font-size:.78rem;line-height:1.2;color:var(--c-text)}.theme-gallery__check{position:absolute;top:.3rem;right:.3rem;width:1.05rem;height:1.05rem;display:inline-flex;align-items:center;justify-content:center;border-radius:999px;background:var(--c-gold-deep);color:#fff;font-size:.62rem;font-weight:700;border:1px solid var(--c-surface)}.play-header{position:sticky;top:0;z-index:40;flex:none;display:flex;align-items:center;gap:var(--sp-3);padding:.35rem var(--sp-4);min-height:2.25rem;background:var(--c-surface);border-bottom:1px solid var(--c-border)}.play-header__brand{flex:none;display:inline-flex;align-items:center;padding:.2rem;margin-left:-.2rem;background:none;border:1px solid transparent;border-radius:var(--radius-md);cursor:pointer}.play-header__brand:hover{background:var(--c-surface-2)}.play-header__brand:focus-visible{outline:var(--focus-ring);outline-offset:var(--focus-offset)}.play-header__title{font-size:.85rem;color:var(--c-text-dim);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.play-header__actions{display:flex;align-items:center;gap:var(--sp-3);margin-left:auto;flex:none}.play-header__exit{display:inline-flex;align-items:center;gap:.3rem;height:2rem;padding:0 .7rem;background:none;border:1px solid var(--c-border);border-radius:var(--radius-sm);font-family:var(--font-body);font-size:.85rem;font-weight:600;color:var(--c-text-dim);cursor:pointer;white-space:nowrap}.play-header__exit:hover{color:var(--c-text);background:var(--c-surface-2)}.play-header__exit:focus-visible{outline:var(--focus-ring);outline-offset:var(--focus-offset)}@media (prefers-reduced-motion: no-preference){.play-header__brand,.play-header__exit{transition:background-color .11s ease,color .11s ease}}.toast-viewport{position:fixed;top:var(--sp-5);right:var(--sp-5);z-index:1000;display:flex;flex-direction:column;gap:var(--sp-2);pointer-events:none;max-width:min(360px,calc(100vw - var(--sp-6)))}.toast-viewport__region{display:flex;flex-direction:column;gap:var(--sp-2)}.toast{display:flex;align-items:flex-start;gap:var(--sp-2);padding:var(--sp-3) var(--sp-3);border-radius:var(--radius-md);border:1px solid var(--c-border);background:var(--c-surface-2);color:var(--c-text);box-shadow:var(--shadow-pop);pointer-events:auto;font-family:var(--font-body);font-size:.9rem;line-height:1.35}.toast--success{border-color:var(--c-hp-ok);background:color-mix(in srgb,var(--c-hp-ok) 14%,var(--c-surface-2))}.toast--success .toast__icon{color:var(--c-hp-ok)}.toast--error{border-color:var(--c-danger);background:var(--c-danger-soft)}.toast--error .toast__icon{color:var(--c-danger)}.toast--info{border-color:var(--c-teal);background:var(--c-teal-glow)}.toast--info .toast__icon{color:var(--c-teal)}.toast__icon{flex:0 0 auto;font-weight:700;line-height:1.35}.toast__message{flex:1 1 auto;word-break:break-word}.toast__sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.toast__dismiss{flex:0 0 auto;background:transparent;border:none;color:var(--c-text-dim);font-size:1.1rem;line-height:1;cursor:pointer;padding:0 var(--sp-1);border-radius:var(--radius-sm)}.toast__dismiss:hover,.toast__dismiss:focus-visible{color:var(--c-text);background:var(--c-surface-3)}.toast__dismiss:focus-visible{outline:var(--focus-ring);outline-offset:var(--focus-offset)}@media (prefers-reduced-motion: no-preference){.toast{animation:toast-in .18s ease-out}.toast--leaving{animation:toast-out .16s ease-in forwards}@keyframes toast-in{0%{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:translateY(0)}}@keyframes toast-out{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-6px)}}}@media (max-width: 520px){.toast-viewport{left:var(--sp-4);right:var(--sp-4);top:var(--sp-4);max-width:none}}.custom-sheet-editor{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;display:flex;align-items:center;justify-content:center;padding:1.5rem;background:radial-gradient(120% 120% at 50% 0%,#000000b8,#000000e6);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);overflow-y:auto}.custom-sheet-editor__card{width:100%;max-width:620px;max-height:calc(100vh - 3rem);overflow-y:auto}.custom-sheet-editor__system{color:var(--c-text-dim);font-size:.85rem}.custom-sheet-editor__body{padding:0 var(--sp-4) var(--sp-4);display:flex;flex-direction:column;gap:var(--sp-3)}.custom-sheet-editor__row{display:flex;flex-wrap:wrap;gap:var(--sp-3)}.custom-sheet-editor__row .campaign-detail__field{flex:1 1 8rem}.custom-sheet-editor__stats{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--sp-1)}.custom-sheet-editor__stat-row{display:flex;align-items:center;gap:var(--sp-2)}.custom-sheet-editor__stat-row input{flex:1 1 auto;padding:.45rem .6rem;font:inherit;color:var(--c-text);background:var(--c-bg);border:1px solid var(--c-hairline);border-radius:var(--radius-md)}.print-sheet-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;background:var(--c-bg-deep, #10141a);color:var(--c-text, #e6ebf0);overflow-y:auto;display:flex;flex-direction:column}.print-sheet-toolbar{position:sticky;top:0;z-index:1;display:flex;align-items:center;gap:.75rem;padding:.75rem 1.25rem;background:var(--c-surface, #1e242c);border-bottom:1px solid var(--c-border, #3b4654);box-shadow:var(--shadow-card, 0 1px 2px rgba(0, 0, 0, .4))}.print-sheet-toolbar__title{font-family:var(--font-display, serif);font-size:1.1rem;font-weight:600;margin-right:auto}.print-sheet-toolbar__status{font-size:.85rem;color:var(--c-text-dim, #a9b4c0)}.print-sheet-wrap{display:flex;justify-content:center;padding:1.5rem}.print-sheet-page{width:8.5in;max-width:100%;min-height:11in;background:#fff;color:#111;box-shadow:var(--shadow-pop, 0 10px 28px rgba(0, 0, 0, .35));padding:.55in .6in;box-sizing:border-box;font-family:var(--font-body, "Segoe UI", sans-serif)}.print-sheet-page h1{font-family:var(--font-display, serif);font-size:26pt;margin:0 0 2pt;color:#111}.print-sheet-page .print-sheet__subhead{font-size:12pt;margin:0 0 10pt;color:#333}.print-sheet-page h2{font-family:var(--font-display, serif);font-size:14pt;margin:12pt 0 4pt;padding-bottom:2pt;border-bottom:1.5pt solid #111111;color:#111}.print-sheet-page h3{font-size:11.5pt;margin:6pt 0 2pt;color:#111}.print-sheet-page p,.print-sheet-page li,.print-sheet-page td,.print-sheet-page th{font-size:11pt;line-height:1.35;color:#111}.print-sheet-page ul{margin:0 0 4pt;padding-left:16pt}.print-sheet__vitals{display:flex;flex-wrap:wrap;gap:4pt 16pt;margin:6pt 0 10pt;padding:6pt 10pt;border:1pt solid #111111;border-radius:4pt}.print-sheet__vitals div{font-size:10.5pt}.print-sheet__vitals strong{display:block;font-size:13pt}.print-sheet__abilities{display:grid;grid-template-columns:repeat(6,1fr);gap:6pt;margin:4pt 0 10pt}.print-sheet__ability{border:1pt solid #111111;border-radius:4pt;text-align:center;padding:4pt 2pt}.print-sheet__ability-label{font-size:9pt;font-weight:700;letter-spacing:.05em}.print-sheet__ability-mod{font-size:15pt;font-weight:700;display:block}.print-sheet__ability-score{font-size:9pt;color:#333}.print-sheet__two-col{display:grid;grid-template-columns:1fr 1fr;gap:0 16pt}.print-sheet__skills{columns:2;column-gap:16pt;list-style:none;padding-left:0;margin:0}.print-sheet__skills li{display:flex;justify-content:space-between;gap:6pt;break-inside:avoid;padding:1pt 0;border-bottom:.5pt dotted #aaaaaa}.print-sheet__skills li[data-proficient=true]{font-weight:600}.print-sheet__tag{font-size:8.5pt;color:#333;font-weight:400}.print-sheet__block{break-inside:avoid;page-break-inside:avoid}.print-sheet__feature{break-inside:avoid;margin-bottom:5pt}.print-sheet__feature-source{font-size:9pt;color:#333;font-style:italic}.print-sheet__footer{margin-top:14pt;font-size:8.5pt;color:#555;text-align:center}.print-sheet-toolbar button{font-family:var(--font-body, sans-serif);font-size:.9rem;padding:.45rem .9rem;border-radius:var(--radius-sm, 4px);border:1px solid var(--c-border, #3b4654);background:var(--c-surface, #1e242c);color:var(--c-text, #e6ebf0);cursor:pointer}.print-sheet-toolbar button:hover{border-color:var(--c-gold, #6f9cc6)}.print-sheet-toolbar button.print-sheet-toolbar__primary{background:var(--c-gold, #6f9cc6);color:var(--c-on-gold, #0e1a26);border-color:var(--c-gold, #6f9cc6);font-weight:600}@media print{@page{size:letter;margin:.45in}body *{visibility:hidden}.print-sheet-overlay,.print-sheet-overlay *{visibility:visible}.no-print{display:none!important}html,body{background:#fff!important}.print-sheet-overlay{position:absolute;top:0;right:0;bottom:0;left:0;background:#fff!important;color:#111!important;overflow:visible;display:block}.print-sheet-wrap{padding:0;display:block}.print-sheet-page{width:auto;min-height:0;max-width:none;box-shadow:none;padding:0;margin:0}.print-sheet-page h2{break-after:avoid}.print-sheet__block,.print-sheet__vitals,.print-sheet__abilities{break-inside:avoid;page-break-inside:avoid}}.roster-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:var(--sp-3);margin:0 0 var(--sp-3)}.roster-toolbar__search{flex:1 1 16rem;min-width:12rem;max-width:28rem}.roster-toolbar__sort{display:flex;align-items:center;gap:var(--sp-2);white-space:nowrap}.roster-toolbar__types{margin:0 0 var(--sp-4)}roster-page/card/ btn-primary vocabulary (see index.css's "Map Builder" section) so the
reworked panel still reads as the same app. */ .asset-sidebar {display: flex; flex-direction: column; gap: 0; align-self: start; min-width: 0; overflow: hidden;} .asset-sidebar__tabs {display: flex; border-bottom: 1px solid var(--c-hairline);} .asset-sidebar__tabs button {flex: 1; border: none; background: transparent; color: var(--c-text-dim); padding: var(--sp-2) var(--sp-2); font-size: .85rem; border-bottom: 2px solid transparent; border-radius: 0;} .asset-sidebar__tabs button.active {color: var(--c-gold-bright); border-bottom-color: var(--c-gold);} .asset-sidebar__panel {padding: var(--sp-4); display: flex; flex-direction: column; gap: var(--sp-3); overflow-y: auto; max-height: calc(100vh - 260px) ;} .sidebar-search {font-family: var(--font-mono); width: 100%;} .sidebar-category {border-top: 1px solid var(--c-hairline); padding-top: var(--sp-2);} .sidebar-category__header {display: flex; align-items: center; gap: var(--sp-1); width: 100%; background: transparent; border: none; color: var(--c-text); font-size: .85rem; font-weight: 600; padding: var(--sp-1) 0; text-align: left;} .sidebar-category__chevron {display: inline-block; font-size: .7rem; color: var(--c-text-faint); transition: transform .15s ease;} .sidebar-category__chevron.open {transform: rotate(90deg);} .sidebar-swatch-grid {display: grid; grid-template-columns: repeat(auto-fill,minmax(64px,1fr)); gap: var(--sp-2); padding-top: var(--sp-2);} .sidebar-swatch-grid--items {grid-template-columns: repeat(auto-fill,minmax(56px,1fr));} .sidebar-clear-all {align-self: flex-start;} .material-swatch {display: flex; flex-direction: column; align-items: center; gap: .3em; padding: .25rem; border-radius: var(--radius-sm); border: 1px solid var(--c-border); background: var(--c-surface-2); color: var(--c-text-dim); font-size: .7rem; text-align: center;} .material-swatch--active {border-color: var(--c-gold); box-shadow: 0 0 0 2px var(--c-gold-glow); color: var(--c-gold-bright);} .material-swatch__art {position: relative; width: 56px; height: 56px; border-radius: calc(var(--radius-sm) - 2px); overflow: hidden; border: 1px solid var(--c-border);} .material-swatch__art canvas {display: block; width: 100%; height: 100%; image-rendering: auto;} .material-swatch__key {position: absolute; top: 2px; left: 2px;} .material-swatch__label {line-height: 1.1; word-break: break-word;} .edge-swatch {display: flex; flex-direction: column; align-items: center; gap: .3em; padding: .25rem; border-radius: var(--radius-sm); border: 1px solid var(--c-border); background: var(--c-surface-2); color: var(--c-text-dim); font-size: .7rem; text-align: center;} .edge-swatch.active {border-color: var(--c-gold); box-shadow: 0 0 0 2px var(--c-gold-glow); color: var(--c-gold-bright);} .edge-swatch__icon {width: 56px; height: 56px; border-radius: calc(var(--radius-sm) - 2px); border: 1px solid var(--c-border);} .edge-swatch__icon--dropoff {background: repeating-linear-gradient(135deg,#3d1c16,#3d1c16 2px,var(--c-bg-deep) 2px,var(--c-bg-deep) 4px);} .edge-swatch__icon--cliff {background: repeating-linear-gradient(90deg,#6b6560,#6b6560 3px,#3a3f4a 3px,#3a3f4a 6px);} .item-swatch {display: flex; flex-direction: column; align-items: center; gap: .3em; padding: .4rem .2rem; border-radius: var(--radius-sm); border: 1px solid var(--c-border); background: var(--c-surface-2); color: var(--c-text-dim); font-size: .68rem; text-align: center;} .item-swatch.active {border-color: var(--c-gold); box-shadow: 0 0 0 2px var(--c-gold-glow); color: var(--c-gold-bright);} .item-swatch__label {line-height: 1.1; word-break: break-word;} .toolstrip {display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-2); padding: var(--sp-2) var(--sp-3); background: var(--c-surface-1, var(--c-surface-2)); border: 1px solid var(--c-border); border-radius: var(--radius-md); margin-bottom: var(--sp-2);} .toolstrip__group {display: flex; align-items: center; gap: var(--sp-1);} .toolstrip__btn {display: inline-flex; align-items: center; gap: .35em; font-size: .78rem; padding: .35rem .6rem; border-radius: var(--radius-sm); border: 1px solid var(--c-border); background: var(--c-surface-2); color: var(--c-text-dim);} .toolstrip__btn--size {padding: .35rem .55rem; font-family: var(--font-mono);} .toolstrip__btn.active,.toolstrip button.active {background: var(--c-gold-glow); border-color: var(--c-gold); color: var(--c-gold-bright);} .toolstrip__divider {width: 1px; height: 1.4em; background: var(--c-hairline); flex-shrink: 0;} .toolstrip__zoom {font-size: .78rem; font-family: var(--font-mono); color: var(--c-text-dim); min-width: 3em; text-align: center;} @media (max-width: 899.98px) {.asset-sidebar__panel {max-height: none;}} .region-inspector .mapbuilder-actions {flex-wrap: wrap;} .region-list {display: flex; flex-direction: column; gap: .35em; margin: .5em 0;} .region-list__item {display: flex; flex-direction: column; align-items: flex-start; gap: .15em; padding: .5em .7em; border: 1px solid var(--c-hairline); border-radius: 6px; background: transparent; cursor: pointer; text-align: left;} .region-list__item.active {border-color: var(--c-gold); background: var(--c-gold-glow);} .region-list__name {font-weight: 600;} .region-editor {display: flex; flex-direction: column; gap: .5em;} .region-state {border: 1px solid var(--c-hairline); border-radius: 6px; padding: .6em .7em; display: flex; flex-direction: column; gap: .4em; margin-bottom: .5em;} .region-state__header {display: flex; align-items: center; gap: .5em;} .region-state__label {flex: 1; min-width: 0; font-weight: 600;} .region-cell-table {display: flex; flex-direction: column; gap: .25em; max-height: 220px; overflow-y: auto; padding: .35em; border: 1px solid var(--c-hairline); border-radius: 4px;} .region-cell-row {display: flex; align-items: center; justify-content: space-between; gap: .5em; font-size: .82rem;} .region-cell-row__key {font-family: var(--font-mono); color: var(--c-text-dim);} .region-trigger {border: 1px solid var(--c-hairline); border-radius: 6px; padding: .5em .7em; display: flex; flex-direction: column; gap: .35em; margin-bottom: .5em;} .region-trigger__row {display: flex; align-items: center; gap: .4em; flex-wrap: wrap;} .region-trigger__kind {font-weight: 600; font-size: .82rem; color: var(--c-gold-bright); min-width: 6.5em;} .region-trigger__desc {width: 100%;} .region-trigger__on {display: flex; flex-direction: column; gap: .3em; padding: .4em .5em; margin-top: .2em; border: 1px dashed var(--c-hairline); border-radius: 4px;} .region-danger {color: var(--c-danger, #c0392b); border-color: var(--c-danger, #c0392b); margin-left: auto;} .region-errors {color: var(--c-danger, #c0392b); font-size: .82rem; margin: .3em 0; padding-left: 1.2em;} .studio {display: flex; flex-direction: column; height: 100vh; background: var(--c-bg-deep, #14181f); color: var(--c-text, #e7e9ee);} .studio__topbar {display: flex; align-items: center; gap: 12px; padding: 8px 12px; border-bottom: 1px solid var(--c-border, #2a3140); background: var(--c-surface-1, #1b2029); flex-shrink: 0;} .studio__name {background: transparent; border: 1px solid transparent; color: inherit; font-size: 1rem; padding: 4px 6px; border-radius: 6px; min-width: 180px;} .studio__name:hover,.studio__name:focus {border-color: var(--c-border, #2a3140); outline: none;} .studio__tools {display: flex; align-items: center; gap: 6px; margin-left: auto;} .studio__tools button {background: var(--c-surface-2, #232a35); border: 1px solid var(--c-border, #2a3140); color: var(--c-text-dim, #aab3c0); padding: 5px 10px; border-radius: 6px; cursor: pointer; font-size: .85rem;} .studio__tools button:hover {color: var(--c-text, #e7e9ee);} .studio__tools button.on {background: var(--c-gold-glow, #3a2f12); border-color: var(--c-gold, #c9a227); color: var(--c-gold-bright, #ffd766);} .studio__open {background: var(--c-surface-2, #232a35); border: 1px solid var(--c-border, #2a3140); color: var(--c-text-dim, #aab3c0); padding: 5px 8px; border-radius: 6px; font-size: .82rem; cursor: pointer;} .studio__sep {width: 1px; height: 20px; background: var(--c-border, #2a3140); margin: 0 4px;} .studio__zoom {font-size: .8rem; color: var(--c-text-dim, #aab3c0); min-width: 42px; text-align: center;} .studio__aibar {display: flex; align-items: center; gap: 10px; padding: 7px 12px; border-bottom: 1px solid var(--c-border, #2a3140); background: linear-gradient(90deg,rgba(201,162,39,.08),transparent); flex-shrink: 0;} .studio__ailabel {font-size: .8rem; color: var(--c-gold, #c9a227); white-space: nowrap; font-weight: 600;} .studio__aiinput {flex: 1; min-width: 0; background: var(--c-surface-2, #232a35); border: 1px solid var(--c-border, #2a3140); color: inherit; padding: 6px 10px; border-radius: 6px; font-size: .85rem;} .studio__aigo {background: var(--c-gold, #c9a227); border: 1px solid var(--c-gold, #c9a227); color: #1b1400; padding: 6px 14px; border-radius: 6px; cursor: pointer; font-weight: 600; font-size: .85rem;} .studio__aigo:disabled {opacity: .5; cursor: default;} .studio__body {display: flex; flex: 1; min-height: 0;} .studio__palette,.studio__inspector {width: 240px; flex-shrink: 0; overflow-y: auto; padding: 12px; background: var(--c-surface-1, #1b2029);} .studio__palette {border-right: 1px solid var(--c-border, #2a3140);} .studio__inspector {border-left: 1px solid var(--c-border, #2a3140);} .studio__palette h3,.studio__inspector h3 {font-size: .8rem; text-transform: uppercase; letter-spacing: .05em; color: var(--c-text-dim, #aab3c0); margin: 0 0 8px;} .studio__inspector section {margin-bottom: 18px;} .studio__tabs {display: flex; gap: 4px; margin-bottom: 10px;} .studio__tabs button {flex: 1; background: var(--c-surface-2, #232a35); border: 1px solid var(--c-border, #2a3140); color: var(--c-text-dim, #aab3c0); padding: 5px 8px; border-radius: 6px; cursor: pointer; font-size: .8rem;} .studio__tabs button.on {border-color: var(--c-gold, #c9a227); color: var(--c-gold-bright, #ffd766);} .studio__brushsize {display: inline-flex; align-items: center; gap: 6px; font-size: .78rem; color: var(--c-text-dim, #aab3c0);} .studio__brushsize input[type="range"] {width: 90px;} .studio__grid {display: grid; grid-template-columns: repeat(2,1fr); gap: 6px;} .studio__swatch {display: flex; flex-direction: column; align-items: center; gap: 2px; background: var(--c-surface-2, #232a35); border: 1px solid var(--c-border, #2a3140); border-radius: 8px; padding: 6px 4px; cursor: pointer;} .studio__swatch:hover {border-color: var(--c-text-dim, #aab3c0);} .studio__swatch.on {border-color: var(--c-gold, #c9a227); box-shadow: 0 0 0 1px var(--c-gold, #c9a227) inset;} .studio__swatch img {width: 44px; height: 44px; object-fit: contain;} .studio__swatch span {font-size: .68rem; color: var(--c-text-dim, #aab3c0); text-align: center; word-break: break-word;} .studio__canvas {flex: 1; min-width: 0; overflow: hidden; background: #0e1116;} .studio__scroll {width: 100%; height: 100%; overflow: auto; padding: 20px;} .studio__layers {list-style: none; margin: 0 0 8px; padding: 0; display: flex; flex-direction: column; gap: 4px;} .studio__layers li {display: flex; align-items: center; gap: 8px; font-size: .85rem;} .studio__layers li em {color: var(--c-text-faint, #6b7484); font-size: .7rem; margin-left: auto;} .studio__eye {background: none; border: none; cursor: pointer; font-size: .9rem;} .studio__fields {display: flex; flex-direction: column; gap: 10px;} .studio__field {display: flex; flex-direction: column; gap: 3px;} .studio__field label {font-size: .72rem; color: var(--c-text-dim, #aab3c0);} .studio__field input[type="number"],.studio__field input:not([type]) {background: var(--c-surface-2, #232a35); border: 1px solid var(--c-border, #2a3140); color: inherit; padding: 4px 6px; border-radius: 6px; width: 100%;} .studio__field input[type="range"] {width: 100%;} .studio__wh {display: flex; align-items: center; gap: 6px;} .studio__wh input {width: 60px;} .studio__row {display: flex; gap: 6px; flex-wrap: wrap; margin-top: 4px;} .studio__row button {background: var(--c-surface-2, #232a35); border: 1px solid var(--c-border, #2a3140); color: var(--c-text-dim, #aab3c0); padding: 5px 9px; border-radius: 6px; cursor: pointer; font-size: .8rem;} .studio__row button.on {border-color: var(--c-gold, #c9a227); color: var(--c-gold-bright, #ffd766);} .studio__row button.studio__danger {color: #ff7a7a; border-color: #5a2a2a;} .studio__hint {font-size: .78rem; color: var(--c-text-faint, #6b7484);} .btn-ghost {background: none; border: 1px solid var(--c-border, #2a3140); color: var(--c-text-dim, #aab3c0); padding: 5px 10px; border-radius: 6px; cursor: pointer; font-size: .82rem;} .btn-ghost:hover {color: var(--c-text, #e7e9ee);} .campaign-setup {position: fixed; inset: 0; z-index: 1000; display: flex; align-items: center; justify-content: center; padding: 1.5rem; background: radial-gradient(120% 120% at 50% 0%,rgba(0,0,0,.72),rgba(0,0,0,.9)); backdrop-filter: blur(4px); overflow-y: auto;} .campaign-setup__card {width: 100%; max-width: 640px; max-height: calc(100vh - 3rem) ; overflow-y: auto; background: var(--c-surface); border: 1px solid var(--c-border); border-radius: 14px; box-shadow: 0 24px 70px rgba(0,0,0,.6); padding: 1.75rem 1.75rem 1.5rem;} .campaign-setup__head {text-align: center; border-bottom: 1px solid var(--c-hairline); padding-bottom: 1rem; margin-bottom: 1.1rem;} .campaign-setup__eyebrow {margin: 0; font-size: .72rem; letter-spacing: .14em; text-transform: uppercase; color: var(--c-gold);} .campaign-setup__title {margin: .35rem 0 .3rem; font-size: 1.7rem; line-height: 1.15; color: var(--c-text);} .campaign-setup__where {margin: 0; color: var(--c-text-dim); font-size: .92rem;} .campaign-setup__section {margin-bottom: 1.15rem;} .campaign-setup__h2 {margin: 0 0 .5rem; font-size: .8rem; letter-spacing: .08em; text-transform: uppercase; color: var(--c-text-faint);} .campaign-setup__premise {margin: 0; color: var(--c-text-dim); line-height: 1.5; font-size: .95rem; max-height: 8.5em; overflow-y: auto; padding-right: .5rem;} .campaign-setup__hint {margin: .4rem 0 0; color: var(--c-text-faint); font-size: .83rem;} .campaign-setup__party {list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: .5rem;} .campaign-setup__member {display: flex; align-items: center; justify-content: space-between; gap: .75rem; padding: .6rem .75rem; background: var(--c-bg); border: 1px solid var(--c-hairline); border-radius: 10px;} .campaign-setup__member.is-you {border-color: var(--c-gold-deep); box-shadow: inset 0 0 0 1px var(--c-gold-deep);} .campaign-setup__member-id {display: flex; flex-direction: column; gap: .1rem; min-width: 0;} .campaign-setup__member-name {color: var(--c-text); font-weight: 600;} .campaign-setup__member-kind {color: var(--c-text-faint); font-size: .78rem;} .campaign-setup__control {display: inline-flex; border: 1px solid var(--c-border); border-radius: 8px; overflow: hidden; flex: none;} .campaign-setup__seg {appearance: none; border: none; background: transparent; color: var(--c-text-dim); padding: .35rem .8rem; font-size: .85rem; cursor: pointer;} .campaign-setup__seg + .campaign-setup__seg {border-left: 1px solid var(--c-border);} .campaign-setup__seg.is-active {background: var(--c-gold); color: var(--c-on-gold); font-weight: 600;} .campaign-setup__seg:disabled {opacity: .5; cursor: not-allowed;} .campaign-setup__tag {font-size: .75rem; padding: .2rem .55rem; border-radius: 6px; flex: none;} .campaign-setup__tag--npc {background: var(--c-hairline); color: var(--c-text-dim);} .campaign-setup__voice-row {display: flex; align-items: center; gap: .55rem; color: var(--c-text); font-size: .95rem; cursor: pointer;} .campaign-setup__voice-row input {width: 1.05rem; height: 1.05rem; accent-color: var(--c-gold);} .campaign-setup__voice-pick {margin-top: .6rem;} .campaign-setup__start {width: 100%; margin-top: .4rem; padding: .85rem 1rem; font-size: 1.05rem; font-weight: 700; letter-spacing: .01em; color: var(--c-on-gold); background: linear-gradient(180deg,var(--c-gold-bright),var(--c-gold)); border: 1px solid var(--c-gold-deep); border-radius: 10px; cursor: pointer; transition: filter .12s ease,transform .06s ease;} .campaign-setup__start:hover {filter: brightness(1.06);} .campaign-setup__start:active {transform: translateY(1px);} .encounter-tracker {background: var(--c-surface); border: 1px solid var(--c-hairline); border-radius: var(--radius-lg); box-shadow: var(--shadow-card); padding: var(--sp-3) var(--sp-4); display: flex; flex-direction: column; gap: var(--sp-3); font-size: .85rem;} .encounter-tracker__header {display: flex; align-items: center; justify-content: space-between; gap: var(--sp-2); flex-wrap: wrap;} .encounter-tracker__heading {margin: 0; font-size: .95rem; color: var(--c-text);} .encounter-tracker__turnbar {display: flex; align-items: center; gap: var(--sp-2); flex-wrap: wrap;} .encounter-tracker__turnbar button,.encounter-tracker__panel button,.encounter-tracker__controls-row button {font-family: inherit; font-size: .75rem; color: var(--c-text-dim); background: var(--c-surface-2); border: 1px solid var(--c-border); border-radius: var(--radius-sm); padding: .3rem .55rem; cursor: pointer; min-height: 1.9rem; touch-action: manipulation;} .encounter-tracker__turnbar button:hover:not(:disabled),.encounter-tracker__panel button:hover:not(:disabled),.encounter-tracker__controls-row button:hover:not(:disabled) {border-color: var(--c-gold); color: var(--c-text);} .encounter-tracker__turnbar button:disabled,.encounter-tracker__panel button:disabled,.encounter-tracker__controls-row button:disabled {opacity: .45; cursor: not-allowed;} .encounter-tracker__round {font-family: var(--font-mono); font-size: .7rem; letter-spacing: .06em; text-transform: uppercase; color: var(--c-text-faint);} .encounter-tracker__end-control {display: inline-flex; align-items: center; gap: var(--sp-1); margin-left: auto;} .encounter-tracker__end-control select {font-size: .75rem; background: var(--c-surface-2); color: var(--c-text-dim); border: 1px solid var(--c-border); border-radius: var(--radius-sm); padding: .25rem .3rem; min-height: 1.9rem;} .encounter-tracker__end {border-color: var(--c-danger) !important; color: var(--c-danger) !important;} .encounter-tracker__list {list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--sp-2);} .encounter-tracker__row {display: flex; flex-direction: column; gap: .35rem; padding: .45rem .55rem; border-radius: var(--radius-sm); border-left: 3px solid transparent; background: var(--c-surface-2); transition: background-color .12s ease,border-color .12s ease;} .encounter-tracker__row--current {background: var(--c-gold-glow); border-left-color: var(--c-gold);} .encounter-tracker__row-top {display: flex; align-items: center; gap: var(--sp-2); flex-wrap: wrap;} .encounter-tracker__jump {flex: none; border: 1px solid var(--c-border); background: transparent; color: var(--c-text-faint); border-radius: var(--radius-sm); width: 1.6rem; height: 1.6rem; padding: 0; cursor: pointer; display: inline-flex; align-items: center; justify-content: center; touch-action: manipulation;} .encounter-tracker__jump:hover:not(:disabled) {border-color: var(--c-gold); color: var(--c-text);} .encounter-tracker__jump:disabled {opacity: .5; cursor: default;} .encounter-tracker__name {font-weight: 600; color: var(--c-text-dim); overflow: hidden; text-overflow: ellipsis; white-space: nowrap;} .encounter-tracker__row--current .encounter-tracker__name {color: var(--c-text); font-weight: 700;} .encounter-tracker__ac {font-family: var(--font-mono); font-size: .7rem; color: var(--c-text-faint);} .encounter-tracker__hp-text {margin-left: auto; font-family: var(--font-mono); font-size: .75rem; color: var(--c-text-faint); white-space: nowrap;} .encounter-tracker__remove {flex: none; border: 1px solid var(--c-border); background: transparent; color: var(--c-text-faint); border-radius: var(--radius-sm); width: 1.5rem; height: 1.5rem; padding: 0; line-height: 1; cursor: pointer; touch-action: manipulation;} .encounter-tracker__remove:hover:not(:disabled) {border-color: var(--c-danger); color: var(--c-danger);} .encounter-tracker__hp-bar {height: 5px; border-radius: 999px; background: var(--c-surface-3); overflow: hidden;} .encounter-tracker__hp-fill {display: block; height: 100%; background: var(--c-teal); transition: width .15s ease;} .encounter-tracker__controls-row {display: flex; flex-wrap: wrap; gap: var(--sp-2);} .encounter-tracker__field {display: inline-flex; align-items: center; gap: .3rem;} .encounter-tracker__num {width: 3.4rem; font-family: var(--font-mono); font-size: .75rem; color: var(--c-text); background: var(--c-surface); border: 1px solid var(--c-border); border-radius: var(--radius-sm); padding: .2rem .3rem; min-height: 1.7rem;} .encounter-tracker__badges {display: flex; flex-wrap: wrap; align-items: center; gap: .3rem;} .encounter-tracker__panel {display: flex; flex-direction: column; gap: var(--sp-2); padding-top: var(--sp-2); border-top: 1px solid var(--c-hairline);} .encounter-tracker__panel-heading {margin: 0; font-size: .75rem; letter-spacing: .04em; text-transform: uppercase; color: var(--c-text-faint);} .encounter-tracker__picker {list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: .3rem;} .encounter-tracker__picker-row {display: flex; align-items: center; justify-content: space-between; gap: var(--sp-2);} .encounter-tracker__picker-name {color: var(--c-text-dim);} .encounter-tracker__picker-note {font-family: var(--font-mono); font-size: .68rem; color: var(--c-text-faint); margin-left: .3rem;} .encounter-tracker__stepper {display: inline-flex; align-items: center; gap: .35rem;} .encounter-tracker__stepper button {min-height: 1.5rem; width: 1.5rem; padding: 0; display: inline-flex; align-items: center; justify-content: center;} .encounter-tracker__stepper-count {font-family: var(--font-mono); min-width: 1.1rem; text-align: center; color: var(--c-text);} .encounter-tracker__cta {align-self: flex-start; border-color: var(--c-gold) !important; color: var(--c-text) !important; background: var(--c-gold-glow) !important;} .encounter-tracker__tabs {display: flex; gap: .3rem;} .encounter-tracker__tabs button {border-radius: 999px;} .encounter-tracker__tabs button.is-active {border-color: var(--c-gold); color: var(--c-text); background: var(--c-gold-glow);} .encounter-tracker__add-row {display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-2);} .encounter-tracker__add-row select,.encounter-tracker__add-row input {font-family: inherit; font-size: .75rem; color: var(--c-text); background: var(--c-surface-2); border: 1px solid var(--c-border); border-radius: var(--radius-sm); padding: .3rem .4rem; min-height: 1.9rem;} .encounter-tracker__add-row--adhoc input[aria-label="Name"] {flex: 1 1 8rem; min-width: 6rem;} .encounter-tracker__add-row input[type="number"] {width: 4.2rem;} @media (prefers-reduced-motion: reduce) {.encounter-tracker__row,.encounter-tracker__hp-fill {transition: none;}} .map-dm-tools {background: var(--c-surface); border: 1px solid var(--c-hairline); border-radius: var(--radius-lg); box-shadow: var(--shadow-card); padding: var(--sp-3) var(--sp-4); display: flex; flex-direction: column; gap: var(--sp-3); font-size: .85rem;} .map-dm-tools__empty {color: var(--c-text-dim); margin: 0;} .map-dm-tools__region {border: 1px solid var(--c-hairline); border-radius: 8px; padding: var(--sp-2) var(--sp-3); display: flex; flex-direction: column; gap: var(--sp-2);} .map-dm-tools__region-header {display: flex; align-items: baseline; justify-content: space-between; gap: var(--sp-2); flex-wrap: wrap;} .map-dm-tools__region-name {font-weight: 600; color: var(--c-text);} .map-dm-tools__current {font-size: .78rem; color: var(--c-text-dim);} .map-dm-tools__states {display: flex; gap: var(--sp-2); flex-wrap: wrap;} .map-dm-tools__triggers {display: flex; flex-direction: column; gap: .35em;} .map-dm-tools__trigger {display: flex; align-items: center; gap: var(--sp-2); flex-wrap: wrap; padding: .3em .5em; border: 1px solid var(--c-hairline); border-radius: 6px;} .map-dm-tools__trigger--dormant {opacity: .55;} .map-dm-tools__trigger-kind {font-weight: 600; font-size: .75rem; color: var(--c-gold-bright, var(--c-text)); min-width: 6em;} .map-dm-tools__trigger-desc {flex: 1; min-width: 8em;} .map-dm-tools__stamp {border-top: 1px solid var(--c-hairline); padding-top: var(--sp-2); display: flex; flex-direction: column; gap: .35em;} .map-dm-tools__stamp-label {color: var(--c-text-dim); font-size: .78rem;} .map-dm-tools__stamp-row {display: flex; align-items: center; gap: var(--sp-2); flex-wrap: wrap;} .map-dm-tools__stamp-row label {display: flex; align-items: center; gap: .3em; font-size: .78rem;} .map-dm-tools__stamp-row input[type="number"] {width: 4.5em;} .dmplay-page .chat-log {align-items: center;} .dmplay-page .chat-entry {box-sizing: border-box; width: 100%; max-width: 68ch; margin-left: auto; margin-right: auto;} .dmplay-page .chat-log {gap: var(--sp-5); padding-top: var(--sp-4); padding-bottom: var(--sp-4);} .dmplay-page .chat-entry__text {line-height: 1.7;} .dmplay-page .chat-entry__speaker {font-weight: 700; margin-bottom: .3rem;} .dmplay-page .chat-entry--narrator {border-left-width: 3px;} .dmplay-page .chat-entry--player {margin-left: var(--sp-4); max-width: calc(68ch - var(--sp-4)); background: linear-gradient(90deg,var(--c-gold-glow),transparent 60%); border-radius: 0 var(--radius-sm) var(--radius-sm) 0; padding-top: .3rem; padding-bottom: .3rem;} .dmplay-page .chat-entry--system {max-width: calc(68ch - var(--sp-2));} .dmplay-page .chat-entry--system .chat-entry__text {font-size: .9em; color: var(--c-text-dim);} .dmplay-page .chat-log > .chat-entry:nth-last-child(2) {border-left-width: 3px;} .dmplay-page .chat-log > .chat-entry:nth-last-child(2) .chat-entry__speaker {color: var(--c-text);} @media (prefers-reduced-motion: no-preference) {.dmplay-page .chat-entry {transition: border-left-width .15s ease;}} @media (max-width: 899.98px) {.dmplay-page .chat-entry--player {margin-left: var(--sp-2); max-width: calc(68ch - var(--sp-2));}} .dmplay-page__dm-tools {border: 1px solid var(--c-hairline); border-radius: var(--radius-md); background: var(--c-surface-2);} .dmplay-page__dm-tools[open] {padding-bottom: var(--sp-2);} .dmplay-page__dm-tools-summary {cursor: pointer; list-style: none; padding: var(--sp-2) var(--sp-3); font-size: .75rem; letter-spacing: .05em; text-transform: uppercase; color: var(--c-text-faint); user-select: none;} .dmplay-page__dm-tools-summary::-webkit-details-marker {display: none;} .dmplay-page__dm-tools-summary::before {content: "▸ ";} .dmplay-page__dm-tools[open] .dmplay-page__dm-tools-summary::before {content: "▾ ";} .dmplay-page__dm-tools-summary:hover {color: var(--c-text);} .dmplay-page__dm-tools .encounter-tracker {border: none; box-shadow: none; border-radius: 0; border-top: 1px solid var(--c-hairline); background: transparent; margin: 0 var(--sp-1);} .dmplay-view-toggle {display: flex; justify-content: flex-end; margin-bottom: var(--sp-1, .5rem);} .dmplay-hotseat {display: flex; align-items: center; flex-wrap: wrap; gap: var(--sp-2, .5rem); margin-bottom: var(--sp-2, .5rem);} .dmplay-hotseat__label {font-size: .8rem; color: var(--c-text-dim); font-weight: 600;} .dmplay-hotseat__chip {font-size: .85rem; padding: .25rem .65rem; border-radius: var(--radius-sm, 6px); background: var(--c-gold-glow); color: var(--c-text);} .home-page {min-height: 100vh; width: 100%; max-width: 95vw; margin-inline: auto; display: flex; flex-direction: column; gap: var(--sp-6); padding: var(--sp-4) clamp(var(--sp-3),4vw,var(--sp-7)) var(--sp-7); background: radial-gradient(ellipse 90% 60% at 50% -10%,var(--c-gold-glow),transparent 60%);} .home-hero {position: relative; overflow: hidden; isolation: isolate; display: flex; flex-direction: column; align-items: center; text-align: center; padding: 0;} .home-hero__backdrop {position: absolute; inset: 0; z-index: -1; background: radial-gradient(ellipse 120% 90% at 50% 0%,var(--c-gold-glow),transparent 65%),radial-gradient(ellipse 90% 80% at 85% 100%,var(--c-teal-glow),transparent 60%);} .home-hero__backdrop-img {position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: center 35%; opacity: 0; transition: opacity .9s ease;} .home-hero__backdrop-img.is-loaded {opacity: 1;} .home-hero__scrim {position: absolute; inset: 0; background: linear-gradient(180deg,color-mix(in srgb,var(--c-bg) 42%,transparent) 0%,color-mix(in srgb,var(--c-bg) 20%,transparent) 35%,color-mix(in srgb,var(--c-bg) 62%,transparent) 100%),radial-gradient(ellipse 62% 85% at 50% 55%,color-mix(in srgb,var(--c-bg) 55%,transparent),transparent 100%),linear-gradient(var(--c-art-veil-weak),var(--c-art-veil-weak));} .home-hero__content {display: flex; flex-direction: column; align-items: center; gap: var(--sp-3); padding: clamp(var(--sp-6),7vh,5.5rem) var(--sp-5); width: 100%;} .home-hero__kicker {margin: 0; color: var(--c-text); text-shadow: 0 1px 8px color-mix(in srgb,var(--c-bg) 70%,transparent);} .home-hero__mark {margin: var(--sp-1) 0; filter: drop-shadow(0 2px 10px color-mix(in srgb,var(--c-bg) 75%,transparent));} .home-hero__tagline {margin: 0; max-width: 52ch; color: var(--c-text); font-size: 1.05rem; line-height: 1.55; text-shadow: 0 1px 8px color-mix(in srgb,var(--c-bg) 70%,transparent);} .home-hero__cta {display: flex; flex-wrap: wrap; justify-content: center; gap: var(--sp-3); margin-top: var(--sp-2);} .home-hero__cta button:not(.btn-primary) {background: color-mix(in srgb,var(--c-surface) 72%,transparent); backdrop-filter: blur(6px);} .home-section {display: flex; flex-direction: column; gap: var(--sp-3);} .home-section__header {display: flex; align-items: baseline; justify-content: space-between; gap: var(--sp-3); flex-wrap: wrap;} .home-section__title {margin: 0; font-family: var(--font-display); font-size: clamp(1.25rem,2.6vw,1.65rem); font-weight: 700; color: var(--c-text); padding-bottom: var(--sp-1); position: relative;} .home-section__title::after {content: ""; position: absolute; left: 0; bottom: 0; width: 5.5rem; height: 2px; border-radius: 2px; background: linear-gradient(90deg,var(--c-gold),transparent);} .home-card-grid {list-style: none; margin: 0; padding: 0; display: grid; gap: var(--sp-3); grid-template-columns: repeat(auto-fill,minmax(min(100%,17rem),1fr)); align-items: stretch;} .home-map-tile {display: flex; flex-direction: column; overflow: hidden; transition: transform .2s ease,box-shadow .2s ease;} .home-map-tile:hover {transform: translateY(-3px); box-shadow: 0 10px 28px color-mix(in srgb,var(--c-teal, var(--c-gold)) 16%,rgba(0,0,0,.35));} .home-map-tile__thumb {border-radius: 0; border-bottom: 1px solid var(--c-hairline);} .home-map-tile__body {display: flex; flex-direction: column; gap: var(--sp-1); padding: var(--sp-3) var(--sp-4) var(--sp-4);} .home-map-tile__name {font-family: var(--font-display); font-size: 1.2rem; font-weight: 700; color: var(--c-text); line-height: 1.2;} .home-map-tile__meta {font-family: var(--font-mono); font-size: .72rem; color: var(--c-text-dim); letter-spacing: .05em;} .home-map-tile__actions {margin-top: var(--sp-2);} .home-map-tile__actions button {font-size: .85rem;} @media (prefers-reduced-motion: reduce) {.home-hero__backdrop-img,.home-map-tile {transition: none;} .home-map-tile:hover {transform: none;}} .home-news-list {list-style: none; margin: 0; padding: 0; display: grid; gap: var(--sp-3); grid-template-columns: repeat(auto-fill,minmax(min(100%,18rem),1fr));} .home-news-item {padding: 0; display: flex; flex-direction: column; overflow: hidden; transition: transform .2s ease,box-shadow .2s ease;} .home-news-item:hover {transform: translateY(-2px); box-shadow: 0 8px 22px color-mix(in srgb,var(--c-gold) 14%,rgba(0,0,0,.3));} .home-news-item__art {aspect-ratio: 16 / 7; position: relative; overflow: hidden; border-bottom: 1px solid var(--c-hairline); background: radial-gradient(ellipse 120% 90% at 20% 0%,var(--c-gold-glow),transparent 60%),radial-gradient(ellipse 100% 90% at 85% 100%,var(--c-teal-glow),transparent 65%),var(--c-bg-deep, var(--c-bg));} .home-news-item__art-img {position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; opacity: 0; transition: opacity .45s ease;} .home-news-item__art-img.is-loaded {opacity: 1;} @media (prefers-reduced-motion: no-preference) {.home-news-item__art--waiting {animation: skeleton-pulse 1.4s ease-in-out infinite;}} @media (prefers-reduced-motion: reduce) {.home-news-item,.home-news-item__art-img {transition: none;} .home-news-item:hover {transform: none;}} .home-news-item__body {padding: var(--sp-3) var(--sp-4) var(--sp-4); display: flex; flex-direction: column; gap: var(--sp-1);} .home-news-item__date {font-family: var(--font-mono); font-size: .7rem; letter-spacing: .08em; text-transform: uppercase; color: var(--c-gold);} .home-news-item__title {margin: 0; font-family: var(--font-display); font-size: 1.1rem; color: var(--c-text);} .home-news-item__blurb {margin: 0; color: var(--c-text-dim); font-size: .875rem;} .home-continue-list {list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--sp-2);} .home-continue-list .session-name {flex: 1; min-width: 0; color: var(--c-gold); overflow: hidden; text-overflow: ellipsis; white-space: nowrap;} .home-continue-list .session-when {font-size: .8125rem; color: var(--c-text-faint); white-space: nowrap;} .home-getting-started .scene-banner__content {gap: var(--sp-4);} .home-quickstart {display: flex; flex-wrap: wrap; gap: var(--sp-3);} .home-quickstart button:not(.btn-primary) {background: color-mix(in srgb,var(--c-surface) 72%,transparent); backdrop-filter: blur(6px);} .home-tips {margin: 0; padding-left: 1.25em; display: flex; flex-direction: column; gap: var(--sp-2); color: var(--c-text-dim); font-size: .9rem; max-width: 72ch;} .home-tips strong {color: var(--c-text);} @media (max-width: 560px) {.home-hero__cta,.home-quickstart {flex-direction: column; align-items: stretch;}} .welcome-onboarding .scene-banner__content {gap: var(--sp-3);} .builder-progress {display: flex; flex-direction: column; gap: var(--sp-1);} .builder-progress__row {display: flex; align-items: baseline; justify-content: space-between; gap: var(--sp-2); flex-wrap: wrap;} .builder-progress__label {font-family: var(--font-mono); font-size: .7rem; letter-spacing: .08em; text-transform: uppercase; color: var(--c-text-faint);} .builder-progress__current {color: var(--c-gold); font-weight: 600;} .builder-progress__bar {height: 4px; border-radius: 999px; background: var(--c-surface-3); overflow: hidden;} .builder-progress__bar-fill {height: 100%; border-radius: 999px; background: var(--c-gold);} @media (prefers-reduced-motion: no-preference) {.builder-progress__bar-fill {transition: width .2s ease;}} .info-hint {position: relative; display: inline-flex; vertical-align: middle; margin-left: .3rem;} .info-hint__trigger {width: 1.05rem; height: 1.05rem; padding: 0; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; font-family: var(--font-mono); font-size: .6rem; font-weight: 700; line-height: 1; color: var(--c-text-faint); background: var(--c-surface-3); border: 1px solid var(--c-border);} .info-hint__trigger:hover,.info-hint__trigger:focus-visible {color: var(--c-on-gold); background: var(--c-gold); border-color: var(--c-gold);} .info-hint__bubble {position: absolute; bottom: calc(100% + 6px) ; left: 50%; transform: translateX(-50%); z-index: 20; width: max-content; max-width: 15rem; padding: .4rem .6rem; font-size: .75rem; font-weight: 400; line-height: 1.4; color: var(--c-text); background: var(--c-surface-2); border: 1px solid var(--c-border); border-radius: var(--radius-sm); box-shadow: var(--shadow-pop); opacity: 0; visibility: hidden; pointer-events: none;} @media (prefers-reduced-motion: no-preference) {.info-hint__bubble {transition: opacity .12s ease;}} .info-hint__trigger:hover + .info-hint__bubble,.info-hint__trigger:focus-visible + .info-hint__bubble {opacity: 1; visibility: visible;} .builder-preview__saves {display: flex; flex-wrap: wrap; gap: .3rem .5rem;} .save-chip {display: inline-flex; align-items: baseline; gap: .2rem; padding: .1rem .45rem; border-radius: 999px; font-family: var(--font-mono); font-size: .72rem; background: var(--c-surface-3); color: var(--c-text-dim);} .save-chip--proficient {background: var(--c-teal-glow); color: var(--c-teal);} .builder-preview__label {display: inline-flex; align-items: center;} .builder-review-errors {display: flex; flex-direction: column; gap: var(--sp-2);} .builder-review-errors__group + .builder-review-errors__group {border-top: 1px dotted var(--c-danger); padding-top: var(--sp-2);} .builder-review-errors__step {margin: 0 0 .15rem; font-family: var(--font-mono); font-size: .7rem; letter-spacing: .08em; text-transform: uppercase; color: var(--c-danger);} .builder-review-errors ul {margin: 0; padding-left: 1.1rem;} .top-nav {position: sticky; top: 0; z-index: 40; width: 100%; background: color-mix(in srgb,var(--c-surface) 84%,transparent); backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); border-bottom: 1px solid var(--c-border);} .top-nav__inner {display: flex; align-items: center; gap: var(--sp-5); width: 100%; max-width: 95vw; margin: 0 auto; padding: var(--sp-2) var(--sp-5); min-height: 3.25rem;} .top-nav__brand {flex: none; display: inline-flex; align-items: center; padding: .2rem; margin-left: -.2rem; background: none; border: 1px solid transparent; border-radius: var(--radius-md); cursor: pointer; box-shadow: none;} .top-nav__brand:hover {background: var(--c-surface-2);} .top-nav__brand:focus-visible {outline: var(--focus-ring); outline-offset: var(--focus-offset);} .top-nav__links {display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-1); min-width: 0;} .top-nav__link {background: none; border: 1px solid transparent; border-radius: var(--radius-sm); padding: .4rem .6rem; font-family: var(--font-body); font-size: .9rem; font-weight: 600; color: var(--c-text-dim); cursor: pointer; white-space: nowrap; position: relative; box-shadow: none;} .top-nav__link:hover {color: var(--c-text); background: var(--c-surface-2);} .top-nav__link:focus-visible {outline: var(--focus-ring); outline-offset: var(--focus-offset);} .top-nav__link--active {color: var(--c-gold);} .top-nav__link--active::after {content: ""; position: absolute; left: .6rem; right: .6rem; bottom: .1rem; height: 2px; background: var(--c-gold); border-radius: 2px;} .top-nav__actions {display: flex; align-items: center; gap: var(--sp-3); margin-left: auto; flex: none;} .top-nav__palette {display: inline-flex; align-items: center; justify-content: center; height: 2.1rem; padding: 0 .6rem; background: none; border: 1px solid var(--c-border); border-radius: var(--radius-sm); font-family: var(--font-mono); font-size: .8rem; color: var(--c-text-dim); cursor: pointer;} .top-nav__palette:hover {color: var(--c-text); background: var(--c-surface-2);} .top-nav__palette:focus-visible {outline: var(--focus-ring); outline-offset: var(--focus-offset);} .top-nav__new {white-space: nowrap;} @media (prefers-reduced-motion: no-preference) {.top-nav__link,.top-nav__brand,.top-nav__palette {transition: background-color .11s ease,color .11s ease;}} @media (max-width: 720px) {.top-nav__inner {flex-wrap: wrap; row-gap: var(--sp-2);} .top-nav__links {order: 3; width: 100%;}} .cmdk-backdrop {position: fixed; inset: 0; z-index: 1000; display: flex; align-items: flex-start; justify-content: center; padding: 12vh var(--sp-4) var(--sp-4); background: rgba(0,0,0,.5); backdrop-filter: blur(2px);} .cmdk-modal {width: 100%; max-width: 560px; max-height: min(70vh,560px); display: flex; flex-direction: column; background: var(--c-surface); border: 1px solid var(--c-border); border-radius: var(--radius-lg); box-shadow: var(--shadow-pop); overflow: hidden;} @media (prefers-reduced-motion: no-preference) {.cmdk-modal {animation: cmdk-pop .12s ease-out;}} @keyframes cmdk-pop {from {opacity: 0; transform: translateY(-6px) scale(.98);} to {opacity: 1; transform: none;}} .cmdk-search {display: flex; align-items: center; gap: var(--sp-2); padding: var(--sp-3) var(--sp-4); border-bottom: 1px solid var(--c-hairline); flex-shrink: 0;} .cmdk-search__icon {color: var(--c-text-faint); font-size: 1rem;} .cmdk-search input {flex: 1; border: none; outline: none; background: transparent; color: var(--c-text); font-family: var(--font-body); font-size: 1rem;} .cmdk-search input::placeholder {color: var(--c-text-faint);} .cmdk-search__esc {display: inline-flex; align-items: center; padding: .1em .5em; border-radius: var(--radius-sm); border: 1px solid var(--c-border); background: var(--c-bg-deep); color: var(--c-text-faint); font-family: inherit; font-size: .7rem;} .cmdk-list {overflow-y: auto; padding: var(--sp-2);} .cmdk-empty {padding: var(--sp-4); text-align: center; color: var(--c-text-faint); font-size: .9rem;} .cmdk-row {display: flex; align-items: center; justify-content: space-between; gap: var(--sp-3); width: 100%; padding: var(--sp-2) var(--sp-3); border: none; border-radius: var(--radius-md); background: transparent; color: var(--c-text); font-family: var(--font-body); font-size: .92rem; text-align: left; cursor: pointer;} .cmdk-row:hover {background: var(--c-bg-deep);} .cmdk-row--active {background: var(--c-gold-glow); color: var(--c-text); outline: 1px solid var(--c-gold-deep); outline-offset: -1px;} .cmdk-row__hint {color: var(--c-text-faint); font-size: .8rem; flex-shrink: 0;} .cmdk-modal :focus-visible,.cmdk-row:focus-visible {outline: var(--focus-ring); outline-offset: var(--focus-offset);} .cmdk-help {max-width: 460px; max-height: min(75vh,620px);} .cmdk-help__header {display: flex; align-items: center; justify-content: space-between; padding: var(--sp-3) var(--sp-4); border-bottom: 1px solid var(--c-hairline); flex-shrink: 0;} .cmdk-help__header h2 {margin: 0; font-family: var(--font-display); font-size: 1.15rem; color: var(--c-text);} .cmdk-help__body {overflow-y: auto; padding: var(--sp-3) var(--sp-4) var(--sp-4); display: flex; flex-direction: column; gap: var(--sp-4);} .cmdk-help__group h3 {margin: 0 0 var(--sp-2); font-size: .75rem; letter-spacing: .04em; text-transform: uppercase; color: var(--c-text-faint);} .cmdk-help__group ul {margin: 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: var(--sp-2);} .cmdk-help__group li {display: flex; align-items: baseline; justify-content: space-between; gap: var(--sp-3);} .cmdk-help__keys {display: inline-flex; align-items: center; flex-shrink: 0; white-space: nowrap;} .cmdk-help__plus {margin: 0 .25em; color: var(--c-text-faint); font-size: .75rem;} .cmdk-help__keys kbd {display: inline-flex; align-items: center; justify-content: center; min-width: 1.4em; padding: .05em .4em; border-radius: var(--radius-sm); border: 1px solid var(--c-border); background: var(--c-bg-deep); color: var(--c-text); font-family: inherit; font-size: .75rem;} .cmdk-help__label {color: var(--c-text-dim); font-size: .88rem; text-align: right;} .skip-link:focus {position: fixed; top: var(--sp-2); left: var(--sp-2); width: auto; height: auto; overflow: visible; clip: auto; z-index: 9999; padding: var(--sp-2) var(--sp-4); background: var(--c-surface); color: var(--c-text); border: var(--focus-ring); border-radius: var(--radius-sm); text-decoration: none; font-weight: 600;} @media (prefers-reduced-motion: no-preference) {.skip-link:focus {transition: top .15s ease;}} @font-face {font-family: "Cormorant Garamond"; font-style: normal; font-display: swap; font-weight: 600; src: url(/assets/cormorant-garamond-cyrillic-ext-600-normal-BMhMHfrj.woff2) format("woff2"),url(/assets/cormorant-garamond-cyrillic-ext-600-normal-CsIYWmWK.woff) format("woff"); unicode-range: U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;} @font-face {font-family: "Cormorant Garamond"; font-style: normal; font-display: swap; font-weight: 600; src: url(/assets/cormorant-garamond-cyrillic-600-normal-C2atO-64.woff2) format("woff2"),url(/assets/cormorant-garamond-cyrillic-600-normal-FNmA3REe.woff) format("woff"); unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;} @font-face {font-family: "Cormorant Garamond"; font-style: normal; font-display: swap; font-weight: 600; src: url(/assets/cormorant-garamond-vietnamese-600-normal-BoXdMtcr.woff2) format("woff2"),url(/assets/cormorant-garamond-vietnamese-600-normal-C4HEjEaf.woff) format("woff"); unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;} @font-face {font-family: "Cormorant Garamond"; font-style: normal; font-display: swap; font-weight: 600; src: url(/assets/cormorant-garamond-latin-ext-600-normal-DaBc-lu7.woff2) format("woff2"),url(/assets/cormorant-garamond-latin-ext-600-normal-Dk3-quAP.woff) format("woff"); unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;} @font-face {font-family: "Cormorant Garamond"; font-style: normal; font-display: swap; font-weight: 600; src: url(/assets/cormorant-garamond-latin-600-normal-Co1r35X9.woff2) format("woff2"),url(/assets/cormorant-garamond-latin-600-normal-2CBVLo0M.woff) format("woff"); unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;} @font-face {font-family: "Cormorant Garamond"; font-style: normal; font-display: swap; font-weight: 700; src: url(/assets/cormorant-garamond-cyrillic-ext-700-normal-Do0rx6yy.woff2) format("woff2"),url(/assets/cormorant-garamond-cyrillic-ext-700-normal-BaW-xaxb.woff) format("woff"); unicode-range: U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;} @font-face {font-family: "Cormorant Garamond"; font-style: normal; font-display: swap; font-weight: 700; src: url(/assets/cormorant-garamond-cyrillic-700-normal-SLG_-a_c.woff2) format("woff2"),url(/assets/cormorant-garamond-cyrillic-700-normal-D3uyJ5DH.woff) format("woff"); unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;} @font-face {font-family: "Cormorant Garamond"; font-style: normal; font-display: swap; font-weight: 700; src: url(/assets/cormorant-garamond-vietnamese-700-normal--OtHbi1I.woff2) format("woff2"),url(/assets/cormorant-garamond-vietnamese-700-normal-GOTdnRS1.woff) format("woff"); unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;} @font-face {font-family: "Cormorant Garamond"; font-style: normal; font-display: swap; font-weight: 700; src: url(/assets/cormorant-garamond-latin-ext-700-normal-CNjt5vTB.woff2) format("woff2"),url(/assets/cormorant-garamond-latin-ext-700-normal-qRbaVVD7.woff) format("woff"); unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;} @font-face {font-family: "Cormorant Garamond"; font-style: normal; font-display: swap; font-weight: 700; src: url(/assets/cormorant-garamond-latin-700-normal-DajfzrDU.woff2) format("woff2"),url(/assets/cormorant-garamond-latin-700-normal-O25Qpphb.woff) format("woff"); unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;} @font-face {font-family: "Cormorant Garamond"; font-style: italic; font-display: swap; font-weight: 600; src: url(/assets/cormorant-garamond-cyrillic-ext-600-italic-o1-A_FsB.woff2) format("woff2"),url(/assets/cormorant-garamond-cyrillic-ext-600-italic-Vv_u9p1E.woff) format("woff"); unicode-range: U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;} @font-face {font-family: "Cormorant Garamond"; font-style: italic; font-display: swap; font-weight: 600; src: url(/assets/cormorant-garamond-cyrillic-600-italic-Bp4BYShX.woff2) format("woff2"),url(/assets/cormorant-garamond-cyrillic-600-italic-DP5iIMI9.woff) format("woff"); unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;} @font-face {font-family: "Cormorant Garamond"; font-style: italic; font-display: swap; font-weight: 600; src: url(/assets/cormorant-garamond-vietnamese-600-italic-C3DTNE_9.woff2) format("woff2"),url(/assets/cormorant-garamond-vietnamese-600-italic-Bdap-eNg.woff) format("woff"); unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;} @font-face {font-family: "Cormorant Garamond"; font-style: italic; font-display: swap; font-weight: 600; src: url(/assets/cormorant-garamond-latin-ext-600-italic-DYtrqAWE.woff2) format("woff2"),url(/assets/cormorant-garamond-latin-ext-600-italic-CcucBqPp.woff) format("woff"); unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;} @font-face {font-family: "Cormorant Garamond"; font-style: italic; font-display: swap; font-weight: 600; src: url(/assets/cormorant-garamond-latin-600-italic-DCuhXWyK.woff2) format("woff2"),url(/assets/cormorant-garamond-latin-600-italic-BcJbkSJ4.woff) format("woff"); unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;} @font-face {font-family: "Source Sans 3"; font-style: normal; font-display: swap; font-weight: 400; src: url(/assets/source-sans-3-cyrillic-ext-400-normal-BwJdxs7r.woff2) format("woff2"),url(/assets/source-sans-3-cyrillic-ext-400-normal-Cd63HKDh.woff) format("woff"); unicode-range: U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;} @font-face {font-family: "Source Sans 3"; font-style: normal; font-display: swap; font-weight: 400; src: url(/assets/source-sans-3-cyrillic-400-normal-DjhbW-4D.woff2) format("woff2"),url(/assets/source-sans-3-cyrillic-400-normal-7kQcAFpS.woff) format("woff"); unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;} @font-face {font-family: "Source Sans 3"; font-style: normal; font-display: swap; font-weight: 400; src: url(/assets/source-sans-3-greek-ext-400-normal-CpIwTHMM.woff2) format("woff2"),url(/assets/source-sans-3-greek-ext-400-normal-BI1kUwmR.woff) format("woff"); unicode-range: U+1F00-1FFF;} @font-face {font-family: "Source Sans 3"; font-style: normal; font-display: swap; font-weight: 400; src: url(/assets/source-sans-3-greek-400-normal-DZReXJla.woff2) format("woff2"),url(/assets/source-sans-3-greek-400-normal-DJm9Ud5h.woff) format("woff"); unicode-range: U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;} @font-face {font-family: "Source Sans 3"; font-style: normal; font-display: swap; font-weight: 400; src: url(/assets/source-sans-3-vietnamese-400-normal-CwtaIDr2.woff2) format("woff2"),url(/assets/source-sans-3-vietnamese-400-normal-dYp9C364.woff) format("woff"); unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;} @font-face {font-family: "Source Sans 3"; font-style: normal; font-display: swap; font-weight: 400; src: url(/assets/source-sans-3-latin-ext-400-normal-UNsKFIBq.woff2) format("woff2"),url(/assets/source-sans-3-latin-ext-400-normal-BGPHfnm_.woff) format("woff"); unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;} @font-face {font-family: "Source Sans 3"; font-style: normal; font-display: swap; font-weight: 400; src: url(/assets/source-sans-3-latin-400-normal-DQi5PRDE.woff2) format("woff2"),url(/assets/source-sans-3-latin-400-normal-AFMiCETP.woff) format("woff"); unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;} @font-face {font-family: "Source Sans 3"; font-style: italic; font-display: swap; font-weight: 400; src: url(/assets/source-sans-3-cyrillic-ext-400-italic-HOVu-9SC.woff2) format("woff2"),url(/assets/source-sans-3-cyrillic-ext-400-italic-B9vdFu6z.woff) format("woff"); unicode-range: U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;} @font-face {font-family: "Source Sans 3"; font-style: italic; font-display: swap; font-weight: 400; src: url(/assets/source-sans-3-cyrillic-400-italic-DbGEEBAE.woff2) format("woff2"),url(/assets/source-sans-3-cyrillic-400-italic-BHmmOD1c.woff) format("woff"); unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;} @font-face {font-family: "Source Sans 3"; font-style: italic; font-display: swap; font-weight: 400; src: url(/assets/source-sans-3-greek-ext-400-italic-D2IhUMi0.woff2) format("woff2"),url(/assets/source-sans-3-greek-ext-400-italic-uQYgKtqE.woff) format("woff"); unicode-range: U+1F00-1FFF;} @font-face {font-family: "Source Sans 3"; font-style: italic; font-display: swap; font-weight: 400; src: url(/assets/source-sans-3-greek-400-italic-CW67wuKv.woff2) format("woff2"),url(/assets/source-sans-3-greek-400-italic-DNtto6bD.woff) format("woff"); unicode-range: U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;} @font-face {font-family: "Source Sans 3"; font-style: italic; font-display: swap; font-weight: 400; src: url(/assets/source-sans-3-vietnamese-400-italic-Ip6ozmKu.woff2) format("woff2"),url(/assets/source-sans-3-vietnamese-400-italic-BUkYzfnL.woff) format("woff"); unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;} @font-face {font-family: "Source Sans 3"; font-style: italic; font-display: swap; font-weight: 400; src: url(/assets/source-sans-3-latin-ext-400-italic-DtcUteIv.woff2) format("woff2"),url(/assets/source-sans-3-latin-ext-400-italic-skMIiTSx.woff) format("woff"); unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;} @font-face {font-family: "Source Sans 3"; font-style: italic; font-display: swap; font-weight: 400; src: url(/assets/source-sans-3-latin-400-italic-bFKvakRX.woff2) format("woff2"),url(/assets/source-sans-3-latin-400-italic-BbFJQg2j.woff) format("woff"); unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;} @font-face {font-family: "Source Sans 3"; font-style: normal; font-display: swap; font-weight: 600; src: url(/assets/source-sans-3-cyrillic-ext-600-normal-6AhwUnSr.woff2) format("woff2"),url(/assets/source-sans-3-cyrillic-ext-600-normal-uAL1a5gb.woff) format("woff"); unicode-range: U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;} @font-face {font-family: "Source Sans 3"; font-style: normal; font-display: swap; font-weight: 600; src: url(/assets/source-sans-3-cyrillic-600-normal-BnFu5nHC.woff2) format("woff2"),url(/assets/source-sans-3-cyrillic-600-normal-y-RO8wOd.woff) format("woff"); unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;} @font-face {font-family: "Source Sans 3"; font-style: normal; font-display: swap; font-weight: 600; src: url(/assets/source-sans-3-greek-ext-600-normal-DynePNDL.woff2) format("woff2"),url(/assets/source-sans-3-greek-ext-600-normal-D7vJ4nVX.woff) format("woff"); unicode-range: U+1F00-1FFF;} @font-face {font-family: "Source Sans 3"; font-style: normal; font-display: swap; font-weight: 600; src: url(/assets/source-sans-3-greek-600-normal-BSO157bq.woff2) format("woff2"),url(/assets/source-sans-3-greek-600-normal-BNF9LBpG.woff) format("woff"); unicode-range: U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;} @font-face {font-family: "Source Sans 3"; font-style: normal; font-display: swap; font-weight: 600; src: url(/assets/source-sans-3-vietnamese-600-normal-B2sTNYey.woff2) format("woff2"),url(/assets/source-sans-3-vietnamese-600-normal-DpSexF-T.woff) format("woff"); unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;} @font-face {font-family: "Source Sans 3"; font-style: normal; font-display: swap; font-weight: 600; src: url(/assets/source-sans-3-latin-ext-600-normal-AEyhgUpm.woff2) format("woff2"),url(/assets/source-sans-3-latin-ext-600-normal-Wy7HIzqC.woff) format("woff"); unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;} @font-face {font-family: "Source Sans 3"; font-style: normal; font-display: swap; font-weight: 600; src: url(/assets/source-sans-3-latin-600-normal-DeckBYAU.woff2) format("woff2"),url(/assets/source-sans-3-latin-600-normal-BvDVuF-j.woff) format("woff"); unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;} @font-face {font-family: "JetBrains Mono"; font-style: normal; font-display: swap; font-weight: 400; src: url(data:font/woff2;base64,d09GMgABAAAAAASIABAAAAAACQQAAAQuAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhwbHhwoBmA/U1RBVF4AdBEICoRkhAALIAABNgIkAzoEIAWFAAeBFAwHG2oHKJ6DceNW4lJEFHn9tEOE37LNsvkjHr7f739rn3u+OSrSxLQytE91Dw2PYtNVq3Qaw/vJ7fUBMdOj/u2ImB98cT5WUx9F13ZKt06mU7tG1sAYcM26yCRX4f/0904bmwq8hwkUUMTRX61pa9C3xlpAGYw1vOu8C2SBZZFlld7DAW82RJWmwYMI1AJCKBNCIASqdZGFmtPSNQRhMpR0EKjWTwm6z6sJ+4jqhxjovTinVdRpZaQjaQzAYjI8NgAKDJCokgunCn9oUQE8VZd/F//+v6P4F1U9gLr58yNI/dJX9BAshEoJbTDogz7ocKoUsPvES8UK/aQIUQgpGgECBVLkOEV6iASTYgNAPKdNXayhDPL7IJuAZnEYSZ0eOLc9i5Rv5/+lEi3sW/kfnCf/+fTe0sxS7CKLx5erRJkKOixEqQaoqrvx5HN4iz4VhX0gS6DjFIWUzn/fIXJRVFY1NFRVNVeFt+SYmrK6vCU6eJsnKnJj5HTESMTQZOTI3Y/tzr3rUcOsiRy/ciP50s3Mycgxmhz9GMXhjzVH30ut796NHP0UUa31/Zoa6vCH6iPvdIM0IRANaT60FablmZlZd+UKNFy9NrvnFGxb5NC2CRxR0/rIyF/WNn+35sv9r+tHVhkseuWGKkCPPh96+GXt8Lc/Sh24ujfjf+tNw1lZWreiPuHb/PSpyjdv2rf/++ZE5TSKjFdZxYsBvr1sEHl5STuHZqYR7jGYGvGBBdjcaB5bODY1GAxMjsd0wDMIzXAXODRd74DxNMtO4YuYHclgLQRzp9KlUmxptCwv9bYgvWGD2xBW7r9413fdJu+mxzvzAUYeeONQvZP4kgfqZle4jhH/MWh+UbxgtJdrLdXLymNL53PRU0D3Q6FcXTfGqGcul6vrqhgLGAVSv+IVIfZOHpu+mlLqSlnj903j8mazXDsba/wbxhS/4Oubh1c5/uXDgt4j5KtnGEy5BIJHo0ur+jD+r2qCkuP1aRVM8EpUoRYSJyqNRA38uwDvHBNo0AejO2Z+ZYLLal1QiFyFh1EDQOgSCSCpjwwKU8yDbIjroEwne0G5Qca49cYp4AlqtQNZfWTQoFb1tRpFYAmRD+HXTkV4uQhG2bg4OKmyoypAsUGtWgQXyFxYrkpODeUxvGqIZA61erXo0sFG1UBGuPgpuon8RNUG2DhovAjZCBuZwtXrU3mQGki9+pm0eVZAXoWxLWTQoYHBPrJR4WunNxIFbCHfkTyPK+sqxjxDmGArZvf79JGJ3GwEqjwc7a7NIrl/7bJ7Nzu4+n1Ow6shEPnUrtVo7cnd5Wi5qCUbBIQbNKCP95FMCSZylEV5VCiiMqqiOmrKZ/I/C0gI1fyuulVcM2E1r4MhtcV/fbCD+HwEvVzH1dGNAzFE0FTbKzyQz3gootrNbN2a4PuG0j0JOgE=) format("woff2"),url(data:font/woff;base64,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) format("woff"); unicode-range: U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;} @font-face {font-family: "JetBrains Mono"; font-style: normal; font-display: swap; font-weight: 400; src: url(/assets/jetbrains-mono-cyrillic-400-normal-BEIGL1Tu.woff2) format("woff2"),url(/assets/jetbrains-mono-cyrillic-400-normal-ugxPyKxw.woff) format("woff"); unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;} @font-face {font-family: "JetBrains Mono"; font-style: normal; font-display: swap; font-weight: 400; src: url(/assets/jetbrains-mono-greek-400-normal-C190GLew.woff2) format("woff2"),url(/assets/jetbrains-mono-greek-400-normal-B9oWc5Lo.woff) format("woff"); unicode-range: U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;} @font-face {font-family: "JetBrains Mono"; font-style: normal; font-display: swap; font-weight: 400; src: url(data:font/woff2;base64,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) format("woff2"),url(/assets/jetbrains-mono-vietnamese-400-normal-CqNFfHCs.woff) format("woff"); unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;} @font-face {font-family: "JetBrains Mono"; font-style: normal; font-display: swap; font-weight: 400; src: url(/assets/jetbrains-mono-latin-ext-400-normal-Bc8Ftmh3.woff2) format("woff2"),url(/assets/jetbrains-mono-latin-ext-400-normal-fXTG6kC5.woff) format("woff"); unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;} @font-face {font-family: "JetBrains Mono"; font-style: normal; font-display: swap; font-weight: 400; src: url(/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2) format("woff2"),url(/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff) format("woff"); unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;} @font-face {font-family: "JetBrains Mono"; font-style: normal; font-display: swap; font-weight: 600; src: url(data:font/woff2;base64,d09GMgABAAAAAASIABAAAAAACQAAAAQtAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhwbHhwoBmA/U1RBVDYAdBEICoRkg3gLIAABNgIkAzoEIAWFIgeBFAwHG1wHKI7DuPEacDIiFJ/g+f47+1/7dIcdXTlD8DKqmcw4eIC+AOCPf6+qiWq3h6+aSCLNJDnkqX9Xl+rv/6dSBcwSBCzEoVqxNbp5SqPMYdKBQhBq1dK9ggSsgYUoGnHOqttMECvWjIJfPA8cjQAuAEAQLAiClASc7M6OkfbO/nHs6ACmCYBxZXKP4s9uXIHECh4AdEhX0yIHC6jzgAb65sshStMMChwEfWVjZe8Anset/6H93x8jOyL5fuS67z4Dlam+BPyH/pV2FLCZAOnU0XPzCQGiJ7AkXgSFhqDEB4AAoAAN2ExDgM10joCNfDQUbvxaXM8LovT79D9MEyYU9+q/myT9p/m8uWi2mLJBPbzcih2wYIPzBDFNvABt315OXwy8BaRnbo5hXsOS5taknX4FguiaZnd4vQ7HxnBnm3SPYXHrQbclvOgyDhsHnZPO8f3G5I2fbr34Y7+hzRozVzyw5bKHdu03plXgvE9FO/Uz4/xPUKd8/PHk+R+JODnlg1lDTv3Qed77zDNqRszaqHUQT248kUPGzBXXXHGFnHrVVdft2m8c4PhpjB+/QEqMU54xruc6m3w8++XNXx4sya9rMvNq88m6X1zeOMlRuQ+/nvNw4+ZrCt58yDdSVOQdfoi/jc/ePfZY+1taYaH21FH2Y4fGG+RVNJkIN4SSiWj3ZKGG1oojoYr2SNWFVbHvY1XX1PR+H6y+oKrqgmryqj1UXnmk5cKWysPM3R4Uh5svYo6saAtU3V297+d91U/X/frzLvUdqiqfruKvhx5+OeOYxbHI7SenQum+PTw/fvRLGQ/jiufOn3/S+vlsfGn9h4Zb96fekZ7xRups68FhVCYCWHHvZVIPxjanr3NABSALqkR7FMBOulF9ScHvV3np+6pK/eEzRx877K3/z65pvwN89eGtV3Ly5ft/25ngaiSYDVYUAAKvIKimMdLO6YBQEY+aZpbXZ5WinTBQXwAA4LMAXuNUBPCSTmMfjd6jpNLNjbToDuBpaR9AoTBbUeERO2o0erNeR6KFne5HK/nOQA+VBtFnt1LtBj6pJQIutnLwipz/Ix9OYNSqZQEreiQELIkKmRIRNWdewpiIZVGtVi0J6xWR0ComIGpFnN+AVStWzUtIWBNXq0iRuJCYqDUJcYXiopYUWhUzp8iQTv20dtO84Agw6YrhuOijfqUKlSpRAruvTq9WdeQw2vs5SUsCYhdt7icIt1nNkseKPZzgV6q4FfYbH4ZIBcThYTEgLIgIkYRbJLl7/rks+ObZDxydE8W9LymoUMiqZUVbtVv0GNkcispQM0IpEG7sBdK9IYr6aKKLRaxiQxO7OMQphrUlGIscFbElV6LF5S0dQN5RbRoUdRbWWOYCy8sB83RxS7FqG/UEQslE5Nsd5v93uF3T0bLiypD/uJhn3q9fCAA=) format("woff2"),url(data:font/woff;base64,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) format("woff"); unicode-range: U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;} @font-face {font-family: "JetBrains Mono"; font-style: normal; font-display: swap; font-weight: 600; src: url(/assets/jetbrains-mono-cyrillic-600-normal-EVf6-Yzo.woff2) format("woff2"),url(/assets/jetbrains-mono-cyrillic-600-normal-8K4wrrwR.woff) format("woff"); unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;} @font-face {font-family: "JetBrains Mono"; font-style: normal; font-display: swap; font-weight: 600; src: url(/assets/jetbrains-mono-greek-600-normal-H7WoG9Et.woff2) format("woff2"),url(/assets/jetbrains-mono-greek-600-normal-mc2nkWzM.woff) format("woff"); unicode-range: U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;} @font-face {font-family: "JetBrains Mono"; font-style: normal; font-display: swap; font-weight: 600; src: url(data:font/woff2;base64,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) format("woff2"),url(/assets/jetbrains-mono-vietnamese-600-normal-OWROknRo.woff) format("woff"); unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;} @font-face {font-family: "JetBrains Mono"; font-style: normal; font-display: swap; font-weight: 600; src: url(/assets/jetbrains-mono-latin-ext-600-normal-BfB_LPfz.woff2) format("woff2"),url(/assets/jetbrains-mono-latin-ext-600-normal-DObL3zCW.woff) format("woff"); unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;} @font-face {font-family: "JetBrains Mono"; font-style: normal; font-display: swap; font-weight: 600; src: url(/assets/jetbrains-mono-latin-600-normal-C8RAYTDA.woff2) format("woff2"),url(/assets/jetbrains-mono-latin-600-normal-BfsvjouI.woff) format("woff"); unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;} :root { --font-display: "Cormorant Garamond", "Palatino Linotype", Georgia, serif; --font-body: "Source Sans 3", "Segoe UI", system-ui, sans-serif; --font-mono: "JetBrains Mono", Consolas, "Courier New", monospace; --sp-1: .25rem; --sp-2: .5rem; --sp-3: .75rem; --sp-4: 1rem; --sp-5: 1.5rem; --sp-6: 2rem; --sp-7: 3rem; --radius-sm: 4px; --radius-md: 8px; --radius-lg: 12px; --focus-ring: 2px solid var(--c-gold); --focus-offset: 2px; } :root,:root[data-theme="ironbound"] {color-scheme: dark; --c-bg: #171b21; --c-bg-deep: #10141a; --c-surface: #1e242c; --c-surface-2: #262d37; --c-surface-3: #2e3742; --c-border: #3b4654; --c-hairline: #2a323d; --c-text: #e6ebf0; --c-text-dim: #a9b4c0; --c-text-faint: #7d8894; --c-gold: #6f9cc6; --c-gold-bright: #8fb4d9; --c-gold-deep: #4a749e; --c-on-gold: #0e1a26; --c-gold-glow: rgba(111,156,198,.14); --c-teal: #62b8a2; --c-teal-dim: #479183; --c-teal-glow: rgba(98,184,162,.12); --c-on-teal: #0a1f1a; --c-danger: #e06055; --c-danger-soft: rgba(224,96,85,.15); --c-hp-ok: #7ba263; --shadow-card: 0 1px 2px rgba(0,0,0,.4),0 4px 16px rgba(0,0,0,.25); --shadow-pop: 0 2px 6px rgba(0,0,0,.5),0 10px 28px rgba(0,0,0,.35);} :root[data-theme="candlelit"] {color-scheme: dark; --c-bg: #151021; --c-bg-deep: #0f0b18; --c-surface: #1e1830; --c-surface-2: #262040; --c-surface-3: #2f2850; --c-border: #3a3160; --c-hairline: #2b2447; --c-text: #efe7d9; --c-text-dim: #b7aec8; --c-text-faint: #8b81a6; --c-gold: #d9a94f; --c-gold-bright: #edc36a; --c-gold-deep: #a87b2c; --c-on-gold: #291d09; --c-gold-glow: rgba(217,169,79,.14); --c-teal: #56c4b4; --c-teal-dim: #3f948a; --c-teal-glow: rgba(86,196,180,.12); --c-on-teal: #06201c; --c-danger: #e0604f; --c-danger-soft: rgba(224,96,79,.15); --c-hp-ok: #7d9f60; --shadow-card: 0 1px 2px rgba(0,0,0,.4),0 4px 16px rgba(0,0,0,.25); --shadow-pop: 0 2px 6px rgba(0,0,0,.5),0 10px 28px rgba(0,0,0,.35);} :root[data-theme="emberforge"] {color-scheme: dark; --c-bg: #1c1614; --c-bg-deep: #141010; --c-surface: #251d1a; --c-surface-2: #2e2420; --c-surface-3: #382c26; --c-border: #4a3a31; --c-hairline: #342a24; --c-text: #f0e6dd; --c-text-dim: #c4b3a7; --c-text-faint: #96857a; --c-gold: #e07840; --c-gold-bright: #f0925c; --c-gold-deep: #b1502a; --c-on-gold: #2a1206; --c-gold-glow: rgba(224,120,64,.15); --c-teal: #74b3a2; --c-teal-dim: #558a7d; --c-teal-glow: rgba(116,179,162,.12); --c-on-teal: #0d211b; --c-danger: #e35d5d; --c-danger-soft: rgba(227,93,93,.16); --c-hp-ok: #8aa464; --shadow-card: 0 1px 2px rgba(0,0,0,.4),0 4px 16px rgba(0,0,0,.25); --shadow-pop: 0 2px 6px rgba(0,0,0,.5),0 10px 28px rgba(0,0,0,.35);} :root[data-theme="deepwood"] {color-scheme: dark; --c-bg: #131b16; --c-bg-deep: #0d140f; --c-surface: #1a241d; --c-surface-2: #212d24; --c-surface-3: #29372c; --c-border: #38493c; --c-hairline: #263429; --c-text: #e9eee2; --c-text-dim: #adbcab; --c-text-faint: #7f9080; --c-gold: #cfa64e; --c-gold-bright: #e3bd67; --c-gold-deep: #9d7a2f; --c-on-gold: #241a06; --c-gold-glow: rgba(207,166,78,.14); --c-teal: #67b98d; --c-teal-dim: #4c8f6b; --c-teal-glow: rgba(103,185,141,.12); --c-on-teal: #0a2015; --c-danger: #dd6250; --c-danger-soft: rgba(221,98,80,.15); --c-hp-ok: #7fa964; --shadow-card: 0 1px 2px rgba(0,0,0,.4),0 4px 16px rgba(0,0,0,.25); --shadow-pop: 0 2px 6px rgba(0,0,0,.5),0 10px 28px rgba(0,0,0,.35);} :root[data-theme="arcane-tide"] {color-scheme: dark; --c-bg: #101828; --c-bg-deep: #0a1120; --c-surface: #162032; --c-surface-2: #1c2940; --c-surface-3: #24334e; --c-border: #33466b; --c-hairline: #243350; --c-text: #e4ecf5; --c-text-dim: #a4b6cb; --c-text-faint: #74879e; --c-gold: #55c3d9; --c-gold-bright: #7ad9ec; --c-gold-deep: #2f93a8; --c-on-gold: #062026; --c-gold-glow: rgba(85,195,217,.14); --c-teal: #8fa5ea; --c-teal-dim: #6a7fc0; --c-teal-glow: rgba(143,165,234,.12); --c-on-teal: #0e1633; --c-danger: #e06a6a; --c-danger-soft: rgba(224,106,106,.15); --c-hp-ok: #74a878; --shadow-card: 0 1px 2px rgba(0,0,0,.4),0 4px 16px rgba(0,0,0,.25); --shadow-pop: 0 2px 6px rgba(0,0,0,.5),0 10px 28px rgba(0,0,0,.35);} :root[data-theme="parchment"] {color-scheme: light; --c-bg: #f3ebdb; --c-bg-deep: #eaddc4; --c-surface: #faf5e9; --c-surface-2: #f0e7d2; --c-surface-3: #e7dcc0; --c-border: #cdbd98; --c-hairline: #ddd0b0; --c-text: #2b2318; --c-text-dim: #5f5340; --c-text-faint: #8a7c63; --c-gold: #9a6d1c; --c-gold-bright: #7d5813; --c-gold-deep: #b5872c; --c-on-gold: #fdf8ec; --c-gold-glow: rgba(154,109,28,.12); --c-teal: #14746a; --c-teal-dim: #4a9a90; --c-teal-glow: rgba(20,116,106,.1); --c-on-teal: #f2fbf9; --c-danger: #b23a2e; --c-danger-soft: rgba(178,58,46,.12); --c-hp-ok: #5d7d43; --shadow-card: 0 1px 2px rgba(90,70,30,.12),0 4px 14px rgba(90,70,30,.1); --shadow-pop: 0 2px 6px rgba(90,70,30,.18),0 10px 26px rgba(90,70,30,.14);} :root[data-theme="daylight"] {color-scheme: light; --c-bg: #f4f6f8; --c-bg-deep: #e8edf2; --c-surface: #ffffff; --c-surface-2: #eef2f6; --c-surface-3: #e3e9f0; --c-border: #b9c6d4; --c-hairline: #d4dde6; --c-text: #1f2933; --c-text-dim: #4c5a68; --c-text-faint: #6e7d8a; --c-gold: #2e6b9e; --c-gold-bright: #1f527e; --c-gold-deep: #4d84b5; --c-on-gold: #f5faff; --c-gold-glow: rgba(46,107,158,.12); --c-teal: #0f7285; --c-teal-dim: #3f92a2; --c-teal-glow: rgba(15,114,133,.1); --c-on-teal: #f0fafc; --c-danger: #b23a35; --c-danger-soft: rgba(178,58,53,.12); --c-hp-ok: #4f7d4a; --shadow-card: 0 1px 2px rgba(30,45,60,.1),0 4px 14px rgba(30,45,60,.08); --shadow-pop: 0 2px 6px rgba(30,45,60,.16),0 10px 26px rgba(30,45,60,.12);} :root[data-theme="bloodmoon"] {color-scheme: dark; --c-bg: #150c0e; --c-bg-deep: #0e0709; --c-surface: #1f1315; --c-surface-2: #281a1c; --c-surface-3: #322023; --c-border: #4a2f34; --c-hairline: #332226; --c-text: #f2e6e4; --c-text-dim: #c7aeb0; --c-text-faint: #97797d; --c-gold: #e25765; --c-gold-bright: #ef7681; --c-gold-deep: #b23440; --c-on-gold: #2a0a0d; --c-gold-glow: rgba(226,87,101,.16); --c-teal: #cfc0a8; --c-teal-dim: #a3947c; --c-teal-glow: rgba(207,192,168,.12); --c-on-teal: #241d10; --c-danger: #e8814f; --c-danger-soft: rgba(232,129,79,.16); --c-hp-ok: #7d9f60; --shadow-card: 0 1px 2px rgba(0,0,0,.45),0 4px 16px rgba(0,0,0,.3); --shadow-pop: 0 2px 6px rgba(0,0,0,.55),0 10px 28px rgba(0,0,0,.4);} :root[data-theme="wild-surge"] {color-scheme: dark; --c-bg: #120b1e; --c-bg-deep: #0b0614; --c-surface: #1c1330; --c-surface-2: #251a3e; --c-surface-3: #2e214c; --c-border: #45336e; --c-hairline: #2e2148; --c-text: #eee8f6; --c-text-dim: #bdaed6; --c-text-faint: #8d7cab; --c-gold: #ea6cdb; --c-gold-bright: #f78ceb; --c-gold-deep: #b445ab; --c-on-gold: #2b0a28; --c-gold-glow: rgba(234,108,219,.16); --c-teal: #4fd6ec; --c-teal-dim: #3aa4b8; --c-teal-glow: rgba(79,214,236,.13); --c-on-teal: #06232a; --c-danger: #f25c6b; --c-danger-soft: rgba(242,92,107,.16); --c-hp-ok: #7fae6a; --shadow-card: 0 1px 2px rgba(0,0,0,.45),0 4px 16px rgba(0,0,0,.3); --shadow-pop: 0 2px 6px rgba(0,0,0,.55),0 10px 28px rgba(0,0,0,.4);} :root[data-theme="cobalt-reach"] {color-scheme: light; --c-bg: #f5f8fc; --c-bg-deep: #e7edf6; --c-surface: #ffffff; --c-surface-2: #edf2f9; --c-surface-3: #e0e8f4; --c-border: #b3c2dc; --c-hairline: #d2dcec; --c-text: #17233b; --c-text-dim: #45536e; --c-text-faint: #68778f; --c-gold: #2151c4; --c-gold-bright: #163da3; --c-gold-deep: #4a76d8; --c-on-gold: #f4f8ff; --c-gold-glow: rgba(33,81,196,.12); --c-teal: #9a6800; --c-teal-dim: #b9862a; --c-teal-glow: rgba(154,104,0,.12); --c-on-teal: #fff9ec; --c-danger: #bb3b30; --c-danger-soft: rgba(187,59,48,.12); --c-hp-ok: #4f7d4a; --shadow-card: 0 1px 2px rgba(25,45,90,.1),0 4px 14px rgba(25,45,90,.08); --shadow-pop: 0 2px 6px rgba(25,45,90,.16),0 10px 26px rgba(25,45,90,.12);} :root[data-theme="tidepool"] {color-scheme: light; --c-bg: #fbf4e8; --c-bg-deep: #f2e7d3; --c-surface: #fffdf7; --c-surface-2: #f6edda; --c-surface-3: #eee2c8; --c-border: #d3bfa0; --c-hairline: #e4d6bc; --c-text: #33261c; --c-text-dim: #66543f; --c-text-faint: #8b7962; --c-gold: #c9442f; --c-gold-bright: #ad3520; --c-gold-deep: #dd6a52; --c-on-gold: #fff3ef; --c-gold-glow: rgba(201,68,47,.12); --c-teal: #0c7b70; --c-teal-dim: #3d9c91; --c-teal-glow: rgba(12,123,112,.11); --c-on-teal: #effbf9; --c-danger: #a02a48; --c-danger-soft: rgba(160,42,72,.12); --c-hp-ok: #557d3f; --shadow-card: 0 1px 2px rgba(95,70,40,.12),0 4px 14px rgba(95,70,40,.1); --shadow-pop: 0 2px 6px rgba(95,70,40,.18),0 10px 26px rgba(95,70,40,.14);} :root[data-theme="verdant-court"] {color-scheme: light; --c-bg: #f5faf5; --c-bg-deep: #e6f2e8; --c-surface: #ffffff; --c-surface-2: #ecf5ed; --c-surface-3: #dfeee2; --c-border: #aecdb5; --c-hairline: #d2e5d6; --c-text: #17291d; --c-text-dim: #46604f; --c-text-faint: #64796b; --c-gold: #0c7d3f; --c-gold-bright: #075f2f; --c-gold-deep: #2c9a5c; --c-on-gold: #f2fbf5; --c-gold-glow: rgba(12,125,63,.12); --c-teal: #7a3fa8; --c-teal-dim: #9a68c4; --c-teal-glow: rgba(122,63,168,.11); --c-on-teal: #faf4ff; --c-danger: #b23a2e; --c-danger-soft: rgba(178,58,46,.12); --c-hp-ok: #3f7d3a; --shadow-card: 0 1px 2px rgba(30,70,45,.1),0 4px 14px rgba(30,70,45,.08); --shadow-pop: 0 2px 6px rgba(30,70,45,.16),0 10px 26px rgba(30,70,45,.12);} :root[data-theme="amethyst-veil"] {color-scheme: light; --c-bg: #f7f3fb; --c-bg-deep: #ece3f6; --c-surface: #fefdff; --c-surface-2: #f0e9f8; --c-surface-3: #e5daf2; --c-border: #c2aede; --c-hairline: #dbcdec; --c-text: #251933; --c-text-dim: #55476b; --c-text-faint: #7a6c91; --c-gold: #6d3ab8; --c-gold-bright: #55279c; --c-gold-deep: #8a5cd0; --c-on-gold: #f8f4ff; --c-gold-glow: rgba(109,58,184,.12); --c-teal: #b02a6a; --c-teal-dim: #c9558c; --c-teal-glow: rgba(176,42,106,.11); --c-on-teal: #fff2f8; --c-danger: #bb3b30; --c-danger-soft: rgba(187,59,48,.12); --c-hp-ok: #4f7d4a; --shadow-card: 0 1px 2px rgba(70,45,100,.1),0 4px 14px rgba(70,45,100,.08); --shadow-pop: 0 2px 6px rgba(70,45,100,.16),0 10px 26px rgba(70,45,100,.12);} :root[data-theme="winterspark"] {color-scheme: light; --c-bg: #eef4f9; --c-bg-deep: #dde8f2; --c-surface: #fbfdff; --c-surface-2: #e5eef6; --c-surface-3: #d8e5f0; --c-border: #a9c0d4; --c-hairline: #cbdce9; --c-text: #14232e; --c-text-dim: #3f5568; --c-text-faint: #647a8c; --c-gold: #c24a00; --c-gold-bright: #9e3a00; --c-gold-deep: #db6a24; --c-on-gold: #fff5ee; --c-gold-glow: rgba(194,74,0,.12); --c-teal: #00699c; --c-teal-dim: #3b8cb8; --c-teal-glow: rgba(0,105,156,.11); --c-on-teal: #f0faff; --c-danger: #b6303a; --c-danger-soft: rgba(182,48,58,.12); --c-hp-ok: #4a7d55; --shadow-card: 0 1px 2px rgba(25,55,80,.1),0 4px 14px rgba(25,55,80,.08); --shadow-pop: 0 2px 6px rgba(25,55,80,.16),0 10px 26px rgba(25,55,80,.12);} :root,:root[data-theme="ironbound"],:root[data-theme="candlelit"],:root[data-theme="emberforge"],:root[data-theme="deepwood"],:root[data-theme="arcane-tide"],:root[data-theme="bloodmoon"],:root[data-theme="wild-surge"] { --c-art-veil: rgba(0, 0, 0, .34); --c-art-veil-weak: rgba(0, 0, 0, .16); } :root[data-theme="parchment"],:root[data-theme="daylight"],:root[data-theme="cobalt-reach"],:root[data-theme="tidepool"],:root[data-theme="verdant-court"],:root[data-theme="amethyst-veil"],:root[data-theme="winterspark"] { --c-art-veil: rgba(255, 255, 255, .44); --c-art-veil-weak: rgba(255, 255, 255, .24); } * {box-sizing: border-box;} html,body,#root {height: 100%;} body {margin: 0; font-family: var(--font-body); font-size: .9375rem; line-height: 1.55; background: var(--c-bg); color: var(--c-text); -webkit-font-smoothing: antialiased; overflow-x: hidden;} .theme-backdrop {position: fixed; inset: 0; z-index: -1; pointer-events: none; overflow: hidden;} .theme-backdrop__img {position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; transform: scale(1.12); filter: blur(13px) saturate(1.06); opacity: 0; transition: opacity 1.2s ease;} .theme-backdrop__img.is-loaded {opacity: 1;} .theme-backdrop__scrim {position: absolute; inset: 0; background: linear-gradient(180deg,color-mix(in srgb,var(--c-bg) 74%,transparent) 0%,color-mix(in srgb,var(--c-bg) 56%,transparent) 30%,color-mix(in srgb,var(--c-bg) 68%,transparent) 100%),linear-gradient(var(--c-art-veil-weak),var(--c-art-veil-weak));} @media (prefers-reduced-motion: reduce) {.theme-backdrop__img {transition: none;}} h1,h2,h3,h4 {font-family: var(--font-display); font-weight: 700; line-height: 1.15; margin: 0; color: var(--c-text); overflow-wrap: break-word;} p {margin: 0 0 var(--sp-3);} .visually-hidden {position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0);} :focus-visible {outline: var(--focus-ring); outline-offset: var(--focus-offset);} ::selection {background: var(--c-gold); color: var(--c-on-gold);} :root[data-theme="dark"] body {background: radial-gradient(1200px 700px at 50% -10%,rgba(217,169,79,.05),transparent 60%),var(--c-bg);} html {scrollbar-width: thin; scrollbar-color: var(--c-border) transparent;} *::-webkit-scrollbar {width: 10px; height: 10px;} *::-webkit-scrollbar-track {background: transparent;} *::-webkit-scrollbar-thumb {background-color: var(--c-border); border-radius: 999px; border: 2px solid transparent; background-clip: padding-box;} *::-webkit-scrollbar-thumb:hover {background-color: var(--c-text-faint);} input,select,textarea {font: inherit; color: var(--c-text); background: var(--c-surface); border: 1px solid var(--c-border); border-radius: var(--radius-sm); padding: .45rem .7rem;} input::placeholder,textarea::placeholder {color: var(--c-text-faint);} select {cursor: pointer;} textarea {font-family: var(--font-body);} input[type="checkbox"],input[type="radio"] {width: 1rem; height: 1rem; padding: 0; border: none; background: none; accent-color: var(--c-gold);} input[type="range"] {accent-color: var(--c-gold);} input:disabled,select:disabled,textarea:disabled {opacity: .5; cursor: not-allowed;} .label-caps {font-family: var(--font-mono); font-size: .6875rem; font-weight: 600; letter-spacing: .12em; text-transform: uppercase; color: var(--c-text-faint);} .statblock-rule {height: 5px; border: none; margin: var(--sp-2) 0; background: linear-gradient(90deg,var(--c-gold),var(--c-gold-deep)); clip-path: polygon(0 50%,2% 0,98% 20%,100% 50%,98% 80%,2% 100%);} button {font-family: var(--font-body); font-size: .875rem; font-weight: 600; cursor: pointer; padding: .45rem .9rem; border: 1px solid var(--c-border); background: var(--c-surface-2); color: var(--c-text); border-radius: var(--radius-sm); box-shadow: 0 1px 3px rgba(0,0,0,.14); transition: transform .11s ease,box-shadow .11s ease,background .11s ease,border-color .11s ease;} button:hover:not(:disabled) {border-color: var(--c-gold); background: var(--c-surface-3); box-shadow: 0 3px 8px rgba(0,0,0,.18);} button:active:not(:disabled) {background: var(--c-surface-3); border-color: var(--c-gold-deep); transform: translateY(1px) scale(.985); box-shadow: 0 1px 2px rgba(0,0,0,.16);} button:focus-visible {outline: 2px solid var(--c-gold); outline-offset: 2px;} button:disabled {opacity: .45; cursor: not-allowed; box-shadow: none;} @media (prefers-reduced-motion: reduce) {button {transition: none;} button:active:not(:disabled) {transform: none;}} button.btn-primary {background: var(--c-gold); border-color: var(--c-gold); color: var(--c-on-gold);} button.btn-primary:hover:not(:disabled) {background: var(--c-gold-bright); border-color: var(--c-gold-bright);} button.btn-primary:active:not(:disabled) {background: var(--c-gold-deep); border-color: var(--c-gold-deep);} button.link-button {border: 1px solid color-mix(in srgb,var(--c-gold) 35%,var(--c-border)); background: color-mix(in srgb,var(--c-surface) 78%,transparent); padding: .35rem .8rem; font-weight: 600; color: var(--c-gold); text-decoration: none; border-radius: var(--radius-md); box-shadow: 0 1px 3px rgba(0,0,0,.14);} button.link-button:hover:not(:disabled) {text-decoration: none; background: color-mix(in srgb,var(--c-gold) 12%,var(--c-surface)); border-color: var(--c-gold); box-shadow: 0 3px 8px rgba(0,0,0,.18);} button.link-button:active:not(:disabled) {background: color-mix(in srgb,var(--c-gold) 18%,var(--c-surface)); color: var(--c-gold-deep);} button.link-button:disabled {text-decoration: none;} .theme-toggle {border-radius: 999px; width: 2.1rem; height: 2.1rem; padding: 0; display: inline-flex; align-items: center; justify-content: center; font-size: 1rem; line-height: 1;} .voice-toggle {border-radius: 999px; width: 2.1rem; height: 2.1rem; padding: 0; display: inline-flex; align-items: center; justify-content: center; font-size: 1rem; line-height: 1; color: var(--c-text-faint);} .voice-toggle--on {color: var(--c-on-teal); background: var(--c-teal); border-color: var(--c-teal);} .voice-toggle--on:hover:not(:disabled) {background: var(--c-teal); border-color: var(--c-teal-glow);} .voice-controls {display: flex; flex-direction: column; gap: var(--sp-1);} .voice-controls__row {display: flex; align-items: center; gap: var(--sp-2); min-height: 2.2rem;} .mic-button {border-radius: 999px; width: 2.4rem; height: 2.4rem; padding: 0; flex: none; display: inline-flex; align-items: center; justify-content: center; font-size: 1.05rem; line-height: 1; touch-action: none;} .mic-button--listening {color: var(--c-on-gold); background: var(--c-gold); border-color: var(--c-gold-bright);} .voice-controls__live {font-size: .85rem; font-style: italic; color: var(--c-teal); min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;} .voice-note {font-size: .72rem; color: var(--c-text-faint); margin: 0;} .voice-controls__error {font-size: .75rem; color: var(--c-danger);} .voice-controls__review {display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-2); padding: var(--sp-2); border: 1px solid var(--c-border); border-left: 3px solid var(--c-gold); border-radius: var(--radius-sm); background: var(--c-surface-2);} .voice-controls__heard {font-size: .85rem; color: var(--c-text); min-width: 0; flex: 1 1 12rem;} .voice-controls__heard em {color: var(--c-gold);} .voice-controls__review button {font-size: .78rem; padding: .32rem .7rem;} .chat-entry--speaking {box-shadow: inset 3px 0 0 var(--c-teal);} .chat-entry__speaking-note {margin-left: .4rem; color: var(--c-teal);} .chat-entry__replay {margin-left: .4rem; padding: 0 .28rem; font-size: .72rem; line-height: 1.4; color: var(--c-text-faint); background: transparent; border: 1px solid var(--c-hairline); border-radius: 5px; cursor: pointer; vertical-align: baseline; opacity: .35; transition: opacity .12s ease,color .12s ease,border-color .12s ease;} .chat-entry:hover .chat-entry__replay,.chat-entry__replay:focus-visible {opacity: 1;} .chat-entry__replay:hover {color: var(--c-gold-bright); border-color: var(--c-gold-deep);} @media (prefers-reduced-motion: no-preference) {.mic-button--listening {animation: mic-pulse 1.4s ease-in-out infinite;} .chat-entry__speaking-note {animation: speaking-bob 1.1s ease-in-out infinite; display: inline-block;} @keyframes mic-pulse {0%,100% {box-shadow: 0 0 0 0 var(--c-gold-glow);} 50% {box-shadow: 0 0 0 6px transparent;}} @keyframes speaking-bob {0%,100% {transform: translateY(0);} 50% {transform: translateY(-2px);}}} .launcher {min-height: 100%; display: flex; flex-direction: column; align-items: center; padding: var(--sp-6) var(--sp-4);} .launcher__topbar {width: 100%; max-width: 640px; display: flex; justify-content: space-between; align-items: center; gap: var(--sp-2);} .launcher__hero {max-width: 640px; text-align: center; margin-top: max(4vh,var(--sp-5));} .launcher__kicker {margin-bottom: var(--sp-2); color: var(--c-gold);} .launcher h1 {font-size: clamp(2.6rem,8vw,4rem); letter-spacing: .01em;} .launcher__adventure {font-family: var(--font-display); font-size: clamp(1.15rem,3.5vw,1.5rem); font-style: italic; color: var(--c-text-dim); margin: var(--sp-2) 0 0;} .launcher .statblock-rule {width: min(320px,70%); margin: var(--sp-4) auto;} .launcher__subtitle {color: var(--c-text-dim); max-width: 52ch; margin: 0 auto var(--sp-4);} .launcher__mode {display: inline-flex; align-items: center; gap: var(--sp-2); font-size: .8125rem; color: var(--c-text-dim); background: var(--c-surface); border: 1px solid var(--c-hairline); border-radius: 999px; padding: .3rem .9rem; margin-bottom: var(--sp-5);} .mode-badge {font-family: var(--font-mono); font-size: .6875rem; font-weight: 600; letter-spacing: .1em; padding: .1rem .5rem; border-radius: 999px; background: var(--c-teal-glow); color: var(--c-teal); border: 1px solid var(--c-teal-dim);} .launcher__new {font-size: 1.05rem; padding: .8rem 2.2rem; border-radius: var(--radius-md); box-shadow: var(--shadow-card);} .launcher__resume {width: 100%; max-width: 480px; margin-top: var(--sp-6);} .launcher__resume h2 {font-size: 1.25rem; text-align: center; margin-bottom: var(--sp-3);} .launcher__resume ul {list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: var(--sp-2);} .session-row {display: flex; align-items: stretch; gap: var(--sp-2);} .session-row__resume {flex: 1; min-width: 0; display: flex; justify-content: space-between; align-items: center; gap: var(--sp-3); padding: .7rem 1rem; background: var(--c-surface); border: 1px solid var(--c-hairline); border-radius: var(--radius-md); font-weight: 400; text-align: left;} .session-row__resume:hover {border-color: var(--c-gold);} .launcher__resume .session-name {flex: 1; min-width: 0; color: var(--c-gold); overflow: hidden; text-overflow: ellipsis; white-space: nowrap;} .launcher__resume .session-when {font-size: .8125rem; color: var(--c-text-faint); white-space: nowrap;} .icon-button {flex: none; display: inline-flex; align-items: center; justify-content: center; min-width: 2.2rem; padding: .3rem .5rem; background: var(--c-surface); border: 1px solid var(--c-hairline); border-radius: var(--radius-md); color: var(--c-text-faint); font-size: .9rem; line-height: 1;} .icon-button:hover {color: var(--c-gold); border-color: var(--c-gold);} .icon-button--danger:hover {color: var(--c-danger); border-color: var(--c-danger);} .select-toolbar {display: flex; align-items: center; gap: var(--sp-2); flex-wrap: wrap; margin-bottom: var(--sp-2); font-size: .875rem;} .select-toolbar__spacer {flex: 1;} button.btn-danger {padding: .3rem .8rem; font-size: .8125rem; font-weight: 600; color: var(--c-danger); background: var(--c-danger-soft); border: 1px solid var(--c-danger); border-radius: var(--radius-sm);} button.btn-danger:hover:not(:disabled) {color: var(--c-bg-deep); background: var(--c-danger);} button.btn-danger:active:not(:disabled) {color: var(--c-bg-deep); background: var(--c-danger); border-color: var(--c-danger);} button.btn-danger:disabled {opacity: .45;} .delete-confirm {display: flex; align-items: center; gap: var(--sp-2); flex-wrap: wrap; padding: .55rem 1rem; margin-bottom: var(--sp-2); font-size: .875rem; background: var(--c-danger-soft); border: 1px solid var(--c-danger); border-radius: var(--radius-md);} .delete-confirm--row {flex: 1; min-width: 0; margin-bottom: 0;} .delete-confirm__text {flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;} .session-row__select {flex: 1; min-width: 0; display: flex; align-items: center; gap: var(--sp-3); padding: .7rem 1rem; background: var(--c-surface); border: 1px solid var(--c-hairline); border-radius: var(--radius-md); cursor: pointer;} .session-row__select:hover {border-color: var(--c-gold);} .session-row__select input[type="checkbox"] {flex: none; width: 1rem; height: 1rem; accent-color: var(--c-gold);} .session-rename {flex: 1; display: flex; align-items: stretch; gap: var(--sp-2); min-width: 0;} .session-rename input {flex: 1; min-width: 0; padding: .55rem 1rem; font: inherit; color: var(--c-text); background: var(--c-surface); border: 1px solid var(--c-gold); border-radius: var(--radius-md);} .session-rename input:focus-visible {outline: none; box-shadow: 0 0 0 2px color-mix(in srgb,var(--c-gold) 35%,transparent);} .session-ended-chip {font-family: var(--font-mono); font-size: .625rem; letter-spacing: .08em; text-transform: uppercase; color: var(--c-text-faint); border: 1px solid var(--c-hairline); border-radius: 999px; padding: .05rem .45rem;} .session-page {height: 100dvh; display: flex; flex-direction: column; overflow: hidden;} .session-page__header {display: flex; align-items: center; gap: var(--sp-4); padding: var(--sp-2) var(--sp-4); background: var(--c-bg-deep); border-bottom: 1px solid var(--c-hairline); flex-wrap: wrap;} .session-page__title {font-size: 1.15rem; white-space: nowrap;} .session-page__title .title-adventure {color: var(--c-gold);} .session-page__titleblock {display: flex; flex-direction: column; gap: .1rem; min-width: 0;} .map-breadcrumb {margin: 0; font-size: .78rem; color: var(--c-text-faint); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 26rem;} .session-page__name {display: flex; align-items: center; gap: var(--sp-2); font-size: .8125rem; color: var(--c-text-faint);} .session-page__name > span {overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 18rem;} .session-page__name .icon-button {min-width: 1.6rem; padding: .1rem .3rem; font-size: .75rem; border: none; background: none;} .session-page__name input {padding: .15rem .5rem; font-size: .8125rem;} .session-page__meta {display: flex; gap: var(--sp-2); align-items: center; margin-left: auto;} .narrator-voice-select select {background: var(--c-bg-deep, rgba(18, 16, 14, .9)); color: var(--c-text); border: 1px solid var(--c-border); border-radius: 6px; padding: 2px 6px; font-size: .8rem; max-width: 12rem;} .narrator-voice-select select:hover {border-color: var(--c-gold);} .narrator-voice {display: inline-flex; flex-direction: column; align-items: flex-start; gap: 4px;} .narrator-voice-note {margin: 0; max-width: 15rem; font-size: .68rem; line-height: 1.35; color: var(--c-text-faint);} .sr-only {position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0;} .beat-stepper {display: flex; align-items: center; gap: var(--sp-2); min-width: 0;} .beat-stepper__step {display: flex; align-items: center; gap: .4rem;} .beat-stepper__dot {width: 9px; height: 9px; border-radius: 999px; border: 1.5px solid var(--c-text-faint); background: transparent; flex: none;} .beat-stepper__step--done .beat-stepper__dot {background: var(--c-gold-deep); border-color: var(--c-gold-deep);} .beat-stepper__step--current .beat-stepper__dot {background: var(--c-gold); border-color: var(--c-gold); box-shadow: 0 0 0 3px var(--c-gold-glow);} .beat-stepper__name {font-size: .75rem; color: var(--c-text-faint); white-space: nowrap;} .beat-stepper__step--current .beat-stepper__name {color: var(--c-gold); font-weight: 600;} .beat-stepper__sep {width: 14px; height: 1px; background: var(--c-hairline); flex: none;} .turn-banner {display: flex; align-items: center; gap: var(--sp-2); padding: var(--sp-2) var(--sp-4); border-bottom: 1px solid var(--c-hairline); background: var(--c-surface); font-size: .875rem; min-height: 2.4rem;} .turn-banner--player {background: linear-gradient(90deg,var(--c-gold-glow),transparent 70%); border-left: 3px solid var(--c-gold);} .turn-banner--other {border-left: 3px solid var(--c-teal-dim);} .turn-banner--idle {border-left: 3px solid var(--c-hairline); color: var(--c-text-dim);} .turn-banner__round {font-family: var(--font-mono); font-size: .6875rem; letter-spacing: .1em; text-transform: uppercase; color: var(--c-text-faint);} .turn-banner__who {font-weight: 600;} .turn-banner--player .turn-banner__who {color: var(--c-gold);} .turn-banner__hint {color: var(--c-text-faint); font-size: .8125rem;} .session-layout {flex: 1; min-height: 0; display: grid; gap: var(--sp-3); padding: var(--sp-3);} .panel {min-height: 0; min-width: 0; display: flex; flex-direction: column; gap: var(--sp-3);} .panel--scroll {overflow-y: auto;} @media (min-width: 1200px) {.session-layout {grid-template-columns: minmax(0,1.35fr) minmax(360px,1fr) 330px; grid-template-rows: minmax(0,1fr) auto; grid-template-areas: "map story party" "map controls party";} .panel--map {grid-area: map; overflow-y: auto;} .panel--story {grid-area: story;} .panel--controls {grid-area: controls;} .panel--party {grid-area: party; overflow-y: auto;} .session-tabs {display: none;}} @media (min-width: 900px) and (max-width: 1199.98px) {.session-layout {grid-template-columns: minmax(0,1.2fr) minmax(340px,1fr); grid-template-rows: auto minmax(0,1fr) auto; grid-template-areas: "map story" "party story" "party controls";} .panel--map {grid-area: map;} .panel--story {grid-area: story;} .panel--controls {grid-area: controls;} .panel--party {grid-area: party; overflow-y: auto;} .session-tabs {display: none;}} @media (max-width: 899.98px) {.session-page {height: auto; min-height: 100dvh; overflow: visible;} .session-layout {grid-template-columns: 1fr; grid-template-rows: minmax(0,1fr) auto; grid-template-areas: "active" "controls"; flex: 1;} .panel {grid-area: active; display: none;} .panel--active {display: flex;} .session-layout .panel--controls {grid-area: controls; display: flex; position: sticky; bottom: 0; z-index: 5; background: var(--c-bg); padding-top: var(--sp-2);} .session-tabs {display: flex; border-bottom: 1px solid var(--c-hairline); background: var(--c-bg-deep);} .session-tabs button {flex: 1; border: none; border-radius: 0; background: none; padding: .6rem 0; color: var(--c-text-faint); font-family: var(--font-mono); font-size: .75rem; letter-spacing: .1em; text-transform: uppercase; border-bottom: 2px solid transparent;} .session-tabs button.active {color: var(--c-gold); border-bottom-color: var(--c-gold);} .session-page__title {font-size: 1rem;} .beat-stepper__name {display: none;} .beat-stepper__step--current .beat-stepper__name {display: inline;}} .card {background: var(--c-surface); border: 1px solid var(--c-hairline); border-radius: var(--radius-lg); box-shadow: var(--shadow-card);} .card__header {display: flex; align-items: baseline; justify-content: space-between; gap: var(--sp-2); padding: var(--sp-3) var(--sp-4) 0;} .card__title {font-size: 1.05rem;} .error-banner {background: var(--c-danger-soft); color: var(--c-danger); border: 1px solid var(--c-danger); border-radius: var(--radius-md); padding: var(--sp-2) var(--sp-4); margin: var(--sp-2) var(--sp-3) 0; font-size: .875rem;} .voice-prime-banner {display: block; width: calc(100% - 2 * var(--sp-3)); background: var(--c-teal-glow); color: var(--c-teal); border: 1px solid var(--c-teal); border-radius: var(--radius-md); padding: var(--sp-2) var(--sp-4); margin: var(--sp-2) var(--sp-3) 0; font-size: .875rem; font-weight: 600; cursor: pointer; text-align: center; animation: voice-prime-pulse 2s ease-in-out infinite;} .voice-prime-banner:hover {background: var(--c-teal); color: var(--c-on-teal);} @keyframes voice-prime-pulse {0%,100% {opacity: 1;} 50% {opacity: .7;}} .map-view {padding: var(--sp-3); display: flex; flex-direction: column; gap: var(--sp-2);} .map-view__stage {width: 100%; display: flex; justify-content: center; align-items: center; overflow: hidden; max-height: 78vh; border-radius: var(--radius-md); cursor: grab; touch-action: none; user-select: none;} .map-view__stage.is-dragging {cursor: grabbing;} .map-view__board {transition: transform 90ms ease-out;} .map-view__stage.is-dragging .map-view__board {transition: none;} .map-view__board--travel-zoom {transition: transform .34s cubic-bezier(.3,0,.2,1);} .map-view__stage--just-arrived {animation: map-view-arrive .32s ease-out;} @keyframes map-view-arrive {from {opacity: 0;} to {opacity: 1;}} .map-view__submap-hitbox {position: absolute; border-radius: 50%; border: none; background: transparent; cursor: pointer; padding: 0;} .map-view__submap-hitbox:hover {background: rgb(255 255 255 / 12%);} .map-view__submap-hitbox:disabled {cursor: default; pointer-events: none;} .map-view__return-to-parent {align-self: center; font-size: .82rem;} .map-view__zoom {display: flex; align-items: center; justify-content: center; gap: var(--sp-2); font-size: .8rem; color: var(--c-text-dim);} .map-view__zoom button {min-width: 1.9rem; padding: 0 var(--sp-2);} .map-view__zoom-value {min-width: 3rem; text-align: center; font-variant-numeric: tabular-nums;} .map-view__board {position: relative; line-height: 0;} .living-map {position: absolute; top: 0; left: 0; overflow: hidden; pointer-events: none;} .living-map__base {position: absolute; max-width: none; user-select: none;} .living-map__fx {position: absolute; inset: 0; width: 100%; height: 100%;} .vision-fog-fx {position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none;} .vision-fog-fx canvas {display: block;} .map-view__submap-markers {position: absolute; top: 0; left: 0; pointer-events: none;} .tile-base-layer {position: absolute; top: 0; left: 0; inset: 0; width: 100%; height: 100%; pointer-events: none;} .tile-base-layer canvas {display: block;} .map-view__tiles-toggle {display: flex; align-items: center; justify-content: flex-end; gap: var(--sp-2); font-size: .8rem; color: var(--c-text-dim);} .map-source {border-top: 1px dotted var(--c-border); padding-top: var(--sp-1);} .map-source__summary {cursor: pointer; font-family: var(--font-mono); font-size: .68rem; letter-spacing: .08em; text-transform: uppercase; color: var(--c-text-faint);} .map-source__summary:hover {color: var(--c-gold);} .map-source__body {display: flex; flex-direction: column; gap: var(--sp-2); padding: var(--sp-2) 0 var(--sp-1);} .map-source__row {display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-2);} .map-source__upload {font-size: .8rem; font-weight: 600; cursor: pointer; padding: .35rem .75rem; border: 1px solid var(--c-border); background: var(--c-surface-2); color: var(--c-text); border-radius: var(--radius-sm);} .map-source__upload:hover {border-color: var(--c-gold); background: var(--c-surface-3);} .map-source__upload input[type="file"] {display: none;} .map-source__row--calibration label {display: inline-flex; align-items: center; gap: .4rem; font-family: var(--font-mono); font-size: .68rem; letter-spacing: .06em; text-transform: uppercase; color: var(--c-text-dim);} .map-source__row--calibration input[type="number"] {width: 5.2rem; padding: .3rem .4rem; font-family: var(--font-mono); font-size: .8rem; color: var(--c-text); background: var(--c-surface-2); border: 1px solid var(--c-border); border-radius: var(--radius-sm);} .map-source__row--calibration input[type="number"]:focus-visible {outline: 2px solid var(--c-gold); outline-offset: 1px;} .map-source__row--calibration button {font-size: .75rem; padding: .3rem .7rem;} .map-source__hint {font-size: .72rem; color: var(--c-text-faint); margin: 0;} .map-source__error {font-size: .75rem; color: var(--c-danger); margin: 0;} .map-view__hint {font-size: .75rem; color: var(--c-text-faint); margin: 0; text-align: center;} .map-view__hint--active {color: var(--c-gold);} .initiative-tracker {padding: var(--sp-3) var(--sp-4);} .initiative-tracker h3 {font-size: 1rem; display: flex; align-items: baseline; gap: var(--sp-2);} .initiative-tracker__round {font-family: var(--font-mono); font-size: .6875rem; letter-spacing: .1em; text-transform: uppercase; color: var(--c-text-faint);} .initiative-tracker ol {list-style: none; margin: var(--sp-2) 0 0; padding: 0; display: flex; flex-direction: column; gap: 2px;} .initiative-tracker li {display: flex; align-items: center; gap: var(--sp-2); padding: .3rem .5rem; border-radius: var(--radius-sm); font-size: .8125rem; border-left: 3px solid transparent; color: var(--c-text-dim);} .initiative-tracker li.current {background: var(--c-gold-glow); border-left-color: var(--c-gold); color: var(--c-text); font-weight: 600;} .initiative-tracker .init-score {font-family: var(--font-mono); font-size: .75rem; color: var(--c-text-faint); min-width: 1.6rem; text-align: right;} .initiative-tracker .init-hp {margin-left: auto; font-family: var(--font-mono); font-size: .75rem; color: var(--c-text-faint);} .initiative-tracker li.down {opacity: .5; text-decoration: line-through;} .condition-chip {font-family: var(--font-mono); font-size: .625rem; letter-spacing: .06em; text-transform: uppercase; background: var(--c-teal-glow); color: var(--c-teal); border-radius: 999px; padding: .05rem .4rem;} .party-vitals {padding: var(--sp-3) var(--sp-4); display: flex; flex-direction: column; gap: var(--sp-3);} .vital {display: flex; flex-direction: column; gap: .25rem;} .vital__row {display: flex; align-items: baseline; justify-content: space-between; gap: var(--sp-2);} .vital__name {font-weight: 600; font-size: .875rem;} .vital__name--companion {color: var(--c-teal);} .vital__hp {font-family: var(--font-mono); font-size: .75rem; color: var(--c-text-dim);} .hp-bar {height: 7px; border-radius: 999px; background: var(--c-surface-3); overflow: hidden;} .hp-bar__fill {height: 100%; border-radius: 999px; background: var(--c-hp-ok);} .hp-bar__fill--warn {background: var(--c-gold);} .hp-bar__fill--low {background: var(--c-danger);} .slot-pips {display: flex; align-items: center; gap: .3rem;} .slot-pips__label {margin-right: .2rem;} .slot-pip {width: 9px; height: 9px; border-radius: 999px; border: 1.5px solid var(--c-teal-dim); background: var(--c-teal);} .slot-pip--spent {background: transparent; opacity: .55;} .vital--down .vital__name {color: var(--c-danger);} .vital--pending {opacity: .75;} .vital--pending .vital__name {color: var(--c-text-dim); font-style: italic;} .pending-chip {font-family: var(--font-mono); font-size: .625rem; letter-spacing: .06em; text-transform: uppercase; background: var(--c-gold-glow, rgba(217, 169, 79, .14)); color: var(--c-gold); border: 1px dashed var(--c-gold-deep); border-radius: 999px; padding: .05rem .45rem; white-space: nowrap;} .vital__pending-meta {font-size: .75rem; color: var(--c-text-faint);} .party-add {padding: var(--sp-3) var(--sp-4); display: flex; flex-direction: column; gap: var(--sp-2);} .party-add__head {display: flex; align-items: center; justify-content: space-between; gap: var(--sp-2);} .party-add__body {display: flex; flex-direction: column; gap: var(--sp-2);} .party-add__hint {margin: 0; font-size: .8125rem; color: var(--c-text-dim);} .party-add__note {display: flex; flex-direction: column; gap: .25rem;} .party-add__note input {font-family: var(--font-body); font-size: .8125rem; padding: .4rem .55rem; border: 1px solid var(--c-border); border-radius: var(--radius-sm); background: var(--c-surface); color: var(--c-text); min-width: 0;} .party-add__list {list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--sp-2);} .party-add__row {display: flex; align-items: center; justify-content: space-between; gap: var(--sp-2); padding: .35rem .5rem; border: 1px solid var(--c-border); border-radius: var(--radius-sm); background: var(--c-surface-2);} .party-add__who {display: flex; flex-direction: column; min-width: 0;} .party-add__name {font-weight: 600; font-size: .875rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;} .party-add__meta {font-size: .75rem; color: var(--c-text-faint);} .party-add__error {margin: 0; font-size: .8125rem; color: var(--c-danger); overflow-wrap: anywhere;} .character-sheet-panel {overflow: hidden;} .character-sheet-panel__tabs {display: flex; border-bottom: 1px solid var(--c-hairline);} .character-sheet-panel__tabs button {flex: 1; border: none; border-radius: 0; background: var(--c-surface-2); padding: .55rem 0; font-family: var(--font-display); font-size: .95rem; font-weight: 600; color: var(--c-text-dim);} .character-sheet-panel__tabs button.active {background: var(--c-surface); color: var(--c-gold);} .sheet {padding: var(--sp-3) var(--sp-4) var(--sp-4); font-size: .8125rem;} .sheet h3 {font-size: 1.3rem;} .sheet__meta {font-style: italic; color: var(--c-text-dim); font-size: .8125rem; margin: 0 0 var(--sp-1);} .sheet__hook {font-style: italic; color: var(--c-text-dim);} .sheet h4 {font-family: var(--font-mono); font-size: .6875rem; font-weight: 600; letter-spacing: .12em; text-transform: uppercase; color: var(--c-gold); margin: var(--sp-3) 0 var(--sp-1);} .sheet__vitals {font-family: var(--font-mono); font-size: .75rem; color: var(--c-text-dim); margin: 0;} .sheet ul {list-style: none; margin: 0; padding: 0;} .sheet li {padding: .2rem 0; border-bottom: 1px dotted var(--c-hairline);} .sheet li:last-child {border-bottom: none;} .sheet__quiet {color: var(--c-text-faint); font-size: .75rem;} .ability-row {display: grid; grid-template-columns: repeat(6,1fr); gap: var(--sp-1); margin: var(--sp-2) 0;} .ability-row__item {background: var(--c-surface-2); border: 1px solid var(--c-hairline); border-radius: var(--radius-sm); padding: .3rem .1rem; text-align: center; display: flex; flex-direction: column;} .ability-row__abbr {font-family: var(--font-mono); font-size: .5625rem; letter-spacing: .1em; color: var(--c-text-faint);} .ability-row__mod {font-family: var(--font-mono); font-size: .8125rem; font-weight: 600; color: var(--c-text);} .ability-row__score {font-size: .625rem; color: var(--c-text-faint);} .exhaustion-stepper {display: flex; align-items: center; gap: var(--sp-2); margin: var(--sp-2) 0; font-size: .8125rem; color: var(--c-text-dim);} .exhaustion-stepper__value {font-family: var(--font-mono); font-weight: 600; color: var(--c-text); min-width: 1ch; text-align: center;} .equipment-row {list-style: none;} .equipment-row label {display: flex; align-items: center; gap: var(--sp-2); cursor: pointer;} .equipment-add {display: flex; align-items: center; gap: var(--sp-2); margin: var(--sp-2) 0;} .equipment-add select {flex: 1;} .panel--story .chat-log {flex: 1; min-height: 0;} .chat-log {overflow-y: auto; padding: var(--sp-3) var(--sp-4); display: flex; flex-direction: column; gap: var(--sp-3); scroll-behavior: smooth;} @media (max-width: 899.98px) {.panel--story .chat-log {min-height: 40dvh;}} .chat-entry {border-left: 2px solid var(--c-hairline); padding-left: var(--sp-3);} .chat-entry__speaker {display: block; font-family: var(--font-mono); font-size: .625rem; font-weight: 600; text-transform: uppercase; letter-spacing: .14em; color: var(--c-text-faint); margin-bottom: .15rem;} .chat-entry__text {margin: 0; white-space: pre-wrap;} .chat-entry--narrator {border-left-color: var(--c-teal-dim);} .chat-entry--narrator .chat-entry__speaker {color: var(--c-teal);} .chat-entry--companion {border-left-color: var(--c-teal-dim); background: linear-gradient(90deg,var(--c-teal-glow),transparent 55%); border-radius: 0 var(--radius-sm) var(--radius-sm) 0; padding-top: .3rem; padding-bottom: .3rem;} .chat-entry--companion .chat-entry__speaker {color: var(--c-teal);} .chat-entry--companion .chat-entry__text {font-style: italic;} .chat-entry--player {border-left-color: var(--c-gold);} .chat-entry--player .chat-entry__speaker {color: var(--c-gold);} .chat-entry--system .chat-entry__speaker {color: var(--c-text-faint);} .dice-chip {font-family: var(--font-mono); font-size: .78em; background: var(--c-surface-2); border: 1px solid var(--c-hairline); border-radius: var(--radius-sm); padding: .05rem .35rem; white-space: nowrap;} .dmg-chip {font-family: var(--font-mono); font-size: .78em; color: var(--c-danger); background: var(--c-danger-soft); border-radius: var(--radius-sm); padding: .05rem .35rem; white-space: nowrap;} .heal-chip {font-family: var(--font-mono); font-size: .78em; color: var(--c-teal); background: var(--c-teal-glow); border-radius: var(--radius-sm); padding: .05rem .35rem; white-space: nowrap;} .story-controls {display: flex; flex-direction: column; gap: var(--sp-2);} .intent-box {display: flex; gap: var(--sp-2);} .intent-box input,.intent-box textarea {flex: 1; min-width: 0; font-family: var(--font-body); font-size: .9375rem; padding: .6rem .9rem; border: 1px solid var(--c-border); border-radius: var(--radius-md); background: var(--c-surface); color: var(--c-text);} .intent-box textarea {resize: vertical;} .intent-box input::placeholder,.intent-box textarea::placeholder {color: var(--c-text-faint);} .intent-box input:focus-visible,.intent-box textarea:focus-visible {outline: var(--focus-ring); outline-offset: 0; border-color: var(--c-gold);} .intent-box button {border-radius: var(--radius-md);} .action-controls {display: flex; flex-wrap: wrap; gap: var(--sp-2); align-items: center; padding: var(--sp-2) var(--sp-3); background: var(--c-surface); border: 1px solid var(--c-hairline); border-radius: var(--radius-md); min-height: 3rem;} .action-controls__group {display: flex; flex-wrap: wrap; gap: var(--sp-2); align-items: center;} .action-controls__label {font-family: var(--font-mono); font-size: .6875rem; font-weight: 600; letter-spacing: .12em; text-transform: uppercase; color: var(--c-text-faint);} .action-controls__persuade {background: var(--c-gold); border-color: var(--c-gold); color: var(--c-on-gold); font-weight: 700;} .action-controls__persuade:hover:not(:disabled) {background: var(--c-gold-bright); border-color: var(--c-gold-bright);} .action-controls--waiting {color: var(--c-text-faint); font-style: italic; justify-content: center;} .action-controls--ended {justify-content: center; font-family: var(--font-display); font-size: 1.05rem; color: var(--c-gold);} .check-result {font-family: var(--font-mono); font-size: .6875rem; text-transform: uppercase; letter-spacing: .06em;} .check-result--success {color: var(--c-hp-ok);} .check-result--fail {color: var(--c-danger);} .busy-dot {display: inline-block; width: 6px; height: 6px; border-radius: 999px; background: var(--c-gold); margin-left: 2px;} .attribution-footer {padding: var(--sp-2) var(--sp-4); font-size: .6875rem; color: var(--c-text-faint); background: var(--c-bg-deep); border-top: 1px solid var(--c-hairline);} .attribution-footer summary {cursor: pointer; font-family: var(--font-mono); letter-spacing: .06em; text-transform: uppercase; font-size: .625rem;} .attribution-footer p {margin: var(--sp-2) 0 0; max-width: 90ch;} .loading,.app-error {min-height: 60dvh; display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; padding: var(--sp-6); color: var(--c-text-dim); font-family: var(--font-display); font-size: 1.15rem;} .app-error {color: var(--c-danger); font-family: var(--font-body); font-size: .9375rem; gap: var(--sp-3);} .app-error__detail {color: var(--c-text-dim); font-size: .8125rem; max-width: 60ch; overflow-wrap: anywhere;} .session-notice {display: flex; align-items: baseline; gap: var(--sp-3); width: min(100%,640px); margin: var(--sp-4) auto 0; padding: var(--sp-3) var(--sp-4); border: 1px solid var(--c-border); border-left: 3px solid var(--c-gold); border-radius: var(--radius-md); background: var(--c-surface); color: var(--c-text-dim); font-size: .875rem; text-align: left;} .session-notice span {flex: 1;} @media (prefers-reduced-motion: no-preference) {.chat-entry {animation: entry-in .35s ease-out both;} @keyframes entry-in {from {opacity: 0; transform: translateY(4px);} to {opacity: 1; transform: none;}} .hp-bar__fill {transition: width .5s ease,background-color .5s ease;} button {transition: background-color .15s ease,border-color .15s ease,transform .08s ease;} button:active:not(:disabled) {transform: translateY(1px);} button.link-button:active:not(:disabled) {transform: none;} .turn-banner--player {animation: banner-glow 2.4s ease-in-out infinite;} @keyframes banner-glow {0%,100% {box-shadow: inset 0 0 0 0 transparent;} 50% {box-shadow: inset 0 0 24px -12px var(--c-gold);}} .action-controls__persuade {animation: persuade-pulse 1.8s ease-in-out infinite;} @keyframes persuade-pulse {0%,100% {box-shadow: 0 0 0 0 var(--c-gold-glow);} 50% {box-shadow: 0 0 0 6px var(--c-gold-glow);}} .busy-dot {animation: busy-blink 1s ease-in-out infinite;} @keyframes busy-blink {0%,100% {opacity: .25;} 50% {opacity: 1;}}} .roster-page,.builder-page,.levelup-page {min-height: 100vh; width: 100%; max-width: 95vw; margin-inline: auto; display: flex; flex-direction: column; gap: var(--sp-4); padding: var(--sp-4) clamp(var(--sp-3),4vw,var(--sp-7)); background: radial-gradient(ellipse 90% 60% at 50% -10%,var(--c-gold-glow),transparent 60%);} .roster-page__header,.builder-page__header {display: flex; align-items: center; justify-content: space-between; gap: var(--sp-3); flex-wrap: wrap;} .roster-page__title,.builder-page__title {font-family: var(--font-display); font-size: clamp(1.4rem,3.5vw,2rem); font-weight: 700; color: var(--c-text); margin: 0; display: flex; align-items: baseline; gap: var(--sp-3);} .builder-page__srd {font-family: var(--font-mono); font-size: .65rem; letter-spacing: .14em; text-transform: uppercase; color: var(--c-gold); border: 1px solid var(--c-gold-deep); border-radius: var(--radius-sm); padding: 2px 8px; white-space: nowrap;} .roster-actions {display: flex; justify-content: flex-start;} .roster-empty {padding: var(--sp-6); color: var(--c-text-dim); max-width: 40rem;} .roster-list {list-style: none; margin: 0; padding: 0; display: grid; gap: var(--sp-3); grid-template-columns: repeat(auto-fill,minmax(min(100%,24rem),1fr));} .roster-card {padding: var(--sp-4); display: flex; flex-direction: column; gap: var(--sp-3);} .roster-card__main {display: flex; flex-direction: column; gap: var(--sp-1);} .roster-card__name {font-family: var(--font-display); font-size: 1.35rem; font-weight: 700; color: var(--c-text);} .roster-card__meta {font-family: var(--font-mono); font-size: .75rem; color: var(--c-text-dim); letter-spacing: .05em;} .roster-card__play-hint {display: block; font-size: .72rem; color: var(--c-text-dim); margin: 0;} .roster-card__actions {display: flex; gap: var(--sp-2); flex-wrap: wrap; align-items: center;} .roster-card__actions button {font-size: .85rem;} .roster-card__danger {color: var(--c-danger); border-color: var(--c-danger);} .roster-card__confirm {display: inline-flex; gap: var(--sp-2); align-items: center;} .campaign-art-card {position: relative; overflow: hidden; display: flex; flex-direction: column; justify-content: flex-end; min-height: 15rem; isolation: isolate; transition: transform .2s ease,box-shadow .2s ease;} .campaign-art-card:hover {transform: translateY(-3px); box-shadow: 0 10px 28px color-mix(in srgb,var(--c-gold) 18%,rgba(0,0,0,.35));} .campaign-art-card__bg {position: absolute; inset: 0; z-index: -1; background: radial-gradient(ellipse 120% 80% at 20% 0%,var(--c-gold-glow),transparent 60%),radial-gradient(ellipse 100% 90% at 85% 100%,var(--c-teal-glow),transparent 65%),var(--c-bg-deep, var(--c-bg));} .campaign-art-card__img {position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; opacity: 0; transition: opacity .5s ease,transform .6s ease;} .campaign-art-card__img.is-loaded {opacity: 1;} .campaign-art-card:hover .campaign-art-card__img.is-loaded {transform: scale(1.045);} .campaign-art-card__scrim {position: absolute; inset: 0; background: linear-gradient(180deg,color-mix(in srgb,var(--c-surface) 12%,transparent) 0%,color-mix(in srgb,var(--c-surface) 34%,transparent) 40%,color-mix(in srgb,var(--c-surface) 86%,transparent) 66%,color-mix(in srgb,var(--c-surface) 97%,transparent) 100%),linear-gradient(var(--c-art-veil),var(--c-art-veil));} .campaign-art-card__body {position: relative; display: flex; flex-direction: column; gap: var(--sp-1); padding: var(--sp-5) var(--sp-4) var(--sp-4);} .campaign-art-card__name {font-family: var(--font-display); font-size: 1.45rem; font-weight: 700; color: var(--c-text); line-height: 1.15;} .campaign-art-card__meta {font-family: var(--font-mono); font-size: .72rem; color: var(--c-text-dim); letter-spacing: .05em;} .campaign-art-card__premise {margin: var(--sp-1) 0 0; color: var(--c-text-dim); font-size: .85rem; line-height: 1.45; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;} .campaign-art-card__actions {display: flex; gap: var(--sp-2); flex-wrap: wrap; align-items: center; margin-top: var(--sp-3);} .campaign-art-card__actions button {font-size: .85rem;} @media (prefers-reduced-motion: no-preference) {.campaign-art-card__bg--waiting {animation: skeleton-pulse 1.4s ease-in-out infinite;}} @media (prefers-reduced-motion: reduce) {.campaign-art-card,.campaign-art-card__img {transition: none;} .campaign-art-card:hover {transform: none;} .campaign-art-card:hover .campaign-art-card__img.is-loaded {transform: none;}} .character-portrait {position: relative; overflow: hidden; border-radius: var(--radius-md); display: flex; align-items: center; justify-content: center; background: radial-gradient(ellipse 120% 80% at 20% 0%,var(--c-gold-glow),transparent 60%),radial-gradient(ellipse 100% 90% at 85% 100%,var(--c-teal-glow),transparent 65%),var(--c-bg-deep, var(--c-bg));} .character-portrait__initial {position: relative; font-family: var(--font-display); font-size: 1.6rem; font-weight: 700; color: var(--c-gold); line-height: 1; user-select: none;} .character-portrait__img {position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; opacity: 0; transition: opacity .5s ease;} .character-portrait__img.is-loaded {opacity: 1;} @media (prefers-reduced-motion: no-preference) {.character-portrait--waiting {animation: skeleton-pulse 1.4s ease-in-out infinite;}} @media (prefers-reduced-motion: reduce) {.character-portrait__img {transition: none;}} .roster-card__portrait {width: 6.5rem; flex: none; align-self: flex-start; aspect-ratio: 1;} .roster-card__row {display: flex; gap: var(--sp-3); align-items: flex-start;} .campaign-detail-char-thumb {width: 3.5rem; align-self: center; border-radius: var(--radius-sm);} .campaign-detail-hero {position: relative; isolation: isolate; overflow: hidden; min-height: 11rem; border-radius: var(--radius-lg); padding: var(--sp-4); background: radial-gradient(ellipse 120% 80% at 20% 0%,var(--c-gold-glow),transparent 60%),radial-gradient(ellipse 100% 90% at 85% 100%,var(--c-teal-glow),transparent 65%),var(--c-bg-deep, var(--c-bg));} .campaign-detail-hero__img {position: absolute; inset: 0; z-index: -1; width: 100%; height: 100%; object-fit: cover; opacity: 0; transition: opacity .5s ease;} .campaign-detail-hero__img.is-loaded {opacity: 1;} .campaign-detail-hero__scrim {position: absolute; inset: 0; z-index: -1; background: linear-gradient(180deg,color-mix(in srgb,var(--c-surface) 15%,transparent) 0%,color-mix(in srgb,var(--c-surface) 40%,transparent) 42%,color-mix(in srgb,var(--c-surface) 80%,transparent) 68%,color-mix(in srgb,var(--c-surface) 96%,transparent) 100%);} @media (prefers-reduced-motion: reduce) {.campaign-detail-hero__img {transition: none;}} .campaign-detail-hero .roster-page__title,.campaign-detail-hero .link-button {text-shadow: 0 1px 8px color-mix(in srgb,var(--c-bg) 75%,transparent);} .scene-banner {position: relative; overflow: hidden; isolation: isolate; border-radius: var(--radius-lg);} .scene-banner__bg {position: absolute; inset: 0; z-index: -1; background: radial-gradient(ellipse 120% 80% at 15% 0%,var(--c-gold-glow),transparent 60%),radial-gradient(ellipse 100% 90% at 90% 100%,var(--c-teal-glow),transparent 65%),color-mix(in srgb,var(--c-surface) 88%,transparent);} .scene-banner__img {position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; opacity: 0; transition: opacity .5s ease;} .scene-banner__img.is-loaded {opacity: 1;} .scene-banner__scrim {position: absolute; inset: 0; background: linear-gradient(180deg,color-mix(in srgb,var(--c-surface) 30%,transparent) 0%,color-mix(in srgb,var(--c-surface) 55%,transparent) 55%,color-mix(in srgb,var(--c-surface) 88%,transparent) 100%),linear-gradient(var(--c-art-veil),var(--c-art-veil));} .scene-banner--banner .scene-banner__scrim {background: linear-gradient(90deg,color-mix(in srgb,var(--c-surface) 82%,transparent) 0%,color-mix(in srgb,var(--c-surface) 55%,transparent) 45%,color-mix(in srgb,var(--c-surface) 25%,transparent) 100%),linear-gradient(180deg,transparent 40%,color-mix(in srgb,var(--c-surface) 45%,transparent) 100%),linear-gradient(var(--c-art-veil),var(--c-art-veil));} .scene-banner--banner .scene-banner__content {padding: var(--sp-5) var(--sp-5) var(--sp-4); min-height: 8.5rem; display: flex; flex-direction: column; justify-content: flex-end;} .scene-banner--tile .scene-banner__content {padding: var(--sp-6) var(--sp-5) var(--sp-5); min-height: 13rem; display: flex; flex-direction: column; justify-content: flex-end;} .scene-banner--tile .scene-banner__scrim {background: linear-gradient(180deg,color-mix(in srgb,var(--c-surface) 10%,transparent) 0%,color-mix(in srgb,var(--c-surface) 34%,transparent) 42%,color-mix(in srgb,var(--c-surface) 88%,transparent) 70%,color-mix(in srgb,var(--c-surface) 97%,transparent) 100%),linear-gradient(var(--c-art-veil),var(--c-art-veil));} .scene-banner h1,.scene-banner h2,.scene-banner .roster-page__title,.scene-banner .link-button {text-shadow: 0 1px 8px color-mix(in srgb,var(--c-bg) 75%,transparent);} .scene-banner .roster-page__subtitle,.scene-banner p {text-shadow: 0 1px 6px color-mix(in srgb,var(--c-bg) 65%,transparent);} @media (prefers-reduced-motion: no-preference) {.scene-banner--waiting .scene-banner__bg {animation: skeleton-pulse 1.4s ease-in-out infinite;}} @media (prefers-reduced-motion: reduce) {.scene-banner__img {transition: none;}} .roster-page__heading {display: flex; flex-direction: column; gap: var(--sp-1); min-width: 0;} .roster-page__header .roster-page__heading .roster-page__title {margin: 0;} .roster-page__subtitle {margin: 0; color: var(--c-text-dim); font-size: .9rem; max-width: 60ch;} .roster-page__headerlinks {display: flex; align-items: center; gap: var(--sp-3); flex-wrap: wrap;} .empty-state {display: flex; flex-direction: column; align-items: center; text-align: center; gap: var(--sp-2); padding: var(--sp-7) var(--sp-5); max-width: 34rem; margin: 0 auto;} .empty-state__icon {font-size: 2.25rem; line-height: 1; margin-bottom: var(--sp-1);} .empty-state__title {margin: 0; font-family: var(--font-display); font-size: 1.35rem; color: var(--c-text);} .empty-state__message {margin: 0; color: var(--c-text-dim); font-size: .9375rem; max-width: 42ch;} .empty-state__actions {display: flex; align-items: center; gap: var(--sp-3); flex-wrap: wrap; justify-content: center; margin-top: var(--sp-2);} .welcome-panel {padding: var(--sp-5); display: flex; flex-direction: column; gap: var(--sp-3); border-left: 3px solid var(--c-gold);} .welcome-panel__top {display: flex; align-items: baseline; justify-content: space-between; gap: var(--sp-2);} .welcome-panel__kicker {margin: 0;} .welcome-panel__skip {white-space: nowrap;} .welcome-panel__title {margin: 0; font-family: var(--font-display); font-size: 1.5rem; color: var(--c-text);} .welcome-panel__lede {margin: 0; color: var(--c-text-dim); font-size: .9375rem; max-width: 62ch;} .welcome-panel__points {margin: 0;} .welcome-panel__cta {display: flex; align-items: center; gap: var(--sp-3); flex-wrap: wrap; margin-top: var(--sp-1);} .auth-page {min-height: 100dvh; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: var(--sp-4); padding: var(--sp-6) var(--sp-3);} .auth-page__brand {display: flex; justify-content: center;} .auth-page__card {width: min(100%,380px); padding: var(--sp-5); display: flex; flex-direction: column; gap: var(--sp-3);} .auth-page__kicker {margin: 0;} .auth-page__title {margin: 0; font-family: var(--font-display); font-size: 1.4rem; color: var(--c-text);} .auth-page__notice {background: color-mix(in srgb,var(--c-gold) 15%,transparent); color: var(--c-text); border: 1px solid var(--c-gold); border-radius: var(--radius-md); padding: var(--sp-2) var(--sp-3); font-size: .875rem;} .auth-page__form {display: flex; flex-direction: column; gap: var(--sp-3);} .auth-page__field {display: flex; flex-direction: column; gap: var(--sp-1);} .auth-page__field input {padding: .55rem .8rem; border-radius: var(--radius-md);} .auth-page__field input:focus-visible {outline: none; border-color: var(--c-gold); box-shadow: 0 0 0 2px color-mix(in srgb,var(--c-gold) 35%,transparent);} .auth-page__submit {width: 100%; margin-top: var(--sp-1);} .auth-page__switch {align-self: center;} .auth-page__divider {display: flex; align-items: center; gap: var(--sp-2); color: var(--c-text-faint); font-size: .75rem; text-transform: uppercase; letter-spacing: .08em;} .auth-page__divider::before,.auth-page__divider::after {content: ""; flex: 1; height: 1px; background: var(--c-hairline);} .auth-page__oauth {display: flex; flex-direction: column; gap: var(--sp-2);} .auth-page__oauth-btn {width: 100%;} .roster-list--skeleton {pointer-events: none;} .skeleton-card {display: flex; flex-direction: column; gap: var(--sp-2); justify-content: center; min-height: 4.5rem;} .skeleton-line {display: block; height: .85rem; border-radius: var(--radius-sm); background: var(--c-surface-2, var(--c-hairline));} .skeleton-line--wide {width: 65%;} .skeleton-line--narrow {width: 35%; height: .65rem;} @media (prefers-reduced-motion: no-preference) {.skeleton-line {animation: skeleton-pulse 1.4s ease-in-out infinite;} @keyframes skeleton-pulse {0%,100% {opacity: .55;} 50% {opacity: 1;}}} .loading {flex-direction: row; gap: var(--sp-3);} .loading__spinner {width: 1.1rem; height: 1.1rem; border-radius: 999px; border: 2px solid var(--c-hairline); border-top-color: var(--c-gold); flex: none;} @media (prefers-reduced-motion: no-preference) {.loading__spinner {animation: spinner-spin .8s linear infinite;} @keyframes spinner-spin {to {transform: rotate(360deg);}}} .loading-overlay {position: fixed; inset: 0; z-index: 2000; display: flex; align-items: center; justify-content: center; background: rgba(0,0,0,.55); backdrop-filter: blur(2px);} .loading-overlay__box {display: flex; flex-direction: column; align-items: center; gap: var(--sp-4); padding: var(--sp-6) var(--sp-7); background: var(--c-surface-2); border: 1px solid var(--c-hairline); border-radius: 14px; box-shadow: 0 16px 48px rgba(0,0,0,.55); max-width: 22rem; text-align: center;} .loading-overlay__spinner {width: 2.6rem; height: 2.6rem; border-radius: 999px; border: 3px solid var(--c-hairline); border-top-color: var(--c-gold); flex: none;} .loading-overlay__msg {color: var(--c-text); font-size: .98rem;} @media (prefers-reduced-motion: no-preference) {.loading-overlay__spinner {animation: spinner-spin .8s linear infinite;}} .party-sheets {margin-top: var(--sp-4);} .party-sheets__tabs {display: flex; flex-wrap: wrap; gap: var(--sp-1); margin-bottom: var(--sp-3);} .party-sheets__tabs button {padding: var(--sp-1) var(--sp-3); background: var(--c-surface-2); border: 1px solid var(--c-hairline); border-radius: 8px; color: var(--c-text-dim); cursor: pointer; font-size: .85rem;} .party-sheets__tabs button.active {color: var(--c-gold); border-color: var(--c-gold);} .sheet {background: var(--c-surface-2); border: 1px solid var(--c-hairline); border-radius: 12px; padding: var(--sp-4); display: flex; flex-direction: column; gap: var(--sp-4);} .sheet__name {font-size: 1.2rem; font-weight: 600; color: var(--c-text);} .sheet__sub {font-size: .85rem; color: var(--c-text-dim);} .sheet__vitals {display: grid; grid-template-columns: repeat(auto-fit,minmax(68px,1fr)); gap: var(--sp-2);} .sheet__vital {display: flex; flex-direction: column; align-items: center; padding: var(--sp-2); background: var(--c-surface-3); border: 1px solid var(--c-hairline); border-radius: 8px;} .sheet__vital-num {font-size: 1.3rem; font-weight: 700; color: var(--c-gold);} .sheet__vital-den {font-size: .85rem; color: var(--c-text-faint);} .sheet__vital-lbl {font-size: .62rem; text-transform: uppercase; letter-spacing: .04em; color: var(--c-text-dim); margin-top: 2px;} .sheet__abilities {display: grid; grid-template-columns: repeat(6,1fr); gap: var(--sp-2);} .sheet__ability {display: flex; flex-direction: column; align-items: center; padding: var(--sp-2) 0; background: var(--c-surface-3); border: 1px solid var(--c-hairline); border-radius: 8px;} .sheet__ability-lbl {font-size: .6rem; letter-spacing: .05em; color: var(--c-text-dim);} .sheet__ability-mod {font-size: 1.15rem; font-weight: 700; color: var(--c-text);} .sheet__ability-score {font-size: .7rem; color: var(--c-text-faint);} .sheet__h {font-size: .72rem; text-transform: uppercase; letter-spacing: .06em; color: var(--c-gold); margin: 0 0 var(--sp-2);} .sheet__skills {list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(auto-fill,minmax(148px,1fr)); gap: 2px var(--sp-3);} .sheet__skill {display: flex; align-items: center; gap: var(--sp-2); font-size: .82rem;} .sheet__skill-name {flex: 1; color: var(--c-text-dim);} .sheet__skill-mod {color: var(--c-text); font-variant-numeric: tabular-nums;} .sheet__dot {width: 8px; height: 8px; border-radius: 999px; border: 1px solid var(--c-text-faint); flex: none;} .sheet__dot--prof {background: var(--c-gold); border-color: var(--c-gold);} .sheet__dot--exp {background: var(--c-gold); border-color: var(--c-gold-bright); box-shadow: 0 0 0 2px var(--c-gold-glow);} .sheet__attacks,.sheet__features,.sheet__spells {list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--sp-2);} .sheet__attack {display: flex; gap: var(--sp-3); font-size: .82rem; flex-wrap: wrap;} .sheet__attack-name {font-weight: 600; color: var(--c-text);} .sheet__attack-hit {color: var(--c-gold);} .sheet__attack-dmg {color: var(--c-text-dim);} .sheet__spellstats {font-size: .8rem; color: var(--c-text-dim); margin: 0 0 var(--sp-2);} .sheet__spell {display: flex; justify-content: space-between; font-size: .82rem; color: var(--c-text-dim);} .sheet__spell-lvl {color: var(--c-text-faint);} .sheet__feature-name {font-weight: 600; color: var(--c-text); display: block; font-size: .85rem;} .sheet__feature-desc {color: var(--c-text-dim); font-size: .78rem;} .sheet__senses {font-size: .8rem; color: var(--c-text-dim); margin: 0;} .builder-steps {display: flex; gap: var(--sp-1); overflow-x: auto; padding-bottom: var(--sp-1); scrollbar-width: thin;} .builder-steps__step {display: inline-flex; align-items: center; gap: var(--sp-2); border: 1px solid var(--c-border); background: var(--c-surface); color: var(--c-text-dim); border-radius: 999px; padding: var(--sp-1) var(--sp-3); font-size: .8rem; white-space: nowrap; cursor: pointer;} .builder-steps__step:disabled {opacity: .55; cursor: default;} .builder-steps__num {font-family: var(--font-mono); font-size: .7rem; width: 1.3rem; height: 1.3rem; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; border: 1px solid var(--c-border);} .builder-steps__step--current {border-color: var(--c-gold); color: var(--c-text); box-shadow: 0 0 0 1px var(--c-gold-glow);} .builder-steps__step--current .builder-steps__num {background: var(--c-gold); color: var(--c-on-gold); border-color: var(--c-gold);} .builder-steps__step--done {color: var(--c-gold);} .builder-layout {display: grid; gap: var(--sp-4); grid-template-columns: minmax(0,1fr); align-items: start; flex: 1;} @media (min-width: 900px) {.builder-layout {grid-template-columns: minmax(0,1fr) 20rem;} .builder-preview {position: sticky; top: var(--sp-4);}} .builder-main {padding: clamp(var(--sp-4),3vw,var(--sp-6)); display: flex; flex-direction: column; gap: var(--sp-4);} .builder-step-title {font-family: var(--font-display); font-size: 1.5rem; font-weight: 700; margin: 0 0 var(--sp-1); color: var(--c-text);} .builder-step-lede {color: var(--c-text-dim); margin: 0 0 var(--sp-3); max-width: 46rem;} .builder-quiet {color: var(--c-text-faint); font-size: .85rem;} .builder-error {color: var(--c-danger);} .builder-count {font-family: var(--font-mono); font-size: .75rem; color: var(--c-gold); margin-left: var(--sp-2);} .builder-cards {display: grid; gap: var(--sp-3); grid-template-columns: repeat(auto-fill,minmax(min(100%,15rem),1fr));} .builder-card {text-align: left; display: flex; flex-direction: column; gap: var(--sp-1); padding: var(--sp-3) var(--sp-4); border: 1px solid var(--c-border); border-radius: var(--radius-md); background: var(--c-surface-2); cursor: pointer;} @media (prefers-reduced-motion: no-preference) {.builder-card {transition: border-color .12s ease,box-shadow .12s ease;}} .builder-card:hover {border-color: var(--c-gold-deep);} .builder-card--selected {border-color: var(--c-gold); box-shadow: 0 0 0 1px var(--c-gold),0 0 18px var(--c-gold-glow);} .builder-card__name {font-family: var(--font-display); font-size: 1.2rem; font-weight: 700; color: var(--c-text);} .builder-card__tags {font-family: var(--font-mono); font-size: .68rem; letter-spacing: .06em; text-transform: uppercase; color: var(--c-gold);} .builder-card__blurb {font-size: .85rem; color: var(--c-text-dim); line-height: 1.45;} .builder-subchoice {border-top: 1px dotted var(--c-hairline); padding-top: var(--sp-3); display: flex; flex-direction: column; gap: var(--sp-2);} .builder-subchoice h3 {font-family: var(--font-display); font-size: 1.1rem; margin: 0; color: var(--c-text);} .builder-chips {display: flex; flex-wrap: wrap; gap: var(--sp-2);} .builder-chip {border: 1px solid var(--c-border); background: var(--c-surface-2); color: var(--c-text-dim); border-radius: 999px; padding: var(--sp-1) var(--sp-3); font-size: .85rem; cursor: pointer;} .builder-chip--on {border-color: var(--c-gold); background: var(--c-gold-glow); color: var(--c-text);} .builder-tabs {display: inline-flex; gap: 0; border: 1px solid var(--c-border); border-radius: var(--radius-md); overflow: hidden; margin-bottom: var(--sp-3);} .builder-tabs button {border: none; border-radius: 0; background: var(--c-surface); color: var(--c-text-dim); padding: var(--sp-2) var(--sp-4); cursor: pointer;} .builder-tabs button + button {border-left: 1px solid var(--c-border);} .builder-tabs button.active {background: var(--c-gold); color: var(--c-on-gold);} .builder-budget {font-family: var(--font-mono); font-size: .85rem; color: var(--c-gold); margin: 0 0 var(--sp-2);} .builder-budget--over {color: var(--c-danger);} .ability-editor {display: flex; flex-direction: column; gap: var(--sp-1); max-width: 34rem;} .ability-editor__row {display: grid; grid-template-columns: minmax(6.5rem,1fr) auto auto; align-items: center; gap: var(--sp-3); padding: var(--sp-2) var(--sp-3); border: 1px solid var(--c-hairline); border-radius: var(--radius-md); background: var(--c-surface-2);} .ability-editor__name {font-weight: 600; color: var(--c-text);} .ability-editor__controls {display: inline-flex; align-items: center; gap: var(--sp-2);} .ability-editor__controls button {width: 2rem; height: 2rem; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; font-size: 1.1rem; padding: 0;} .ability-editor__base {font-family: var(--font-mono); min-width: 2ch; text-align: center;} .ability-editor__select,.ability-editor__input {font-family: var(--font-mono); background: var(--c-surface); color: var(--c-text); border: 1px solid var(--c-border); border-radius: var(--radius-sm); padding: var(--sp-1) var(--sp-2); width: 4.5rem;} .ability-editor__final {display: inline-flex; align-items: baseline; gap: var(--sp-2); justify-self: end;} .ability-editor__bonus {font-family: var(--font-mono); font-size: .7rem; color: var(--c-teal);} .ability-editor__result {font-family: var(--font-display); font-size: 1.3rem; font-weight: 700; color: var(--c-text);} .ability-editor__mod {font-family: var(--font-mono); font-size: .8rem; color: var(--c-gold); min-width: 2.4ch;} .skills-grid {display: grid; gap: var(--sp-2); grid-template-columns: repeat(auto-fill,minmax(min(100%,13rem),1fr));} .skill-pick {display: flex; align-items: center; justify-content: space-between; gap: var(--sp-2); border: 1px solid var(--c-border); border-radius: var(--radius-md); background: var(--c-surface-2); color: var(--c-text-dim); padding: var(--sp-2) var(--sp-3); cursor: pointer; font-size: .9rem;} .skill-pick--on {border-color: var(--c-gold); background: var(--c-gold-glow); color: var(--c-text);} .skill-pick--granted {opacity: .6; cursor: default;} .skill-pick__ability {font-family: var(--font-mono); font-size: .65rem; color: var(--c-text-faint);} .skill-pick__note {font-family: var(--font-mono); font-size: .65rem; color: var(--c-teal);} .equip-group h3 {font-family: var(--font-display); font-size: 1.05rem; margin: 0 0 var(--sp-2); color: var(--c-text);} .equip-group {margin-bottom: var(--sp-3);} .equip-options {display: flex; flex-wrap: wrap; gap: var(--sp-2);} .equip-option {border: 1px solid var(--c-border); border-radius: var(--radius-md); background: var(--c-surface-2); color: var(--c-text-dim); padding: var(--sp-2) var(--sp-4); cursor: pointer; font-size: .9rem;} .equip-option--on {border-color: var(--c-gold); background: var(--c-gold-glow); color: var(--c-text);} .spell-list {display: flex; flex-direction: column; gap: var(--sp-2); margin-bottom: var(--sp-4);} .spell-row {text-align: left; display: flex; flex-direction: column; gap: var(--sp-1); border: 1px solid var(--c-border); border-radius: var(--radius-md); background: var(--c-surface-2); padding: var(--sp-2) var(--sp-3); cursor: pointer;} .spell-row--on {border-color: var(--c-teal); background: var(--c-teal-glow);} .spell-row--locked {cursor: default; opacity: .85;} .spell-row__head {display: flex; align-items: baseline; justify-content: space-between; gap: var(--sp-3); flex-wrap: wrap;} .spell-row__name {font-weight: 600; color: var(--c-text);} .spell-row__meta {font-family: var(--font-mono); font-size: .68rem; letter-spacing: .05em; text-transform: uppercase; color: var(--c-teal);} .spell-row__desc {font-size: .83rem; color: var(--c-text-dim); line-height: 1.45;} .builder-field {display: flex; flex-direction: column; gap: var(--sp-1); max-width: 28rem; margin-bottom: var(--sp-3);} .builder-field span {font-size: .85rem; color: var(--c-text-dim);} .builder-field input,.builder-field select,.builder-field textarea {background: var(--c-surface); color: var(--c-text); border: 1px solid var(--c-border); border-radius: var(--radius-md); padding: var(--sp-2) var(--sp-3); font-family: var(--font-body); font-size: .95rem;} .builder-field textarea {resize: vertical;} .builder-hints {border: 1px solid var(--c-gold-deep); background: var(--c-gold-glow); border-radius: var(--radius-md); padding: var(--sp-2) var(--sp-3); color: var(--c-text); font-size: .9rem;} .builder-hints p {margin: var(--sp-1) 0;} .builder-hints--error {border-color: var(--c-danger); background: var(--c-danger-soft);} .builder-nav {display: flex; justify-content: space-between; gap: var(--sp-3); border-top: 1px dotted var(--c-hairline); padding-top: var(--sp-3);} .builder-preview__card,.builder-preview__empty {padding: var(--sp-4); display: flex; flex-direction: column; gap: var(--sp-2);} .builder-preview__card h3 {font-family: var(--font-display); font-size: 1.3rem; margin: 0; color: var(--c-text);} .review-sheet {display: flex; flex-direction: column; gap: var(--sp-2);} .review-sheet__name {font-family: var(--font-display); font-size: 1.6rem; margin: 0; color: var(--c-text);} .review-sheet h4 {font-family: var(--font-mono); font-size: .72rem; letter-spacing: .14em; text-transform: uppercase; color: var(--c-gold); margin: var(--sp-3) 0 var(--sp-1);} .review-sheet ul {margin: 0; padding-left: 1.2rem; color: var(--c-text-dim); font-size: .9rem;} .review-skills {columns: 2;} @media (max-width: 600px) {.review-skills {columns: 1;}} .levelup-body {flex: 1;} .levelup-card {padding: clamp(var(--sp-4),3vw,var(--sp-6)); display: flex; flex-direction: column; gap: var(--sp-5); max-width: 52rem;} .levelup-hp {display: flex; gap: var(--sp-2); flex-wrap: wrap;} .levelup-features {margin: 0; padding-left: 1.2rem; color: var(--c-text-dim); line-height: 1.5;} .launcher__cta {display: flex; align-items: center; gap: var(--sp-4); flex-wrap: wrap; justify-content: center;} .launcher__roster {background: transparent; border: 1px solid var(--c-border); color: var(--c-text-dim); border-radius: var(--radius-md); padding: var(--sp-2) var(--sp-4); cursor: pointer;} .launcher__roster:hover {border-color: var(--c-gold-deep); color: var(--c-text);} .launcher__cta-note {font-size: .8rem; color: var(--c-text-faint); margin-top: var(--sp-2);} .action-controls__cast {border-top: 1px dotted var(--c-hairline); padding-top: var(--sp-2);} .cast-spell--selected {border-color: var(--c-teal) !important; background: var(--c-teal-glow) !important; color: var(--c-text) !important;} .cast-targets {display: inline-flex; gap: var(--sp-2); align-items: center; flex-wrap: wrap;} .roll-prompt {border: 1px solid var(--c-gold); border-radius: 10px; background: radial-gradient(120% 140% at 50% 0%,var(--c-gold-glow),transparent 65%),var(--c-surface-2); box-shadow: 0 0 0 1px var(--c-gold-glow),0 6px 24px rgba(0,0,0,.25); padding: var(--sp-3) var(--sp-4); display: flex; flex-direction: column; gap: var(--sp-2); align-items: center; text-align: center;} .roll-prompt__eyebrow {font-family: var(--font-mono); font-size: .7rem; letter-spacing: .16em; text-transform: uppercase; color: var(--c-gold); margin: 0;} .roll-prompt__attempt {font-family: var(--font-display); font-style: italic; color: var(--c-text-dim); margin: 0;} .roll-prompt__what {display: flex; flex-direction: column; gap: 2px; margin: 0;} .roll-prompt__label {font-family: var(--font-display); font-size: 1.15rem; font-weight: 600; color: var(--c-text);} .roll-prompt__math {font-family: var(--font-mono); font-size: .95rem; color: var(--c-text-dim);} .roll-prompt__math strong {color: var(--c-gold-bright);} .roll-prompt__adv,.roll-prompt__note {font-size: .85rem; color: var(--c-text-faint); margin: 0;} .roll-prompt__dice {display: flex; gap: var(--sp-2); min-height: 3.4rem; align-items: center;} .roll-die {width: 3.2rem; height: 3.2rem; display: inline-flex; align-items: center; justify-content: center; font-family: var(--font-mono); font-size: 1.4rem; font-weight: 700; color: var(--c-text); background: var(--c-surface-3); border: 1px solid var(--c-border); border-radius: 12px; box-shadow: inset 0 1px 0 rgba(255,255,255,.06);} .roll-die--tumbling {animation: roll-die-tumble .15s linear infinite; color: var(--c-gold-bright);} .roll-die--crit {border-color: var(--c-gold); color: var(--c-gold-bright); box-shadow: 0 0 12px var(--c-gold-glow),inset 0 0 8px var(--c-gold-glow);} .roll-die--fumble {border-color: var(--c-danger); color: var(--c-danger); background: var(--c-danger-soft);} @keyframes roll-die-tumble {0% {transform: rotate(-6deg) scale(.96);} 50% {transform: rotate(5deg) scale(1.05);} 100% {transform: rotate(-6deg) scale(.96);}} @media (prefers-reduced-motion: reduce) {.roll-die--tumbling {animation: none;}} .roll-prompt__actions {display: flex; gap: var(--sp-3); align-items: center; flex-wrap: wrap; justify-content: center;} .roll-prompt__roll {font-family: var(--font-mono); letter-spacing: .04em;} .roll-prompt__input {width: 4.5rem; padding: var(--sp-2); font-family: var(--font-mono); font-size: 1.1rem; text-align: center; color: var(--c-text); background: var(--c-surface); border: 1px solid var(--c-border); border-radius: 8px;} .roll-prompt__input:focus-visible {outline: var(--focus-ring); outline-offset: 1px;} .roll-outcome {position: relative; display: flex; gap: var(--sp-3); align-items: baseline; flex-wrap: wrap; padding: var(--sp-2) var(--sp-3); padding-right: 2.2rem; border-radius: 8px; border: 1px solid var(--c-border); background: var(--c-surface-2); font-size: .9rem;} .roll-outcome--success {border-color: var(--c-teal-dim); background: var(--c-teal-glow);} .roll-outcome--fail {border-color: var(--c-danger); background: var(--c-danger-soft);} .roll-outcome--crit {border-color: var(--c-gold); background: var(--c-gold-glow);} .roll-outcome__label {font-family: var(--font-display); font-weight: 600; color: var(--c-text);} .roll-outcome__math {font-family: var(--font-mono); color: var(--c-text-dim);} .roll-outcome__math strong {color: var(--c-text);} .roll-outcome__verdict {font-family: var(--font-mono); font-size: .75rem; letter-spacing: .12em; text-transform: uppercase; color: var(--c-gold);} .roll-outcome--fail .roll-outcome__verdict {color: var(--c-danger);} .roll-outcome--success .roll-outcome__verdict {color: var(--c-teal);} .roll-outcome__damage {font-family: var(--font-mono); color: var(--c-text);} .roll-outcome__dismiss {position: absolute; top: 4px; right: 6px; border: none; background: none; color: var(--c-text-faint); font-size: 1rem; line-height: 1; cursor: pointer; padding: 2px 4px;} .roll-outcome__dismiss:hover {color: var(--c-text);} @media (max-width: 640px) {.roll-prompt {padding: var(--sp-3);} .roll-die {width: 2.8rem; height: 2.8rem; font-size: 1.2rem;}} .mapbuilder-editor {display: grid; gap: var(--sp-4); flex: 1; min-height: 0; grid-template-columns: minmax(220px,300px) minmax(0,1fr);} @media (max-width: 899.98px) {.mapbuilder-editor {grid-template-columns: 1fr;}} .mapbuilder-controls {padding: var(--sp-4); display: flex; flex-direction: column; gap: var(--sp-3); align-self: start;} .mapbuilder-field {display: flex; flex-direction: column; gap: var(--sp-1); font-size: .85rem; color: var(--c-text-dim);} .mapbuilder-field input {font-family: var(--font-mono);} .mapbuilder-field--inline {flex-direction: row; align-items: center; gap: var(--sp-2); cursor: pointer;} .mapbuilder-field--inline input {width: auto;} .mapbuilder-dims {display: grid; grid-template-columns: 1fr 1fr; gap: var(--sp-2);} .mapbuilder-gridtype {display: flex; gap: var(--sp-1);} .mapbuilder-gridtype button {flex: 1; font-size: .8rem;} .mapbuilder-gridtype button.active {background: var(--c-gold); color: var(--c-on-gold, var(--c-bg-deep)); border-color: var(--c-gold);} .mapbuilder-scale-hint {margin: 0; font-size: .78rem; color: var(--c-text-faint); font-style: italic;} .mapbuilder-tools {display: flex; flex-wrap: wrap; gap: var(--sp-1); padding-top: var(--sp-2); border-top: 1px solid var(--c-hairline);} .mapbuilder-tool {font-size: .78rem; padding: .35rem .7rem; border-radius: 999px; border: 1px solid var(--c-border); background: var(--c-surface-2); color: var(--c-text-dim); display: inline-flex; align-items: center; gap: .4em;} .mapbuilder-tool::before {content: ""; width: .7em; height: .7em; border-radius: 3px; display: inline-block;} .mapbuilder-tool--floor::before {background: var(--c-surface-3); border: 1px solid var(--c-border);} .mapbuilder-tool--wall::before {background: var(--c-text-faint);} .mapbuilder-tool--water::before {background: var(--c-teal);} .mapbuilder-tool--difficult::before {background: var(--c-gold-deep);} .mapbuilder-tool--dropoff::before {background: linear-gradient(160deg,#5a2c22,#2a130e);} .mapbuilder-tool--void::before {background: var(--c-bg-deep); border: 1px dashed var(--c-border);} .mapbuilder-tool--grass::before {background: #4a7c3f;} .mapbuilder-tool--forest::before {background: radial-gradient(circle at 50% 45%,#326a41,#1f3d27);} .mapbuilder-tool--mountains::before {background: linear-gradient(155deg,#7b746a,#4a453d);} .mapbuilder-tool--hills::before {background: #8a7248;} .mapbuilder-tool--desert::before {background: #d8c07a;} .mapbuilder-tool--swamp::before {background: radial-gradient(circle at 50% 50%,#47502f,#2f331d);} .mapbuilder-tool--road::before {background: #b89968;} .mapbuilder-tool--dirt::before {background: #6e4f34;} .mapbuilder-tool--stone::before {background: linear-gradient(150deg,#8f8a7e,#726d62);} .mapbuilder-tool--sand::before {background: #d9c48f;} .mapbuilder-tool--snow::before {background: #e9edf2; border: 1px solid var(--c-border);} .mapbuilder-tool.active {background: var(--c-gold-glow); border-color: var(--c-gold); color: var(--c-gold-bright);} .mapbuilder-tool--clear {margin-left: auto; color: var(--c-danger); border-color: var(--c-danger);} .mapbuilder-toggle {display: flex; align-items: center; justify-content: space-between; gap: var(--sp-2); font-size: .85rem; padding: var(--sp-1) 0;} .mapbuilder-toggle__switch {position: relative; width: 2.4em; height: 1.35em; border-radius: 999px; border: 1px solid var(--c-border); background: var(--c-surface-2); flex-shrink: 0;} .mapbuilder-toggle__switch::after {content: ""; position: absolute; top: 1px; left: 1px; width: calc(1.35em - 4px) ; height: calc(1.35em - 4px) ; border-radius: 50%; background: var(--c-text-dim);} @media (prefers-reduced-motion: no-preference) {.mapbuilder-toggle__switch::after {transition: transform .15s ease,background .15s ease;}} .mapbuilder-toggle__switch.on {border-color: var(--c-gold); background: var(--c-gold-glow);} .mapbuilder-toggle__switch.on::after {background: var(--c-gold-bright); transform: translateX(calc(2.4em - 1.35em));} .mapbuilder-toggle-hint {margin: 0; font-size: .75rem; color: var(--c-text-faint);} .mapbuilder-features {display: grid; grid-template-columns: repeat(auto-fill,minmax(2.4rem,1fr)); gap: var(--sp-1); padding-top: var(--sp-1);} .mapbuilder-feature-btn {font-size: .95rem; padding: .3rem 0; border-radius: var(--radius-sm); border: 1px solid var(--c-border); background: var(--c-surface-2); color: var(--c-text-dim); text-align: center;} .mapbuilder-feature-btn.active {background: var(--c-gold-glow); border-color: var(--c-gold); color: var(--c-gold-bright);} .mapbuilder-actions {display: flex; gap: var(--sp-2); padding-top: var(--sp-2);} .mapbuilder-canvas {padding: var(--sp-3); display: flex; flex-direction: column; gap: var(--sp-2); min-height: 0;} .mapbuilder-canvas__hint {margin: 0; font-size: .8rem; color: var(--c-text-dim);} .mapbuilder-canvas__scroll {overflow: auto; padding: var(--sp-2); background: var(--c-bg-deep); border-radius: var(--radius-md); touch-action: none;} .map-paint-grid {display: inline-grid; position: relative; gap: 1px; background: var(--c-border); user-select: none; touch-action: none;} .map-paint-cell {cursor: pointer;} .map-paint-cell--void {background: var(--c-bg-deep);} .map-paint-cell--floor {background: var(--c-surface-3);} .map-paint-cell--wall {background: var(--c-text-faint);} .map-paint-cell--water {background: var(--c-teal);} .map-paint-cell--door {background: var(--c-wood, #6b4a2c);} .map-paint-cell--difficult {background: radial-gradient(circle at 50% 40%,#b89150,#7c6234);} .map-paint-cell--dropoff {background: linear-gradient(160deg,#5a2c22,#2a130e);} .map-paint-cell--grass {background: #4a7c3f;} .map-paint-cell--forest {background: radial-gradient(circle at 50% 45%,#326a41,#1f3d27);} .map-paint-cell--mountains {background: linear-gradient(155deg,#7b746a,#4a453d);} .map-paint-cell--hills {background: #8a7248;} .map-paint-cell--desert {background: #d8c07a;} .map-paint-cell--swamp {background: radial-gradient(circle at 50% 50%,#47502f,#2f331d);} .map-paint-cell--road {background: #b89968;} .map-paint-cell--dirt {background: #6e4f34;} .map-paint-cell--stone {background: linear-gradient(150deg,#8f8a7e,#726d62);} .map-paint-cell--sand {background: #d9c48f;} .map-paint-cell--snow {background: #e9edf2;} .map-paint-cell--paved {background: linear-gradient(150deg,#9a958a,#7c7768);} .map-paint-cell--wood {background: linear-gradient(92deg,#8a6339,#6f4f2e);} .map-paint-cell--marble {background: linear-gradient(120deg,#e2ddd4,#c3bdb1);} .map-paint-cell--lava {background: radial-gradient(circle at 50% 45%,#ff7a3c,#b0350f 60%,#5a1c0c);} .map-paint-cell:hover {outline: 1px solid var(--c-gold); outline-offset: -1px;} .map-paint-cell--boxpreview {outline: 2px solid var(--c-gold-bright); outline-offset: -2px; box-shadow: inset 0 0 0 999px var(--c-gold-glow);} .map-paint-grid--tiles-on {background: transparent;} .map-paint-grid--tiles-on .map-paint-cell {opacity: .32;} .map-paint-grid--tiles-on .map-paint-cell--void {opacity: 0;} .map-paint-grid--tiles-on .map-paint-cell:hover {opacity: .65;} .map-paint-grid--tiles-on .map-paint-cell--boxpreview {opacity: .9;} .map-paint-edge {position: absolute; pointer-events: none; z-index: 2; border-radius: 1px;} .map-paint-edge--dropoff {background: linear-gradient(90deg,#f0c674,#b9791f); box-shadow: 0 0 4px 1px rgba(0,0,0,.55);} .map-paint-edge--dropoff.map-paint-edge--h {background: linear-gradient(180deg,#f0c674,#b9791f);} .map-paint-edge--cliff {background: linear-gradient(45deg,#9aa2ac,#454b54); box-shadow: 0 0 3px rgba(0,0,0,.5);} .map-paint-edge--preview {opacity: .5;} .map-paint-feature {position: absolute; display: flex; align-items: center; justify-content: center; pointer-events: none; color: var(--c-gold-bright); text-shadow: 0 0 3px var(--c-bg-deep),0 0 3px var(--c-bg-deep); line-height: 1; z-index: 2;} .map-paint-feature--label {width: auto; height: auto; transform: translate(-50%,-50%); white-space: nowrap; color: var(--c-text); text-shadow: none; background: rgba(0,0,0,.6); border: 1px solid var(--c-gold); border-radius: 4px; padding: .15em .5em; font-weight: 600; letter-spacing: .01em; z-index: 3;} .map-paint-box-preview {position: absolute; pointer-events: none; border: 2px dashed var(--c-gold-bright); background: var(--c-gold-glow); z-index: 3;} .map-paint-selection {position: absolute; pointer-events: none; border: 2px solid var(--c-gold-bright); background: var(--c-gold-glow); box-shadow: 0 0 0 1px rgba(0,0,0,.5) inset; z-index: 4;} .map-submap-marker {position: absolute; z-index: 6; display: flex; flex-direction: column; align-items: center; gap: 1px; padding: 3px 8px; background: var(--c-bg-deep, rgba(18, 16, 14, .92)); border: 1px solid var(--c-gold); border-radius: 6px; color: var(--c-text); cursor: pointer; white-space: nowrap; box-shadow: 0 2px 8px rgba(0,0,0,.55);} .map-submap-marker:hover {border-color: var(--c-gold-bright);} .map-submap-marker__scroll {font-size: 22px; line-height: 1;} .map-submap-marker__name {font-size: 12px; font-weight: 600;} .hex-paint-grid {position: relative; user-select: none; touch-action: none;} .hex-paint-cell {cursor: pointer; border: 1px solid var(--c-border); box-sizing: border-box;} .hex-paint-cell--void {background: var(--c-bg-deep);} .hex-paint-cell--floor {background: var(--c-surface-3);} .hex-paint-cell--wall {background: var(--c-text-faint);} .hex-paint-cell--water {background: var(--c-teal);} .hex-paint-cell--door {background: var(--c-wood, #6b4a2c);} .hex-paint-cell--difficult {background: var(--c-gold-deep);} .hex-paint-cell--dropoff {background: linear-gradient(160deg,#5a2c22,#2a130e);} .hex-paint-cell--grass {background: #4a7c3f;} .hex-paint-cell--forest {background: radial-gradient(circle at 50% 45%,#326a41,#1f3d27);} .hex-paint-cell--mountains {background: linear-gradient(155deg,#7b746a,#4a453d);} .hex-paint-cell--hills {background: #8a7248;} .hex-paint-cell--desert {background: #d8c07a;} .hex-paint-cell--swamp {background: radial-gradient(circle at 50% 50%,#47502f,#2f331d);} .hex-paint-cell--road {background: #b89968;} .hex-paint-cell:hover {outline: 2px solid var(--c-gold); outline-offset: -2px;} .hex-paint-cell--boxpreview {outline: 2px solid var(--c-gold-bright); outline-offset: -2px; box-shadow: inset 0 0 0 999px var(--c-gold-glow);} .mapplay-layout {flex: 1; min-height: 0; display: grid; gap: var(--sp-3); padding: var(--sp-3); grid-template-columns: minmax(0,1.4fr) minmax(300px,1fr);} .mapplay-panel {min-height: 0; min-width: 0; display: flex; flex-direction: column; gap: var(--sp-3);} .mapplay-panel--story {overflow-y: auto;} .mapplay-layout--focus {grid-template-columns: 1fr;} .mapplay-layout--focus .mapplay-panel--story {display: none;} .mapplay-focus-toggle {align-self: flex-end; font-size: .8rem; padding: .3rem .7rem;} @media (max-width: 899.98px) {.mapplay-layout {grid-template-columns: 1fr; grid-auto-rows: auto;} .mapplay-panel--story {max-height: 40vh;}} .mapplay-description {margin: 0; padding: 0 var(--sp-3); font-size: .85rem; font-style: italic; color: var(--c-text-dim);} .forge-editor {grid-template-columns: minmax(280px,380px) minmax(0,1fr);} .forge-description {resize: vertical; min-height: 5rem; font-family: inherit; font-size: .9rem; padding: var(--sp-2); border-radius: var(--radius-md); border: 1px solid var(--c-border); background: var(--c-bg-deep); color: var(--c-text);} .forge-chips {display: flex; flex-wrap: wrap; gap: var(--sp-1);} .forge-chip {font-size: .78rem; padding: .3em .7em; border-radius: 999px; border: 1px solid var(--c-border); background: var(--c-surface-3); color: var(--c-text-dim); cursor: pointer;} .forge-chip:hover {border-color: var(--c-gold); color: var(--c-text);} .forge-preview {position: relative; max-width: 100%; border-radius: var(--radius-md); overflow: hidden; background: var(--c-bg-deep);} .forge-preview__image {display: block; width: 100%; height: 100%; object-fit: contain; user-select: none;} .forge-preview__marker {position: absolute; transform: translate(-50%,-50%); display: flex; flex-direction: column; align-items: center; gap: 2px; pointer-events: none;} .forge-preview__dot {width: 10px; height: 10px; border-radius: 50%; background: var(--c-bg-deep); border: 1.5px solid var(--c-gold-bright); box-shadow: 0 0 4px rgba(0,0,0,.5);} .forge-preview__label {font-size: .68rem; padding: 0 .35em; border-radius: 4px; background: rgba(0,0,0,.55); color: #fff; white-space: nowrap;} .forge-summary {margin: 0; font-size: .85rem; color: var(--c-text);} .forge-summary--muted {color: var(--c-text-dim); font-size: .78rem;} @media (max-width: 899.98px) {.forge-editor {grid-template-columns: 1fr;}} .mapcreator-editor {grid-template-columns: minmax(280px,380px) minmax(0,1fr);} @media (max-width: 899.98px) {.mapcreator-editor {grid-template-columns: 1fr;}} .mapcreator-divider {border-top: 1px solid var(--c-hairline); margin: var(--sp-1) 0;} .mapcreator-section-title {margin: 0; font-size: .95rem; color: var(--c-text);} .mapcreator-canvas-tabs {display: flex; gap: var(--sp-1); padding-bottom: var(--sp-1); border-bottom: 1px solid var(--c-hairline);} .mapcreator-canvas-tab {font-size: .8rem; padding: .35rem .9rem; border-radius: var(--radius-sm) var(--radius-sm) 0 0; border: 1px solid var(--c-border); border-bottom: none; background: var(--c-surface-2); color: var(--c-text-dim);} .mapcreator-canvas-tab.active {background: var(--c-gold-glow); border-color: var(--c-gold); color: var(--c-gold-bright);} .mapcreator-canvas-tab:disabled {opacity: .5; cursor: not-allowed;} .campaign-card__premise {margin: var(--sp-1) 0 0; color: var(--c-text-dim); font-size: .85rem; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;} .campaign-detail {gap: var(--sp-4);} .campaign-detail__section {padding: var(--sp-3) 0 var(--sp-4); display: flex; flex-direction: column; gap: var(--sp-3);} .campaign-detail__body {padding: 0 var(--sp-4); display: flex; flex-direction: column; gap: var(--sp-3);} .campaign-detail__hint {color: var(--c-text-dim); font-size: .9rem; margin: 0;} .campaign-detail__story {width: 100%; resize: vertical; font-family: var(--font-body); font-size: .95rem; padding: var(--sp-2) var(--sp-3); border-radius: var(--radius-md); border: 1px solid var(--c-hairline); background: var(--c-bg); color: var(--c-text);} .campaign-detail__addrow {display: flex; gap: var(--sp-2); align-items: center; flex-wrap: wrap;} .campaign-detail__addrow select {min-width: 12rem;} .campaign-detail__newplaythrough {display: flex; flex-direction: column; gap: var(--sp-2); padding: var(--sp-3); border: 1px dashed var(--c-hairline); border-radius: var(--radius-md);} .campaign-detail__danger {padding: var(--sp-2) var(--sp-4) var(--sp-6);} .campaign-detail__seam {opacity: .85;} .campaign-detail__metarow {align-items: flex-end;} .campaign-detail__metafield {display: flex; flex-direction: column; gap: .2rem; font-size: .8rem; color: var(--c-text-dim);} .campaign-detail__metafield select,.campaign-detail__metafield input {min-width: 10rem;} .campaign-detail__field {display: flex; flex-direction: column; gap: .3rem;} .campaign-detail__field label {font-size: .8rem; color: var(--c-text-dim);} .campaign-detail__field input {width: 100%; padding: .55rem .75rem; font: inherit; color: var(--c-text); background: var(--c-bg); border: 1px solid var(--c-hairline); border-radius: var(--radius-md);} .campaign-detail-hero__meta {margin: .2rem 0 0; font-size: .85rem; color: var(--c-text-dim); text-shadow: 0 1px 8px color-mix(in srgb,var(--c-bg) 75%,transparent);} .campaign-create {display: flex; flex-direction: column; gap: var(--sp-3); padding: var(--sp-4); width: 100%; max-width: 34rem;} .campaign-create__field {display: flex; flex-direction: column; gap: .3rem;} .campaign-create__field label {font-size: .8rem; color: var(--c-text-dim);} .campaign-create__field input,.campaign-create__field textarea,.campaign-create__field select {padding: .55rem .75rem; font: inherit; color: var(--c-text); background: var(--c-bg); border: 1px solid var(--c-hairline); border-radius: var(--radius-md);} .campaign-create__field textarea {resize: vertical;} .campaign-create__lengthrow {display: flex; gap: var(--sp-2); flex-wrap: wrap;} .campaign-create__lengthrow select {flex: 1; min-width: 12rem; padding: .55rem .75rem; font: inherit; color: var(--c-text); background: var(--c-bg); border: 1px solid var(--c-hairline); border-radius: var(--radius-md);} .campaign-create__lengthrow input {flex: 1; min-width: 12rem; padding: .55rem .75rem; font: inherit; color: var(--c-text); background: var(--c-bg); border: 1px solid var(--c-hairline); border-radius: var(--radius-md);} .campaign-create__optional summary {cursor: pointer; color: var(--c-text-dim); font-size: .85rem;} .campaign-create__optional {border-top: 1px solid var(--c-hairline); padding-top: var(--sp-2);} .campaign-create__optionalgrid {display: flex; gap: var(--sp-3); flex-wrap: wrap; margin-top: var(--sp-2);} .campaign-create__optionalgrid label {display: flex; flex-direction: column; gap: .3rem; font-size: .8rem; color: var(--c-text-dim);} .campaign-create__optionalgrid select {padding: .5rem .65rem; font: inherit; color: var(--c-text); background: var(--c-bg); border: 1px solid var(--c-hairline); border-radius: var(--radius-md);} .chip-list {list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: var(--sp-2);} .chip {display: inline-flex; align-items: center; gap: var(--sp-1); padding: var(--sp-1) var(--sp-2); border-radius: 999px; background: var(--c-surface-2, var(--c-bg)); border: 1px solid var(--c-hairline); font-size: .85rem;} .chip__remove {background: none; border: none; color: var(--c-text-dim); cursor: pointer; padding: 0 0 0 var(--sp-1); font-size: .8rem; line-height: 1;} .chip__remove:hover {color: var(--c-danger);} .picker-list {list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--sp-1);} .picker-list label {display: flex; align-items: center; gap: var(--sp-2); cursor: pointer;} .picker-list__row {display: flex; align-items: center; flex-wrap: wrap; gap: var(--sp-2);} .picker-list__adapt-actions {display: flex; align-items: center; gap: var(--sp-2);} .mismatch-badge {display: inline-flex; align-items: center; gap: .2em; padding: .1em .5em; border-radius: 999px; background: var(--c-danger-soft); color: var(--c-danger); font-size: .75rem; white-space: nowrap;} .stub-button {opacity: .55; cursor: not-allowed;} .gen-ready-badge {display: inline-flex; align-items: center; gap: .2em; padding: .1em .5em; margin-left: .5em; border-radius: 999px; background: var(--c-teal-glow); color: var(--c-teal); font-size: .75rem; white-space: nowrap;} .campaign-detail__gen-error {background: var(--c-danger-soft); color: var(--c-danger); border: 1px solid var(--c-danger); border-radius: var(--radius-md); padding: var(--sp-2) var(--sp-3); margin: 0 0 var(--sp-3); font-size: .875rem;} .map-plan-path {display: flex; flex-direction: column; gap: var(--sp-2);} .map-plan-review {display: flex; flex-direction: column; gap: var(--sp-2); padding: var(--sp-3); border: 1px dashed var(--c-hairline); border-radius: var(--radius-md);} .map-plan-review__world {margin: 0; font-size: .9rem;} .map-plan-review__list {gap: var(--sp-2);} .map-plan-review__row {align-items: flex-start;} .map-plan-review__type {display: inline-flex; align-items: center; padding: .1em .5em; border-radius: 999px; background: var(--c-surface-2, var(--c-bg)); border: 1px solid var(--c-hairline); color: var(--c-text-dim); font-size: .7rem; white-space: nowrap;} .map-plan-review__prompt {color: var(--c-text-dim); font-size: .8rem; flex-basis: 100%;} .campaign-detail__bible summary {cursor: pointer; color: var(--c-text-dim); font-size: .9rem;} .campaign-detail__bible-group {margin-top: var(--sp-3);} .campaign-detail__bible-group h3 {font-size: .85rem; color: var(--c-text-dim); margin: 0 0 var(--sp-1);} .campaign-detail__bible-group ul {margin: 0; padding-left: 1.2em;} .community-page__hint {color: var(--c-text-dim); font-size: .9rem; margin: 0 var(--sp-4) var(--sp-2); max-width: 60rem;} .community-grid {list-style: none; margin: 0; padding: 0 var(--sp-4) var(--sp-6); display: grid; grid-template-columns: repeat(auto-fill,minmax(15rem,1fr)); gap: var(--sp-4);} .community-card {cursor: pointer; overflow: hidden; display: flex; flex-direction: column;} .community-card:hover {border-color: var(--c-gold-deep);} @media (prefers-reduced-motion: no-preference) {.community-card {transition: border-color .15s ease,transform .15s ease;} .community-card:hover {transform: translateY(-2px);}} .community-card__thumb {width: 100%; aspect-ratio: 4 / 3; object-fit: cover; display: block; background: var(--c-bg-deep); border-bottom: 1px solid var(--c-hairline);} .community-card__thumb--empty {display: flex; align-items: center; justify-content: center; color: var(--c-text-faint); font-size: .8rem; text-align: center; padding: var(--sp-3);} .map-thumbnail {width: 100%; aspect-ratio: 4 / 3; overflow: hidden; border-radius: var(--radius-md); background: linear-gradient(color-mix(in srgb,var(--c-hairline) 55%,transparent) 1px,transparent 1px) 0 0 / 16px 16px,linear-gradient(90deg,color-mix(in srgb,var(--c-hairline) 55%,transparent) 1px,transparent 1px) 0 0 / 16px 16px,var(--c-bg-deep); display: block;} .map-thumbnail__img,.map-thumbnail__canvas,.map-thumbnail__placeholder {width: 100%; height: 100%; display: block; object-fit: cover;} .campaign-detail-map-thumb {width: 6rem; align-self: center; border-radius: var(--radius-sm);} .community-card__thumb-wrap {border-bottom: 1px solid var(--c-hairline);} .community-card__body {padding: var(--sp-3); display: flex; flex-direction: column; gap: var(--sp-1);} .community-card__name {font-family: var(--font-display); font-weight: 600; font-size: 1.05rem; color: var(--c-text);} .community-card__meta {color: var(--c-text-dim); font-size: .8rem; font-family: var(--font-mono);} .community-card__description {margin: var(--sp-1) 0 0; color: var(--c-text-dim); font-size: .85rem; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;} .community-preview {margin: 0 var(--sp-4) var(--sp-6); display: flex; flex-direction: column; overflow: hidden;} .community-preview__art {width: 100%; max-height: 26rem; overflow: hidden; background: var(--c-bg-deep); border-bottom: 1px solid var(--c-hairline); display: flex; align-items: center; justify-content: center;} .community-preview__art img {width: 100%; height: auto; display: block;} .community-preview__body {padding: var(--sp-4); display: flex; flex-direction: column; gap: var(--sp-2);} .community-preview__description {color: var(--c-text-dim); line-height: 1.5;} @media (max-width: 600px) {.community-grid {grid-template-columns: 1fr 1fr; gap: var(--sp-3);}} .mapcreator-group-heading {margin: var(--sp-2) 0 0; padding-top: var(--sp-2); border-top: 1px solid var(--c-hairline); font-size: .8rem; font-weight: 600; letter-spacing: .03em; text-transform: uppercase; color: var(--c-text-faint);} .mapbuilder-shapetools {display: grid; grid-template-columns: repeat(2,1fr); gap: var(--sp-1);} .mapbuilder-shapetool {display: flex; align-items: center; justify-content: space-between; gap: var(--sp-1); padding: .5rem .7rem; border-radius: var(--radius-sm); border: 1px solid var(--c-border); background: var(--c-surface-2); color: var(--c-text-dim); font-size: .85rem;} .mapbuilder-shapetool.active {background: var(--c-gold-glow); border-color: var(--c-gold); color: var(--c-gold-bright);} .mapbuilder-shapetool__label {text-align: left;} .mapbuilder-brushsizes {display: flex; gap: var(--sp-1);} .mapbuilder-brushsize-btn {min-width: 2.4rem; padding: .4rem .6rem; border-radius: var(--radius-sm); border: 1px solid var(--c-border); background: var(--c-surface-2); color: var(--c-text-dim); font-size: .85rem; text-align: center;} .mapbuilder-brushsize-btn.active {background: var(--c-gold-glow); border-color: var(--c-gold); color: var(--c-gold-bright);} .mapbuilder-key-hint {display: inline-flex; align-items: center; justify-content: center; min-width: 1.3em; padding: .05em .35em; border-radius: 4px; border: 1px solid var(--c-border); background: var(--c-bg-deep); color: var(--c-text-faint); font-family: inherit; font-size: .7rem; line-height: 1.4;} .mapbuilder-tool {gap: .5em;} .mapbuilder-tool .mapbuilder-key-hint {margin-left: auto;} @media (prefers-reduced-motion: no-preference) {.mapbuilder-shapetool,.mapbuilder-brushsize-btn,.mapbuilder-tool,.mapbuilder-feature-btn,.mapcreator-canvas-toolbar button {transition: background-color .12s ease,border-color .12s ease,color .12s ease;}} .mapcreator-canvas-toolbar {display: flex; align-items: center; gap: var(--sp-1); margin-left: auto; padding-bottom: var(--sp-1); flex-wrap: wrap;} .mapcreator-canvas-toolbar button {font-size: .78rem; padding: .3rem .6rem; border-radius: var(--radius-sm); border: 1px solid var(--c-border); background: var(--c-surface-2); color: var(--c-text-dim);} .mapcreator-canvas-toolbar button:disabled {opacity: .45; cursor: not-allowed;} .mapcreator-canvas-toolbar button.active {background: var(--c-gold-glow); border-color: var(--c-gold); color: var(--c-gold-bright);} .mapcreator-canvas-toolbar__divider {width: 1px; align-self: stretch; background: var(--c-hairline); margin: 0 .15rem;} .mapcreator-canvas-toolbar__zoom {font-size: .78rem; color: var(--c-text-faint); min-width: 3em; text-align: center;} .mapcreator-coord-readout {float: right; color: var(--c-text-faint); font-variant-numeric: tabular-nums;} .mapcreator-shortcuts {padding: var(--sp-2) var(--sp-3); font-size: .8rem; color: var(--c-text-dim);} .mapcreator-shortcuts ul {margin: var(--sp-1) 0 0; padding-left: 1.1em; display: flex; flex-direction: column; gap: .3em;} .mapcreator-shortcuts kbd {display: inline-flex; align-items: center; justify-content: center; min-width: 1.4em; padding: .05em .35em; border-radius: 4px; border: 1px solid var(--c-border); background: var(--c-bg-deep); color: var(--c-text); font-family: inherit; font-size: .75rem;} .mapbuilder-canvas__scroll {overflow: hidden; min-height: 320px; max-height: 70vh; cursor: default;} .mapbuilder-canvas__scroll.is-pannable {cursor: grab;} .mapbuilder-canvas__scroll.is-panning {cursor: grabbing;} .mapcreator-zoomwrap {display: inline-block; position: relative; transform-origin: 0 0;}){}
