:root{--color-bg: #f1eee8;--color-bg-subtle: #fafafa;--color-surface: #ffffff;--color-surface-elevated: #fcfcfb;--color-text: #111827;--color-text-muted: #6b7280;--color-border: #e5e7eb;--color-border-strong: #d1d5db;--color-accent: #c69e60;--color-chat-user: #dbeafe;--color-chat-other: #dcfce7;--color-chat-assistant: #fcfcfb;--color-inverse: #ffffff;--color-noise-opacity: .15}html.dark{--color-bg: #1a1510;--color-bg-subtle: #221c16;--color-surface: #2a2118;--color-surface-elevated: #342a20;--color-text: #e8dcc8;--color-text-muted: #a89880;--color-border: #4a3c31;--color-border-strong: #5c4b3e;--color-accent: #c69e60;--color-chat-user: #243b55;--color-chat-other: #243a2a;--color-chat-assistant: #2f261c;--color-inverse: #1a1510;--color-noise-opacity: .25;color-scheme:dark}*{box-sizing:border-box}html,body,#app{height:100%;margin:0}body{overflow:auto;font-family:Libre Baskerville,Baskerville,Baskerville Old Face,Hoefler Text,Garamond,Times New Roman,serif;background-color:var(--color-bg);color:var(--color-text);background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='3' numOctaves='5' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)' opacity='0.15'/%3E%3C/svg%3E")}.home.app{display:grid;grid-template-rows:auto 1fr;height:100dvh}.home .header{position:sticky;top:0;z-index:10;display:flex;align-items:center;gap:12px;padding:8px 12px;border-bottom:1px solid var(--color-border);background:var(--color-surface)}.home .title{margin:0;font-size:14px;font-weight:600;color:var(--color-text)}.home .titleLink{text-decoration:none;color:inherit}.home .list{padding:12px;overflow-y:auto;min-height:0}.home .create{margin-left:auto;height:28px;padding:0 10px;border-radius:8px;border:1px solid var(--color-border-strong);background:var(--color-surface)}.home .campaigns{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}.home .row{padding:10px 12px;border:1px solid var(--color-border);border-radius:8px;background:var(--color-surface);display:grid;grid-template-columns:1fr auto;align-items:center}.home .link{text-decoration:none;color:var(--color-text)}.home .trash{height:28px;width:28px;display:inline-flex;align-items:center;justify-content:center;border-radius:6px;border:1px solid var(--color-border);background:var(--color-surface);cursor:pointer}.home .empty{color:var(--color-text-muted)}.home .overlay{position:fixed;inset:0;background:#0006;display:grid;place-items:center;padding:16px;z-index:50}.home .modal{width:100%;max-width:420px;background:var(--color-surface);border-radius:12px;border:1px solid var(--color-border);box-shadow:0 10px 30px #0000001f;padding:16px}.home .modalTitle{margin:0 0 12px;font-size:16px;font-weight:600;color:var(--color-text)}.home .modalInput{width:100%;max-width:100%;box-sizing:border-box;height:36px;padding:0 10px;border-radius:8px;border:1px solid var(--color-border-strong);outline:none;font:inherit}.home .modalActions{margin-top:12px;display:flex;gap:8px;justify-content:flex-end}.home .modalButton{height:32px;padding:0 12px;border-radius:8px;border:1px solid var(--color-border-strong);background:var(--color-surface);font:inherit}.home .modalButton.primary{color:var(--color-inverse);background:var(--color-text);border-color:var(--color-text)}.play.app{display:grid;grid-template-rows:auto 1fr auto;height:100dvh}.play .main{position:relative;height:100%;display:grid;grid-template-columns:1fr 320px;gap:var(--mainGap, 12px);padding:0;overflow:hidden}.play .resizer{position:absolute;top:0;bottom:0;right:var(--sidebarWidth);width:10px;cursor:col-resize;background:transparent}.play .resizer:after{content:"";position:absolute;top:0;bottom:0;right:4px;width:2px;background:var(--color-border)}.play .resizer.active:after{background:var(--color-text-muted)}.play .header{position:sticky;top:0;z-index:10;display:flex;align-items:center;gap:8px;padding:8px 12px;border-bottom:1px solid var(--color-border);background:var(--color-surface)}.collapseSidebar{margin-left:auto;height:28px;padding:0 10px;border-radius:8px;border:1px solid var(--color-border-strong);background:var(--color-surface);font:inherit}.play .title{margin:0;font-size:14px;font-weight:600;color:var(--color-text)}.play .titleLink{text-decoration:none;color:inherit}.play .chat{display:grid;grid-template-rows:1fr auto;overflow:hidden;min-height:0}.play .spinner{position:sticky;top:0;height:4px;background:linear-gradient(90deg,#93c5fd,#60a5fa,#2563eb);background-size:200% 100%;animation:shimmer 1.2s infinite linear;border-radius:0 0 2px 2px;z-index:5}@keyframes shimmer{0%{background-position:0% 0}to{background-position:-200% 0}}.play .messages{min-height:0;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:12px;scroll-behavior:smooth}.play .message{display:flex;align-items:flex-start;gap:10px;max-width:900px}.play .message.user{align-self:flex-end}.play .message.other-player{align-self:flex-start}.play .avatar{width:28px;height:28px}.play .content{background:var(--color-chat-assistant);padding:10px 12px;border-radius:10px;line-height:1.4;white-space:pre-wrap;box-shadow:0 2px 4px #0000001a}.play .message.user .content{background:var(--color-chat-user)}.play .message.other-player .content{background:var(--color-chat-other)}.play .contentHeader{display:flex;gap:8px;justify-content:flex-end}.play .diceToggle{border:1px solid var(--color-border-strong);border-radius:6px;background:var(--color-surface);color:#456ec5;cursor:pointer;padding:5px;font-size:20px}.dice{font-size:14px}.dice.d4{color:#b124b5}.dice.d6{color:#972424}.dice.d8{color:#5c9724}.dice.d10{color:#c5801a}.dice.d12{color:#1aa18e}.dice.d20{color:#456ec5}.diceIcons{margin:0 5px}.rollResult{font-weight:700;color:var(--color-text)}.play .rolls{background:var(--color-surface);border:1px solid var(--color-border);border-radius:8px;padding:8px 10px;margin-bottom:6px}.play .rollsList{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px;font-size:14px;color:var(--color-text-muted)}.rollAmount{margin-left:5px}.play .composer{position:sticky;bottom:0;display:grid;grid-template-columns:1fr auto;grid-template-rows:auto 1fr;gap:8px;padding:0 12px 12px;border-top:1px solid var(--color-border);background:var(--color-surface)}.play .composerHandle{grid-column:1 / -1;height:10px;cursor:row-resize;background:transparent;position:relative}.play .composerHandle:after{content:"";position:absolute;left:50%;top:3px;transform:translate(-50%);width:40px;height:4px;border-radius:2px;background:var(--color-border)}.play .composerHandle.disabled{cursor:not-allowed}.play .input{width:100%;padding:12px 14px;border:1px solid var(--color-border-strong);border-radius:10px;outline:none;font:inherit;resize:none;height:100%;min-height:44px}.play .input:focus{border-color:#60a5fa;box-shadow:0 0 0 3px #60a5fa40}.play .send{padding:0 14px;border-radius:10px;background:var(--color-text);color:var(--color-inverse);border:none;font:inherit}.play .send:disabled{opacity:.6}.rollReason{margin-left:5px}.sidebar{border-left:1px solid var(--color-border);background:var(--color-bg-subtle);overflow:visible}.filesHeader{position:sticky;top:0;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 12px;border-bottom:1px solid var(--color-border);background:inherit;z-index:1}.filesTitle{font-size:12px;font-weight:600;color:var(--color-text)}.addFile{height:24px;width:24px;border-radius:6px;border:1px solid var(--color-border-strong);background:var(--color-surface);cursor:pointer}.filesList{overflow-y:auto;min-height:0;padding:8px;display:flex;flex-direction:column;gap:8px}.filePanel{border:1px solid var(--color-border);border-radius:8px;background:var(--color-surface)}.fileHeader{width:100%;display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:8px;padding:8px 10px}.toggle{height:24px;width:24px;border:none;background:transparent;display:inline-flex;align-items:center;justify-content:center;cursor:pointer}.caret{display:inline-block;transition:transform .15s ease-in-out}.caret.open{transform:rotate(90deg)}.fileName{flex:1;min-width:0;border:none;outline:none;background:transparent;font-size:12px;font-weight:600;color:var(--color-text);font:inherit}.deleteFile{height:24px;width:24px;display:inline-flex;align-items:center;justify-content:center;border-radius:6px;border:1px solid var(--color-border);background:var(--color-surface);cursor:pointer}.fileBody{padding:8px 10px 10px}.fileContent{width:100%;max-width:100%;box-sizing:border-box;min-height:120px;padding:8px;border:1px solid var(--color-border-strong);border-radius:6px;resize:vertical;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:12px}.highlight-npc{font-weight:bolder;color:#97246b}.highlight-place{font-weight:bolder;color:#4a9724}.highlight-weapon,.highlight-item{font-weight:bolder;color:#246f97}.highlight-spell{font-weight:bolder;color:#972424}.highlight-character{font-weight:bolder;color:#c5801a}.highlight-skill{font-weight:bolder;color:#1aa18e}html.dark .highlight-npc{color:#e89bc8}html.dark .highlight-place{color:#8fd46a}html.dark .highlight-weapon,html.dark .highlight-item{color:#6db8e0}html.dark .highlight-spell{color:#e88a8a}html.dark .highlight-character{color:#e8b85a}html.dark .highlight-skill{color:#5fd4c4}.tabsHeader{padding:8px}.tabButton{padding:6px 10px;border:1px solid var(--color-border-strong);background:var(--color-bg-subtle);cursor:pointer}.tabButton.active{background:var(--color-border)}.tabBody{padding:8px;overflow-y:auto;min-height:0}.cq{container-type:inline-size;width:100%;margin:0 auto}.cq .row{display:flex;flex-wrap:wrap;margin-left:-.5rem;margin-right:-.5rem}.cq .row>[class*=col-]{padding-left:.5rem;padding-right:.5rem;flex:0 0 auto}.cq .row>.col{flex:1 0 0;width:auto}.cq .row>.col-auto{flex:0 0 auto;width:auto}.cq .row>[class*=col-]{width:100%}.cq .row>.col-xs-1{width:8.3333%}.cq .row>.col-xs-2{width:16.6667%}.cq .row>.col-xs-3{width:25%}.cq .row>.col-xs-4{width:33.3333%}.cq .row>.col-xs-5{width:41.6667%}.cq .row>.col-xs-6{width:50%}.cq .row>.col-xs-7{width:58.3333%}.cq .row>.col-xs-8{width:66.6667%}.cq .row>.col-xs-9{width:75%}.cq .row>.col-xs-10{width:83.3333%}.cq .row>.col-xs-11{width:91.6667%}.cq .row>.col-xs-12{width:100%}.cq .row>.offset-xs-1{margin-left:8.3333%}.cq .row>.offset-xs-2{margin-left:16.6667%}.cq .row>.offset-xs-3{margin-left:25%}.cq .row>.offset-xs-4{margin-left:33.3333%}.cq .row>.offset-xs-5{margin-left:41.6667%}.cq .row>.offset-xs-6{margin-left:50%}.cq .row>.offset-xs-7{margin-left:58.3333%}.cq .row>.offset-xs-8{margin-left:66.6667%}.cq .row>.offset-xs-9{margin-left:75%}.cq .row>.offset-xs-10{margin-left:83.3333%}.cq .row>.offset-xs-11{margin-left:91.6667%}@container (min-width: 576px){.cq .row>.col-sm-1{width:8.3333%}.cq .row>.col-sm-2{width:16.6667%}.cq .row>.col-sm-3{width:25%}.cq .row>.col-sm-4{width:33.3333%}.cq .row>.col-sm-5{width:41.6667%}.cq .row>.col-sm-6{width:50%}.cq .row>.col-sm-7{width:58.3333%}.cq .row>.col-sm-8{width:66.6667%}.cq .row>.col-sm-9{width:75%}.cq .row>.col-sm-10{width:83.3333%}.cq .row>.col-sm-11{width:91.6667%}.cq .row>.col-sm-12{width:100%}.cq .row>.offset-sm-1{margin-left:8.3333%}.cq .row>.offset-sm-2{margin-left:16.6667%}.cq .row>.offset-sm-3{margin-left:25%}.cq .row>.offset-sm-4{margin-left:33.3333%}.cq .row>.offset-sm-5{margin-left:41.6667%}.cq .row>.offset-sm-6{margin-left:50%}.cq .row>.offset-sm-7{margin-left:58.3333%}.cq .row>.offset-sm-8{margin-left:66.6667%}.cq .row>.offset-sm-9{margin-left:75%}.cq .row>.offset-sm-10{margin-left:83.3333%}.cq .row>.offset-sm-11{margin-left:91.6667%}}@container (min-width: 768px){.cq .row>.col-md-1{width:8.3333%}.cq .row>.col-md-2{width:16.6667%}.cq .row>.col-md-3{width:25%}.cq .row>.col-md-4{width:33.3333%}.cq .row>.col-md-5{width:41.6667%}.cq .row>.col-md-6{width:50%}.cq .row>.col-md-7{width:58.3333%}.cq .row>.col-md-8{width:66.6667%}.cq .row>.col-md-9{width:75%}.cq .row>.col-md-10{width:83.3333%}.cq .row>.col-md-11{width:91.6667%}.cq .row>.col-md-12{width:100%}.cq .row>.offset-md-1{margin-left:8.3333%}.cq .row>.offset-md-2{margin-left:16.6667%}.cq .row>.offset-md-3{margin-left:25%}.cq .row>.offset-md-4{margin-left:33.3333%}.cq .row>.offset-md-5{margin-left:41.6667%}.cq .row>.offset-md-6{margin-left:50%}.cq .row>.offset-md-7{margin-left:58.3333%}.cq .row>.offset-md-8{margin-left:66.6667%}.cq .row>.offset-md-9{margin-left:75%}.cq .row>.offset-md-10{margin-left:83.3333%}.cq .row>.offset-md-11{margin-left:91.6667%}}@container (min-width: 992px){.cq .row>.col-lg-1{width:8.3333%}.cq .row>.col-lg-2{width:16.6667%}.cq .row>.col-lg-3{width:25%}.cq .row>.col-lg-4{width:33.3333%}.cq .row>.col-lg-5{width:41.6667%}.cq .row>.col-lg-6{width:50%}.cq .row>.col-lg-7{width:58.3333%}.cq .row>.col-lg-8{width:66.6667%}.cq .row>.col-lg-9{width:75%}.cq .row>.col-lg-10{width:83.3333%}.cq .row>.col-lg-11{width:91.6667%}.cq .row>.col-lg-12{width:100%}.cq .row>.offset-lg-1{margin-left:8.3333%}.cq .row>.offset-lg-2{margin-left:16.6667%}.cq .row>.offset-lg-3{margin-left:25%}.cq .row>.offset-lg-4{margin-left:33.3333%}.cq .row>.offset-lg-5{margin-left:41.6667%}.cq .row>.offset-lg-6{margin-left:50%}.cq .row>.offset-lg-7{margin-left:58.3333%}.cq .row>.offset-lg-8{margin-left:66.6667%}.cq .row>.offset-lg-9{margin-left:75%}.cq .row>.offset-lg-10{margin-left:83.3333%}.cq .row>.offset-lg-11{margin-left:91.6667%}}@container (min-width: 1200px){.cq .row>.col-xl-1{width:8.3333%}.cq .row>.col-xl-2{width:16.6667%}.cq .row>.col-xl-3{width:25%}.cq .row>.col-xl-4{width:33.3333%}.cq .row>.col-xl-5{width:41.6667%}.cq .row>.col-xl-6{width:50%}.cq .row>.col-xl-7{width:58.3333%}.cq .row>.col-xl-8{width:66.6667%}.cq .row>.col-xl-9{width:75%}.cq .row>.col-xl-10{width:83.3333%}.cq .row>.col-xl-11{width:91.6667%}.cq .row>.col-xl-12{width:100%}.cq .row>.offset-xl-1{margin-left:8.3333%}.cq .row>.offset-xl-2{margin-left:16.6667%}.cq .row>.offset-xl-3{margin-left:25%}.cq .row>.offset-xl-4{margin-left:33.3333%}.cq .row>.offset-xl-5{margin-left:41.6667%}.cq .row>.offset-xl-6{margin-left:50%}.cq .row>.offset-xl-7{margin-left:58.3333%}.cq .row>.offset-xl-8{margin-left:66.6667%}.cq .row>.offset-xl-9{margin-left:75%}.cq .row>.offset-xl-10{margin-left:83.3333%}.cq .row>.offset-xl-11{margin-left:91.6667%}}.panel{margin-top:30px;margin-bottom:30px}.form-group label{font-weight:700}@keyframes pulse-purple{0%{box-shadow:0 0 0 1px #8e60c680}50%{box-shadow:0 0 0 4px #8e60c6cc}to{box-shadow:0 0 0 1px #8e60c680}}span.modified,input.modified,.progress.modified,.modified input,.modified textarea,.list-group-item.modified{outline:none;animation:pulse-purple 2s infinite ease-in-out}.tabButton.modified{outline:none;overflow:visible!important}.tabButton.modified:after{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;animation:pulse-purple 2s infinite ease-in-out}.bg-dark,.navbar-brand{background-color:#332514!important;color:#c69e60!important}.btn{font-family:Libre Baskerville,serif;border:1px solid #7c6a53;border-radius:4px;letter-spacing:.5px;box-shadow:0 2px 4px #00000026,inset 0 1px #fff3;transition:all .2s ease-in-out;position:relative;overflow:hidden;text-transform:none}.btn:hover{transform:translateY(-1px);box-shadow:0 4px 8px #0003,inset 0 1px #fff3!important;z-index:1}.btn:active{transform:translateY(0);box-shadow:inset 0 2px 4px #0000001a!important}.btn-primary,.btn-dark{background:linear-gradient(to bottom,#4a3c31,#332514)!important;color:#dfcdb8!important;border-color:#1a130a!important}.btn-primary:hover,.btn-dark:hover{background:linear-gradient(to bottom,#5c4b3e,#42301a)!important;color:#fff!important}.btn-secondary,.btn-warning{background:linear-gradient(to bottom,#e8dcb5,#c6b280)!important;color:#3e2b14!important;border-color:#8c7353!important}.btn-secondary:hover,.btn-warning:hover{background:linear-gradient(to bottom,#f2e9cc,#d4c08e)!important;color:#2a1c0d!important}.btn-cta{background:linear-gradient(to bottom,#a33838,#7a2222)!important;color:#faeacc!important;border-color:#521515!important;box-shadow:0 4px 15px #7a222266,inset 0 1px #fff3!important}.btn-cta:hover{background:linear-gradient(to bottom,#b54545,#8f2a2a)!important;box-shadow:0 6px 20px #7a222299,inset 0 1px #fff3!important}.form-check-input:checked{accent-color:#a33838;background-color:#a33838;border-color:#a33838}.btn-success{background:linear-gradient(to bottom,#4a7a4a,#2e522e)!important;color:#e6dace!important;border-color:#1d361d!important}.btn-success:hover{background:linear-gradient(to bottom,#5b8f5b,#3a623a)!important;color:#fff!important}.btn-danger{background:linear-gradient(to bottom,#a33838,#7a2222)!important;color:#e6dace!important;border-color:#521515!important}.btn-danger:hover{background:linear-gradient(to bottom,#b54545,#8f2a2a)!important;color:#fff!important}.btn-link{border:none;outline:none;box-shadow:none}.ornate-header,.play .header{border-bottom:none!important;box-shadow:0 4px 12px #0006!important;position:relative;margin-bottom:15px}.ornate-header:after,.play .header:after{content:"";display:block;position:absolute;left:0;bottom:-15px;width:100%;height:20px;background-image:url(/header_border.png);background-repeat:repeat-x;background-size:auto 20px;pointer-events:none;box-shadow:0 4px 4px #00000026}.shadow-text{text-shadow:-1px -1px 0 #000,1px -1px 0 #000,-1px 1px 0 #000,1px 1px 0 #000;font-size:.9rem}.dropdown-menu.show{z-index:100000}.ornate-header .navbar-nav .nav-link{font-family:Libre Baskerville,serif;font-size:1.3rem;color:#e7c2a1!important;-webkit-text-stroke:.5px #000;text-shadow:3px 3px 0 #000;letter-spacing:1px;transition:all .2s ease-in-out}.ornate-header .navbar-nav .nav-link:hover,.ornate-header .navbar-nav .nav-link.router-link-active{color:#fff!important;transform:scale(1.05);transform-origin:left;text-shadow:3px 3px 0 #000,0 0 15px rgba(232,220,181,.6)}h1{display:flex!important;align-items:center;justify-content:center;gap:15px;color:var(--color-text);text-shadow:0 4px 4px rgba(0,0,0,.1);font-weight:700}h1:before,h1:after{content:"";display:block;width:250px;height:26px;background-image:url(/arrow.png);background-size:contain;background-repeat:no-repeat;background-position:center}h1:after{transform:rotate(180deg)}.card{background:var(--color-surface);border-radius:12px;box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;border:1px solid rgba(0,0,0,.08)}html.dark .card,html.dark .modal-content,html.dark .dropdown-menu,html.dark .list-group-item,html.dark .offcanvas{background-color:var(--color-surface);color:var(--color-text);border-color:var(--color-border)}html.dark .dropdown-item{color:var(--color-text)}html.dark .dropdown-item:hover,html.dark .dropdown-item:focus{background-color:var(--color-surface-elevated);color:var(--color-text)}html.dark .form-control,html.dark .form-select,html.dark .form-control:focus,html.dark .form-select:focus,html.dark textarea.form-control{background-color:var(--color-surface-elevated);color:var(--color-text);border-color:var(--color-border-strong)}html.dark .form-control::placeholder{color:var(--color-text-muted)}html.dark .text-dark,html.dark .text-body{color:var(--color-text)!important}html.dark .text-muted{color:var(--color-text-muted)!important}html.dark .bg-white,html.dark .bg-light{background-color:var(--color-surface)!important}html.dark .border,html.dark .border-top,html.dark .border-bottom,html.dark .border-start,html.dark .border-end{border-color:var(--color-border)!important}html.dark .table{--bs-table-bg: var(--color-surface);--bs-table-color: var(--color-text);--bs-table-border-color: var(--color-border);color:var(--color-text)}html.dark .accordion-item,html.dark .accordion-button{background-color:var(--color-surface);color:var(--color-text)}html.dark .accordion-button:not(.collapsed){background-color:var(--color-surface-elevated);color:var(--color-text)}html.dark .nav-tabs .nav-link{color:var(--color-text-muted)}html.dark .nav-tabs .nav-link.active{background-color:var(--color-surface);color:var(--color-text);border-color:var(--color-border)}html.dark h1:before,html.dark h1:after{filter:brightness(1.3) sepia(.3)}html.dark .tabButton.active{background:var(--color-border-strong)}html.dark .play .input{background:var(--color-surface-elevated);color:var(--color-text)}html.dark .fileName{color:var(--color-text)}html.dark .fileContent{color:var(--color-text);background:var(--color-surface-elevated);border-color:var(--color-border-strong)}
