.login-page{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,var(--black-void) 0%,var(--obsidian) 50%,var(--deep-amethyst) 100%);padding:var(--space-lg)}.login-container{width:100%;max-width:400px;text-align:center}.login-brand{margin-bottom:var(--space-2xl)}.login-title{font-family:var(--font-display);font-size:3.5rem;font-weight:700;color:var(--moon-sheen);letter-spacing:.05em;margin-bottom:var(--space-sm);text-shadow:0 0 40px var(--deep-amethyst)}.login-subtitle{font-family:var(--font-display);font-size:1.25rem;font-style:italic;color:var(--dull-steel);margin:0}.login-error{background:var(--dark-crimson);border:1px solid var(--blood-wine);border-radius:var(--radius-md);padding:var(--space-md);margin-bottom:var(--space-lg);color:var(--moon-sheen)}.login-error p{margin-bottom:var(--space-sm)}.login-error .btn-secondary{padding:var(--space-xs) var(--space-md);font-size:.875rem}.login-buttons{display:flex;flex-direction:column;gap:var(--space-md);margin-bottom:var(--space-xl)}.login-btn{display:flex;align-items:center;justify-content:center;gap:var(--space-sm);width:100%;padding:var(--space-md) var(--space-lg);font-family:var(--font-display);font-size:1.125rem;font-weight:500;border-radius:var(--radius-md);transition:all .2s ease;cursor:pointer}.login-btn-icon{flex-shrink:0}.login-btn-google{background:var(--color-bg-surface);color:var(--color-text-primary);border:1px solid var(--dull-steel)}.login-btn-google:hover{background:var(--ashen-char);border-color:var(--silver-ash);transform:translateY(-2px);box-shadow:var(--shadow-md)}.login-btn-apple{background:var(--moon-sheen);color:var(--black-void);border:1px solid var(--moon-sheen)}.login-btn-apple:hover{background:var(--silver-ash);transform:translateY(-2px);box-shadow:var(--shadow-md)}.login-footer{font-size:.875rem;color:var(--dull-steel);margin:0}@media(max-width:480px){.login-title{font-size:2.5rem}.login-subtitle{font-size:1rem}}.nav-header{background:var(--color-bg-elevated);border-bottom:1px solid var(--ashen-char);padding:var(--space-md) 0;position:sticky;top:0;z-index:100}.nav-container{display:flex;align-items:center;gap:var(--space-lg)}.nav-brand{font-family:var(--font-display);font-size:1.5rem;font-weight:700;color:var(--moon-sheen);text-decoration:none;letter-spacing:.02em}.nav-brand:hover{color:var(--ember-violet)}.nav-links{display:flex;align-items:center;gap:var(--space-xs);flex:1}.nav-link{font-family:var(--font-display);font-size:1rem;font-weight:500;color:var(--color-text-secondary);text-decoration:none;padding:var(--space-sm) var(--space-md);border-radius:var(--radius-md);transition:all .2s ease}.nav-link:hover{color:var(--color-text-primary);background:var(--color-bg-surface)}.nav-link.active{color:var(--color-accent-primary);background:var(--color-accent-muted)}.nav-link-admin{color:var(--blood-wine)}.nav-link-admin:hover{color:var(--rusted-rose)}.nav-link-admin.active{color:var(--moon-sheen);background:var(--blood-wine)}.nav-user{display:flex;align-items:center;gap:var(--space-sm)}.nav-avatar{width:32px;height:32px;border-radius:50%;border:2px solid var(--color-accent-muted)}.nav-username{font-size:.875rem;color:var(--color-text-secondary)}.nav-signout{font-family:var(--font-display);font-size:.875rem;color:var(--color-text-secondary);background:transparent;border:1px solid var(--dull-steel);padding:var(--space-xs) var(--space-sm);border-radius:var(--radius-sm);cursor:pointer;transition:all .2s ease}.nav-signout:hover{color:var(--color-text-primary);border-color:var(--silver-ash);background:var(--color-bg-surface)}@media(max-width:768px){.nav-container{flex-wrap:wrap}.nav-links{order:3;width:100%;justify-content:center;margin-top:var(--space-sm);padding-top:var(--space-sm);border-top:1px solid var(--ashen-char)}.nav-username{display:none}}.audio-player{position:fixed;bottom:0;left:0;right:0;height:80px;background:var(--color-bg-elevated);border-top:1px solid var(--ashen-char);display:grid;grid-template-columns:250px 1fr 150px;align-items:center;padding:0 var(--space-lg);z-index:1000;box-shadow:0 -4px 20px #0000004d}.player-song-info{display:flex;align-items:center;gap:var(--space-md);min-width:0}.player-cover{width:56px;height:56px;border-radius:var(--radius-sm);overflow:hidden;flex-shrink:0;box-shadow:var(--shadow-md)}.player-cover img{width:100%;height:100%;object-fit:cover}.player-text{display:flex;flex-direction:column;min-width:0}.player-title{font-size:.9375rem;font-weight:500;color:var(--color-text-heading);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.player-artist{font-size:.8125rem;color:var(--color-text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.player-song-artist{color:var(--color-text-secondary);font-weight:400}.player-controls{display:flex;flex-direction:column;align-items:center;gap:var(--space-sm);padding:0 var(--space-xl)}.player-buttons{display:flex;align-items:center;gap:var(--space-md)}.player-btn{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;color:var(--color-text-secondary);cursor:pointer;font-size:1rem;transition:all .15s ease;border-radius:50%}.player-btn:hover{color:var(--color-text-heading);background:var(--color-bg-surface)}.player-btn-play{width:40px;height:40px;background:var(--violet-core);color:var(--moon-sheen);font-size:1.125rem}.player-btn-play:hover{background:var(--ember-violet);color:var(--moon-sheen);transform:scale(1.05)}.player-progress{display:flex;align-items:center;gap:var(--space-sm);width:100%;max-width:600px}.player-time{font-family:var(--font-mono);font-size:.75rem;color:var(--color-text-secondary);min-width:40px;text-align:center}.progress-bar{flex:1;height:4px;background:var(--color-bg-surface);border-radius:2px;cursor:pointer;position:relative}.progress-bar:hover{height:6px}.progress-fill{height:100%;background:var(--violet-core);border-radius:2px;transition:width .1s linear}.progress-bar:hover .progress-fill{background:var(--ember-violet)}.progress-handle{position:absolute;top:50%;width:12px;height:12px;background:var(--moon-sheen);border-radius:50%;transform:translate(-50%,-50%);opacity:0;transition:opacity .15s ease;box-shadow:var(--shadow-sm)}.progress-bar:hover .progress-handle{opacity:1}.player-volume{display:flex;align-items:center;gap:var(--space-sm);justify-content:flex-end}.volume-icon{font-size:1rem}.volume-slider{width:80px;height:4px;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:var(--color-bg-surface);border-radius:2px;cursor:pointer}.volume-slider::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:12px;height:12px;background:var(--moon-sheen);border-radius:50%;cursor:pointer}.volume-slider::-moz-range-thumb{width:12px;height:12px;background:var(--moon-sheen);border-radius:50%;cursor:pointer;border:none}@media(max-width:768px){.audio-player{grid-template-columns:1fr auto;height:70px;padding:0 var(--space-md)}.player-song-info{display:none}.player-controls{padding:0}.player-progress,.player-volume{display:none}}.layout{display:flex;flex-direction:column;min-height:100vh}.layout.has-player{padding-bottom:80px}.layout-main{flex:1;padding:var(--space-xl) 0}@media(max-width:768px){.layout.has-player{padding-bottom:70px}}.loading-container{display:flex;align-items:center;justify-content:center;min-height:100vh;background:var(--color-bg-main)}.lore-loading{display:flex;flex-direction:column;align-items:center;justify-content:center;height:300px;gap:var(--space-md);color:var(--color-text-secondary)}.lore-header{margin-bottom:var(--space-xl)}.lore-header h1{margin-bottom:var(--space-xs)}.lore-categories{display:flex;flex-wrap:wrap;gap:var(--space-sm);margin-bottom:var(--space-xl)}.category-btn{padding:var(--space-xs) var(--space-md);background:var(--color-bg-surface);border:1px solid var(--ashen-char);border-radius:var(--radius-full);color:var(--color-text-secondary);font-size:.875rem;cursor:pointer;transition:all .15s ease}.category-btn:hover{border-color:var(--violet-core);color:var(--color-text-primary)}.category-btn.active{background:var(--violet-core);border-color:var(--violet-core);color:var(--moon-sheen)}.lore-empty{text-align:center;padding:var(--space-2xl);background:var(--color-bg-surface);border:1px dashed var(--ashen-char);border-radius:var(--radius-lg)}.lore-empty p:first-child{font-size:1.25rem;color:var(--color-text-heading);margin-bottom:var(--space-sm)}.lore-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:var(--space-lg)}.lore-card{background:var(--color-bg-surface);border:1px solid var(--ashen-char);border-radius:var(--radius-lg);overflow:hidden;transition:all .2s ease}.lore-card:hover{border-color:var(--violet-core);transform:translateY(-2px);box-shadow:var(--shadow-lg)}.lore-card-image{aspect-ratio:16 / 9;overflow:hidden}.lore-card-image img{width:100%;height:100%;object-fit:cover;transition:transform .3s ease}.lore-card:hover .lore-card-image img{transform:scale(1.05)}.lore-card-content{padding:var(--space-lg)}.lore-card-category{display:inline-block;padding:.125rem .5rem;background:var(--deep-amethyst);border-radius:var(--radius-sm);font-size:.6875rem;font-weight:600;text-transform:uppercase;letter-spacing:.1em;color:var(--ember-violet);margin-bottom:var(--space-sm)}.lore-card h3{margin:0 0 var(--space-sm) 0;font-size:1.25rem;color:var(--color-text-heading);line-height:1.3}.lore-card-excerpt{margin:0;font-size:.875rem;color:var(--color-text-secondary);line-height:1.5;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}.handouts-section{margin-top:var(--space-2xl);padding-top:var(--space-2xl);border-top:1px solid var(--ashen-char)}.handouts-header{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--space-lg);margin-bottom:var(--space-xl)}.handouts-header h2{margin-bottom:var(--space-xs)}.handout-filters{flex-shrink:0}.year-filter{padding:var(--space-xs) var(--space-sm);background:var(--color-bg-surface);border:1px solid var(--ashen-char);border-radius:var(--radius-md);color:var(--color-text-primary);font-size:.875rem;cursor:pointer}.year-filter:focus{outline:none;border-color:var(--violet-core)}.handouts-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:var(--space-lg)}.handout-card{display:flex;gap:var(--space-md);background:var(--color-bg-surface);border:1px solid var(--ashen-char);border-radius:var(--radius-lg);padding:var(--space-md);transition:all .2s ease}.handout-card:hover{border-color:var(--violet-core);transform:translateY(-2px);box-shadow:var(--shadow-lg)}.handout-thumbnail{flex-shrink:0;width:80px;height:80px;border-radius:var(--radius-md);overflow:hidden;background:var(--obsidian-core)}.handout-thumbnail img{width:100%;height:100%;object-fit:cover}.handout-icon{flex-shrink:0;width:80px;height:80px;border-radius:var(--radius-md);background:var(--deep-amethyst);display:flex;align-items:center;justify-content:center}.handout-icon .file-type-emoji{font-size:2rem;line-height:1}.handout-content{flex:1;min-width:0}.handout-date{display:inline-block;font-size:.6875rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--ember-violet);margin-bottom:var(--space-xs)}.handout-content h3{margin:0 0 var(--space-xs) 0;font-size:1rem;color:var(--color-text-heading);line-height:1.3}.handout-description{margin:0;font-size:.875rem;color:var(--color-text-secondary);line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}@media(max-width:768px){.lore-grid{grid-template-columns:1fr}.lore-categories{overflow-x:auto;flex-wrap:nowrap;padding-bottom:var(--space-sm);-webkit-overflow-scrolling:touch}.category-btn{flex-shrink:0}.handouts-header{flex-direction:column;align-items:stretch}.handout-filters{align-self:flex-start}.handouts-grid{grid-template-columns:1fr}}.article-loading{display:flex;flex-direction:column;align-items:center;justify-content:center;height:300px;gap:var(--space-md);color:var(--color-text-secondary)}.article-not-found{text-align:center;padding:var(--space-2xl)}.article-not-found h1{margin-bottom:var(--space-md)}.article-not-found p{margin-bottom:var(--space-xl);color:var(--color-text-secondary)}.lore-article{max-width:800px;margin:0 auto}.article-header{margin-bottom:var(--space-xl)}.back-link{display:inline-block;font-size:.875rem;color:var(--color-text-secondary);margin-bottom:var(--space-lg);transition:color .15s ease}.back-link:hover{color:var(--ember-violet)}.article-category{display:inline-block;padding:.25rem .75rem;background:var(--deep-amethyst);border-radius:var(--radius-sm);font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.1em;color:var(--ember-violet);margin-bottom:var(--space-md)}.article-header h1{font-size:2.5rem;line-height:1.2;margin-bottom:var(--space-md)}.article-excerpt{font-size:1.25rem;color:var(--color-text-secondary);line-height:1.6;margin:0}.article-cover{margin-bottom:var(--space-xl);border-radius:var(--radius-lg);overflow:hidden;box-shadow:var(--shadow-lg)}.article-cover img{width:100%;height:auto;display:block}.article-content{font-size:1.0625rem;line-height:1.8;color:var(--color-text-primary)}.article-content h1,.article-content h2,.article-content h3,.article-content h4{margin-top:var(--space-xl);margin-bottom:var(--space-md);color:var(--color-text-heading)}.article-content h2{font-size:1.75rem;border-bottom:1px solid var(--ashen-char);padding-bottom:var(--space-sm)}.article-content h3{font-size:1.375rem}.article-content p{margin-bottom:var(--space-md)}.article-content ul,.article-content ol{margin-bottom:var(--space-md);padding-left:var(--space-xl)}.article-content li{margin-bottom:var(--space-xs)}.article-content blockquote{margin:var(--space-lg) 0;padding:var(--space-md) var(--space-lg);border-left:4px solid var(--violet-core);background:var(--color-bg-surface);font-style:italic;color:var(--color-text-secondary)}.article-content blockquote p:last-child{margin-bottom:0}.article-content a{color:var(--ember-violet);text-decoration:underline;text-underline-offset:2px}.article-content a:hover{color:var(--violet-core)}.article-content img{max-width:100%;height:auto;border-radius:var(--radius-md);margin:var(--space-lg) 0}.article-content pre{background:var(--color-bg-surface);border:1px solid var(--ashen-char);border-radius:var(--radius-md);padding:var(--space-md);overflow-x:auto;font-family:var(--font-mono);font-size:.875rem;margin-bottom:var(--space-md)}.article-content code{font-family:var(--font-mono);font-size:.875em;background:var(--color-bg-surface);padding:.125rem .375rem;border-radius:var(--radius-sm)}.article-content pre code{background:none;padding:0}.article-content hr{border:none;height:1px;background:var(--ashen-char);margin:var(--space-xl) 0}.article-footer{margin-top:var(--space-2xl);padding-top:var(--space-xl);border-top:1px solid var(--ashen-char)}@media(max-width:768px){.article-header h1{font-size:1.75rem}.article-excerpt{font-size:1.0625rem}.article-content{font-size:1rem}}.vis-time-axis{position:relative;overflow:hidden}.vis-time-axis.vis-foreground{top:0;left:0;width:100%}.vis-time-axis.vis-background{position:absolute;top:0;left:0;width:100%;height:100%}.vis-time-axis .vis-text{position:absolute;color:#4d4d4d;padding:3px;overflow:hidden;box-sizing:border-box;white-space:nowrap}.vis-time-axis .vis-text.vis-measure{position:absolute;padding-left:0;padding-right:0;margin-left:0;margin-right:0;visibility:hidden}.vis-time-axis .vis-grid.vis-vertical{position:absolute;border-left:1px solid}.vis-time-axis .vis-grid.vis-vertical-rtl{position:absolute;border-right:1px solid}.vis-time-axis .vis-grid.vis-minor{border-color:#e5e5e5}.vis-time-axis .vis-grid.vis-major{border-color:#bfbfbf}.vis .overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10}.vis-active{box-shadow:0 0 10px #86d5f8}.vis-custom-time{background-color:#6e94ff;width:2px;cursor:move;z-index:1}.vis-custom-time>.vis-custom-time-marker{background-color:inherit;color:#fff;font-size:12px;white-space:nowrap;padding:3px 5px;top:0;cursor:initial;z-index:inherit}.vis-current-time{background-color:#ff7f6e;width:2px;z-index:1;pointer-events:none}.vis-rolling-mode-btn{height:40px;width:40px;position:absolute;top:7px;right:20px;border-radius:50%;font-size:28px;cursor:pointer;opacity:.8;color:#fff;font-weight:700;text-align:center;background:#3876c2}.vis-rolling-mode-btn:before{content:"⛶"}.vis-rolling-mode-btn:hover{opacity:1}.vis-panel{position:absolute;padding:0;margin:0;box-sizing:border-box}.vis-panel.vis-center,.vis-panel.vis-left,.vis-panel.vis-right,.vis-panel.vis-top,.vis-panel.vis-bottom{border:1px #bfbfbf}.vis-panel.vis-center,.vis-panel.vis-left,.vis-panel.vis-right{border-top-style:solid;border-bottom-style:solid;overflow:hidden}.vis-left.vis-panel.vis-vertical-scroll,.vis-right.vis-panel.vis-vertical-scroll{height:100%;overflow-x:hidden;overflow-y:scroll}.vis-left.vis-panel.vis-vertical-scroll{direction:rtl}.vis-left.vis-panel.vis-vertical-scroll .vis-content,.vis-right.vis-panel.vis-vertical-scroll{direction:ltr}.vis-right.vis-panel.vis-vertical-scroll .vis-content{direction:rtl}.vis-panel.vis-center,.vis-panel.vis-top,.vis-panel.vis-bottom{border-left-style:solid;border-right-style:solid}.vis-background{overflow:hidden}.vis-panel>.vis-content{position:relative}.vis-panel .vis-shadow{position:absolute;width:100%;height:1px;box-shadow:0 0 10px #000c}.vis-panel .vis-shadow.vis-top{top:-1px;left:0}.vis-panel .vis-shadow.vis-bottom{bottom:-1px;left:0}.vis-graph-group0{fill:#4f81bd;fill-opacity:0;stroke-width:2px;stroke:#4f81bd}.vis-graph-group1{fill:#f79646;fill-opacity:0;stroke-width:2px;stroke:#f79646}.vis-graph-group2{fill:#8c51cf;fill-opacity:0;stroke-width:2px;stroke:#8c51cf}.vis-graph-group3{fill:#75c841;fill-opacity:0;stroke-width:2px;stroke:#75c841}.vis-graph-group4{fill:#ff0100;fill-opacity:0;stroke-width:2px;stroke:#ff0100}.vis-graph-group5{fill:#37d8e6;fill-opacity:0;stroke-width:2px;stroke:#37d8e6}.vis-graph-group6{fill:#042662;fill-opacity:0;stroke-width:2px;stroke:#042662}.vis-graph-group7{fill:#00ff26;fill-opacity:0;stroke-width:2px;stroke:#00ff26}.vis-graph-group8{fill:#f0f;fill-opacity:0;stroke-width:2px;stroke:#f0f}.vis-graph-group9{fill:#8f3938;fill-opacity:0;stroke-width:2px;stroke:#8f3938}.vis-timeline .vis-fill{fill-opacity:.1;stroke:none}.vis-timeline .vis-bar{fill-opacity:.5;stroke-width:1px}.vis-timeline .vis-point{stroke-width:2px;fill-opacity:1}.vis-timeline .vis-legend-background{stroke-width:1px;fill-opacity:.9;fill:#fff;stroke:#c2c2c2}.vis-timeline .vis-outline{stroke-width:1px;fill-opacity:1;fill:#fff;stroke:#e5e5e5}.vis-timeline .vis-icon-fill{fill-opacity:.3;stroke:none}.vis-timeline{position:relative;border:1px solid #bfbfbf;overflow:hidden;padding:0;margin:0;box-sizing:border-box}.vis-loading-screen{width:100%;height:100%;position:absolute;top:0;left:0}.vis [class*=span]{min-height:0;width:auto}.vis-item{position:absolute;color:#1a1a1a;border-color:#97b0f8;border-width:1px;background-color:#d5ddf6;display:inline-block;z-index:1}.vis-item.vis-selected{border-color:#ffc200;background-color:#fff785;z-index:2}.vis-editable.vis-selected{cursor:move}.vis-item.vis-point.vis-selected{background-color:#fff785}.vis-item.vis-box{text-align:center;border-style:solid;border-radius:2px}.vis-item.vis-point{background:none}.vis-item.vis-dot{position:absolute;padding:0;border-width:4px;border-style:solid;border-radius:4px}.vis-item.vis-range{border-style:solid;border-radius:2px;box-sizing:border-box}.vis-item.vis-background{border:none;background-color:#d5ddf666;box-sizing:border-box;padding:0;margin:0}.vis-item .vis-item-overflow{position:relative;width:100%;height:100%;padding:0;margin:0;overflow:hidden}.vis-item-visible-frame{white-space:nowrap}.vis-item.vis-range .vis-item-content{position:relative;display:inline-block}.vis-item.vis-background .vis-item-content{position:absolute;display:inline-block}.vis-item.vis-line{padding:0;position:absolute;width:0;border-left-width:1px;border-left-style:solid}.vis-item .vis-item-content{white-space:nowrap;box-sizing:border-box;padding:5px}.vis-item .vis-onUpdateTime-tooltip{position:absolute;background:#4f81bd;color:#fff;width:200px;text-align:center;white-space:nowrap;padding:5px;border-radius:1px;transition:.4s;-o-transition:.4s;-moz-transition:.4s;-webkit-transition:.4s}.vis-item .vis-delete,.vis-item .vis-delete-rtl{position:absolute;top:0;width:24px;height:24px;box-sizing:border-box;padding:0 5px;cursor:pointer;-webkit-transition:background .2s linear;-moz-transition:background .2s linear;-ms-transition:background .2s linear;-o-transition:background .2s linear;transition:background .2s linear}.vis-item .vis-delete{right:-24px}.vis-item .vis-delete-rtl{left:-24px}.vis-item .vis-delete:after,.vis-item .vis-delete-rtl:after{content:"×";color:red;font-family:arial,sans-serif;font-size:22px;font-weight:700;-webkit-transition:color .2s linear;-moz-transition:color .2s linear;-ms-transition:color .2s linear;-o-transition:color .2s linear;transition:color .2s linear}.vis-item .vis-delete:hover,.vis-item .vis-delete-rtl:hover{background:red}.vis-item .vis-delete:hover:after,.vis-item .vis-delete-rtl:hover:after{color:#fff}.vis-item .vis-drag-center{position:absolute;width:100%;height:100%;top:0;left:0;cursor:move}.vis-item.vis-range .vis-drag-left{position:absolute;width:24px;max-width:20%;min-width:2px;height:100%;top:0;left:-4px;cursor:w-resize}.vis-item.vis-range .vis-drag-right{position:absolute;width:24px;max-width:20%;min-width:2px;height:100%;top:0;right:-4px;cursor:e-resize}.vis-range.vis-item.vis-readonly .vis-drag-left,.vis-range.vis-item.vis-readonly .vis-drag-right{cursor:auto}.vis-item.vis-cluster{vertical-align:center;text-align:center;border-style:solid;border-radius:2px}.vis-item.vis-cluster-line{padding:0;position:absolute;width:0;border-left-width:1px;border-left-style:solid}.vis-item.vis-cluster-dot{position:absolute;padding:0;border-width:4px;border-style:solid;border-radius:4px}div.vis-tooltip{position:absolute;visibility:hidden;padding:5px;white-space:nowrap;font-family:verdana;font-size:14px;color:#000;background-color:#f5f4ed;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;border:1px solid #808074;box-shadow:3px 3px 10px #0003;pointer-events:none;z-index:5}.vis-itemset{position:relative;padding:0;margin:0;box-sizing:border-box}.vis-itemset .vis-background,.vis-itemset .vis-foreground{position:absolute;width:100%;height:100%;overflow:visible}.vis-axis{position:absolute;width:100%;height:0;left:0;z-index:1}.vis-foreground .vis-group{position:relative;box-sizing:border-box;border-bottom:1px solid #bfbfbf}.vis-foreground .vis-group:last-child{border-bottom:none}.vis-nesting-group{cursor:pointer}.vis-label.vis-nested-group.vis-group-level-unknown-but-gte1{background:#f5f5f5}.vis-label.vis-nested-group.vis-group-level-0{background-color:#fff}.vis-ltr .vis-label.vis-nested-group.vis-group-level-0 .vis-inner{padding-left:0}.vis-rtl .vis-label.vis-nested-group.vis-group-level-0 .vis-inner{padding-right:0}.vis-label.vis-nested-group.vis-group-level-1{background-color:#0000000d}.vis-ltr .vis-label.vis-nested-group.vis-group-level-1 .vis-inner{padding-left:15px}.vis-rtl .vis-label.vis-nested-group.vis-group-level-1 .vis-inner{padding-right:15px}.vis-label.vis-nested-group.vis-group-level-2{background-color:#0000001a}.vis-ltr .vis-label.vis-nested-group.vis-group-level-2 .vis-inner{padding-left:30px}.vis-rtl .vis-label.vis-nested-group.vis-group-level-2 .vis-inner{padding-right:30px}.vis-label.vis-nested-group.vis-group-level-3{background-color:#00000026}.vis-ltr .vis-label.vis-nested-group.vis-group-level-3 .vis-inner{padding-left:45px}.vis-rtl .vis-label.vis-nested-group.vis-group-level-3 .vis-inner{padding-right:45px}.vis-label.vis-nested-group.vis-group-level-4{background-color:#0003}.vis-ltr .vis-label.vis-nested-group.vis-group-level-4 .vis-inner{padding-left:60px}.vis-rtl .vis-label.vis-nested-group.vis-group-level-4 .vis-inner{padding-right:60px}.vis-label.vis-nested-group.vis-group-level-5{background-color:#00000040}.vis-ltr .vis-label.vis-nested-group.vis-group-level-5 .vis-inner{padding-left:75px}.vis-rtl .vis-label.vis-nested-group.vis-group-level-5 .vis-inner{padding-right:75px}.vis-label.vis-nested-group.vis-group-level-6{background-color:#0000004d}.vis-ltr .vis-label.vis-nested-group.vis-group-level-6 .vis-inner{padding-left:90px}.vis-rtl .vis-label.vis-nested-group.vis-group-level-6 .vis-inner{padding-right:90px}.vis-label.vis-nested-group.vis-group-level-7{background-color:#00000059}.vis-ltr .vis-label.vis-nested-group.vis-group-level-7 .vis-inner{padding-left:105px}.vis-rtl .vis-label.vis-nested-group.vis-group-level-7 .vis-inner{padding-right:105px}.vis-label.vis-nested-group.vis-group-level-8{background-color:#0006}.vis-ltr .vis-label.vis-nested-group.vis-group-level-8 .vis-inner{padding-left:120px}.vis-rtl .vis-label.vis-nested-group.vis-group-level-8 .vis-inner{padding-right:120px}.vis-label.vis-nested-group.vis-group-level-9{background-color:#00000073}.vis-ltr .vis-label.vis-nested-group.vis-group-level-9 .vis-inner{padding-left:135px}.vis-rtl .vis-label.vis-nested-group.vis-group-level-9 .vis-inner{padding-right:135px}.vis-label.vis-nested-group{background-color:#00000080}.vis-ltr .vis-label.vis-nested-group .vis-inner{padding-left:150px}.vis-rtl .vis-label.vis-nested-group .vis-inner{padding-right:150px}.vis-group-level-unknown-but-gte1{border:1px solid red}.vis-label.vis-nesting-group:before{display:inline-block;width:15px}.vis-label.vis-nesting-group.expanded:before{content:"▼"}.vis-label.vis-nesting-group.collapsed:before{content:"▶"}.vis-rtl .vis-label.vis-nesting-group.collapsed:before{content:"◀"}.vis-ltr .vis-label:not(.vis-nesting-group):not(.vis-group-level-0){padding-left:15px}.vis-rtl .vis-label:not(.vis-nesting-group):not(.vis-group-level-0){padding-right:15px}.vis-overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10}.vis-labelset{position:relative;overflow:hidden;box-sizing:border-box}.vis-labelset .vis-label{position:relative;left:0;top:0;width:100%;color:#4d4d4d;box-sizing:border-box}.vis-labelset .vis-label{border-bottom:1px solid #bfbfbf}.vis-labelset .vis-label.draggable{cursor:pointer}.vis-group-is-dragging{background:#0000001a}.vis-labelset .vis-label:last-child{border-bottom:none}.vis-labelset .vis-label .vis-inner{display:inline-block;padding:5px}.vis-labelset .vis-label .vis-inner.vis-hidden{padding:0}div.vis-configuration{position:relative;display:block;float:left;font-size:12px}div.vis-configuration-wrapper{display:block;width:700px}div.vis-configuration-wrapper:after{clear:both;content:"";display:block}div.vis-configuration.vis-config-option-container{display:block;width:495px;background-color:#fff;border:2px solid #f7f8fa;border-radius:4px;margin-top:20px;left:10px;padding-left:5px}div.vis-configuration.vis-config-button{display:block;width:495px;height:25px;vertical-align:middle;line-height:25px;background-color:#f7f8fa;border:2px solid #ceced0;border-radius:4px;margin-top:20px;left:10px;padding-left:5px;cursor:pointer;margin-bottom:30px}div.vis-configuration.vis-config-button.hover{background-color:#4588e6;border:2px solid #214373;color:#fff}div.vis-configuration.vis-config-item{display:block;float:left;width:495px;height:25px;vertical-align:middle;line-height:25px}div.vis-configuration.vis-config-item.vis-config-s2{left:10px;background-color:#f7f8fa;padding-left:5px;border-radius:3px}div.vis-configuration.vis-config-item.vis-config-s3{left:20px;background-color:#e4e9f0;padding-left:5px;border-radius:3px}div.vis-configuration.vis-config-item.vis-config-s4{left:30px;background-color:#cfd8e6;padding-left:5px;border-radius:3px}div.vis-configuration.vis-config-header{font-size:18px;font-weight:700}div.vis-configuration.vis-config-label{width:120px;height:25px;line-height:25px}div.vis-configuration.vis-config-label.vis-config-s3{width:110px}div.vis-configuration.vis-config-label.vis-config-s4{width:100px}div.vis-configuration.vis-config-colorBlock{top:1px;width:30px;height:19px;border:1px solid #444444;border-radius:2px;padding:0;margin:0;cursor:pointer}input.vis-configuration.vis-config-checkbox{left:-5px}input.vis-configuration.vis-config-rangeinput{position:relative;top:-5px;width:60px;padding:1px;margin:0;pointer-events:none}input.vis-configuration.vis-config-range{-webkit-appearance:none;border:0px solid white;background-color:#0000;width:300px;height:20px}input.vis-configuration.vis-config-range::-webkit-slider-runnable-track{width:300px;height:5px;background:#dedede;background:-moz-linear-gradient(top,#dedede 0%,#c8c8c8 99%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#dedede),color-stop(99%,#c8c8c8));background:-webkit-linear-gradient(top,#dedede 0%,#c8c8c8 99%);background:-o-linear-gradient(top,#dedede 0%,#c8c8c8 99%);background:-ms-linear-gradient(top,#dedede 0%,#c8c8c8 99%);background:linear-gradient(to bottom,#dedede,#c8c8c8 99%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#dedede",endColorstr="#c8c8c8",GradientType=0);border:1px solid #999999;box-shadow:#aaa 0 0 3px;border-radius:3px}input.vis-configuration.vis-config-range::-webkit-slider-thumb{-webkit-appearance:none;border:1px solid #14334b;height:17px;width:17px;border-radius:50%;background:#3876c2;background:-moz-linear-gradient(top,#3876c2 0%,#385380 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#3876c2),color-stop(100%,#385380));background:-webkit-linear-gradient(top,#3876c2 0%,#385380 100%);background:-o-linear-gradient(top,#3876c2 0%,#385380 100%);background:-ms-linear-gradient(top,#3876c2 0%,#385380 100%);background:linear-gradient(to bottom,#3876c2,#385380);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#3876c2",endColorstr="#385380",GradientType=0);box-shadow:#111927 0 0 1px;margin-top:-7px}input.vis-configuration.vis-config-range:focus{outline:none}input.vis-configuration.vis-config-range:focus::-webkit-slider-runnable-track{background:#9d9d9d;background:-moz-linear-gradient(top,#9d9d9d 0%,#c8c8c8 99%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#9d9d9d),color-stop(99%,#c8c8c8));background:-webkit-linear-gradient(top,#9d9d9d 0%,#c8c8c8 99%);background:-o-linear-gradient(top,#9d9d9d 0%,#c8c8c8 99%);background:-ms-linear-gradient(top,#9d9d9d 0%,#c8c8c8 99%);background:linear-gradient(to bottom,#9d9d9d,#c8c8c8 99%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#9d9d9d",endColorstr="#c8c8c8",GradientType=0)}input.vis-configuration.vis-config-range::-moz-range-track{width:300px;height:10px;background:#dedede;background:-moz-linear-gradient(top,#dedede 0%,#c8c8c8 99%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#dedede),color-stop(99%,#c8c8c8));background:-webkit-linear-gradient(top,#dedede 0%,#c8c8c8 99%);background:-o-linear-gradient(top,#dedede 0%,#c8c8c8 99%);background:-ms-linear-gradient(top,#dedede 0%,#c8c8c8 99%);background:linear-gradient(to bottom,#dedede,#c8c8c8 99%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#dedede",endColorstr="#c8c8c8",GradientType=0);border:1px solid #999999;box-shadow:#aaa 0 0 3px;border-radius:3px}input.vis-configuration.vis-config-range::-moz-range-thumb{border:none;height:16px;width:16px;border-radius:50%;background:#385380}input.vis-configuration.vis-config-range:-moz-focusring{outline:1px solid white;outline-offset:-1px}input.vis-configuration.vis-config-range::-ms-track{width:300px;height:5px;background:transparent;border-color:transparent;border-width:6px 0;color:transparent}input.vis-configuration.vis-config-range::-ms-fill-lower{background:#777;border-radius:10px}input.vis-configuration.vis-config-range::-ms-fill-upper{background:#ddd;border-radius:10px}input.vis-configuration.vis-config-range::-ms-thumb{border:none;height:16px;width:16px;border-radius:50%;background:#385380}input.vis-configuration.vis-config-range:focus::-ms-fill-lower{background:#888}input.vis-configuration.vis-config-range:focus::-ms-fill-upper{background:#ccc}.vis-configuration-popup{position:absolute;background:#394c59d9;border:2px solid #f2faff;line-height:30px;height:30px;width:150px;text-align:center;color:#fff;font-size:14px;border-radius:4px;-webkit-transition:opacity .3s ease-in-out;-moz-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out}.vis-configuration-popup:after,.vis-configuration-popup:before{left:100%;top:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.vis-configuration-popup:after{border-color:#88b7d500;border-left-color:#394c59d9;border-width:8px;margin-top:-8px}.vis-configuration-popup:before{border-color:#c2e1f500;border-left-color:#f2faff;border-width:12px;margin-top:-12px}.vis-panel.vis-background.vis-horizontal .vis-grid.vis-horizontal{position:absolute;width:100%;height:0;border-bottom:1px solid}.vis-panel.vis-background.vis-horizontal .vis-grid.vis-minor{border-color:#e5e5e5}.vis-panel.vis-background.vis-horizontal .vis-grid.vis-major{border-color:#bfbfbf}.vis-data-axis .vis-y-axis.vis-major{width:100%;position:absolute;color:#4d4d4d;white-space:nowrap}.vis-data-axis .vis-y-axis.vis-major.vis-measure{padding:0;margin:0;border:0;visibility:hidden;width:auto}.vis-data-axis .vis-y-axis.vis-minor{position:absolute;width:100%;color:#bebebe;white-space:nowrap}.vis-data-axis .vis-y-axis.vis-minor.vis-measure{padding:0;margin:0;border:0;visibility:hidden;width:auto}.vis-data-axis .vis-y-axis.vis-title{position:absolute;color:#4d4d4d;white-space:nowrap;bottom:20px;text-align:center}.vis-data-axis .vis-y-axis.vis-title.vis-measure{padding:0;margin:0;visibility:hidden;width:auto}.vis-data-axis .vis-y-axis.vis-title.vis-left{bottom:0;-webkit-transform-origin:left top;-moz-transform-origin:left top;-ms-transform-origin:left top;-o-transform-origin:left top;transform-origin:left bottom;-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}.vis-data-axis .vis-y-axis.vis-title.vis-right{bottom:0;-webkit-transform-origin:right bottom;-moz-transform-origin:right bottom;-ms-transform-origin:right bottom;-o-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.vis-legend{background-color:#f7fcffa6;padding:5px;border:1px solid #b3b3b3;box-shadow:2px 2px 10px #9a9a9a8c}.vis-legend-text{white-space:nowrap;display:inline-block}.timeline-section{display:flex;flex-direction:column;height:calc(100vh - 180px);min-height:500px}.filter-bar{display:flex;flex-wrap:wrap;gap:.5rem;padding:var(--space-md);background:var(--color-bg-elevated);border:1px solid var(--ashen-char);border-radius:var(--radius-md);margin-bottom:var(--space-md);align-items:center}.filter-label{font-size:.85rem;color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.1em;margin-right:var(--space-sm)}.filter-button{font-family:var(--font-body);font-size:.875rem;padding:.35rem .75rem;background:var(--color-bg-surface);border:1px solid var(--ashen-char);border-radius:var(--radius-sm);color:var(--color-text-secondary);cursor:pointer;transition:all .2s ease}.filter-button:hover{background:var(--deep-amethyst);color:var(--color-text-primary);border-color:var(--violet-core)}.filter-button.active{background:var(--violet-core);color:var(--moon-sheen);border-color:var(--ember-violet)}.filter-button.filter-clear{color:var(--dull-steel);border-style:dashed}.filter-button.filter-clear:hover{color:var(--color-text-primary);border-color:var(--silver-ash)}.filter-separator{width:1px;height:24px;background:var(--ashen-char);margin:0 var(--space-sm)}.filter-button.year-button.active{background:var(--deep-amethyst);color:var(--moon-sheen);border-color:var(--violet-core)}.timeline-wrapper{position:relative;flex:1;background:var(--color-bg-elevated);border:1px solid var(--ashen-char);border-radius:var(--radius-md);overflow:hidden}.vis-timeline{font-family:var(--font-body);border:none!important;background:var(--color-bg-elevated)!important}.vis-time-axis{background:var(--color-bg-surface)!important}.vis-time-axis .vis-text{color:var(--color-text-secondary)!important;font-family:var(--font-mono)!important;font-size:.75rem!important}.vis-time-axis .vis-grid.vis-minor{border-color:#6e2ebf1a!important}.vis-time-axis .vis-grid.vis-major{border-color:#6e2ebf40!important}.vis-panel.vis-center,.vis-panel.vis-left,.vis-panel.vis-right,.vis-panel.vis-top,.vis-panel.vis-bottom{background:var(--color-bg-elevated)!important;border-color:var(--ashen-char)!important}.vis-item{background:var(--violet-core)!important;border:1px solid var(--ember-violet)!important;border-radius:var(--radius-sm)!important;color:var(--moon-sheen)!important;font-family:var(--font-body)!important;font-size:.9rem!important;padding:4px 10px!important;transition:all .15s ease!important}.vis-item.vis-selected{box-shadow:0 0 0 1px var(--ember-violet),0 0 12px #6e2ebf66!important;z-index:10!important}.vis-item:hover{background:var(--ember-violet)!important}.vis-item.vis-range{border-radius:var(--radius-sm)!important}.vis-item .vis-item-content{padding:0!important;white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important}.event-tooltip{position:absolute;z-index:1000;background:var(--color-bg-surface);border:1px solid var(--violet-core);border-radius:var(--radius-md);padding:var(--space-md) var(--space-lg);max-width:320px;box-shadow:0 8px 32px #00000080,0 0 0 1px var(--deep-amethyst);pointer-events:none;opacity:0;transform:translateY(5px);transition:opacity .15s ease,transform .15s ease}.event-tooltip.visible{opacity:1;transform:translateY(0)}.event-tooltip h3{font-family:var(--font-display);font-size:1.1rem;font-weight:600;color:var(--color-text-heading);margin-bottom:var(--space-sm)}.event-tooltip .tooltip-date{font-family:var(--font-mono);font-size:.75rem;color:var(--ember-violet);margin-bottom:var(--space-sm);letter-spacing:.02em}.event-tooltip .tooltip-location{font-size:.85rem;color:var(--dull-steel);margin-bottom:var(--space-sm);font-style:italic}.event-tooltip .tooltip-description{font-size:.9rem;color:var(--color-text-secondary);line-height:1.5;margin-bottom:var(--space-sm)}.event-tooltip .tooltip-characters{font-size:.85rem;color:var(--violet-core);margin-bottom:var(--space-sm)}.event-tooltip .tooltip-category{display:inline-block;margin-top:var(--space-sm);font-size:.7rem;text-transform:uppercase;letter-spacing:.1em;color:var(--color-text-secondary);padding:.2rem .5rem;background:var(--deep-amethyst);border-radius:2px}.zoom-controls{position:absolute;bottom:var(--space-md);right:var(--space-md);display:flex;gap:var(--space-xs);z-index:100}.zoom-button{width:36px;height:36px;display:flex;align-items:center;justify-content:center;background:var(--color-bg-surface);border:1px solid var(--ashen-char);border-radius:var(--radius-sm);color:var(--color-text-secondary);cursor:pointer;font-size:1.2rem;transition:all .15s ease}.zoom-button:hover{background:var(--violet-core);color:var(--moon-sheen);border-color:var(--ember-violet)}@media(max-width:768px){.timeline-section{height:calc(100vh - 240px)}.filter-bar{padding:var(--space-sm)}.filter-button{font-size:.75rem;padding:.25rem .5rem}}.timeline-loading{display:flex;flex-direction:column;align-items:center;justify-content:center;height:400px;gap:var(--space-md);color:var(--color-text-secondary)}.timeline-error{text-align:center;padding:var(--space-2xl);background:var(--dark-crimson);border:1px solid var(--blood-wine);border-radius:var(--radius-lg)}.timeline-error h2{color:var(--moon-sheen);margin-bottom:var(--space-sm)}.timeline-error p{color:var(--rusted-rose);margin:0}.timeline-empty{text-align:center;padding:var(--space-2xl);background:var(--color-bg-surface);border:1px dashed var(--ashen-char);border-radius:var(--radius-lg)}.timeline-empty p{margin:0}.timeline-empty p:first-child{font-size:1.25rem;color:var(--color-text-heading);margin-bottom:var(--space-sm)}.album-viewer-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:#0b0b0ff2;display:flex;align-items:center;justify-content:center;z-index:2000;perspective:1500px;perspective-origin:center center}.album-viewer-container{position:relative;width:80vmin;max-width:600px;aspect-ratio:1;transform-style:preserve-3d}.album-viewer-container.opening{animation:viewer-open .4s ease-out forwards}.album-viewer-container.closing{animation:viewer-close .3s ease-in forwards}.album-viewer-image{position:absolute;top:0;left:0;width:100%;height:100%;border-radius:var(--radius-lg);box-shadow:0 20px 60px #0009;object-fit:cover;backface-visibility:hidden;transform-origin:left center}.album-viewer-image.current{z-index:2}.album-viewer-image.next{z-index:1}@keyframes viewer-open{0%{opacity:0;transform:scale(.8) rotateY(30deg)}to{opacity:1;transform:scale(1) rotateY(0)}}@keyframes viewer-close{0%{opacity:1;transform:scale(1) rotateY(0)}to{opacity:0;transform:scale(.6) rotateY(20deg)}}@keyframes peel-forward-out{0%{transform:rotateY(0)}to{transform:rotateY(-180deg)}}@keyframes peel-forward-in{0%{opacity:0}50%{opacity:0}51%{opacity:1}to{opacity:1}}@keyframes peel-backward-out{0%{opacity:1}49%{opacity:1}50%{opacity:0}to{opacity:0}}@keyframes peel-backward-in{0%{transform:rotateY(-180deg)}to{transform:rotateY(0)}}.album-viewer-image.animating-peel-forward-out{animation:peel-forward-out .8s ease-in-out forwards;transform-origin:left center}.album-viewer-image.animating-peel-forward-in{animation:peel-forward-in .8s ease-in-out forwards}.album-viewer-image.animating-peel-backward-out{animation:peel-backward-out .8s ease-in-out forwards}.album-viewer-image.animating-peel-backward-in{animation:peel-backward-in .8s ease-in-out forwards;transform-origin:left center;z-index:3}@keyframes slide-forward-out{0%{transform:translate(0);opacity:1}to{transform:translate(-100%);opacity:0}}@keyframes slide-forward-in{0%{transform:translate(100%);opacity:0}to{transform:translate(0);opacity:1}}@keyframes slide-backward-out{0%{transform:translate(0);opacity:1}to{transform:translate(100%);opacity:0}}@keyframes slide-backward-in{0%{transform:translate(-100%);opacity:0}to{transform:translate(0);opacity:1}}.album-viewer-image.animating-slide-forward-out{animation:slide-forward-out .5s ease-in-out forwards}.album-viewer-image.animating-slide-forward-in{animation:slide-forward-in .5s ease-in-out forwards}.album-viewer-image.animating-slide-backward-out{animation:slide-backward-out .5s ease-in-out forwards}.album-viewer-image.animating-slide-backward-in{animation:slide-backward-in .5s ease-in-out forwards}@keyframes flip-forward-out{0%{transform:rotateY(0)}to{transform:rotateY(-180deg)}}@keyframes flip-forward-in{0%{opacity:0}50%{opacity:0}51%{opacity:1}to{opacity:1}}@keyframes flip-backward-out{0%{opacity:1}49%{opacity:1}50%{opacity:0}to{opacity:0}}@keyframes flip-backward-in{0%{transform:rotateY(-180deg)}to{transform:rotateY(0)}}.album-viewer-image.animating-flip-forward-out{animation:flip-forward-out .7s ease-in-out forwards;transform-origin:left center}.album-viewer-image.animating-flip-forward-in{animation:flip-forward-in .7s ease-in-out forwards}.album-viewer-image.animating-flip-backward-out{animation:flip-backward-out .7s ease-in-out forwards}.album-viewer-image.animating-flip-backward-in{animation:flip-backward-in .7s ease-in-out forwards;transform-origin:left center;z-index:3}.album-viewer-info{position:absolute;top:var(--space-lg);left:var(--space-lg);max-width:70%}.album-viewer-info h3{font-size:1.25rem;font-weight:600;color:var(--moon-sheen);margin:0 0 var(--space-xs) 0;text-shadow:0 2px 10px rgba(0,0,0,.8)}.album-viewer-info p{font-size:.9375rem;color:var(--ember-violet);margin:0;text-shadow:0 2px 10px rgba(0,0,0,.8)}.album-viewer-close{position:absolute;top:var(--space-lg);right:var(--space-lg);width:44px;height:44px;border-radius:50%;background:#1e1a22cc;border:1px solid var(--ashen-char);color:var(--moon-sheen);font-size:1.75rem;line-height:1;cursor:pointer;transition:all .2s ease;display:flex;align-items:center;justify-content:center}.album-viewer-close:hover{background:var(--blood-wine);border-color:var(--rusted-rose)}.album-viewer-controls{position:absolute;top:50%;left:0;right:0;transform:translateY(-50%);display:flex;justify-content:space-between;padding:0 var(--space-md);pointer-events:none}.viewer-nav{width:48px;height:48px;border-radius:50%;background:#1e1a22cc;border:1px solid var(--ashen-char);color:var(--moon-sheen);font-size:1.75rem;line-height:1;cursor:pointer;pointer-events:auto;transition:all .2s ease;display:flex;align-items:center;justify-content:center}.viewer-nav:hover:not(:disabled){background:var(--violet-core);border-color:var(--ember-violet)}.viewer-nav:disabled{opacity:.3;cursor:not-allowed}.viewer-nav-prev{margin-left:-60px}.viewer-nav-next{margin-right:-60px}.album-viewer-label{position:absolute;bottom:calc(var(--space-xl) + 32px);left:50%;transform:translate(-50%);font-size:.8125rem;color:var(--dull-steel);text-transform:uppercase;letter-spacing:.1em;text-shadow:0 2px 8px rgba(0,0,0,.8)}.album-viewer-indicators{position:absolute;bottom:var(--space-xl);left:50%;transform:translate(-50%);display:flex;gap:var(--space-sm)}.indicator{width:10px;height:10px;border-radius:50%;background:var(--dull-steel);border:none;cursor:pointer;transition:all .2s ease;padding:0}.indicator.active{background:var(--ember-violet);transform:scale(1.3)}.indicator:hover:not(.active):not(:disabled){background:var(--silver-ash)}.indicator:disabled{cursor:not-allowed}@media(max-width:768px){.album-viewer-container{width:90vmin}.viewer-nav-prev{margin-left:var(--space-sm)}.viewer-nav-next{margin-right:var(--space-sm)}.viewer-nav,.album-viewer-close{width:40px;height:40px;font-size:1.5rem}.album-viewer-info h3{font-size:1rem}.album-viewer-info p{font-size:.875rem}}.albums-loading{display:flex;flex-direction:column;align-items:center;justify-content:center;height:300px;gap:var(--space-md);color:var(--color-text-secondary)}.albums-empty{text-align:center;padding:var(--space-2xl);background:var(--color-bg-surface);border:1px dashed var(--ashen-char);border-radius:var(--radius-lg)}.albums-empty p{margin:0}.albums-empty p:first-child{font-size:1.25rem;color:var(--color-text-heading);margin-bottom:var(--space-sm)}.albums-list{display:flex;flex-direction:column;gap:var(--space-2xl)}.album-section{background:var(--color-bg-surface);border:1px solid var(--ashen-char);border-radius:var(--radius-lg);overflow:hidden}.album-header{display:flex;gap:var(--space-lg);padding:var(--space-lg);background:var(--color-bg-elevated);border-bottom:1px solid var(--ashen-char)}.album-cover{flex-shrink:0;width:150px;height:150px;border-radius:var(--radius-md);overflow:hidden;box-shadow:var(--shadow-lg);cursor:pointer;transition:transform .2s ease,box-shadow .2s ease}.album-cover:hover{transform:scale(1.03);box-shadow:0 12px 30px #6e2ebf4d}.album-cover img{width:100%;height:100%;object-fit:cover}.album-info{display:flex;flex-direction:column;justify-content:center}.album-info h2{font-size:1.75rem;margin:0 0 var(--space-xs) 0}.album-artist{font-size:1.125rem;color:var(--ember-violet);margin:0 0 var(--space-xs) 0}.album-artist a{color:inherit;text-decoration:none;transition:color .15s ease}.album-artist a:hover{color:var(--violet-core);text-decoration:underline}.album-year{font-size:.875rem;color:var(--color-text-secondary);margin:0 0 var(--space-xs) 0}.album-tracks{font-size:.875rem;color:var(--dull-steel);margin:0}.song-list{padding:var(--space-sm) 0}.song-list .song-list-header{display:grid;grid-template-columns:60px 1fr 80px 80px;gap:var(--space-md);padding:var(--space-sm) var(--space-lg);font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.1em;color:var(--color-text-secondary);border-bottom:1px solid var(--ashen-char)}.song-list .song-row{display:grid;grid-template-columns:60px 1fr 80px 80px;gap:var(--space-md);padding:var(--space-sm) var(--space-lg);align-items:center;transition:background .15s ease}.song-list .song-row:hover{background:var(--color-bg-elevated)}.song-list .song-row.active{background:var(--deep-amethyst)}.song-list .song-num{display:flex;align-items:center;justify-content:center;position:relative}.song-list .play-button{position:absolute;opacity:0;width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:var(--violet-core);border:none;border-radius:50%;color:var(--moon-sheen);cursor:pointer;font-size:.875rem;transition:all .15s ease}.song-list .song-row:hover .play-button,.song-list .song-row.active .play-button{opacity:1}.song-list .song-row:hover .track-num,.song-list .song-row.active .track-num{opacity:0;pointer-events:none}.song-list .play-button:hover{background:var(--ember-violet);transform:scale(1.1)}.song-list .track-num{font-family:var(--font-mono);font-size:.875rem;color:var(--color-text-secondary)}.song-list .song-row.active .track-num{color:var(--moon-sheen)}.song-list .song-title{font-size:1rem;color:var(--color-text-primary)}.song-list .song-title .song-artist{color:var(--color-text-secondary);font-weight:400}.song-list .song-title .song-artist a{color:var(--ember-violet);text-decoration:none;transition:color .15s ease}.song-list .song-title .song-artist a:hover{color:var(--violet-core);text-decoration:underline}.song-list .song-row.active .song-title{color:var(--moon-sheen);font-weight:500}.song-list .song-duration{font-family:var(--font-mono);font-size:.875rem;color:var(--color-text-secondary);text-align:right}.song-list .song-download{text-align:right}.song-list .download-link{font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;padding:.25rem .5rem;background:var(--color-bg-elevated);border:1px solid var(--ashen-char);border-radius:var(--radius-sm);color:var(--color-text-secondary);transition:all .15s ease}.song-list .download-link:hover{background:var(--violet-core);border-color:var(--ember-violet);color:var(--moon-sheen)}.song-list .no-songs{padding:var(--space-lg);text-align:center;color:var(--color-text-secondary);font-style:italic}.song-list .song-item{display:block;width:100%;border-bottom:1px solid transparent}.song-list .song-item:has(.song-lyrics){border-bottom:1px solid var(--ashen-char);margin-bottom:var(--space-sm)}.song-list .song-lyrics{padding:var(--space-md) var(--space-lg);padding-left:calc(60px + var(--space-lg) + var(--space-md));background:var(--color-bg-elevated);border-top:1px solid var(--ashen-char)}.song-list .song-lyrics pre{margin:0;font-family:var(--font-body);font-size:.9375rem;line-height:1.8;color:var(--color-text-secondary);white-space:pre-wrap;word-wrap:break-word}@media(max-width:768px){.album-header{flex-direction:column;align-items:center;text-align:center}.album-cover{width:200px;height:200px}.song-list .song-list-header,.song-list .song-row{grid-template-columns:50px 1fr 60px}.song-list .song-download,.song-list .song-list-header .song-download{display:none}}.character-card{display:block;background:var(--color-bg-surface);border:1px solid var(--ashen-char);border-radius:var(--radius-lg);overflow:hidden;text-decoration:none;transition:all .2s ease}.character-card:hover{border-color:var(--violet-core);transform:translateY(-4px);box-shadow:var(--shadow-lg),0 0 20px #6e2ebf33}.character-avatar{position:relative;width:100%;aspect-ratio:1;background:var(--color-bg-elevated);overflow:hidden}.character-avatar img{width:100%;height:100%;object-fit:cover;transition:transform .3s ease}.character-card:hover .character-avatar img{transform:scale(1.05)}.character-type-badge{position:absolute;top:var(--space-sm);right:var(--space-sm);font-family:var(--font-mono);font-size:.625rem;font-weight:600;text-transform:uppercase;letter-spacing:.1em;padding:.2rem .5rem;border-radius:var(--radius-sm);background:var(--color-bg-elevated);color:var(--color-text-secondary);border:1px solid var(--ashen-char)}.character-type-badge.pc{background:var(--violet-core);color:var(--moon-sheen);border-color:var(--ember-violet)}.character-type-badge.npc{background:var(--deep-amethyst);color:var(--silver-ash);border-color:var(--violet-core)}.character-info{padding:var(--space-md)}.character-name{font-family:var(--font-display);font-size:1.25rem;font-weight:600;color:var(--color-text-heading);margin:0 0 var(--space-xs) 0}.character-title{font-size:.875rem;font-style:italic;color:var(--ember-violet);margin:0 0 var(--space-xs) 0}.character-class{font-size:.875rem;color:var(--color-text-secondary);margin:0}.character-card.inactive{opacity:.7}.character-card.inactive .character-avatar img{filter:grayscale(.6) brightness(.75)}.character-card.inactive .character-name{color:var(--color-text-secondary)}.character-card.inactive:hover{opacity:.85}.character-inactive-badge{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%) rotate(-12deg);background:#1e1a22d9;color:var(--silver-ash);font-family:var(--font-display);font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.1em;padding:.35rem .75rem;border:1px solid var(--silver-ash);border-radius:var(--radius-sm);z-index:5;pointer-events:none}.character-card.deceased{opacity:.75}.character-card.deceased .character-avatar img{filter:grayscale(.8) brightness(.6) sepia(.2)}.character-card.deceased .character-name{color:var(--rusted-rose)}.character-card.deceased:hover{opacity:.9;border-color:var(--blood-wine)}.character-deceased-badge{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%) rotate(-12deg);background:#8b2c3ae6;color:var(--rusted-rose);font-family:var(--font-display);font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.1em;padding:.35rem .75rem;border:1px solid var(--blood-wine);border-radius:var(--radius-sm);z-index:5;pointer-events:none}.characters-loading{display:flex;flex-direction:column;align-items:center;justify-content:center;height:300px;gap:var(--space-md);color:var(--color-text-secondary)}.characters-error{text-align:center;padding:var(--space-2xl);background:var(--dark-crimson);border:1px solid var(--blood-wine);border-radius:var(--radius-lg)}.characters-error h2{color:var(--moon-sheen);margin-bottom:var(--space-sm)}.characters-error p{color:var(--rusted-rose);margin:0}.character-tabs{display:flex;gap:var(--space-sm);margin-bottom:var(--space-xl);border-bottom:1px solid var(--ashen-char);padding-bottom:var(--space-md)}.tab-button{display:flex;align-items:center;gap:var(--space-sm);font-family:var(--font-display);font-size:1.125rem;font-weight:500;padding:var(--space-sm) var(--space-lg);background:transparent;border:1px solid transparent;border-radius:var(--radius-md);color:var(--color-text-secondary);cursor:pointer;transition:all .2s ease}.tab-button:hover{color:var(--color-text-primary);background:var(--color-bg-surface)}.tab-button.active{color:var(--moon-sheen);background:var(--violet-core);border-color:var(--ember-violet)}.tab-count{font-size:.75rem;font-weight:600;padding:.15rem .5rem;background:#0003;border-radius:10px}.tab-button.active .tab-count{background:#fff3}.characters-empty{text-align:center;padding:var(--space-2xl);background:var(--color-bg-surface);border:1px dashed var(--ashen-char);border-radius:var(--radius-lg)}.characters-empty p{margin:0}.characters-empty p:first-child{font-size:1.25rem;color:var(--color-text-heading);margin-bottom:var(--space-sm)}.characters-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:var(--space-lg)}@media(max-width:768px){.character-tabs{flex-wrap:wrap}.tab-button{flex:1;justify-content:center}.characters-grid{grid-template-columns:1fr}}.tools-page{padding:var(--space-xl) 0;min-height:calc(100vh - 80px)}.tools-header{text-align:center;margin-bottom:var(--space-2xl)}.tools-header h1{font-size:2.5rem;margin-bottom:var(--space-sm)}.tools-subtitle{color:var(--color-text-secondary);font-size:1.1rem}.tools-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(400px,1fr));gap:var(--space-xl);max-width:1000px;margin:0 auto}.tool-card{background:var(--color-bg-surface);border:1px solid var(--ashen-char);border-radius:var(--radius-lg);padding:var(--space-xl)}.tool-card h2{margin-bottom:var(--space-xs);color:var(--color-accent-primary)}.tool-description{color:var(--color-text-secondary);font-size:.95rem;margin-bottom:var(--space-lg)}.tool-link{display:block;text-decoration:none;position:relative;transition:all .2s ease}.tool-link:hover{border-color:var(--violet-core);transform:translateY(-2px);box-shadow:var(--shadow-lg)}.tool-link .tool-description{margin-bottom:0}.tool-link-arrow{position:absolute;top:var(--space-lg);right:var(--space-lg);font-size:1.5rem;color:var(--color-text-secondary);transition:transform .2s ease,color .2s ease}.tool-link:hover .tool-link-arrow{transform:translate(4px);color:var(--color-accent-primary)}.date-section{background:var(--color-bg-elevated);border-radius:var(--radius-md);padding:var(--space-lg);margin-bottom:var(--space-lg)}.date-section h3{font-size:1rem;color:var(--color-accent-primary);margin-bottom:var(--space-md);font-weight:500}.harptos-date-input .form-group{margin-bottom:var(--space-md)}.harptos-date-input .form-group:last-child{margin-bottom:0}.harptos-date-input label{display:block;margin-bottom:var(--space-xs);color:var(--color-text-secondary);font-size:.9rem}.harptos-date-input select,.harptos-date-input input{width:100%}.date-row{display:flex;gap:var(--space-md)}.date-row .form-group{flex:1}.tool-card .form-group{margin-bottom:var(--space-lg)}.tool-card label{display:block;margin-bottom:var(--space-xs);color:var(--color-text-secondary);font-size:.9rem}.days-input{width:100%;font-size:1.1rem;text-align:center}.tool-card .btn{width:100%}.tool-result{margin-top:var(--space-xl);padding:var(--space-lg);background:#6e2ebf1a;border:1px solid var(--color-accent-muted);border-radius:var(--radius-md);text-align:center}.result-date{font-size:1.5rem;font-weight:600;color:var(--color-accent-primary);font-family:var(--font-display)}.result-date .special-day{color:var(--ember-violet)}.result-note{margin-top:var(--space-sm);font-size:.9rem;color:var(--color-text-secondary)}.result-days{font-size:3rem;font-weight:700;color:var(--color-accent-primary);line-height:1}.result-label{font-size:1rem;color:var(--color-text-secondary);margin-top:var(--space-xs)}.result-breakdown{margin-top:var(--space-md);font-size:.95rem;color:var(--color-text-secondary)}.negative-note{color:var(--rusted-rose);font-style:italic}.tool-result .btn{margin-top:var(--space-md);width:auto}.tool-error{margin-top:var(--space-md);padding:var(--space-md);background:#7a1e2e33;border:1px solid var(--blood-wine);border-radius:var(--radius-md);color:var(--rusted-rose);text-align:center;font-size:.95rem}.tools-footer{margin-top:var(--space-2xl);text-align:center}.tools-footer a{font-size:.85rem;color:var(--color-text-secondary)}.tools-footer a:hover{color:var(--color-accent-primary)}@media(max-width:768px){.tools-grid{grid-template-columns:1fr}.tools-header h1{font-size:2rem}.tool-card{padding:var(--space-lg)}.date-row{flex-direction:column;gap:var(--space-sm)}.result-days{font-size:2.5rem}.result-date{font-size:1.25rem}}@media(max-width:480px){.tools-page{padding:var(--space-lg) 0}.tool-card,.date-section{padding:var(--space-md)}}.relationship-web{display:flex;flex-direction:column;gap:var(--space-xl);position:relative}.relationship-web:before{content:"";position:absolute;top:0;left:0;right:0;bottom:0;opacity:.03;pointer-events:none;background-image:radial-gradient(circle at 20% 30%,var(--ember-violet) 1px,transparent 1px),radial-gradient(circle at 80% 70%,var(--ember-violet) 1px,transparent 1px),radial-gradient(circle at 50% 50%,var(--ember-violet) 1px,transparent 1px);background-size:100px 100px,150px 150px,80px 80px}.web-group{position:relative}.web-group-header{display:flex;align-items:center;gap:var(--space-sm);margin:0 0 var(--space-md) 0;padding-bottom:var(--space-sm);border-bottom:1px solid var(--ashen-char)}.web-direction-symbol{font-size:1.5rem;color:var(--ember-violet);min-width:32px;text-align:center}.web-direction-label{font-size:.875rem;font-weight:600;text-transform:uppercase;letter-spacing:.1em;color:var(--dull-steel)}.web-connections{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:var(--space-md)}.web-connection{display:block;padding:var(--space-md);background:var(--color-bg-surface);border:1px solid var(--ashen-char);border-left:3px solid var(--rel-color, var(--violet-core));border-radius:var(--radius-md);text-decoration:none;transition:all .2s ease;position:relative;overflow:hidden}.web-connection:after{content:"";position:absolute;top:0;right:0;width:40px;height:40px;opacity:0;transition:opacity .2s ease;background:linear-gradient(135deg,transparent 50%,var(--rel-color) 50%,transparent 51%),linear-gradient(45deg,transparent 50%,var(--rel-color) 50%,transparent 51%);background-size:8px 8px}.web-connection:hover{transform:translateY(-2px);border-color:var(--rel-color, var(--ember-violet));box-shadow:0 4px 12px #6e2ebf33}.web-connection:hover:after{opacity:.1}.web-connection.unknown{opacity:.5;pointer-events:none}.web-connection-content{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);flex-wrap:wrap}.web-target-name{font-weight:500;color:var(--color-text-heading);font-size:1rem}.web-type-badge{font-size:.6875rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;padding:.125rem .5rem;border-radius:var(--radius-sm);color:var(--moon-sheen);white-space:nowrap}.web-notes{margin:var(--space-sm) 0 0 0;font-size:.8125rem;color:var(--color-text-secondary);font-style:italic;line-height:1.4}@media(max-width:600px){.web-connections{grid-template-columns:1fr}.web-connection-content{flex-direction:column;align-items:flex-start}}.character-notes{margin-top:var(--space-xl)}.character-notes h2{font-family:var(--font-display);font-size:1.5rem;margin:0 0 var(--space-lg) 0;padding-bottom:var(--space-sm);border-bottom:1px solid var(--ashen-char)}.notes-loading,.notes-empty{color:var(--color-text-secondary);font-style:italic;padding:var(--space-md)}.notes-list{display:flex;flex-direction:column;gap:var(--space-md);margin-bottom:var(--space-lg)}.note-item{background:var(--color-bg-surface);border:1px solid var(--ashen-char);border-radius:var(--radius-md);padding:var(--space-md)}.note-item.hidden-note{border-style:dashed;background:var(--color-bg-elevated)}.note-header{display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-sm);font-size:.875rem}.note-author{font-weight:600;color:var(--ember-violet)}.note-date{color:var(--color-text-secondary)}.note-badge{font-size:.625rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;padding:.125rem .5rem;border-radius:var(--radius-sm)}.note-badge.hidden{background:var(--deep-amethyst);color:var(--silver-ash)}.note-content{color:var(--color-text-primary);line-height:1.6;white-space:pre-wrap}.note-actions{display:flex;gap:var(--space-sm);margin-top:var(--space-sm);padding-top:var(--space-sm);border-top:1px solid var(--ashen-char)}.note-edit{display:flex;flex-direction:column;gap:var(--space-sm)}.note-edit textarea{width:100%;min-height:80px;resize:vertical}.note-edit-actions{display:flex;gap:var(--space-sm)}.note-form{background:var(--color-bg-surface);border:1px solid var(--ashen-char);border-radius:var(--radius-md);padding:var(--space-md)}.note-form textarea{width:100%;min-height:80px;resize:vertical;margin-bottom:var(--space-sm)}.note-form-footer{display:flex;justify-content:space-between;align-items:center}.note-hidden-toggle{display:flex;align-items:center;gap:var(--space-xs);font-size:.875rem;color:var(--color-text-secondary);cursor:pointer}.note-hidden-toggle input{cursor:pointer}.notes-login-prompt{color:var(--color-text-secondary);font-style:italic;padding:var(--space-md);background:var(--color-bg-surface);border:1px dashed var(--ashen-char);border-radius:var(--radius-md);text-align:center}.lightbox-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000e6;display:flex;align-items:center;justify-content:center;z-index:2000;cursor:pointer;animation:lightbox-fade-in .2s ease}@keyframes lightbox-fade-in{0%{opacity:0}to{opacity:1}}.lightbox-close{position:absolute;top:var(--space-lg);right:var(--space-lg);background:none;border:none;color:var(--moon-sheen);font-size:2.5rem;cursor:pointer;opacity:.7;transition:opacity .2s ease;line-height:1;padding:var(--space-sm);z-index:2001}.lightbox-close:hover{opacity:1}.lightbox-content{max-width:90vw;max-height:90vh;cursor:default}.lightbox-content img{max-width:100%;max-height:90vh;object-fit:contain;border-radius:var(--radius-md);box-shadow:0 20px 60px #00000080}.spell-card{background:var(--color-bg-surface);border:1px solid var(--ashen-char);border-radius:var(--radius-md);padding:var(--space-lg);margin-bottom:var(--space-lg);transition:box-shadow .2s ease}.spell-card:hover{box-shadow:var(--shadow-md)}.spell-header{margin-bottom:var(--space-md)}.spell-title-row{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-sm)}.spell-name{font-family:var(--font-display);font-size:1.5rem;font-weight:700;color:var(--blood-wine);margin:0 0 var(--space-xs) 0;line-height:1.2;flex:1}.spell-school-icon{font-size:1.5rem;flex-shrink:0}.spell-level-school{font-size:.9375rem;color:var(--color-text-secondary);margin:0;display:flex;align-items:center;gap:var(--space-sm)}.spell-unofficial-badge{display:inline-block;padding:.125rem .375rem;font-size:.625rem;font-weight:600;font-style:normal;text-transform:uppercase;letter-spacing:.05em;background:var(--deep-amethyst);color:var(--ember-violet);border:1px solid var(--violet-core);border-radius:var(--radius-sm)}.spell-stats{display:flex;flex-direction:column;gap:var(--space-xs);margin-bottom:var(--space-md)}.spell-stat{font-size:.9375rem;line-height:1.4}.stat-label{font-weight:600;color:var(--color-text-heading)}.stat-value{color:var(--color-text-primary);margin-left:var(--space-xs)}.spell-divider{height:1px;background:linear-gradient(to right,transparent,var(--blood-wine),var(--blood-wine),transparent);margin:var(--space-md) 0}.spell-description{font-size:1rem;line-height:1.6;color:var(--color-text-primary)}.spell-description p{margin:0 0 var(--space-sm) 0}.spell-description p:last-child{margin-bottom:0}.spell-description ul,.spell-description ol{margin:var(--space-sm) 0;padding-left:var(--space-lg)}.spell-description li{margin-bottom:var(--space-xs)}.spell-higher-levels{margin-top:var(--space-md);font-size:.9375rem;line-height:1.6;color:var(--color-text-primary)}.higher-levels-label{font-weight:700;font-style:italic;color:var(--color-text-heading)}.spell-higher-levels p{display:inline;margin:0}.spell-actions{margin-top:var(--space-md);padding-top:var(--space-md);border-top:1px solid var(--ashen-char);display:flex;justify-content:flex-end}.spell-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(350px,1fr));gap:var(--space-lg)}.spell-card.compact{padding:var(--space-md)}.spell-card.compact .spell-name{font-size:1.25rem}.spell-card.compact .spell-stats{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--space-xs)}@media(max-width:768px){.spell-grid,.spell-card.compact .spell-stats{grid-template-columns:1fr}}.spellbook-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--space-lg)}.spellbook-header h2{margin:0}.spellbook-empty{text-align:center;padding:var(--space-2xl);color:var(--color-text-secondary)}.spell-level-group{margin-bottom:var(--space-xl)}.spell-level-group h3{font-size:1.125rem;color:var(--color-text-secondary);border-bottom:1px solid var(--ashen-char);padding-bottom:var(--space-sm);margin-bottom:var(--space-md)}.character-detail-loading{display:flex;align-items:center;justify-content:center;height:400px}.character-detail-error{text-align:center;padding:var(--space-2xl)}.character-detail-error h2{margin-bottom:var(--space-lg)}.back-link{display:inline-block;font-size:.9rem;color:var(--color-text-secondary);margin-bottom:var(--space-lg);transition:color .2s ease}.back-link:hover{color:var(--color-accent-primary)}.character-detail{display:grid;grid-template-columns:300px 1fr;gap:var(--space-xl);align-items:start}.character-sidebar{position:sticky;top:calc(80px + var(--space-lg))}.character-portrait{position:relative;width:100%;aspect-ratio:1;border-radius:var(--radius-lg);overflow:hidden;margin-bottom:var(--space-lg);border:2px solid var(--ashen-char);background:var(--color-bg-elevated)}.character-portrait img{display:block;width:100%;height:100%;object-fit:cover}.character-portrait.clickable{cursor:pointer;transition:transform .2s ease}.character-portrait.clickable:hover{transform:scale(1.02)}.character-portrait.clickable:hover img{filter:brightness(1.05)}.character-portrait .character-type-badge{position:absolute;top:auto;right:auto;bottom:var(--space-sm);left:var(--space-sm);font-size:.75rem;padding:.25rem .75rem;border-radius:var(--radius-sm)}.character-type-badge.pc{background:var(--violet-core);color:var(--moon-sheen)}.character-type-badge.npc{background:var(--deep-amethyst);color:var(--silver-ash)}.character-inactive-badge{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%) rotate(-15deg);background:#1e1a22d9;color:var(--silver-ash);font-family:var(--font-display);font-size:1.25rem;font-weight:600;text-transform:uppercase;letter-spacing:.15em;padding:.5rem 1.5rem;border:2px solid var(--silver-ash);border-radius:var(--radius-sm);z-index:10}.character-detail.inactive .character-portrait img{filter:grayscale(.7) brightness(.7)}.character-detail.inactive .character-sidebar{opacity:.75}.character-detail.inactive .character-header h1{color:var(--color-text-secondary)}.character-deceased-badge{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%) rotate(-15deg);background:#8b2c3ae6;color:var(--rusted-rose);font-family:var(--font-display);font-size:1.25rem;font-weight:600;text-transform:uppercase;letter-spacing:.15em;padding:.5rem 1.5rem;border:2px solid var(--blood-wine);border-radius:var(--radius-sm);z-index:10}.character-detail.deceased .character-portrait img{filter:grayscale(.85) brightness(.55) sepia(.25)}.character-detail.deceased .character-sidebar{opacity:.8}.character-detail.deceased .character-header h1{color:var(--rusted-rose)}.character-detail.deceased .character-portrait{border-color:var(--blood-wine)}.character-stats{background:var(--color-bg-surface);border:1px solid var(--ashen-char);border-radius:var(--radius-md);padding:var(--space-md);margin-bottom:var(--space-md)}.stat-row{display:flex;justify-content:space-between;padding:var(--space-sm) 0;border-bottom:1px solid var(--ashen-char)}.stat-row:last-child{border-bottom:none}.stat-label{font-size:.85rem;color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.05em}.stat-value{font-weight:500;color:var(--color-text-heading)}.dndbeyond-link{display:block;text-align:center;padding:var(--space-sm) var(--space-md);background:var(--color-bg-surface);border:1px solid var(--ashen-char);border-radius:var(--radius-md);font-size:.9rem;transition:all .2s ease}.dndbeyond-link:hover{background:var(--violet-core);border-color:var(--ember-violet);color:var(--moon-sheen)}.character-main{min-width:0}.character-header{margin-bottom:var(--space-xl);padding-bottom:var(--space-lg);border-bottom:1px solid var(--ashen-char)}.character-header h1{font-size:2.5rem;margin-bottom:var(--space-xs)}.character-header .character-title{font-size:1.25rem;font-style:italic;color:var(--ember-violet);margin:0}.character-lore{margin-bottom:var(--space-xl)}.character-lore h2{margin-bottom:var(--space-md)}.lore-content{line-height:1.8;color:var(--color-text-primary)}.lore-content p{margin-bottom:var(--space-md)}.lore-content blockquote{border-left:3px solid var(--violet-core);padding-left:var(--space-md);margin:var(--space-lg) 0;font-style:italic;color:var(--color-text-secondary)}.character-events h2{margin-bottom:var(--space-md)}.events-list{display:flex;flex-direction:column;gap:var(--space-md)}.event-item{display:grid;grid-template-columns:180px 1fr;gap:var(--space-md);padding:var(--space-md);background:var(--color-bg-surface);border:1px solid var(--ashen-char);border-radius:var(--radius-md);border-left:3px solid var(--violet-core)}.event-item.category-critical{border-left-color:var(--blood-wine)}.event-item.category-discovery{border-left-color:#2a5a7a}.event-item.category-travel{border-left-color:var(--silver-ash)}.event-item.category-world{border-left-color:var(--success)}.event-date{font-family:var(--font-mono);font-size:.8rem;color:var(--ember-violet)}.event-content h4{font-size:1rem;margin:0 0 var(--space-xs) 0;color:var(--color-text-heading)}.event-location{font-size:.85rem;font-style:italic;color:var(--color-text-secondary)}.event-description{font-size:.9rem;color:var(--color-text-secondary);margin:var(--space-sm) 0 0 0}.character-empty{text-align:center;padding:var(--space-xl);background:var(--color-bg-surface);border:1px dashed var(--ashen-char);border-radius:var(--radius-lg);color:var(--color-text-secondary)}.character-web{margin-bottom:var(--space-2xl)}.character-web h2{display:flex;align-items:center;gap:var(--space-sm);font-size:1.5rem;margin-bottom:var(--space-lg);color:var(--color-text-heading)}.character-web h2:before{content:"🕸";font-size:1.25rem}.character-handouts{margin-bottom:var(--space-xl)}.character-handouts h2{margin-bottom:var(--space-md)}.handouts-list{display:flex;flex-direction:column;gap:var(--space-sm)}.handout-item{display:flex;align-items:center;gap:var(--space-md);padding:var(--space-md);background:var(--color-bg-surface);border:1px solid var(--ashen-char);border-radius:var(--radius-md);text-decoration:none;transition:all .15s ease}.handout-item:hover{border-color:var(--violet-core);background:var(--color-bg-elevated)}.handout-thumbnail{width:48px;height:48px;object-fit:cover;border-radius:var(--radius-sm);flex-shrink:0}.handout-icon{width:48px;height:48px;display:flex;align-items:center;justify-content:center;font-size:1.5rem;background:var(--color-bg-elevated);border-radius:var(--radius-sm);flex-shrink:0}.handout-info{flex:1;min-width:0}.handout-info h4{margin:0 0 var(--space-xs) 0;font-size:.9375rem;color:var(--color-text-heading)}.handout-info p{margin:0;font-size:.8125rem;color:var(--color-text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.character-spellbook{margin-bottom:var(--space-xl)}.character-spellbook h2{margin-bottom:var(--space-md)}@media(max-width:768px){.character-detail{grid-template-columns:1fr}.character-sidebar{position:static}.character-portrait{max-width:250px;margin:0 auto var(--space-lg)}.event-item{grid-template-columns:1fr}.event-date{margin-bottom:var(--space-xs)}}.ships-loading,.ships-error,.ships-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:300px;text-align:center}.ships-header{margin-bottom:var(--space-xl)}.ships-header h1{margin-bottom:var(--space-xs)}.ships-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:var(--space-lg)}.ship-card{display:block;background:var(--color-bg-surface);border:1px solid var(--ashen-char);border-radius:var(--radius-lg);overflow:hidden;text-decoration:none;transition:all .2s ease}.ship-card:hover{border-color:var(--violet-core);transform:translateY(-4px);box-shadow:var(--shadow-lg),0 0 20px #6e2ebf33}.ship-image{position:relative;width:100%;aspect-ratio:16 / 10;background:var(--color-bg-elevated);overflow:hidden}.ship-image img{width:100%;height:100%;object-fit:cover;transition:transform .3s ease}.ship-card:hover .ship-image img{transform:scale(1.05)}.ship-type-badge{position:absolute;top:var(--space-sm);right:var(--space-sm);font-family:var(--font-mono);font-size:.625rem;font-weight:600;text-transform:uppercase;letter-spacing:.1em;padding:.2rem .5rem;border-radius:var(--radius-sm);background:var(--deep-amethyst);color:var(--ember-violet);border:1px solid var(--violet-core)}.ship-info{padding:var(--space-md)}.ship-info h3{font-family:var(--font-display);font-size:1.25rem;font-weight:600;color:var(--color-text-heading);margin:0 0 var(--space-xs) 0}.ship-crew-count{font-size:.875rem;color:var(--color-text-secondary);margin:0}.ship-card.destroyed{opacity:.75}.ship-card.destroyed .ship-image img{filter:grayscale(.8) brightness(.6) sepia(.2)}.ship-card.destroyed .ship-info h3{color:var(--rusted-rose)}.ship-card.destroyed:hover{opacity:.9;border-color:var(--blood-wine)}.ship-destroyed-badge{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%) rotate(-12deg);background:#8b2c3ae6;color:var(--rusted-rose);font-family:var(--font-display);font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.1em;padding:.35rem .75rem;border:1px solid var(--blood-wine);border-radius:var(--radius-sm);z-index:5;pointer-events:none}.ship-detail-loading{display:flex;align-items:center;justify-content:center;height:400px}.ship-detail-error{text-align:center;padding:var(--space-2xl)}.ship-detail-error h2{margin-bottom:var(--space-lg)}.ship-detail{display:grid;grid-template-columns:350px 1fr;gap:var(--space-xl);align-items:start}.ship-sidebar{position:sticky;top:calc(80px + var(--space-lg))}.ship-image-container{position:relative;border-radius:var(--radius-lg);overflow:hidden;margin-bottom:var(--space-lg);border:2px solid var(--ashen-char)}.ship-image-container img{width:100%;aspect-ratio:16 / 10;object-fit:cover}.ship-image-container .ship-type-badge{position:absolute;bottom:var(--space-sm);left:var(--space-sm);font-size:.75rem;padding:.25rem .75rem;border-radius:var(--radius-sm);background:var(--deep-amethyst);color:var(--ember-violet);border:1px solid var(--violet-core)}.ship-arsenal{background:var(--color-bg-surface);border:1px solid var(--ashen-char);border-radius:var(--radius-md);padding:var(--space-md)}.ship-arsenal h3{font-size:.85rem;color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.05em;margin:0 0 var(--space-sm) 0}.ship-arsenal p{margin:0;color:var(--color-text-primary);line-height:1.6}.ship-main{min-width:0}.ship-header{margin-bottom:var(--space-xl);padding-bottom:var(--space-lg);border-bottom:1px solid var(--ashen-char)}.ship-header h1{font-size:2.5rem;margin-bottom:var(--space-xs)}.ship-header .ship-type{font-size:1.125rem;color:var(--ember-violet);margin:0}.ship-description{margin-bottom:var(--space-xl)}.ship-description h2{margin-bottom:var(--space-md)}.description-content{line-height:1.8;color:var(--color-text-primary)}.description-content p{margin-bottom:var(--space-md)}.ship-crew{margin-bottom:var(--space-xl)}.ship-crew h2{margin-bottom:var(--space-lg)}.crew-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:var(--space-md)}.crew-member-card{display:flex;align-items:center;gap:var(--space-md);padding:var(--space-md);background:var(--color-bg-surface);border:1px solid var(--ashen-char);border-radius:var(--radius-md);text-decoration:none;transition:all .15s ease}.crew-member-card:hover{border-color:var(--violet-core);background:var(--color-bg-elevated)}.crew-member-avatar{width:48px;height:48px;border-radius:var(--radius-sm);overflow:hidden;flex-shrink:0}.crew-member-avatar img{width:100%;height:100%;object-fit:cover}.crew-member-info{min-width:0}.crew-member-role{font-size:.7rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--ember-violet)}.crew-member-info h4{margin:0;font-size:.9375rem;color:var(--color-text-heading);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ship-empty{text-align:center;padding:var(--space-xl);background:var(--color-bg-surface);border:1px dashed var(--ashen-char);border-radius:var(--radius-lg);color:var(--color-text-secondary)}.ship-destroyed-badge{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%) rotate(-15deg);background:#8b2c3ae6;color:var(--rusted-rose);font-family:var(--font-display);font-size:1.25rem;font-weight:600;text-transform:uppercase;letter-spacing:.15em;padding:.5rem 1.5rem;border:2px solid var(--blood-wine);border-radius:var(--radius-sm);z-index:10}.ship-detail.destroyed .ship-image-container img{filter:grayscale(.85) brightness(.55) sepia(.25)}.ship-detail.destroyed .ship-sidebar{opacity:.8}.ship-detail.destroyed .ship-header h1{color:var(--rusted-rose)}.ship-detail.destroyed .ship-image-container{border-color:var(--blood-wine)}@media(max-width:768px){.ship-detail{grid-template-columns:1fr}.ship-sidebar{position:static}.ship-image-container{max-width:100%}.crew-grid{grid-template-columns:1fr}}.admin-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:var(--space-lg)}.admin-card{display:block;background:var(--color-bg-surface);border:1px solid var(--ashen-char);border-radius:var(--radius-lg);padding:var(--space-xl);text-decoration:none;transition:all .2s ease}.admin-card:hover{border-color:var(--color-accent-primary);transform:translateY(-2px);box-shadow:var(--shadow-md)}.admin-card h3{color:var(--color-text-heading);margin-bottom:var(--space-sm)}.admin-card p{color:var(--color-text-secondary);font-size:.9375rem;margin:0}.admin-card-users{border-color:var(--deep-amethyst)}.admin-card-users:hover{border-color:var(--ember-violet)}.admin-card-security{border-color:var(--dark-crimson)}.admin-card-security:hover{border-color:var(--blood-wine)}.import-modal{max-width:800px;max-height:90vh;overflow-y:auto}.import-instructions{margin-bottom:var(--space-lg)}.import-instructions code{background:var(--color-bg-elevated);padding:.25rem .5rem;border-radius:var(--radius-sm);font-family:var(--font-mono);font-size:.875rem}.import-result{padding:var(--space-md);border-radius:var(--radius-md);margin:var(--space-md) 0;font-weight:500}.import-result.success{background:#4b7a1e33;border:1px solid #4B7A1E;color:#8bc34a}.import-result.error{background:#7a1e2e33;border:1px solid var(--blood-wine);color:var(--rusted-rose)}.import-preview{margin-top:var(--space-lg)}.import-preview h3{font-size:1rem;margin-bottom:var(--space-md)}.preview-table-wrapper{overflow-x:auto;max-height:300px;overflow-y:auto;border:1px solid var(--ashen-char);border-radius:var(--radius-md)}.preview-table{width:100%;border-collapse:collapse;font-size:.875rem}.preview-table th,.preview-table td{padding:var(--space-sm) var(--space-md);text-align:left;border-bottom:1px solid var(--ashen-char)}.preview-table th{background:var(--color-bg-elevated);font-weight:600;color:var(--color-text-heading);position:sticky;top:0}.preview-table tr:hover{background:var(--color-bg-surface)}.preview-table tr.invalid{background:#7a1e2e1a}.preview-table tr.invalid:hover{background:#7a1e2e33}.notes-cell{max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.status-ok{color:#8bc34a;font-weight:600}.status-error{color:var(--rusted-rose);font-weight:600;cursor:help}.import-errors{margin-top:var(--space-md);padding:var(--space-md);background:#7a1e2e1a;border:1px solid var(--blood-wine);border-radius:var(--radius-md)}.import-errors h4{color:var(--rusted-rose);margin:0 0 var(--space-sm) 0;font-size:.9375rem}.import-errors ul{margin:0;padding-left:var(--space-lg);font-size:.875rem;color:var(--color-text-secondary)}.import-errors li{margin-bottom:var(--space-xs)}.editor-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--space-xl)}.editor-header h1{margin:0}.header-actions{display:flex;gap:var(--space-sm);align-items:center}.editor-form{max-width:800px;display:flex;flex-direction:column;gap:var(--space-lg)}.form-row{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-lg)}.form-group{display:flex;flex-direction:column;gap:var(--space-xs)}.form-group label{font-size:.875rem;font-weight:500;color:var(--color-text-secondary)}.form-group input,.form-group select,.form-group textarea{padding:var(--space-sm) var(--space-md);background:var(--color-bg-surface);border:1px solid var(--ashen-char);border-radius:var(--radius-md);color:var(--color-text-primary);font-size:1rem;transition:border-color .15s ease}.form-group input:focus,.form-group select:focus,.form-group textarea:focus{outline:none;border-color:var(--violet-core)}.form-group input::placeholder{color:var(--dull-steel)}.form-actions{display:flex;gap:var(--space-md);padding-top:var(--space-lg);border-top:1px solid var(--ashen-char)}.form-section{border:1px solid var(--ashen-char);border-radius:var(--radius-md);padding:var(--space-lg);padding-top:var(--space-md);display:flex;flex-direction:column;gap:var(--space-md)}.form-section legend{font-family:var(--font-display);font-size:.875rem;font-weight:600;color:var(--ember-violet);text-transform:uppercase;letter-spacing:.1em;padding:0 var(--space-sm);margin-left:calc(-1 * var(--space-sm))}.checkbox-inline{margin-top:var(--space-sm);font-size:.8125rem}.error-banner{padding:var(--space-md);background:var(--dark-crimson);border:1px solid var(--blood-wine);border-radius:var(--radius-md);color:var(--rusted-rose);font-size:.875rem}.error-text{color:var(--rusted-rose);font-size:.875rem;margin-top:var(--space-xs)}.image-uploader{width:100%}.image-preview{display:flex;align-items:flex-end;gap:var(--space-md)}.image-preview img{width:150px;height:150px;object-fit:cover;border-radius:var(--radius-md);border:1px solid var(--ashen-char)}.dropzone{padding:var(--space-xl);border:2px dashed var(--ashen-char);border-radius:var(--radius-md);text-align:center;cursor:pointer;transition:all .15s ease;color:var(--color-text-secondary)}.dropzone:hover,.dropzone.active{border-color:var(--violet-core);background:var(--deep-amethyst)}.dropzone.uploading{cursor:default;opacity:.7}.upload-progress{display:flex;flex-direction:column;align-items:center;gap:var(--space-sm)}.upload-progress .progress-bar{width:200px;height:4px;background:var(--color-bg-surface);border-radius:2px;overflow:hidden}.upload-progress .progress-fill{height:100%;background:var(--violet-core);transition:width .2s ease}.rich-text-editor{border-radius:var(--radius-md);overflow:hidden}.rich-text-editor .ql-toolbar{background:var(--color-bg-surface);border:1px solid var(--ashen-char);border-bottom:none}.rich-text-editor .ql-container{background:var(--color-bg-surface);border:1px solid var(--ashen-char);min-height:200px;font-size:1rem}.rich-text-editor .ql-editor{color:var(--color-text-primary)}.rich-text-editor .ql-editor.ql-blank:before{color:var(--dull-steel);font-style:normal}.rich-text-editor .ql-stroke{stroke:var(--color-text-secondary)}.rich-text-editor .ql-fill{fill:var(--color-text-secondary)}.rich-text-editor .ql-picker-label{color:var(--color-text-secondary)}.rich-text-editor .ql-picker-options{background:var(--color-bg-elevated);border-color:var(--ashen-char)}.admin-filters{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-md);padding:var(--space-md);margin-bottom:var(--space-lg);background:var(--color-bg-surface);border:1px solid var(--ashen-char);border-radius:var(--radius-md)}.admin-filters .filter-group{display:flex;align-items:center;gap:var(--space-sm)}.admin-filters .filter-label{font-size:.8125rem;color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.05em}.admin-filters select{padding:var(--space-xs) var(--space-sm);background:var(--color-bg-elevated);border:1px solid var(--ashen-char);border-radius:var(--radius-sm);color:var(--color-text-primary);font-size:.875rem;cursor:pointer}.admin-filters select:focus{outline:none;border-color:var(--violet-core)}.admin-filters .filter-count{margin-left:auto;font-size:.8125rem;color:var(--dull-steel)}.admin-section{margin-bottom:var(--space-2xl)}.admin-section h2{margin-bottom:var(--space-md);font-size:1.125rem;color:var(--color-text-secondary)}.admin-list{display:flex;flex-direction:column;gap:var(--space-sm)}.admin-list-item{display:flex;align-items:center;gap:var(--space-md);padding:var(--space-md);background:var(--color-bg-surface);border:1px solid var(--ashen-char);border-radius:var(--radius-md);transition:all .15s ease}.admin-list-item:hover{border-color:var(--violet-core);background:var(--color-bg-elevated)}.item-image{width:48px;height:48px;border-radius:var(--radius-sm);overflow:hidden;flex-shrink:0}.item-image img{width:100%;height:100%;object-fit:cover}.item-info{flex:1;min-width:0}.item-info h3{margin:0 0 var(--space-xs) 0;font-size:1rem;color:var(--color-text-heading)}.item-info p{margin:0;font-size:.875rem}.item-badge{padding:.25rem .5rem;font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;border-radius:var(--radius-sm)}.badge-pc{background:var(--deep-amethyst);color:var(--ember-violet)}.badge-npc{background:var(--dark-crimson);color:var(--rusted-rose)}.empty-state{padding:var(--space-2xl);text-align:center;background:var(--color-bg-surface);border:1px dashed var(--ashen-char);border-radius:var(--radius-lg)}.empty-state p:first-child{font-size:1.125rem;color:var(--color-text-heading);margin-bottom:var(--space-xs)}.songs-section{margin-top:var(--space-xl);padding-top:var(--space-xl);border-top:1px solid var(--ashen-char)}.songs-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--space-md)}.songs-header h3{margin:0}.admin-song-item{display:grid;grid-template-columns:50px 1fr auto auto;gap:var(--space-md);align-items:center;padding:var(--space-md);background:var(--color-bg-elevated);border:1px solid var(--ashen-char);border-radius:var(--radius-md);margin-bottom:var(--space-sm)}.admin-song-num{font-family:var(--font-mono);color:var(--color-text-secondary);text-align:center}.admin-song-details h4{margin:0 0 var(--space-xs) 0;font-size:.9375rem}.admin-song-details p{margin:0;font-size:.8125rem;color:var(--color-text-secondary)}.admin-song-actions{display:flex;gap:var(--space-sm)}.album-cover-section{display:flex;gap:var(--space-lg);align-items:flex-start}.album-cover-preview{width:150px;height:150px;flex-shrink:0}.album-cover-preview img{width:100%;height:100%;object-fit:cover;border-radius:var(--radius-md);border:1px solid var(--ashen-char)}.album-cover-uploader{flex:1}@media(max-width:768px){.form-row{grid-template-columns:1fr}.editor-header{flex-direction:column;gap:var(--space-md);align-items:flex-start}.form-actions,.album-cover-section{flex-direction:column}.admin-song-item{grid-template-columns:40px 1fr}.admin-song-item .admin-song-actions{grid-column:1 / -1;justify-content:flex-end}}.event-indicator{width:4px;height:40px;border-radius:2px;flex-shrink:0}.checkbox-label{display:flex;align-items:center;gap:var(--space-sm);cursor:pointer;font-size:.9375rem}.checkbox-label input[type=checkbox]{width:18px;height:18px;accent-color:var(--violet-core);cursor:pointer}.character-checkboxes{display:flex;flex-direction:column;gap:var(--space-sm);padding:var(--space-md);background:var(--color-bg-surface);border:1px solid var(--ashen-char);border-radius:var(--radius-md);max-height:250px;overflow-y:auto}.char-type{font-size:.75rem;color:var(--dull-steel);margin-left:var(--space-xs)}.lore-placeholder{display:flex;align-items:center;justify-content:center;background:var(--color-bg-elevated);font-size:1.5rem}.help-text{font-size:.75rem;color:var(--dull-steel);margin-top:var(--space-xs)}.form-group textarea{padding:var(--space-sm) var(--space-md);background:var(--color-bg-surface);border:1px solid var(--ashen-char);border-radius:var(--radius-md);color:var(--color-text-primary);font-size:1rem;resize:vertical;min-height:80px}.form-group textarea:focus{outline:none;border-color:var(--violet-core)}.whitelist-form{display:flex;gap:var(--space-md);margin-bottom:var(--space-xl)}.whitelist-section h3{margin-bottom:var(--space-md);color:var(--color-text-secondary);font-size:1rem}.whitelist-list{display:flex;flex-direction:column;gap:var(--space-sm)}.whitelist-item{display:flex;align-items:center;justify-content:space-between;padding:var(--space-md);background:var(--color-bg-surface);border:1px solid var(--ashen-char);border-radius:var(--radius-md)}.whitelist-email{font-family:var(--font-mono);font-size:.9375rem}.success-banner{padding:var(--space-md);background:#3e7a5e33;border:1px solid var(--success);border-radius:var(--radius-md);color:var(--success);font-size:.875rem}@media(max-width:768px){.whitelist-form{flex-direction:column}}.migration-results{margin-top:var(--space-xl)}.migration-results h3{margin-bottom:var(--space-md)}.migration-item{display:flex;align-items:center;gap:var(--space-md);padding:var(--space-sm) var(--space-md);border-radius:var(--radius-sm)}.migration-item.success{background:#3e7a5e1a;color:var(--success)}.migration-item.error{background:#8b2c3a1a;color:var(--error)}.import-section{margin-bottom:var(--space-2xl);padding-bottom:var(--space-xl);border-bottom:1px solid var(--ashen-char)}.import-section:last-of-type{border-bottom:none}.import-section h2{font-size:1.25rem;margin-bottom:var(--space-sm)}.import-format-help{margin-bottom:var(--space-lg)}.import-format-help summary{cursor:pointer;color:var(--ember-violet);font-size:.875rem}.import-format-help pre{margin-top:var(--space-md);padding:var(--space-md);background:var(--color-bg-surface);border:1px solid var(--ashen-char);border-radius:var(--radius-md);font-size:.75rem;overflow-x:auto;white-space:pre-wrap}.file-import-row{display:flex;gap:var(--space-md);align-items:center;flex-wrap:wrap}.file-import-row input[type=file]{font-size:.875rem}.preview-events{padding:var(--space-md);background:var(--color-bg-surface);border:1px solid var(--ashen-char);border-radius:var(--radius-md)}.preview-events h4{margin:0 0 var(--space-sm) 0;font-size:.875rem;color:var(--color-text-secondary)}.preview-events ul{margin:0;padding-left:var(--space-lg);font-size:.875rem}.preview-events li{margin-bottom:var(--space-xs)}.sortable-item{display:flex;align-items:center;gap:var(--space-md)}.sortable-item-content{display:flex;align-items:center;gap:var(--space-md);flex:1;min-width:0}.drag-handle{display:flex;align-items:center;justify-content:center;width:24px;height:40px;cursor:grab;color:var(--dull-steel);font-size:1rem;letter-spacing:-.1em;-webkit-user-select:none;user-select:none;flex-shrink:0;border-radius:var(--radius-sm);transition:all .15s ease}.drag-handle:hover{color:var(--color-text-primary);background:var(--color-bg-elevated)}.drag-handle:active{cursor:grabbing}.saving-indicator{font-size:.875rem;font-weight:400;color:var(--ember-violet);animation:pulse 1s ease-in-out infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.sortable-list .admin-list-item{padding:0;background:var(--color-bg-surface)}.sortable-item .item-content{display:flex;align-items:center;gap:var(--space-md);padding:var(--space-md);flex:1;min-width:0;text-decoration:none;color:inherit;transition:background .15s ease}.sortable-item .item-content:hover{background:var(--color-bg-elevated)}.sortable-item.dragging{box-shadow:0 8px 24px #0006;border-color:var(--ember-violet)}.admin-section>.help-text{margin-top:calc(-1 * var(--space-sm));margin-bottom:var(--space-sm)}.admin-list-item.inactive .item-image img{filter:grayscale(.5)}.inactive-tag,.hidden-tag{display:inline-block;margin-left:var(--space-sm);padding:.125rem .375rem;font-size:.625rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;background:var(--color-bg-elevated);color:var(--dull-steel);border:1px solid var(--ashen-char);border-radius:var(--radius-sm);vertical-align:middle}.hidden-tag{background:var(--deep-amethyst);color:var(--ember-violet);border-color:var(--violet-core)}.admin-list-item.hidden-item{border-style:dashed}.form-group-inline{flex-direction:row;align-items:center;gap:var(--space-md)}.form-group-inline .help-text{margin-top:0}.file-type-icon{display:flex;align-items:center;justify-content:center;font-size:1.5rem}.item-date{font-size:.75rem;color:var(--ember-violet);margin-top:var(--space-xs)}.crew-list{display:flex;flex-direction:column;gap:var(--space-sm)}.crew-member-row{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm);background:var(--color-bg-elevated);border:1px solid var(--ashen-char);border-radius:var(--radius-md)}.crew-character-select{flex:2;padding:var(--space-xs) var(--space-sm);background:var(--color-bg-surface);border:1px solid var(--ashen-char);border-radius:var(--radius-sm);color:var(--color-text-primary);font-size:.875rem}.crew-role-select{flex:1;padding:var(--space-xs) var(--space-sm);background:var(--color-bg-surface);border:1px solid var(--ashen-char);border-radius:var(--radius-sm);color:var(--color-text-primary);font-size:.875rem}.crew-character-select:focus,.crew-role-select:focus{outline:none;border-color:var(--violet-core)}@media(max-width:768px){.crew-member-row{flex-wrap:wrap}.crew-character-select,.crew-role-select{flex:1 1 100%}}.sync-result{display:flex;align-items:center;justify-content:space-between;padding:var(--space-md);border-radius:var(--radius-md);font-size:.875rem;margin-bottom:var(--space-lg)}.sync-result.success{background:#3e7a5e33;border:1px solid var(--success);color:var(--success)}.sync-result.error{background:#8b454533;border:1px solid var(--error);color:var(--error)}.sync-result .dismiss-btn{background:none;border:none;font-size:1.25rem;cursor:pointer;color:inherit;opacity:.7;padding:0;line-height:1}.sync-result .dismiss-btn:hover{opacity:1}.color-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:var(--space-md)}.color-input-group{display:flex;flex-direction:column;gap:var(--space-xs)}.color-input-group label{font-size:.875rem;font-weight:500;color:var(--color-text-secondary)}.color-input-wrapper{display:flex;gap:var(--space-sm);align-items:center}.color-picker{width:48px;height:40px;padding:2px;border:1px solid var(--ashen-char);border-radius:var(--radius-sm);background:var(--color-bg-elevated);cursor:pointer}.color-picker::-webkit-color-swatch-wrapper{padding:0}.color-picker::-webkit-color-swatch{border:none;border-radius:var(--radius-sm)}.color-picker::-moz-color-swatch{border:none;border-radius:var(--radius-sm)}.color-text{flex:1;padding:var(--space-sm) var(--space-md);background:var(--color-bg-surface);border:1px solid var(--ashen-char);border-radius:var(--radius-md);color:var(--color-text-primary);font-family:var(--font-mono);font-size:.875rem;text-transform:uppercase}.color-text:focus{outline:none;border-color:var(--violet-core)}.theme-preview{padding:var(--space-lg);border:1px solid var(--ashen-char);border-radius:var(--radius-md);background:var(--preview-bg-main, var(--color-bg-main))}.preview-card{padding:var(--space-lg);background:var(--preview-bg-surface, var(--color-bg-surface));border-radius:var(--radius-md)}.preview-card h4{margin:0 0 var(--space-xs) 0;font-size:1.5rem}.preview-card p{margin:0 0 var(--space-md) 0}.preview-buttons{display:flex;gap:var(--space-sm);flex-wrap:wrap}.preview-btn-primary,.preview-btn-accent{padding:var(--space-sm) var(--space-lg);border:none;border-radius:var(--radius-md);font-family:var(--font-display);font-size:.875rem;cursor:pointer;transition:transform .15s ease}.preview-btn-primary:hover,.preview-btn-accent:hover{transform:translateY(-1px)}@media(max-width:768px){.color-grid{grid-template-columns:1fr}}.school-icon-preview{width:48px;height:48px;display:flex;align-items:center;justify-content:center;font-size:1.5rem;background:var(--color-bg-elevated);border-radius:var(--radius-md);flex-shrink:0}.unofficial-tag{display:inline-block;margin-left:var(--space-sm);padding:.125rem .375rem;font-size:.625rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;background:var(--deep-amethyst);color:var(--ember-violet);border:1px solid var(--violet-core);border-radius:var(--radius-sm);vertical-align:middle}.icon-input-wrapper{display:flex;gap:var(--space-sm);align-items:center}.icon-input{width:80px;text-align:center;font-size:1.5rem}.icon-preview{font-size:2rem;width:48px;height:48px;display:flex;align-items:center;justify-content:center;background:var(--color-bg-elevated);border:1px solid var(--ashen-char);border-radius:var(--radius-md)}.icon-suggestions{display:flex;flex-wrap:wrap;gap:var(--space-xs);padding:var(--space-md);background:var(--color-bg-surface);border:1px solid var(--ashen-char);border-radius:var(--radius-md)}.icon-suggestion{width:40px;height:40px;display:flex;align-items:center;justify-content:center;font-size:1.25rem;background:var(--color-bg-elevated);border:1px solid var(--ashen-char);border-radius:var(--radius-sm);cursor:pointer;transition:all .15s ease}.icon-suggestion:hover{border-color:var(--violet-core);transform:scale(1.1)}.icon-suggestion.selected{border-color:var(--ember-violet);background:var(--deep-amethyst);box-shadow:0 0 0 2px var(--violet-core)}.login-attempts-list{display:flex;flex-direction:column;gap:var(--space-sm)}.attempt-item{display:grid;grid-template-columns:auto 1fr auto;gap:var(--space-md);padding:var(--space-md);background:var(--color-bg-surface);border:1px solid var(--ashen-char);border-radius:var(--radius-md);align-items:start}.attempt-item.success{border-left:3px solid var(--success)}.attempt-item.denied{border-left:3px solid var(--error)}.attempt-status{display:flex;align-items:center}.status-badge{padding:.25rem .5rem;font-size:.6875rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;border-radius:var(--radius-sm);white-space:nowrap}.status-success{background:#3e7a5e33;color:var(--success)}.status-denied{background:#8b2c3a33;color:var(--error)}.attempt-main{min-width:0}.attempt-email{font-family:var(--font-mono);font-size:.9375rem;font-weight:500;color:var(--color-text-heading);word-break:break-all}.attempt-time{font-size:.8125rem;color:var(--color-text-secondary);margin-top:var(--space-xs)}.attempt-details{display:grid;grid-template-columns:repeat(2,auto);gap:var(--space-xs) var(--space-lg);font-size:.75rem}.detail-row{display:flex;gap:var(--space-xs)}.detail-label{color:var(--dull-steel);white-space:nowrap}.detail-value{color:var(--color-text-secondary);font-family:var(--font-mono)}.attempt-reason{grid-column:1 / -1;margin-top:var(--space-sm);padding-top:var(--space-sm);border-top:1px solid var(--ashen-char);font-size:.8125rem;color:var(--rusted-rose)}.reason-label{color:var(--dull-steel)}.load-more-container{display:flex;justify-content:center;margin-top:var(--space-xl)}@media(max-width:768px){.attempt-item{grid-template-columns:1fr;gap:var(--space-sm)}.attempt-details{grid-template-columns:1fr}.attempt-status{order:-1}}.crop-modal-overlay{z-index:1000}.crop-modal{max-width:500px;width:90vw}.crop-modal h2{margin:0 0 var(--space-lg) 0}.crop-container{position:relative;width:100%;height:350px;background:var(--color-bg-elevated);border-radius:var(--radius-md);overflow:hidden}.crop-controls{margin-top:var(--space-lg)}.zoom-control{display:flex;align-items:center;gap:var(--space-md);font-size:.875rem;color:var(--color-text-secondary)}.zoom-control input[type=range]{flex:1;height:4px;background:var(--ashen-char);border-radius:2px;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none}.zoom-control input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:16px;height:16px;background:var(--violet-core);border-radius:50%;cursor:pointer}.zoom-control input[type=range]::-moz-range-thumb{width:16px;height:16px;background:var(--violet-core);border-radius:50%;cursor:pointer;border:none}.zoom-value{min-width:40px;text-align:right;font-family:var(--font-mono)}.crop-modal .help-text{text-align:center;margin:var(--space-md) 0}.crop-modal .modal-actions{margin-top:var(--space-lg)}/*!
 * Quill Editor v1.3.7
 * https://quilljs.com/
 * Copyright (c) 2014, Jason Chen
 * Copyright (c) 2013, salesforce.com
 */.ql-container{box-sizing:border-box;font-family:Helvetica,Arial,sans-serif;font-size:13px;height:100%;margin:0;position:relative}.ql-container.ql-disabled .ql-tooltip{visibility:hidden}.ql-container.ql-disabled .ql-editor ul[data-checked]>li:before{pointer-events:none}.ql-clipboard{left:-100000px;height:1px;overflow-y:hidden;position:absolute;top:50%}.ql-clipboard p{margin:0;padding:0}.ql-editor{box-sizing:border-box;line-height:1.42;height:100%;outline:none;overflow-y:auto;padding:12px 15px;tab-size:4;-moz-tab-size:4;text-align:left;white-space:pre-wrap;word-wrap:break-word}.ql-editor>*{cursor:text}.ql-editor p,.ql-editor ol,.ql-editor ul,.ql-editor pre,.ql-editor blockquote,.ql-editor h1,.ql-editor h2,.ql-editor h3,.ql-editor h4,.ql-editor h5,.ql-editor h6{margin:0;padding:0;counter-reset:list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}.ql-editor ol,.ql-editor ul{padding-left:1.5em}.ql-editor ol>li,.ql-editor ul>li{list-style-type:none}.ql-editor ul>li:before{content:"•"}.ql-editor ul[data-checked=true],.ql-editor ul[data-checked=false]{pointer-events:none}.ql-editor ul[data-checked=true]>li *,.ql-editor ul[data-checked=false]>li *{pointer-events:all}.ql-editor ul[data-checked=true]>li:before,.ql-editor ul[data-checked=false]>li:before{color:#777;cursor:pointer;pointer-events:all}.ql-editor ul[data-checked=true]>li:before{content:"☑"}.ql-editor ul[data-checked=false]>li:before{content:"☐"}.ql-editor li:before{display:inline-block;white-space:nowrap;width:1.2em}.ql-editor li:not(.ql-direction-rtl):before{margin-left:-1.5em;margin-right:.3em;text-align:right}.ql-editor li.ql-direction-rtl:before{margin-left:.3em;margin-right:-1.5em}.ql-editor ol li:not(.ql-direction-rtl),.ql-editor ul li:not(.ql-direction-rtl){padding-left:1.5em}.ql-editor ol li.ql-direction-rtl,.ql-editor ul li.ql-direction-rtl{padding-right:1.5em}.ql-editor ol li{counter-reset:list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;counter-increment:list-0}.ql-editor ol li:before{content:counter(list-0,decimal) ". "}.ql-editor ol li.ql-indent-1{counter-increment:list-1}.ql-editor ol li.ql-indent-1:before{content:counter(list-1,lower-alpha) ". "}.ql-editor ol li.ql-indent-1{counter-reset:list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-2{counter-increment:list-2}.ql-editor ol li.ql-indent-2:before{content:counter(list-2,lower-roman) ". "}.ql-editor ol li.ql-indent-2{counter-reset:list-3 list-4 list-5 list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-3{counter-increment:list-3}.ql-editor ol li.ql-indent-3:before{content:counter(list-3,decimal) ". "}.ql-editor ol li.ql-indent-3{counter-reset:list-4 list-5 list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-4{counter-increment:list-4}.ql-editor ol li.ql-indent-4:before{content:counter(list-4,lower-alpha) ". "}.ql-editor ol li.ql-indent-4{counter-reset:list-5 list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-5{counter-increment:list-5}.ql-editor ol li.ql-indent-5:before{content:counter(list-5,lower-roman) ". "}.ql-editor ol li.ql-indent-5{counter-reset:list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-6{counter-increment:list-6}.ql-editor ol li.ql-indent-6:before{content:counter(list-6,decimal) ". "}.ql-editor ol li.ql-indent-6{counter-reset:list-7 list-8 list-9}.ql-editor ol li.ql-indent-7{counter-increment:list-7}.ql-editor ol li.ql-indent-7:before{content:counter(list-7,lower-alpha) ". "}.ql-editor ol li.ql-indent-7{counter-reset:list-8 list-9}.ql-editor ol li.ql-indent-8{counter-increment:list-8}.ql-editor ol li.ql-indent-8:before{content:counter(list-8,lower-roman) ". "}.ql-editor ol li.ql-indent-8{counter-reset:list-9}.ql-editor ol li.ql-indent-9{counter-increment:list-9}.ql-editor ol li.ql-indent-9:before{content:counter(list-9,decimal) ". "}.ql-editor .ql-indent-1:not(.ql-direction-rtl){padding-left:3em}.ql-editor li.ql-indent-1:not(.ql-direction-rtl){padding-left:4.5em}.ql-editor .ql-indent-1.ql-direction-rtl.ql-align-right{padding-right:3em}.ql-editor li.ql-indent-1.ql-direction-rtl.ql-align-right{padding-right:4.5em}.ql-editor .ql-indent-2:not(.ql-direction-rtl){padding-left:6em}.ql-editor li.ql-indent-2:not(.ql-direction-rtl){padding-left:7.5em}.ql-editor .ql-indent-2.ql-direction-rtl.ql-align-right{padding-right:6em}.ql-editor li.ql-indent-2.ql-direction-rtl.ql-align-right{padding-right:7.5em}.ql-editor .ql-indent-3:not(.ql-direction-rtl){padding-left:9em}.ql-editor li.ql-indent-3:not(.ql-direction-rtl){padding-left:10.5em}.ql-editor .ql-indent-3.ql-direction-rtl.ql-align-right{padding-right:9em}.ql-editor li.ql-indent-3.ql-direction-rtl.ql-align-right{padding-right:10.5em}.ql-editor .ql-indent-4:not(.ql-direction-rtl){padding-left:12em}.ql-editor li.ql-indent-4:not(.ql-direction-rtl){padding-left:13.5em}.ql-editor .ql-indent-4.ql-direction-rtl.ql-align-right{padding-right:12em}.ql-editor li.ql-indent-4.ql-direction-rtl.ql-align-right{padding-right:13.5em}.ql-editor .ql-indent-5:not(.ql-direction-rtl){padding-left:15em}.ql-editor li.ql-indent-5:not(.ql-direction-rtl){padding-left:16.5em}.ql-editor .ql-indent-5.ql-direction-rtl.ql-align-right{padding-right:15em}.ql-editor li.ql-indent-5.ql-direction-rtl.ql-align-right{padding-right:16.5em}.ql-editor .ql-indent-6:not(.ql-direction-rtl){padding-left:18em}.ql-editor li.ql-indent-6:not(.ql-direction-rtl){padding-left:19.5em}.ql-editor .ql-indent-6.ql-direction-rtl.ql-align-right{padding-right:18em}.ql-editor li.ql-indent-6.ql-direction-rtl.ql-align-right{padding-right:19.5em}.ql-editor .ql-indent-7:not(.ql-direction-rtl){padding-left:21em}.ql-editor li.ql-indent-7:not(.ql-direction-rtl){padding-left:22.5em}.ql-editor .ql-indent-7.ql-direction-rtl.ql-align-right{padding-right:21em}.ql-editor li.ql-indent-7.ql-direction-rtl.ql-align-right{padding-right:22.5em}.ql-editor .ql-indent-8:not(.ql-direction-rtl){padding-left:24em}.ql-editor li.ql-indent-8:not(.ql-direction-rtl){padding-left:25.5em}.ql-editor .ql-indent-8.ql-direction-rtl.ql-align-right{padding-right:24em}.ql-editor li.ql-indent-8.ql-direction-rtl.ql-align-right{padding-right:25.5em}.ql-editor .ql-indent-9:not(.ql-direction-rtl){padding-left:27em}.ql-editor li.ql-indent-9:not(.ql-direction-rtl){padding-left:28.5em}.ql-editor .ql-indent-9.ql-direction-rtl.ql-align-right{padding-right:27em}.ql-editor li.ql-indent-9.ql-direction-rtl.ql-align-right{padding-right:28.5em}.ql-editor .ql-video{display:block;max-width:100%}.ql-editor .ql-video.ql-align-center{margin:0 auto}.ql-editor .ql-video.ql-align-right{margin:0 0 0 auto}.ql-editor .ql-bg-black{background-color:#000}.ql-editor .ql-bg-red{background-color:#e60000}.ql-editor .ql-bg-orange{background-color:#f90}.ql-editor .ql-bg-yellow{background-color:#ff0}.ql-editor .ql-bg-green{background-color:#008a00}.ql-editor .ql-bg-blue{background-color:#06c}.ql-editor .ql-bg-purple{background-color:#93f}.ql-editor .ql-color-white{color:#fff}.ql-editor .ql-color-red{color:#e60000}.ql-editor .ql-color-orange{color:#f90}.ql-editor .ql-color-yellow{color:#ff0}.ql-editor .ql-color-green{color:#008a00}.ql-editor .ql-color-blue{color:#06c}.ql-editor .ql-color-purple{color:#93f}.ql-editor .ql-font-serif{font-family:Georgia,Times New Roman,serif}.ql-editor .ql-font-monospace{font-family:Monaco,Courier New,monospace}.ql-editor .ql-size-small{font-size:.75em}.ql-editor .ql-size-large{font-size:1.5em}.ql-editor .ql-size-huge{font-size:2.5em}.ql-editor .ql-direction-rtl{direction:rtl;text-align:inherit}.ql-editor .ql-align-center{text-align:center}.ql-editor .ql-align-justify{text-align:justify}.ql-editor .ql-align-right{text-align:right}.ql-editor.ql-blank:before{color:#0009;content:attr(data-placeholder);font-style:italic;left:15px;pointer-events:none;position:absolute;right:15px}.ql-snow.ql-toolbar:after,.ql-snow .ql-toolbar:after{clear:both;content:"";display:table}.ql-snow.ql-toolbar button,.ql-snow .ql-toolbar button{background:none;border:none;cursor:pointer;display:inline-block;float:left;height:24px;padding:3px 5px;width:28px}.ql-snow.ql-toolbar button svg,.ql-snow .ql-toolbar button svg{float:left;height:100%}.ql-snow.ql-toolbar button:active:hover,.ql-snow .ql-toolbar button:active:hover{outline:none}.ql-snow.ql-toolbar input.ql-image[type=file],.ql-snow .ql-toolbar input.ql-image[type=file]{display:none}.ql-snow.ql-toolbar button:hover,.ql-snow .ql-toolbar button:hover,.ql-snow.ql-toolbar button:focus,.ql-snow .ql-toolbar button:focus,.ql-snow.ql-toolbar button.ql-active,.ql-snow .ql-toolbar button.ql-active,.ql-snow.ql-toolbar .ql-picker-label:hover,.ql-snow .ql-toolbar .ql-picker-label:hover,.ql-snow.ql-toolbar .ql-picker-label.ql-active,.ql-snow .ql-toolbar .ql-picker-label.ql-active,.ql-snow.ql-toolbar .ql-picker-item:hover,.ql-snow .ql-toolbar .ql-picker-item:hover,.ql-snow.ql-toolbar .ql-picker-item.ql-selected,.ql-snow .ql-toolbar .ql-picker-item.ql-selected{color:#06c}.ql-snow.ql-toolbar button:hover .ql-fill,.ql-snow .ql-toolbar button:hover .ql-fill,.ql-snow.ql-toolbar button:focus .ql-fill,.ql-snow .ql-toolbar button:focus .ql-fill,.ql-snow.ql-toolbar button.ql-active .ql-fill,.ql-snow .ql-toolbar button.ql-active .ql-fill,.ql-snow.ql-toolbar .ql-picker-label:hover .ql-fill,.ql-snow .ql-toolbar .ql-picker-label:hover .ql-fill,.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-fill,.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-fill,.ql-snow.ql-toolbar .ql-picker-item:hover .ql-fill,.ql-snow .ql-toolbar .ql-picker-item:hover .ql-fill,.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-fill,.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-fill,.ql-snow.ql-toolbar button:hover .ql-stroke.ql-fill,.ql-snow .ql-toolbar button:hover .ql-stroke.ql-fill,.ql-snow.ql-toolbar button:focus .ql-stroke.ql-fill,.ql-snow .ql-toolbar button:focus .ql-stroke.ql-fill,.ql-snow.ql-toolbar button.ql-active .ql-stroke.ql-fill,.ql-snow .ql-toolbar button.ql-active .ql-stroke.ql-fill,.ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill,.ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill,.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill,.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill,.ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill,.ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill,.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill,.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill{fill:#06c}.ql-snow.ql-toolbar button:hover .ql-stroke,.ql-snow .ql-toolbar button:hover .ql-stroke,.ql-snow.ql-toolbar button:focus .ql-stroke,.ql-snow .ql-toolbar button:focus .ql-stroke,.ql-snow.ql-toolbar button.ql-active .ql-stroke,.ql-snow .ql-toolbar button.ql-active .ql-stroke,.ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke,.ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke,.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke,.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke,.ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke,.ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke,.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke,.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke,.ql-snow.ql-toolbar button:hover .ql-stroke-miter,.ql-snow .ql-toolbar button:hover .ql-stroke-miter,.ql-snow.ql-toolbar button:focus .ql-stroke-miter,.ql-snow .ql-toolbar button:focus .ql-stroke-miter,.ql-snow.ql-toolbar button.ql-active .ql-stroke-miter,.ql-snow .ql-toolbar button.ql-active .ql-stroke-miter,.ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke-miter,.ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke-miter,.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter,.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter,.ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke-miter,.ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke-miter,.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter,.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter{stroke:#06c}@media(pointer:coarse){.ql-snow.ql-toolbar button:hover:not(.ql-active),.ql-snow .ql-toolbar button:hover:not(.ql-active){color:#444}.ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-fill,.ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-fill,.ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill,.ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill{fill:#444}.ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-stroke,.ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-stroke,.ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter,.ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter{stroke:#444}}.ql-snow,.ql-snow *{box-sizing:border-box}.ql-snow .ql-hidden{display:none}.ql-snow .ql-out-bottom,.ql-snow .ql-out-top{visibility:hidden}.ql-snow .ql-tooltip{position:absolute;transform:translateY(10px)}.ql-snow .ql-tooltip a{cursor:pointer;text-decoration:none}.ql-snow .ql-tooltip.ql-flip{transform:translateY(-10px)}.ql-snow .ql-formats{display:inline-block;vertical-align:middle}.ql-snow .ql-formats:after{clear:both;content:"";display:table}.ql-snow .ql-stroke{fill:none;stroke:#444;stroke-linecap:round;stroke-linejoin:round;stroke-width:2}.ql-snow .ql-stroke-miter{fill:none;stroke:#444;stroke-miterlimit:10;stroke-width:2}.ql-snow .ql-fill,.ql-snow .ql-stroke.ql-fill{fill:#444}.ql-snow .ql-empty{fill:none}.ql-snow .ql-even{fill-rule:evenodd}.ql-snow .ql-thin,.ql-snow .ql-stroke.ql-thin{stroke-width:1}.ql-snow .ql-transparent{opacity:.4}.ql-snow .ql-direction svg:last-child{display:none}.ql-snow .ql-direction.ql-active svg:last-child{display:inline}.ql-snow .ql-direction.ql-active svg:first-child{display:none}.ql-snow .ql-editor h1{font-size:2em}.ql-snow .ql-editor h2{font-size:1.5em}.ql-snow .ql-editor h3{font-size:1.17em}.ql-snow .ql-editor h4{font-size:1em}.ql-snow .ql-editor h5{font-size:.83em}.ql-snow .ql-editor h6{font-size:.67em}.ql-snow .ql-editor a{text-decoration:underline}.ql-snow .ql-editor blockquote{border-left:4px solid #ccc;margin-bottom:5px;margin-top:5px;padding-left:16px}.ql-snow .ql-editor code,.ql-snow .ql-editor pre{background-color:#f0f0f0;border-radius:3px}.ql-snow .ql-editor pre{white-space:pre-wrap;margin-bottom:5px;margin-top:5px;padding:5px 10px}.ql-snow .ql-editor code{font-size:85%;padding:2px 4px}.ql-snow .ql-editor pre.ql-syntax{background-color:#23241f;color:#f8f8f2;overflow:visible}.ql-snow .ql-editor img{max-width:100%}.ql-snow .ql-picker{color:#444;display:inline-block;float:left;font-size:14px;font-weight:500;height:24px;position:relative;vertical-align:middle}.ql-snow .ql-picker-label{cursor:pointer;display:inline-block;height:100%;padding-left:8px;padding-right:2px;position:relative;width:100%}.ql-snow .ql-picker-label:before{display:inline-block;line-height:22px}.ql-snow .ql-picker-options{background-color:#fff;display:none;min-width:100%;padding:4px 8px;position:absolute;white-space:nowrap}.ql-snow .ql-picker-options .ql-picker-item{cursor:pointer;display:block;padding-bottom:5px;padding-top:5px}.ql-snow .ql-picker.ql-expanded .ql-picker-label{color:#ccc;z-index:2}.ql-snow .ql-picker.ql-expanded .ql-picker-label .ql-fill{fill:#ccc}.ql-snow .ql-picker.ql-expanded .ql-picker-label .ql-stroke{stroke:#ccc}.ql-snow .ql-picker.ql-expanded .ql-picker-options{display:block;margin-top:-1px;top:100%;z-index:1}.ql-snow .ql-color-picker,.ql-snow .ql-icon-picker{width:28px}.ql-snow .ql-color-picker .ql-picker-label,.ql-snow .ql-icon-picker .ql-picker-label{padding:2px 4px}.ql-snow .ql-color-picker .ql-picker-label svg,.ql-snow .ql-icon-picker .ql-picker-label svg{right:4px}.ql-snow .ql-icon-picker .ql-picker-options{padding:4px 0}.ql-snow .ql-icon-picker .ql-picker-item{height:24px;width:24px;padding:2px 4px}.ql-snow .ql-color-picker .ql-picker-options{padding:3px 5px;width:152px}.ql-snow .ql-color-picker .ql-picker-item{border:1px solid transparent;float:left;height:16px;margin:2px;padding:0;width:16px}.ql-snow .ql-picker:not(.ql-color-picker):not(.ql-icon-picker) svg{position:absolute;margin-top:-9px;right:0;top:50%;width:18px}.ql-snow .ql-picker.ql-header .ql-picker-label[data-label]:not([data-label=""]):before,.ql-snow .ql-picker.ql-font .ql-picker-label[data-label]:not([data-label=""]):before,.ql-snow .ql-picker.ql-size .ql-picker-label[data-label]:not([data-label=""]):before,.ql-snow .ql-picker.ql-header .ql-picker-item[data-label]:not([data-label=""]):before,.ql-snow .ql-picker.ql-font .ql-picker-item[data-label]:not([data-label=""]):before,.ql-snow .ql-picker.ql-size .ql-picker-item[data-label]:not([data-label=""]):before{content:attr(data-label)}.ql-snow .ql-picker.ql-header{width:98px}.ql-snow .ql-picker.ql-header .ql-picker-label:before,.ql-snow .ql-picker.ql-header .ql-picker-item:before{content:"Normal"}.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="1"]:before,.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]:before{content:"Heading 1"}.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="2"]:before,.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="2"]:before{content:"Heading 2"}.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="3"]:before,.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="3"]:before{content:"Heading 3"}.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="4"]:before,.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="4"]:before{content:"Heading 4"}.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="5"]:before,.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="5"]:before{content:"Heading 5"}.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="6"]:before,.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="6"]:before{content:"Heading 6"}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]:before{font-size:2em}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="2"]:before{font-size:1.5em}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="3"]:before{font-size:1.17em}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="4"]:before{font-size:1em}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="5"]:before{font-size:.83em}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="6"]:before{font-size:.67em}.ql-snow .ql-picker.ql-font{width:108px}.ql-snow .ql-picker.ql-font .ql-picker-label:before,.ql-snow .ql-picker.ql-font .ql-picker-item:before{content:"Sans Serif"}.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=serif]:before,.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=serif]:before{content:"Serif"}.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=monospace]:before,.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=monospace]:before{content:"Monospace"}.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=serif]:before{font-family:Georgia,Times New Roman,serif}.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=monospace]:before{font-family:Monaco,Courier New,monospace}.ql-snow .ql-picker.ql-size{width:98px}.ql-snow .ql-picker.ql-size .ql-picker-label:before,.ql-snow .ql-picker.ql-size .ql-picker-item:before{content:"Normal"}.ql-snow .ql-picker.ql-size .ql-picker-label[data-value=small]:before,.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=small]:before{content:"Small"}.ql-snow .ql-picker.ql-size .ql-picker-label[data-value=large]:before,.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=large]:before{content:"Large"}.ql-snow .ql-picker.ql-size .ql-picker-label[data-value=huge]:before,.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=huge]:before{content:"Huge"}.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=small]:before{font-size:10px}.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=large]:before{font-size:18px}.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=huge]:before{font-size:32px}.ql-snow .ql-color-picker.ql-background .ql-picker-item{background-color:#fff}.ql-snow .ql-color-picker.ql-color .ql-picker-item{background-color:#000}.ql-toolbar.ql-snow{border:1px solid #ccc;box-sizing:border-box;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;padding:8px}.ql-toolbar.ql-snow .ql-formats{margin-right:15px}.ql-toolbar.ql-snow .ql-picker-label{border:1px solid transparent}.ql-toolbar.ql-snow .ql-picker-options{border:1px solid transparent;box-shadow:#0003 0 2px 8px}.ql-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-label,.ql-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-options{border-color:#ccc}.ql-toolbar.ql-snow .ql-color-picker .ql-picker-item.ql-selected,.ql-toolbar.ql-snow .ql-color-picker .ql-picker-item:hover{border-color:#000}.ql-toolbar.ql-snow+.ql-container.ql-snow{border-top:0px}.ql-snow .ql-tooltip{background-color:#fff;border:1px solid #ccc;box-shadow:0 0 5px #ddd;color:#444;padding:5px 12px;white-space:nowrap}.ql-snow .ql-tooltip:before{content:"Visit URL:";line-height:26px;margin-right:8px}.ql-snow .ql-tooltip input[type=text]{display:none;border:1px solid #ccc;font-size:13px;height:26px;margin:0;padding:3px 5px;width:170px}.ql-snow .ql-tooltip a.ql-preview{display:inline-block;max-width:200px;overflow-x:hidden;text-overflow:ellipsis;vertical-align:top}.ql-snow .ql-tooltip a.ql-action:after{border-right:1px solid #ccc;content:"Edit";margin-left:16px;padding-right:8px}.ql-snow .ql-tooltip a.ql-remove:before{content:"Remove";margin-left:8px}.ql-snow .ql-tooltip a{line-height:26px}.ql-snow .ql-tooltip.ql-editing a.ql-preview,.ql-snow .ql-tooltip.ql-editing a.ql-remove{display:none}.ql-snow .ql-tooltip.ql-editing input[type=text]{display:inline-block}.ql-snow .ql-tooltip.ql-editing a.ql-action:after{border-right:0px;content:"Save";padding-right:0}.ql-snow .ql-tooltip[data-mode=link]:before{content:"Enter link:"}.ql-snow .ql-tooltip[data-mode=formula]:before{content:"Enter formula:"}.ql-snow .ql-tooltip[data-mode=video]:before{content:"Enter video:"}.ql-snow a{color:#06c}.ql-container.ql-snow{border:1px solid #ccc}.relationship-editor{background:var(--color-bg-surface);border:1px solid var(--ashen-char);border-radius:var(--radius-md);padding:var(--space-lg);margin-top:var(--space-md)}.relationship-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--space-md)}.relationship-header label{font-size:1rem;font-weight:500;color:var(--color-text-heading)}.relationship-actions{display:flex;gap:var(--space-sm)}.relationship-list{display:flex;flex-direction:column;gap:var(--space-sm)}.no-relationships{color:var(--color-text-secondary);font-style:italic;text-align:center;padding:var(--space-md)}.relationship-item{display:flex;flex-direction:column;gap:var(--space-xs);padding:var(--space-md);background:var(--color-bg-elevated);border:1px solid var(--ashen-char);border-left:3px solid var(--rel-color, var(--violet-core));border-radius:var(--radius-sm);position:relative}.relationship-content{display:flex;align-items:center;gap:var(--space-sm);flex-wrap:wrap}.relationship-direction{font-size:1.25rem;color:var(--ember-violet);min-width:24px;text-align:center}.relationship-target{font-weight:500;color:var(--color-text-heading)}.relationship-type-badge{font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;padding:.125rem .5rem;border-radius:var(--radius-sm);color:var(--moon-sheen)}.relationship-notes{font-size:.875rem;color:var(--color-text-secondary);font-style:italic;margin:0;padding-left:calc(24px + var(--space-sm))}.relationship-item-actions{position:absolute;top:var(--space-sm);right:var(--space-sm);display:flex;gap:var(--space-xs);opacity:0;transition:opacity .15s ease}.relationship-item:hover .relationship-item-actions{opacity:1}.btn-icon{padding:.25rem .5rem;font-size:.75rem;background:var(--color-bg-surface);border:1px solid var(--ashen-char);border-radius:var(--radius-sm);color:var(--color-text-secondary);cursor:pointer;transition:all .15s ease}.btn-icon:hover{background:var(--violet-core);border-color:var(--ember-violet);color:var(--moon-sheen)}.btn-icon.btn-danger:hover{background:var(--blood-wine);border-color:var(--rusted-rose)}.relationship-item.is-hidden{opacity:.6;border-style:dashed}.relationship-hidden-badge{font-size:.6875rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;padding:.125rem .5rem;border-radius:var(--radius-sm);background:var(--dull-steel);color:var(--color-bg-elevated)}.relationship-form{margin-top:var(--space-md);padding:var(--space-md);background:var(--color-bg-elevated);border:1px dashed var(--ember-violet);border-radius:var(--radius-md)}.relationship-form .form-row{display:grid;grid-template-columns:1fr 1fr 1fr;gap:var(--space-md)}.relationship-form .form-group{margin-bottom:var(--space-md)}.relationship-form .form-group:last-of-type{margin-bottom:0}.relationship-form label{display:block;font-size:.875rem;font-weight:500;color:var(--color-text-heading);margin-bottom:var(--space-xs)}.relationship-form select,.relationship-form input{width:100%;padding:var(--space-sm) var(--space-md);background:var(--color-bg-surface);border:1px solid var(--ashen-char);border-radius:var(--radius-sm);color:var(--color-text-primary);font-size:.9375rem}.relationship-form select:focus,.relationship-form input:focus{outline:none;border-color:var(--ember-violet);box-shadow:0 0 0 2px #8a4dff33}.form-group-inline{display:flex;flex-direction:column;gap:var(--space-xs)}.checkbox-label{display:flex;align-items:center;gap:var(--space-sm);cursor:pointer;font-weight:400}.checkbox-label input[type=checkbox]{width:18px;height:18px;accent-color:var(--ember-violet);cursor:pointer}.relationship-form-actions{display:flex;justify-content:flex-end;gap:var(--space-sm);margin-top:var(--space-md);padding-top:var(--space-md);border-top:1px solid var(--ashen-char)}@media(max-width:768px){.relationship-form .form-row{grid-template-columns:1fr}.relationship-header{flex-direction:column;align-items:flex-start;gap:var(--space-sm)}.relationship-item-actions{opacity:1}}.album-images{display:flex;flex-direction:column;gap:var(--space-sm)}.album-images-label{font-size:.875rem;font-weight:500;color:var(--color-text-secondary)}.album-images-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--space-md)}.album-image-slot{display:flex;flex-direction:column;gap:var(--space-xs);padding:var(--space-sm);background:var(--color-bg-surface);border:1px solid var(--ashen-char);border-radius:var(--radius-md);transition:border-color .15s ease}.album-image-slot.has-image{border-color:var(--deep-amethyst)}.slot-header{display:flex;justify-content:space-between;align-items:center}.slot-label{font-size:.75rem;font-weight:500;color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.05em}.slot-label .required{color:var(--rusted-rose);margin-left:2px}.slot-remove{width:20px;height:20px;padding:0;background:var(--dark-crimson);border:none;border-radius:var(--radius-sm);color:var(--rusted-rose);font-size:1rem;line-height:1;cursor:pointer;transition:all .15s ease}.slot-remove:hover{background:var(--blood-wine);color:var(--moon-sheen)}.slot-preview{position:relative;aspect-ratio:1;border-radius:var(--radius-sm);overflow:hidden}.slot-preview img{width:100%;height:100%;object-fit:cover;cursor:pointer;transition:opacity .15s ease}.slot-preview:hover img{opacity:.8}.slot-change{position:absolute;bottom:var(--space-xs);left:50%;transform:translate(-50%);padding:var(--space-xs) var(--space-sm);background:#000000b3;border:none;border-radius:var(--radius-sm);color:var(--color-text-primary);font-size:.6875rem;text-transform:uppercase;letter-spacing:.05em;cursor:pointer;opacity:0;transition:opacity .15s ease}.slot-preview:hover .slot-change{opacity:1}.slot-empty{aspect-ratio:1;display:flex;align-items:center;justify-content:center}.slot-empty .dropzone{width:100%;height:100%;min-height:0;padding:var(--space-sm);display:flex;align-items:center;justify-content:center;font-size:.75rem}.slot-uploader{margin-top:var(--space-xs)}.slot-uploader .dropzone{padding:var(--space-sm);font-size:.75rem}@media(max-width:900px){.album-images-grid{grid-template-columns:repeat(2,1fr)}}@media(max-width:500px){.album-images-grid{grid-template-columns:1fr 1fr;gap:var(--space-sm)}.album-image-slot{padding:var(--space-xs)}}.modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:#0b0b0fe6;display:flex;align-items:center;justify-content:center;z-index:2000;padding:var(--space-lg)}.modal-content{background:var(--color-bg-elevated);border:1px solid var(--ashen-char);border-radius:var(--radius-lg);width:100%;max-width:500px;max-height:90vh;overflow-y:auto;padding:var(--space-xl);box-shadow:var(--shadow-xl)}.modal-content h2{margin:0 0 var(--space-lg) 0}.modal-content .form-group{margin-bottom:var(--space-md)}.modal-content .form-row{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-md)}.modal-actions{display:flex;justify-content:flex-end;gap:var(--space-md);margin-top:var(--space-xl);padding-top:var(--space-lg);border-top:1px solid var(--ashen-char)}.file-preview{display:flex;align-items:center;gap:var(--space-md);padding:var(--space-md);background:var(--color-bg-surface);border:1px solid var(--ashen-char);border-radius:var(--radius-md)}.file-icon{font-size:1.5rem}.file-url{flex:1;font-family:var(--font-mono);font-size:.8125rem;color:var(--color-text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.help-text{font-size:.8125rem;color:var(--dull-steel);margin-top:var(--space-xs)}.harptos-picker{display:flex;flex-direction:column;gap:var(--space-sm)}.harptos-label{font-size:.875rem;font-weight:500;color:var(--color-text-secondary)}.harptos-type-toggle{display:flex;gap:var(--space-xs);margin-bottom:var(--space-xs)}.type-btn{flex:1;padding:var(--space-xs) var(--space-sm);background:var(--color-bg-surface);border:1px solid var(--ashen-char);border-radius:var(--radius-sm);color:var(--color-text-secondary);font-size:.8125rem;cursor:pointer;transition:all .15s ease}.type-btn:hover{border-color:var(--violet-core)}.type-btn.active{background:var(--violet-core);border-color:var(--violet-core);color:var(--moon-sheen)}.harptos-fields{display:flex;gap:var(--space-sm);flex-wrap:wrap}.harptos-field{display:flex;flex-direction:column;gap:var(--space-xs);flex:1;min-width:100px}.harptos-field label{font-size:.75rem;color:var(--dull-steel)}.harptos-field select,.harptos-field input{padding:var(--space-sm);background:var(--color-bg-surface);border:1px solid var(--ashen-char);border-radius:var(--radius-md);color:var(--color-text-primary);font-size:.875rem}.harptos-field select:focus,.harptos-field input:focus{outline:none;border-color:var(--violet-core)}.harptos-day{max-width:80px}.harptos-year{max-width:100px}.harptos-special{flex:2}.harptos-picker.disabled{opacity:.5;pointer-events:none}.harptos-picker.disabled .type-btn,.harptos-picker.disabled select,.harptos-picker.disabled input{cursor:not-allowed}.cipher-tool-page{padding:var(--space-xl) 0}.cipher-header{margin-bottom:var(--space-xl)}.cipher-title-row{display:flex;align-items:center;gap:var(--space-lg);margin-bottom:var(--space-sm)}.cipher-header .back-link{font-size:.9rem;color:var(--color-text-secondary);transition:color .2s ease}.cipher-header .back-link:hover{color:var(--color-accent-primary)}.cipher-header h1{margin:0}.cipher-subtitle{color:var(--color-text-secondary);margin:0}.cipher-empty{text-align:center;padding:var(--space-2xl);background:var(--color-bg-surface);border:1px dashed var(--ashen-char);border-radius:var(--radius-lg)}.cipher-empty h2{margin-bottom:var(--space-md);color:var(--color-text-heading)}.cipher-empty p{margin:var(--space-sm) 0}.cipher-workspace{background:var(--color-bg-surface);border:1px solid var(--ashen-char);border-radius:var(--radius-lg);padding:var(--space-xl)}.cipher-controls{display:flex;gap:var(--space-xl);margin-bottom:var(--space-lg);flex-wrap:wrap}.control-group{display:flex;flex-direction:column;gap:var(--space-xs)}.control-group label{font-size:.85rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--color-text-secondary)}.control-group select{min-width:250px}.mode-toggle .toggle-buttons{display:flex;border:1px solid var(--ashen-char);border-radius:var(--radius-md);overflow:hidden}.toggle-btn{padding:var(--space-sm) var(--space-lg);background:var(--color-bg-elevated);border:none;color:var(--color-text-secondary);cursor:pointer;transition:all .2s ease;font-weight:500}.toggle-btn:first-child{border-right:1px solid var(--ashen-char)}.toggle-btn:hover{background:var(--color-bg-surface)}.toggle-btn.active{background:var(--violet-core);color:var(--moon-sheen)}.cipher-description{font-style:italic;color:var(--color-text-secondary);margin-bottom:var(--space-lg);padding:var(--space-md);background:var(--color-bg-elevated);border-radius:var(--radius-md);border-left:3px solid var(--violet-core)}.cipher-io{display:grid;grid-template-columns:1fr auto 1fr;gap:var(--space-lg);align-items:start;margin-bottom:var(--space-xl)}.io-section{display:flex;flex-direction:column;gap:var(--space-xs);position:relative}.io-section label{font-size:.85rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--color-text-secondary)}.io-section textarea{font-family:var(--font-mono);font-size:.95rem;line-height:1.6;resize:vertical;min-height:150px}.io-section textarea:read-only{background:var(--color-bg-elevated);cursor:default}.copy-btn{position:absolute;bottom:var(--space-sm);right:var(--space-sm);opacity:.7}.copy-btn:hover{opacity:1}.io-actions{display:flex;flex-direction:column;gap:var(--space-sm);align-items:center;padding-top:calc(var(--space-xs) + 1.2em + var(--space-xs))}.codebook-section{border-top:1px solid var(--ashen-char);padding-top:var(--space-lg)}.codebook-toggle{display:flex;align-items:center;gap:var(--space-sm);background:none;border:none;color:var(--color-text-heading);font-size:1rem;font-weight:600;cursor:pointer;padding:var(--space-sm) 0;width:100%;text-align:left}.codebook-toggle:hover{color:var(--color-accent-primary)}.codebook-count{font-weight:400;color:var(--color-text-secondary);font-size:.9rem}.codebook{margin-top:var(--space-md)}.char-cipher-info{background:var(--color-bg-elevated);padding:var(--space-md);border-radius:var(--radius-md);margin-bottom:var(--space-md);font-family:var(--font-mono);font-size:.9rem}.codebook-table{width:100%;border-collapse:collapse;font-size:.9rem}.codebook-table th,.codebook-table td{text-align:left;padding:var(--space-sm) var(--space-md);border-bottom:1px solid var(--ashen-char)}.codebook-table th{background:var(--color-bg-elevated);font-weight:600;text-transform:uppercase;letter-spacing:.05em;font-size:.8rem;color:var(--color-text-secondary)}.codebook-table tr:hover{background:var(--color-bg-elevated)}.codebook-table tr.canonical td:first-child{color:var(--ember-violet)}.canonical-badge{color:var(--ember-violet);margin-left:var(--space-xs);font-size:.8em}.codebook-note{color:var(--color-text-secondary);font-style:italic}@media(max-width:768px){.cipher-controls{flex-direction:column;gap:var(--space-md)}.control-group select{min-width:100%}.cipher-io{grid-template-columns:1fr}.io-actions{flex-direction:row;padding-top:0;justify-content:center}.io-actions .btn-primary{flex:1}}.spellbook-loading{display:flex;align-items:center;justify-content:center;height:400px}.spellbook-page-header{margin-bottom:var(--space-xl)}.spellbook-title-row{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--space-lg)}.spellbook-page-header h1{margin-bottom:var(--space-sm)}.spellbook-filters{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-md);padding:var(--space-md);margin-bottom:var(--space-xl);background:var(--color-bg-surface);border:1px solid var(--ashen-char);border-radius:var(--radius-md)}.spellbook-filters .filter-group{display:flex;align-items:center;gap:var(--space-sm)}.spellbook-filters .filter-label{font-size:.8125rem;color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.05em}.spellbook-filters select{padding:var(--space-xs) var(--space-sm);background:var(--color-bg-elevated);border:1px solid var(--ashen-char);border-radius:var(--radius-sm);color:var(--color-text-primary);font-size:.875rem;cursor:pointer}.spellbook-filters select:focus{outline:none;border-color:var(--violet-core)}.spellbook-filters .filter-count{margin-left:auto;font-size:.8125rem;color:var(--dull-steel)}.spellbook-content{margin-bottom:var(--space-2xl)}.spellbook-content .spell-level-group{margin-bottom:var(--space-xl)}.spellbook-content .spell-level-group h2{font-size:1.25rem;color:var(--color-text-secondary);border-bottom:1px solid var(--ashen-char);padding-bottom:var(--space-sm);margin-bottom:var(--space-lg)}.spellbook-empty{text-align:center;padding:var(--space-xl);background:var(--color-bg-surface);border:1px dashed var(--ashen-char);border-radius:var(--radius-lg);color:var(--color-text-secondary)}.spellbook-empty-state{text-align:center;padding:var(--space-2xl);background:var(--color-bg-surface);border:1px solid var(--ashen-char);border-radius:var(--radius-lg);max-width:500px;margin:var(--space-2xl) auto}.spellbook-empty-state .empty-icon{font-size:4rem;margin-bottom:var(--space-lg);opacity:.5}.spellbook-empty-state h2{margin-bottom:var(--space-md);color:var(--color-text-heading)}.spellbook-empty-state p{color:var(--color-text-secondary);line-height:1.6}@media(max-width:768px){.spellbook-title-row{flex-direction:column}.spellbook-title-row .btn{width:100%}.spellbook-filters{flex-direction:column;align-items:flex-start}.spellbook-filters .filter-count{margin-left:0;margin-top:var(--space-sm)}}:root{--black-void: #0B0B0F;--obsidian: #141018;--ashen-char: #1E1A22;--violet-core: #6E2EBF;--deep-amethyst: #4B1F7A;--ember-violet: #9B5FFF;--blood-wine: #7A1E2E;--dark-crimson: #4E121D;--rusted-rose: #9C3A4A;--silver-ash: #C9C6CF;--dull-steel: #ACA9B5;--moon-sheen: #E6E4EA;--success: #3E7A5E;--warning: #B07A2A;--error: #8B2C3A;--color-bg-main: var(--obsidian);--color-bg-surface: var(--ashen-char);--color-bg-elevated: var(--black-void);--color-text-primary: var(--silver-ash);--color-text-secondary: var(--dull-steel);--color-text-heading: var(--moon-sheen);--color-accent-primary: var(--violet-core);--color-accent-hover: var(--ember-violet);--color-accent-muted: var(--deep-amethyst);--color-danger: var(--blood-wine);--color-warning: var(--warning);--color-success: var(--success);--font-display: "Cormorant Garamond", serif;--font-body: "Cormorant Garamond", serif;--font-mono: "Fira Code", monospace;--space-xs: .25rem;--space-sm: .5rem;--space-md: 1rem;--space-lg: 1.5rem;--space-xl: 2rem;--space-2xl: 3rem;--radius-sm: 4px;--radius-md: 8px;--radius-lg: 12px;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .3);--shadow-md: 0 4px 6px rgba(0, 0, 0, .4);--shadow-lg: 0 10px 25px rgba(0, 0, 0, .5)}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{font-size:16px;scroll-behavior:smooth}body{font-family:var(--font-body);font-size:1.125rem;line-height:1.6;color:var(--color-text-primary);background-color:var(--color-bg-main);min-height:100vh;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#root{min-height:100vh;display:flex;flex-direction:column}h1,h2,h3,h4,h5,h6{font-family:var(--font-display);font-weight:600;color:var(--color-text-heading);line-height:1.2;margin-bottom:var(--space-md)}h1{font-size:2.5rem;font-weight:700}h2{font-size:2rem}h3{font-size:1.5rem}h4{font-size:1.25rem}p{margin-bottom:var(--space-md)}a{color:var(--color-accent-primary);text-decoration:none;transition:color .2s ease}a:hover{color:var(--color-accent-hover)}button,.btn{display:inline-block;font-family:var(--font-display);font-size:1rem;font-weight:500;cursor:pointer;border:none;border-radius:var(--radius-md);padding:var(--space-sm) var(--space-lg);transition:all .2s ease;text-align:center;text-decoration:none}.btn-primary{background:var(--color-accent-primary);color:var(--moon-sheen)}.btn-primary:hover{background:var(--color-accent-hover);transform:translateY(-1px);box-shadow:var(--shadow-md)}.btn-secondary{background:var(--color-bg-surface);color:var(--color-text-primary);border:1px solid var(--dull-steel)}.btn-secondary:hover{background:var(--ashen-char);border-color:var(--silver-ash)}.btn-danger{background:var(--color-danger);color:var(--moon-sheen)}.btn-danger:hover{background:var(--rusted-rose)}.btn-ghost{background:transparent;color:var(--color-text-secondary)}.btn-ghost:hover{background:var(--color-bg-surface);color:var(--color-text-primary)}.btn-sm{font-size:.875rem;padding:var(--space-xs) var(--space-sm)}input,textarea,select{font-family:var(--font-body);font-size:1rem;padding:var(--space-sm) var(--space-md);border:1px solid var(--dull-steel);border-radius:var(--radius-md);background:var(--color-bg-elevated);color:var(--color-text-primary);transition:border-color .2s ease,box-shadow .2s ease}input:focus,textarea:focus,select:focus{outline:none;border-color:var(--color-accent-primary);box-shadow:0 0 0 2px var(--color-accent-muted)}input::placeholder,textarea::placeholder{color:var(--color-text-secondary)}.container{width:100%;max-width:1200px;margin:0 auto;padding:0 var(--space-lg)}.text-center{text-align:center}.text-secondary{color:var(--color-text-secondary)}.mt-sm{margin-top:var(--space-sm)}.mt-md{margin-top:var(--space-md)}.mt-lg{margin-top:var(--space-lg)}.mt-xl{margin-top:var(--space-xl)}.mb-sm{margin-bottom:var(--space-sm)}.mb-md{margin-bottom:var(--space-md)}.mb-lg{margin-bottom:var(--space-lg)}.mb-xl{margin-bottom:var(--space-xl)}.loading-spinner{width:40px;height:40px;border:3px solid var(--color-bg-surface);border-top-color:var(--color-accent-primary);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.fade-in{animation:fadeIn .3s ease-out}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.card{background:var(--color-bg-surface);border:1px solid var(--ashen-char);border-radius:var(--radius-lg);padding:var(--space-lg);box-shadow:var(--shadow-sm);transition:box-shadow .2s ease,transform .2s ease}.card:hover{box-shadow:var(--shadow-md)}.card-elevated{background:var(--color-bg-elevated)}@media(max-width:768px){html{font-size:14px}h1{font-size:2rem}h2{font-size:1.5rem}.container{padding:0 var(--space-md)}}
