:root{--paper:#f2eee3;--ink:#171a16;--muted:#6f746b;--line:#c9c6ba;--red:#b63d2f;--gold:#d6a21f;--hero:#e5bf49;--monster:#c74b3e;--npc:#5a9b7b}
*{box-sizing:border-box}
body{margin:0;background:var(--paper);color:var(--ink);font-family:Arial,Helvetica,sans-serif}
button,input{font:inherit}
.site-header{min-height:72px;padding:13px clamp(18px,4vw,68px);border-bottom:1px solid var(--ink);display:flex;align-items:center;justify-content:space-between;gap:28px;background:rgba(242,238,227,.97);position:relative;z-index:10}
.brand{display:flex;align-items:center;gap:12px;text-decoration:none;font-size:15px;font-weight:800;letter-spacing:.08em;white-space:nowrap}.brand-mark{display:grid;place-items:center;width:40px;height:40px;background:var(--gold);border:1px solid var(--ink);font-size:11px}
nav{display:flex;align-items:center;justify-content:flex-end;gap:18px;flex-wrap:wrap}nav a{color:inherit;text-decoration:none;font-size:13px;font-weight:600;border-bottom:1px solid transparent;padding:7px 0}nav a:hover,nav a:focus-visible{border-color:var(--red)}.archive-link{background:var(--red);color:#fff;border:1px solid var(--ink)!important;padding:10px 13px}
main{width:min(1600px,100%);margin:auto;padding:clamp(34px,5vw,72px) clamp(18px,4vw,64px) 60px}.page-heading{display:grid;grid-template-columns:1fr 1fr;align-items:end;gap:30px;margin-bottom:44px}.eyebrow,.play-kicker{font-size:11px;letter-spacing:.2em;color:var(--red);font-weight:800}.page-heading .eyebrow{grid-column:1/-1;margin:0}.page-heading h1{margin:0;font:400 clamp(52px,7vw,104px)/.87 Georgia,serif;letter-spacing:-.055em}.page-heading h1 em{color:#176a90;font-weight:400}.page-heading>p:last-child{max-width:550px;margin:0 0 8px;font:clamp(18px,2vw,26px)/1.5 Georgia,serif;color:#555a53}
.campaign-home{max-width:1200px;margin:auto}.campaign-heading{padding-bottom:28px;border-bottom:1px solid var(--ink)}.new-campaign{display:grid;grid-template-columns:220px 1fr;gap:25px;padding:30px 0;border-bottom:1px solid var(--line)}.new-campaign>label{font:600 18px Georgia,serif}.new-campaign label span{display:block;margin-top:6px;color:var(--muted);font:10px Arial,sans-serif;text-transform:uppercase;letter-spacing:.12em}.new-campaign>div{display:flex}.new-campaign input{min-width:0;flex:1;border:1px solid var(--ink);background:#fff;padding:14px;font-size:16px}.new-campaign button{border:1px solid var(--ink);background:var(--red);color:#fff;padding:14px 20px;font-weight:700;cursor:pointer}.saved-campaigns{padding-top:34px}.saved-heading{display:flex;align-items:center;justify-content:space-between}.saved-heading h2{font:400 31px Georgia,serif}.saved-heading span{color:var(--muted);font:11px monospace}.campaign-list{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:13px}.campaign-card{border:1px solid var(--line);background:#fff;padding:20px;display:grid;gap:20px}.campaign-card h3{margin:0;font:400 22px/1.2 Georgia,serif}.campaign-card p{margin:7px 0 0;color:var(--muted);font-size:11px}.campaign-actions{display:flex;gap:7px}.campaign-actions button{border:1px solid var(--ink);background:transparent;padding:9px 12px;cursor:pointer}.campaign-actions .continue-campaign{background:var(--ink);color:#fff;flex:1}.campaign-actions .delete-campaign{color:var(--red);border-color:#c9a9a4}.no-campaigns{grid-column:1/-1;border:1px dashed var(--line);padding:40px;text-align:center;color:var(--muted);font:18px Georgia,serif}.campaign-back{width:100%;border:0;background:transparent;color:var(--muted);padding:12px;cursor:pointer;text-decoration:underline}
.setup-grid{display:grid;grid-template-columns:330px minmax(0,1fr);gap:24px;align-items:start}.toolbox{border-top:2px solid var(--ink)}.tool-section{padding:21px 0;border-bottom:1px solid var(--line);position:relative}.tool-section h2{margin:0 0 13px;font:600 18px Georgia,serif}.step{float:right;color:var(--red);font:12px monospace}.hint{font-size:12px;line-height:1.55;color:var(--muted);margin:11px 0 0}.upload-button,.token-upload{display:flex;justify-content:space-between;align-items:center;min-height:43px;border:1px solid var(--ink);padding:10px 12px;font-size:12px;font-weight:700;cursor:pointer;margin:7px 0}.upload-button:after,.token-upload:after{content:'＋';font-size:18px}.upload-button input,.token-upload input{position:absolute;opacity:0;pointer-events:none}.hero-upload{border-left:5px solid var(--hero)}.monster-upload{border-left:5px solid var(--monster)}.monster-xl-upload{border-left:9px solid #77281f}.npc-upload{border-left:5px solid var(--npc)}
.token-library{display:grid;gap:6px;margin-top:13px;max-height:220px;overflow:auto}.empty-library{font-size:12px;color:var(--muted)!important;margin:5px 0!important}.token-entry{display:grid;grid-template-columns:38px minmax(0,1fr) auto;align-items:center;gap:9px;border:1px solid var(--line);background:#fff;padding:5px;text-align:left;cursor:pointer}.token-entry.active{outline:2px solid var(--ink)}.token-entry.placed{opacity:.65}.token-entry img{width:38px;height:38px;object-fit:cover;border-radius:50%;background:#ddd}.token-entry span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:11px}.token-entry small{text-transform:uppercase;font-size:8px;letter-spacing:.1em;color:var(--muted)}
.vision-control{display:flex;align-items:center;gap:14px}.vision-control input{width:100%;accent-color:var(--ink)}.range-label{display:flex;justify-content:space-between;align-items:center;margin:0 0 4px;color:var(--muted);font-size:11px}.range-label output{font:12px monospace;color:var(--ink)}.vision-heading{margin-top:20px!important}.ready-button{width:100%;margin-top:22px;padding:16px;border:1px solid var(--ink);background:var(--red);color:#fff;font-weight:800;display:flex;justify-content:space-between;cursor:pointer}.ready-button:disabled{background:#bbb8af;color:#eee;border-color:#aaa;cursor:not-allowed}.ready-message{font-size:11px;color:var(--muted);text-align:center}
.map-panel{min-width:0}.map-toolbar{min-height:45px;border:1px solid var(--ink);border-bottom:0;padding:7px 14px;display:flex;align-items:center;justify-content:space-between;gap:14px;background:#fff;font-size:12px}.map-toolbar>div{display:flex;align-items:center;justify-content:flex-end;gap:12px}.map-toolbar span{color:var(--muted)}.map-toolbar button{border:1px solid var(--ink);background:transparent;padding:6px 9px;font-size:10px;text-transform:uppercase;letter-spacing:.08em;cursor:pointer}.map-toolbar button:hover{background:var(--ink);color:#fff}.canvas-wrap{position:relative;background:#181a17;border:1px solid var(--ink);min-height:420px;max-height:74vh;display:block;overflow:auto}.canvas-wrap canvas{display:block;width:auto;height:auto;max-width:none;max-height:none;touch-action:none;cursor:grab}.canvas-wrap canvas:active{cursor:grabbing}.canvas-placeholder{position:absolute;inset:0;color:#aaa;display:grid;place-content:center;text-align:center;gap:12px;pointer-events:none}.canvas-placeholder span{font-size:48px;font-weight:200}.canvas-placeholder strong{font:400 18px Georgia,serif}
.play-view{min-height:calc(100vh - 150px)}.play-toolbar{display:flex;justify-content:space-between;align-items:center;gap:25px;margin-bottom:14px}.play-toolbar>div:first-child{display:grid;gap:5px}.play-toolbar strong{font:400 24px Georgia,serif}.play-actions{display:flex;gap:7px;flex-wrap:wrap}.play-actions button{border:1px solid var(--ink);background:transparent;padding:9px 13px;cursor:pointer}.play-actions button:hover{background:var(--ink);color:#fff}.play-canvas-wrap{background:#000;border:1px solid #000;display:block;overflow:auto;max-height:calc(100vh - 180px)}.play-canvas-wrap canvas{display:block;max-width:none;max-height:none;width:auto;height:auto;touch-action:none;cursor:grab}.play-canvas-wrap canvas:active{cursor:grabbing}.legend{display:flex;gap:22px;justify-content:center;padding:14px;font-size:11px;color:var(--muted)}.legend span:before{content:'';display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:7px}.hero-dot:before{background:var(--hero)}.monster-dot:before{background:var(--monster)}.monster-xl-dot:before{background:#77281f;width:12px!important;height:12px!important}.npc-dot:before{background:var(--npc)}
.play-vision{display:flex;align-items:center;gap:7px;border:1px solid #777;padding:5px 9px;font-size:11px}.play-vision input{width:90px;accent-color:#e3bd4b}.play-vision output{min-width:28px;font:10px monospace}.share-dialog{width:min(610px,calc(100% - 28px));background:var(--paper);color:var(--ink);border:1px solid var(--ink);padding:36px}.share-dialog::backdrop{background:rgba(0,0,0,.75)}.share-dialog h2{margin:0 0 12px;font:400 42px Georgia,serif}.share-dialog p{color:var(--muted);line-height:1.5}.share-row{display:flex;gap:8px}.share-row input{min-width:0;flex:1;border:1px solid var(--ink);background:#fff;padding:11px}.share-row button,.share-close{border:1px solid var(--ink);background:var(--ink);color:#fff;padding:10px 16px;cursor:pointer}.share-close{position:absolute;right:12px;top:12px;width:38px;height:38px;padding:0;font-size:23px}.share-dialog #copyStatus{min-height:20px;margin-bottom:0;font-size:12px}
.fog-brush{display:flex;align-items:center;gap:5px;border:1px solid #777;padding:4px 6px;font-size:10px}.fog-brush>span{text-transform:uppercase;letter-spacing:.08em;color:#aaa}.fog-brush button{padding:5px 8px!important;border-color:#777!important}.fog-brush button.active{background:#e3bd4b!important;color:#111!important}.fog-brush input{width:75px;accent-color:#e3bd4b}.fog-brush output{min-width:25px;font:10px monospace}.play-canvas-wrap.brush-active canvas{cursor:crosshair}
body.playing{background:#0b0c0a;color:#eee}body.playing .site-header{display:none}body.playing main{width:100%;padding:12px}body.playing .play-kicker{color:#e3bd4b}body.playing .play-actions button{color:#eee;border-color:#777}body.playing .legend{color:#aaa}
@media(max-width:950px){.site-header{display:block}.site-header nav{justify-content:flex-start;margin-top:12px;gap:8px 15px}.page-heading{grid-template-columns:1fr}.setup-grid{grid-template-columns:1fr}.toolbox{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}.tool-section{border-bottom:0}.ready-button,.ready-message{grid-column:1/-1}.canvas-wrap{min-height:340px}}
@media(max-width:620px){main{padding:28px 12px}.page-heading{margin-bottom:30px}.toolbox{display:block}.tool-section{border-bottom:1px solid var(--line)}.play-toolbar{align-items:flex-start;flex-direction:column}.play-actions{width:100%}.play-actions button{flex:1}.legend{gap:10px;flex-wrap:wrap}.canvas-wrap{min-height:260px}.map-toolbar{align-items:flex-start}.map-toolbar>div{align-items:flex-end;flex-direction:column;gap:5px}.new-campaign{grid-template-columns:1fr}.new-campaign>div{display:grid}.campaign-list{grid-template-columns:1fr}}
