:root{color-scheme:light;;;;;;;;;;font-family:system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:16px;color:var(--ink);background:var(--paper)}*{box-sizing:border-box}body{margin:0}button,input,select,textarea{font:inherit}button{cursor:pointer}button:disabled{cursor:wait;opacity:.6}button,input,select,textarea{min-height:44px;border-radius:6px}button{border:1px solid var(--line);background:var(--card);color:var(--ink);padding:.65rem 1rem;font-weight:600}@media (hover:hover) and (pointer:fine){button:hover{background:var(--soft)}}button.primary{background:var(--green);border-color:var(--green);color:var(--on-primary)}@media (hover:hover) and (pointer:fine){button.primary:hover{background:var(--primary-hover)}}button.quiet{background:transparent}button.danger{color:var(--danger)}button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,a:focus-visible{outline:3px solid var(--line);outline-offset:3px}input,select,textarea{max-width:100%;width:100%;padding:.7rem;border:1px solid var(--line);background:var(--card);color:var(--ink)}textarea{min-height:110px;resize:vertical;line-height:1.5}label{display:block;font-size:.875rem;font-weight:600;margin-bottom:.35rem}label input,label textarea,label select{margin-top:.4rem}h1,h2,h3,p{margin-top:0}h1,h2{font-family:Georgia,'Times New Roman',serif;font-weight:400}h1{font-size:2.6rem;line-height:1.1;margin-bottom:.65rem}h2{font-size:1.7rem;margin-bottom:.8rem}h3{font-size:1rem}p{line-height:1.6}small,.small{font-size:.875rem}.muted{color:var(--muted)}.eyebrow{font-size:.75rem;letter-spacing:.15em;text-transform:uppercase;font-weight:650}.shell{display:grid;grid-template-columns:235px minmax(0,1fr);min-height:100dvh}.sidebar{background:var(--primary);color:var(--ink);padding:2rem 1.35rem;display:flex;flex-direction:column;gap:2rem;position:sticky;top:0;height:100dvh}.brand{font:2rem Georgia,serif;letter-spacing:-.03em;display:flex;align-items:center;gap:.6rem}.brand img{width:30px;height:30px}.sidebar .muted{color:var(--muted)}.sidebar select{background:var(--primary);color:var(--ink);border-color:var(--line)}.sidebar label{color:var(--ink)}.nav{display:grid;gap:.45rem}.nav button{text-align:left;border:0;background:transparent;color:var(--ink);padding:.8rem .9rem;display:flex;gap:.8rem;align-items:center}.nav button.active{background:var(--selected-fill);color:var(--on-primary)}@media (hover:hover) and (pointer:fine){.nav button:hover{background:var(--hover-fill)}}.nav svg{width:19px;height:19px;flex-shrink:0}.sidebar-footer{margin-top:auto;border-top:1px solid var(--line);padding-top:1.3rem;line-height:1.6}.sidebar-footer p{margin:0}.workspace{max-width:1500px;width:100%;padding:2rem 3rem 3rem;margin:auto}.topbar{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding-bottom:1.5rem;border-bottom:1px solid var(--line);margin-bottom:2rem}.topbar p{margin:0}.pill{display:inline-flex;align-items:center;gap:.4rem;font-size:.8rem;border:1px solid var(--line);border-radius:99px;padding:.3rem .65rem;white-space:nowrap}.title-row{display:flex;justify-content:space-between;align-items:center;gap:1rem;margin-bottom:1.5rem}.title-row p{margin:0}.play-grid{display:grid;grid-template-columns:minmax(0,1fr) 290px;gap:1.5rem}.stack{display:grid;gap:1.3rem;align-content:start}.card{background:var(--card);border:1px solid var(--line);border-radius:9px;padding:1.5rem;min-width:0}.character-head{display:flex;justify-content:space-between;align-items:center;gap:1rem}.avatar{width:52px;height:52px;border-radius:50%;display:grid;place-items:center;background:var(--soft);color:var(--green);font:1.6rem Georgia,serif;flex-shrink:0}.identity{display:flex;gap:1rem;align-items:center}.identity h2{margin:0 0 .3rem}.identity p{margin:0}.resources{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:1rem;margin:1.5rem 0}.resource{border:1px solid var(--line);border-radius:7px;padding:1.15rem}.resource-label{font-size:.875rem;font-weight:600;color:var(--muted);display:flex;justify-content:space-between;align-items:center}.big-number{font-size:2.3rem;font-variant-numeric:tabular-nums;font-weight:500;line-height:1.6}.big-number span{font-size:1rem;color:var(--muted);font-weight:400}progress{appearance:none;width:100%;height:5px;border:0;border-radius:8px;background:var(--soft)}progress::-webkit-progress-bar{background:var(--soft);border-radius:8px}progress::-webkit-progress-value{background:var(--primary);border-radius:8px}progress::-moz-progress-bar{background:var(--primary)}.stats-row{display:grid;grid-template-columns:1fr 1fr;gap:1rem;border-top:1px solid var(--line);padding-top:1.2rem}.stat-value{font-size:1.5rem;display:block;margin-top:.35rem;font-variant-numeric:tabular-nums}.stat-value small{font-size:.875rem;color:var(--muted)}.calendar{background:var(--panel);border-color:var(--line);position:relative}.day-number{font:5rem Georgia,serif;line-height:1.1;margin:.4rem 0 1.2rem;letter-spacing:-.05em}.calendar button{width:100%}.calendar .quiet{margin-top:.5rem}.notice{padding:.8rem 1rem;border-left:3px solid var(--notice-border);background:var(--notice-fill);color:var(--notice-ink);border-radius:0 5px 5px 0;font-size:.875rem;line-height:1.6}.notice p:last-child{margin:0}.actions{display:flex;gap:.65rem;flex-wrap:wrap;align-items:center}.section-head{display:flex;justify-content:space-between;align-items:center;gap:1rem;margin-bottom:1rem}.section-head h2,.section-head h3{margin:0}.text-link{padding:.25rem 0;min-height:44px;border:0;background:transparent;color:var(--green)}.row{display:flex;justify-content:space-between;gap:1rem;align-items:center;padding:.85rem 0;border-bottom:1px solid var(--line)}.row:last-child{border:0}.row p{margin:0}.quantity{font-variant-numeric:tabular-nums;font-weight:600;white-space:nowrap}.empty{padding:1.7rem 0;color:var(--muted);line-height:1.6}.welcome{max-width:850px;margin:3rem auto}.welcome h1{font-size:3.6rem}.welcome-grid{display:grid;grid-template-columns:1.4fr 1fr;gap:1.5rem;margin-top:2rem}.welcome .card{padding:2rem}.welcome .sample{background:var(--soft)}.intro-rule{width:45px;height:3px;background:var(--accent);margin:1.5rem 0}.full{width:100%}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:1rem}.form-grid .span{grid-column:1/-1}.form-section{border-top:1px solid var(--line);padding-top:1.2rem;margin-top:1.2rem}.form-section h3{margin-bottom:1rem}.field{margin-bottom:1rem}.check{display:flex;align-items:center;gap:.6rem}.check input{width:20px;min-height:20px}.inline-fields{display:grid;grid-template-columns:2fr 1fr 1fr;gap:.65rem}.mono{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:.875rem;overflow-wrap:anywhere}.code{min-height:270px}.ref-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(110px,1fr));gap:.7rem}.attribute{background:var(--soft);border-radius:6px;padding:1rem}.attribute strong{display:block;font-size:1.45rem;margin:.3rem 0}.ref-text{white-space:pre-wrap;overflow-wrap:anywhere}.journal-entry{border-bottom:1px solid var(--line);padding:1.1rem 0}.journal-entry p{margin:.25rem 0}.journal-diff{max-height:180px;overflow:auto;background:var(--paper);padding:.8rem;white-space:pre-wrap}.two-col{display:grid;grid-template-columns:1fr 1fr;gap:1.5rem}.badges{display:flex;gap:.5rem;flex-wrap:wrap}.footer-note{margin-top:1.5rem;font-size:.8rem;color:var(--muted)}dialog{border:1px solid var(--line);border-radius:12px;box-shadow:0 20px 90px var(--shadow);width:min(680px,calc(100vw - 28px));max-height:90dvh;overflow:auto;padding:1.8rem;background:var(--card);color:var(--ink)}dialog::backdrop{background:var(--overlay);backdrop-filter:blur(3px)}.dialog-header{display:flex;justify-content:space-between;align-items:flex-start;gap:1rem}.dialog-header h2{margin-right:1rem}.dialog-header button{border:0;background:transparent;padding:.3rem .7rem}.dialog-footer{display:flex;gap:.7rem;justify-content:flex-end;flex-wrap:wrap;margin-top:1.5rem;padding-top:1rem;border-top:1px solid var(--line)}.error{color:var(--danger);white-space:pre-wrap;line-height:1.5;margin:.7rem 0}.diff-list{max-height:330px;overflow:auto}.diff-item{padding:.8rem 0;border-bottom:1px solid var(--line)}.diff-item pre{font: .8rem ui-monospace,monospace;white-space:pre-wrap;overflow-wrap:anywhere;margin:.4rem 0}.diff-item .after{color:var(--green)}#toast{position:fixed;bottom:1.5rem;left:50%;transform:translateX(-50%);background:var(--ink);color:var(--on-primary);max-width:90vw;padding:.8rem 1.2rem;border-radius:8px;box-shadow:0 6px 24px var(--shadow);z-index:10;display:none}.loading{margin:10vh auto;max-width:500px;padding:2rem}.file-input{padding:1rem;border:1px dashed var(--line);margin:1rem 0}.subtle{background:var(--paper)}.backup-strip{margin-bottom:1.3rem;display:flex;align-items:center;justify-content:space-between;gap:1rem}.back{margin-bottom:1rem}.clip{overflow-wrap:anywhere;min-width:0}@media(min-width:1500px){.workspace{padding:2rem 4rem}.play-grid{grid-template-columns:minmax(0,1fr) 320px}}@media(max-width:1150px){.workspace{padding:1.5rem}.shell{grid-template-columns:200px 1fr}.play-grid{grid-template-columns:minmax(0,1fr)}.right-column{grid-template-columns:1fr 1fr}.day-number{font-size:3.5rem}.sidebar{padding:1.5rem 1rem}}@media(max-width:720px){.shell{display:block}.sidebar{position:static;height:auto;padding:1rem;gap:1rem}.brand{font-size:1.6rem}.sidebar-top{display:flex;align-items:center;justify-content:space-between;gap:1rem}.sidebar-top .brand{flex-shrink:0}.campaign-control{max-width:60%;width:230px}.campaign-control label{display:none}.nav{display:flex;overflow-x:auto;gap:.3rem}.nav button{padding:.65rem .75rem;font-size:.875rem;flex-shrink:0}.nav svg{display:none}.sidebar-footer{display:none}.workspace{padding:1.25rem 1rem 2.5rem}.topbar{margin-bottom:1.5rem;padding-bottom:1rem}.topbar .eyebrow{display:none}.title-row{align-items:flex-start}h1{font-size:2.1rem}.play-grid,.right-column,.two-col,.welcome-grid{grid-template-columns:1fr}.card{padding:1.15rem}.welcome{margin:1rem auto}.welcome h1{font-size:2.8rem}.welcome .card{padding:1.4rem}.form-grid{grid-template-columns:1fr}.form-grid .span{grid-column:auto}.resources{grid-template-columns:1fr 1fr;gap:.7rem}.resource{padding:.85rem}.big-number{font-size:2rem}.character-head{align-items:flex-start}.identity{gap:.7rem}.identity h2{font-size:1.5rem}.avatar{width:42px;height:42px}.character-head button{font-size:.875rem;padding:.5rem}.title-row select{width:145px}.calendar{display:grid;grid-template-columns:1fr 1fr;column-gap:1rem}.calendar .eyebrow{grid-column:1/-1}.calendar .day-number{grid-row:2/4;margin:0;font-size:4rem}.calendar .quiet{margin:0}.calendar p{grid-column:1/-1;margin-top:1rem;margin-bottom:0}.backup-strip{align-items:flex-start}.inline-fields{grid-template-columns:1fr 1fr}.inline-fields label:first-child{grid-column:1/-1}.topbar .pill{font-size:.75rem}dialog{padding:1.2rem}.actions button{flex-grow:1}.stats-row{gap:.5rem}.row{align-items:flex-start}.day-number{letter-spacing:-.03em}}@media(prefers-reduced-motion:no-preference){button{transition:background .15s}dialog[open]{animation:appear .15s ease-out}@keyframes appear{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}}

.campaign-control{margin-top:1.5rem}.calendar p{margin-top:1rem;margin-bottom:0}
@media(max-width:720px){.campaign-control{margin-top:0}.play-grid{display:flex;flex-direction:column}.play-grid>.stack{display:contents}.play-grid>.right-column>.calendar{order:-2}.play-grid>.stack:not(.right-column)>.card:first-child,.play-grid>.right-column>.card:nth-child(2){order:-1}.calendar{padding:1rem;grid-template-columns:1fr 1fr}.calendar .day-number{font-size:3.4rem}.calendar p{display:none}.calendar .eyebrow{margin-bottom:.5rem}.workspace{padding-top:1rem}.topbar{margin-bottom:1rem}.title-row{margin-bottom:1rem}.title-row .eyebrow{font-size:.7rem;letter-spacing:.08em}.backup-strip{padding:.65rem .8rem;font-size:.8rem}.backup-strip button{white-space:nowrap;font-size:.8rem;padding:.5rem .65rem}.character-head .avatar{display:none}}

@media(max-width:720px){.calendar p.eyebrow{display:block;grid-column:1/-1;margin:0 0 .6rem}.calendar .day-number{grid-column:1;grid-row:2/4}.calendar button{grid-column:2}}

/* Sage, shallow ocean and cream — M2 palette. */
:root{;;;;;;;}
.sidebar{background:var(--panel);color:var(--ink)}.sidebar .muted,.sidebar label{color:var(--muted)}.sidebar select{background:var(--panel);color:var(--ink);border-color:var(--line)}.nav button{color:var(--ink)}.nav button.active{background:var(--selected-fill);color:var(--ink)}@media (hover:hover) and (pointer:fine){.nav button:hover{background:var(--hover-fill)}}.sidebar-footer{border-color:var(--line)}.calendar{background:var(--panel);border-color:var(--line)}.calendar .primary{background:var(--primary);border-color:var(--line)}.calendar .quiet{background:var(--panel)}.coastal{background:var(--panel);border-color:var(--line)}.notice{background:var(--notice-fill);border-left-color:var(--notice-border);color:var(--notice-ink)}.clipboard-offer{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-bottom:1rem}.file-input input{margin-top:.6rem}.coastal li{margin:.7rem 0;line-height:1.5}@media(max-width:720px){.clipboard-offer{display:block}.clipboard-offer .actions{margin-top:.7rem}.two-col{grid-template-columns:1fr}}

.reference-reminder{margin-bottom:1.3rem}.reference-reminder button{margin:.4rem 0 .4rem .5rem}
/* Weight through typography and proportion; same sage, shore blue and cream. */
:root{--display:'Palatino Linotype',Palatino,'Iowan Old Style','Book Antiqua',Georgia,serif}
h1,h2,.big-number,.day-number,.stat-value,.attribute strong{font-family:var(--display);font-weight:600;letter-spacing:.035em}
h1{font-size:clamp(2.2rem,5vw,3.5rem)}h2{letter-spacing:.025em}.big-number{font-size:clamp(2.8rem,5vw,4rem);line-height:1.15;padding:.65rem 0}.big-number span{font-size:1.25rem;letter-spacing:.02em}.day-number{font-size:5rem;line-height:1.1;letter-spacing:.08em}.resource{border-top:3px solid var(--line);background:linear-gradient(180deg,var(--soft),var(--card));padding:1.15rem}.resources progress,progress{height:12px;width:100%;border:1px solid var(--line);border-radius:2px;overflow:hidden;background:var(--soft);appearance:none}progress::-webkit-progress-bar{background:var(--soft)}progress::-webkit-progress-value{background:var(--primary);transition:width .28s ease}progress::-moz-progress-bar{background:var(--primary)}.resource:nth-child(2){border-top-color:var(--line)}.resource:nth-child(2) progress::-webkit-progress-value{background:var(--primary)}.over-max{font-size:.85rem;font-weight:650;margin:.4rem 0;color:var(--notice-ink)}.day-token{font:600 .95rem ui-monospace,monospace;letter-spacing:.025em;grid-column:1/-1;padding:.8rem 0;overflow-wrap:anywhere}.card{box-shadow:none;border-radius:4px}.character-primary{margin-top:1.5rem}.ability-slot{border-top:1px solid var(--line);padding:1.3rem 0 .3rem}.ability{border-bottom:1px solid var(--line);padding:1rem 0}.ability summary{cursor:pointer;list-style:none;display:grid;gap:.55rem;min-height:44px}.ability summary::before{content:'＋';float:right;color:var(--muted)}.ability[open] summary::before{content:'−'}.ability-name{font-family:var(--display);font-weight:650;font-size:1.5rem;letter-spacing:.035em}.ability-cost{font-size:.85rem;color:var(--muted)}.ability-effect{display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden;line-height:1.6}.ability dl{display:grid;grid-template-columns:90px 1fr;gap:.75rem;line-height:1.6}.ability dt{font-weight:650}.ability dd{margin:0;white-space:pre-wrap}.status{display:inline-block;width:fit-content;border:1px solid var(--line);border-radius:3px;padding:.25rem .5rem;font:600 .75rem system-ui,sans-serif;letter-spacing:.05em}.status.locked{background:var(--locked-fill);color:var(--locked-ink)}.status.trained_unquantified{background:var(--pending-fill);color:var(--ink);border-style:dashed}.status.in_development{background:var(--notice-fill);color:var(--ink)}.threshold{padding:1rem 0;border-bottom:1px solid var(--line)}.threshold summary{font-weight:650;cursor:pointer;min-height:44px;line-height:1.6}.inline-progress{font-size:.85rem;color:var(--muted);font-weight:500}.character-primary .attribute strong{font-size:2.5rem}.attribute{border-top:2px solid var(--line)}.diff-item pre{font:500 1rem system-ui,sans-serif;line-height:1.6}.diff-list{max-height:55vh}.calendar button{margin-top:.4rem}.calendar .day-token{display:block}.remainder{grid-column:1/-1}.ceremonial-beat{animation:status-beat .35s ease-out}@keyframes status-beat{from{opacity:.4;transform:translateY(5px)}to{opacity:1;transform:translateY(0)}}@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important}}@media(max-width:720px){.big-number{font-size:2.8rem}.day-number,.calendar .day-number{font-size:4.3rem}.resource{padding:.8rem}.calendar .day-token{grid-column:1/-1}.ability dl{grid-template-columns:1fr}.ability dt{margin-top:.5rem}.title-row{flex-wrap:wrap}.character-primary .ref-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.attribute strong{overflow-wrap:anywhere}}
.character-management{margin:.75rem 0 1rem}.character-management summary{cursor:pointer;min-height:44px;padding:.65rem 0;font-size:.9rem;color:var(--muted)}.character-management .actions{margin-bottom:1rem}.ability summary{position:relative;padding-right:1.4rem}.ability summary::before{position:absolute;right:0;top:0}.ability-cost{display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}.row .mono{overflow-wrap:anywhere;min-width:0}.day-token{font-size:.85rem}.journal-diff{white-space:pre-wrap;overflow-wrap:anywhere;max-width:100%}
/* Scroll 0.3.2: ornament occupies empty edges; all text sits on flat color. */
:root{;;}
.card{position:relative;border-color:var(--line);border-top:4px solid var(--paper-edge);background:var(--card)}
.card::after{content:'';position:absolute;inset:0 0 auto;height:5px;pointer-events:none;background:linear-gradient(90deg,var(--shadow),transparent 20%,transparent 80%,var(--shadow))}
.sidebar{border-right:4px solid var(--line)}.topbar{border-bottom:3px double var(--line)}
.resource,.attribute,.stats-row,.row,.quantity,.big-number,.stat-value{background:var(--card)}
.resource{border-top-color:var(--sage-fill)}
.resource:nth-child(2){border-top-color:var(--shore-fill)}
progress::-webkit-progress-value{background:var(--sage-fill)}
progress::-moz-progress-bar{background:var(--sage-fill)}
.resource:nth-child(2) progress::-webkit-progress-value{background:var(--shore-fill)}
.resource:nth-child(2) progress::-moz-progress-bar{background:var(--shore-fill)}
.calendar{background:var(--panel);border-color:var(--line);border-top-color:var(--line)}
.calendar .day-number,.calendar .day-token{background:var(--panel)}
.status{font-size:.8125rem;line-height:1.5;border-width:2px;padding:.3rem .65rem}
.status.locked{background:var(--locked-fill);color:var(--locked-ink);border-color:var(--line);border-style:solid}
.status.trained_unquantified{background:var(--pending-fill);color:var(--ink);border-color:var(--line);border-style:dashed}
.status.in_development{background:var(--notice-fill);color:var(--ink);border-color:var(--line);border-style:double;border-width:3px}
.ability{background:var(--card)}.ability dd,.ability-effect,.ability-cost{overflow-wrap:anywhere}
.ability-name{line-height:1.25}.ability summary{gap:.65rem}
.play-grid + .card{margin-top:1.3rem}
@media(prefers-reduced-motion:no-preference){details[open]>:not(summary){animation:unfurl .2s ease-out;transform-origin:top}@keyframes unfurl{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}}
@media(max-width:720px){.resource,.attribute{min-width:0}.big-number{font-size:clamp(2rem,8vw,2.8rem);overflow-wrap:anywhere}.big-number span{font-size:1rem}.card{padding-top:1.3rem}.calendar .day-number{grid-row:auto;grid-column:1/-1}.calendar button{grid-column:1/-1}.calendar .day-token{padding:.6rem 0}.ability-name{font-size:1.35rem}.status{max-width:100%;white-space:normal}.stat-value{overflow-wrap:anywhere}}
/* Owned roster and the separate snapshot reader. Every data surface stays flat. */
.roster-member,.snapshot-workspace>.card,#snapshot-content>.card{margin:1.3rem 0}
.roster-member .resource{margin:1rem 0}.roster-member .ref-grid{grid-template-columns:repeat(3,minmax(0,1fr))}
.roster-facts{display:grid;grid-template-columns:minmax(100px,1fr) 2fr;gap:.65rem;margin:1rem 0;line-height:1.6}
.roster-facts dt{font-weight:650}.roster-facts dd{margin:0;overflow-wrap:anywhere}
.snapshot-workspace{max-width:950px}.snapshot-workspace h1{overflow-wrap:anywhere}.button-link{display:inline-block;padding:.75rem 1rem;min-height:44px;border:1px solid var(--line);border-radius:6px;background:var(--card);color:var(--green);font-weight:600;text-decoration:none}
@media(max-width:720px){.roster-facts{grid-template-columns:1fr}.roster-facts dd{margin-bottom:.5rem}.snapshot-workspace .topbar{flex-wrap:wrap}.roster-member .attribute{padding:.65rem}.roster-member .attribute span{overflow-wrap:anywhere}.roster-member .actions{margin:.5rem 0}.snapshot-workspace{padding:1rem}}

/* 0.4.1 — a clearer character folio. Ornament stays outside data surfaces. */
:root{;;;;;;;;}
body{line-height:1.5}h1{letter-spacing:.015em}h2{line-height:1.2}button,.button-link{border-radius:9px;line-height:1.3}@media (hover:hover) and (pointer:fine){button:not(.text-link):hover,.button-link:hover{border-color:var(--line)}}button.primary{font-weight:650}@media (hover:hover) and (pointer:fine){button.primary:hover{background:var(--primary-hover)}}@media (hover:hover) and (pointer:fine){.text-link:hover{text-decoration:underline;text-underline-offset:4px}}
input,select,textarea{border-radius:8px;background:var(--card);border-color:var(--line)}input:focus-visible,textarea:focus-visible{border-color:var(--green)}
.workspace{max-width:1340px;padding-top:1.6rem}.sidebar{background:var(--panel);border-right:1px solid var(--line);padding:1.8rem 1.1rem}.brand{letter-spacing:.015em;font-family:var(--display);gap:.65rem}.brand img{width:34px;height:34px}.sidebar select{font-size:.875rem;background:var(--panel)}.nav{gap:.35rem}.nav button{border:1px solid transparent;min-height:48px}.nav button.active{background:var(--selected-fill);color:var(--ink);border-color:var(--primary);font-weight:750}.nav button.active svg{stroke-width:2}.sidebar-footer .eyebrow{font-size:.7rem}
.topbar{border-bottom:1px solid var(--line);padding-bottom:.8rem;margin-bottom:1.4rem}.pill{background:var(--card);border-color:var(--line);font-size:.75rem;padding:.3rem .7rem}.topbar .pill:first-child::before{content:'';width:6px;height:6px;border-radius:50%;background:var(--green)}
.title-row{margin-bottom:1.25rem;align-items:flex-end}.title-row>div{min-width:0}.title-row h1{margin:.25rem 0 0}.title-row .eyebrow{color:var(--muted);font-size:.7rem;letter-spacing:.12em}.title-row select{background:var(--soft);border-color:var(--line);font-weight:650}.card{border:1px solid var(--line);border-top:3px solid var(--line);border-radius:13px;padding:1.45rem}.card::after{display:none}.stack{gap:1rem}.section-head{gap:.75rem}.section-head h2{font-size:1.55rem}.section-head button{flex-shrink:0}.character-head{gap:.75rem}.identity{min-width:0}.identity h2{font-size:1.7rem;overflow-wrap:anywhere}.avatar{border:1px solid var(--line);background:var(--soft);border-radius:12px}.character-head>button{flex-shrink:0}
.resources{gap:.85rem;margin:1.25rem 0}.resource{background:var(--card);border:1px solid var(--line);border-top:3px solid var(--sage-fill);border-radius:10px;padding:1rem}.resource:nth-child(2){border-color:var(--line);border-top-color:var(--shore-fill)}.resource-label{font-size:.8rem;letter-spacing:.045em;color:var(--ink)}.big-number{font-size:3.25rem;letter-spacing:-.015em;font-weight:600;padding:.55rem 0 .7rem;line-height:1.05}.big-number span{font-family:system-ui,sans-serif;font-size:1rem;letter-spacing:0;white-space:nowrap}.resources progress,progress{height:9px;border:0;border-radius:3px;background:var(--soft)}progress::-webkit-progress-bar{background:var(--soft);border-radius:3px}progress::-webkit-progress-value{border-radius:3px}.over-max{font-size:.8rem;color:var(--notice-ink);margin:.65rem 0 0}.stats-row{gap:1.1rem;padding-top:1rem}.stats-row>div+div{border-left:1px solid var(--line);padding-left:1.1rem}.stat-value{font-size:1.9rem;line-height:1.15;letter-spacing:0;margin:.5rem 0}.stat-value small{font-family:system-ui,sans-serif;font-weight:400}.stats-row p{font-size:.8rem}
.calendar{background:var(--panel);border-color:var(--line);border-top-color:var(--line)}.calendar .day-number,.calendar .day-token{background:var(--panel)}.calendar .day-number{letter-spacing:.025em}.calendar .day-token{font-size:.85rem;border-top:1px solid var(--line);border-bottom:1px solid var(--line);margin:.65rem 0;padding:.8rem 0}.calendar .quiet{background:var(--panel);border-color:var(--line);color:var(--ink)}.calendar .muted{color:var(--muted)}
.notice{border-radius:8px;background:var(--notice-fill);color:var(--notice-ink);border-left:3px solid var(--notice-border)}.coastal{background:var(--panel);border-color:var(--line)}.coastal li{padding-left:.2rem}.row{padding:1rem 0}.quantity{background:var(--soft);border:1px solid var(--line);border-radius:7px;padding:.3rem .55rem;color:var(--ink)}.row .clip p:first-child{font-weight:600}.empty{font-size:.925rem}.footer-note{line-height:1.6}
.ref-grid{gap:.65rem}.attribute{background:var(--card);border:1px solid var(--line);border-top:3px solid var(--line);border-radius:8px;padding:.85rem}.attribute>span:first-child{color:var(--muted);font-size:.8rem;font-weight:650}.attribute strong{letter-spacing:0;line-height:1.15}.attribute>span:last-child{font-size:.85rem}.character-primary .attribute strong{font-size:2.2rem}.ability-slot{padding:1.2rem 0 .3rem}.ability{border:1px solid var(--line);border-radius:9px;padding:1rem;margin:.65rem 0}.ability summary{padding-right:1.5rem;gap:.45rem}.ability summary::before{content:'+';font:1.3rem system-ui;color:var(--ink);line-height:1}.ability[open] summary::before{content:'−'}.ability[open]{border-color:var(--line)}.ability[open] summary{padding-bottom:.8rem;border-bottom:1px solid var(--line)}.ability-name{font-size:1.35rem}.ability-cost{font-size:.8rem}.ability-effect{font-size:.925rem}.ability dl{font-size:.9rem}.status{border-radius:5px;letter-spacing:.02em;font-size:.75rem;padding:.2rem .5rem}.status.locked{border-width:1px}.status.trained_unquantified{border-width:1px}.status.in_development{border-width:3px}.threshold{padding:1.1rem 0}summary{cursor:pointer}details.card>summary{min-height:44px;line-height:1.5;padding:.35rem 0;font-weight:650}details.card[open]>summary{margin-bottom:1rem}.character-management{border-top:1px solid var(--line);padding-top:.5rem}
.roster-member{border-top-color:var(--line)}.roster-member .section-head{align-items:flex-start}.roster-member .section-head h2{font-size:1.8rem}.roster-member .section-head .eyebrow{margin:0 0 .5rem;font-size:.7rem;letter-spacing:.09em}.roster-status{display:inline-block;font:650 .7rem system-ui;letter-spacing:.05em;text-transform:uppercase;padding:.2rem .5rem;border-radius:5px;margin-left:.4rem;vertical-align:middle}.roster-status.active{background:var(--soft);color:var(--ink);border:1px solid var(--primary)}.roster-status.boxed{background:var(--pending-fill);color:var(--ink);border:1px solid var(--line)}.roster-member .stats-row{padding-top:.85rem}.roster-member .resource{margin:1rem 0}.roster-member .ref-grid{gap:.5rem}.roster-member .attribute strong{font-size:1.8rem}.roster-facts{font-size:.875rem;grid-template-columns:minmax(110px,1fr) 2fr;gap:.6rem .9rem;padding:1rem 0;border-block:1px solid var(--line)}.roster-facts dt{color:var(--muted);font-weight:600}.roster-member>h3{margin:1.2rem 0 .5rem;text-transform:uppercase;letter-spacing:.12em;font-size:.75rem;color:var(--muted)}.roster-member .ability summary>strong{font:650 .85rem system-ui;color:var(--ink)}.roster-member .ability summary>span:not(.ability-name){font-size:.8rem;color:var(--muted)}
.snapshot-workspace{max-width:880px}.snapshot-workspace .topbar h1{font-size:2rem;margin:0}.snapshot-workspace #snapshot-content>h2{margin:2rem 0 1rem}.snapshot-workspace #snapshot-content>.card:first-child{border-top-color:var(--line)}.snapshot-workspace .resources{margin:1rem 0}
dialog{border-radius:15px;border-color:var(--line);padding:1.6rem;box-shadow:none}dialog::backdrop{background:var(--overlay);backdrop-filter:blur(3px)}.dialog-header{border-bottom:1px solid var(--line);padding-bottom:.9rem;margin-bottom:1rem}.dialog-header h2{font-size:1.8rem;margin:0}.dialog-header button{flex-shrink:0;min-width:44px}.dialog-footer{background:var(--card);gap:.6rem}.file-input{background:var(--soft);border:1px dashed var(--line);border-radius:9px;line-height:1.5}input[type=file]::file-selector-button{font:600 .8rem system-ui;padding:.55rem .65rem;margin-right:.6rem;background:var(--soft);color:var(--ink);border:1px solid var(--line);border-radius:6px}.diff-item{padding:1rem 0}.diff-item .after{color:var(--ink)}.journal-entry .section-head{align-items:flex-start}.journal-diff{background:var(--soft);border-radius:7px}#toast{border-radius:10px}
@media(min-width:721px){.nav button.active{border-left:3px solid var(--primary)}.welcome{margin-top:2rem}.welcome h1{font-size:4rem;max-width:650px}.welcome .card{padding:1.7rem}.welcome .sample{background:var(--soft)}.roster-member .ref-grid{grid-template-columns:repeat(6,minmax(0,1fr))}}
@media(max-width:720px){
 .sidebar{padding:.85rem 1rem;border:0;border-bottom:1px solid var(--line)}.sidebar-top{gap:.65rem}.brand{font-size:1.6rem}.brand img{width:29px;height:29px}.campaign-control{max-width:66%;width:220px}.campaign-control select{font-size:.8rem;min-height:42px;padding:.6rem}.nav{position:fixed;bottom:0;left:0;right:0;z-index:5;background:var(--panel);border-top:1px solid var(--line);padding:.4rem .3rem calc(.4rem + env(safe-area-inset-bottom));gap:.15rem;display:grid;grid-template-columns:repeat(6,minmax(0,1fr));overflow:visible}.nav button{min-width:0;min-height:57px;padding:.3rem .1rem;display:flex;flex-direction:column;justify-content:center;gap:.2rem;text-align:center;font-size:.68rem;line-height:1.15;overflow-wrap:anywhere;border-radius:8px}.nav svg{display:block;width:19px;height:19px}.nav button.active{background:var(--selected-fill);border-color:var(--primary);color:var(--ink)}.workspace{padding:1rem .9rem calc(6rem + env(safe-area-inset-bottom))}.topbar{padding:0 0 .7rem;margin-bottom:1rem}.topbar .pill{font-size:.68rem;padding:.2rem .5rem}.title-row{display:grid;grid-template-columns:minmax(0,1fr) minmax(110px,38%);gap:.65rem;align-items:end;margin-bottom:1rem}.title-row .eyebrow{font-size:.65rem;letter-spacing:.06em;overflow-wrap:anywhere}.title-row h1{font-size:2rem;line-height:1.1}.title-row select{width:100%;font-size:.8rem;padding:.65rem .45rem}.card{padding:1.1rem;border-radius:11px}.character-head .avatar{display:none}.identity h2{font-size:1.4rem}.character-head>button{font-size:.75rem;padding:.6rem .65rem}.resources{gap:.6rem;margin:1rem 0}.resource{padding:.8rem}.big-number{font-size:clamp(2.1rem,8vw,2.8rem)}.big-number span{font-size:.85rem}.stats-row{gap:.7rem}.stats-row>div+div{padding-left:.7rem}.stat-value{font-size:1.65rem}.stats-row>div>span{font-size:.8rem}.calendar{display:block}.calendar .day-number{font-size:4.6rem;margin:.3rem 0 .7rem}.calendar button{min-height:46px}.calendar p.small{display:block;margin:.8rem 0 0;font-size:.8rem}.calendar .day-token{font-size:.8rem}.actions{gap:.5rem}.actions button{font-size:.85rem}.roster-facts{grid-template-columns:minmax(94px,1fr) 1.4fr;gap:.6rem .7rem}.roster-facts dd{margin:0}.roster-member .section-head h2{font-size:1.55rem}.roster-member .attribute{padding:.6rem}.roster-member .attribute span{font-size:.7rem}.roster-member .attribute strong{font-size:1.6rem}.ability{padding:.85rem}.ability-name{font-size:1.25rem}.ability dl{grid-template-columns:70px minmax(0,1fr);gap:.7rem}.ability dt{margin:0}.ability dd{min-width:0}.section-head h2{font-size:1.5rem}.row{gap:.65rem}.quantity{font-size:.85rem}.welcome h1{font-size:2.8rem}.welcome .card{padding:1.3rem}.snapshot-workspace{padding:1rem .9rem 2rem}.snapshot-workspace .topbar h1{font-size:1.75rem}.snapshot-workspace .topbar{gap:.5rem}dialog{padding:1.1rem;max-height:88dvh}.dialog-header h2{font-size:1.6rem}.dialog-footer button{flex:1;min-width:100px}#toast{bottom:calc(5.5rem + env(safe-area-inset-bottom));width:max-content;max-width:90vw;font-size:.875rem}
}
@media(prefers-reduced-motion:no-preference){button,.button-link{transition:background .16s,border-color .16s}details[open]>:not(summary){animation:unfurl .18s ease-out}}
@media(max-width:720px){.play-grid>.right-column>.card:nth-child(2){order:0}}
@media(max-width:720px){.nav button span{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;max-width:100%}.nav button{height:62px;font-size:.75rem}}

/* 0.4.2 — breathing room between copy, actions and tiles. */
.workspace>.card+.card,.workspace>.card+details.card{margin-top:1.35rem}
.stack{gap:1.35rem}.two-col{gap:1.35rem}.card>h2{margin-bottom:1.1rem}
.card>.actions+p{margin-top:1rem}.card>input+p{margin-top:.85rem}
.reference-reminder{display:grid;gap:.85rem;padding:1.15rem;line-height:1.65}
.reference-reminder>p{margin:0}.reference-reminder>button{justify-self:start;margin:0;max-width:100%}
.roster-controls>details{border-top:1px solid var(--line);padding-top:1rem;margin-top:1.1rem}
.roster-controls>details>summary{min-height:44px;line-height:1.6}
.roster-team{margin:1.65rem 0}.roster-team>h2{margin-bottom:1rem}
.roster-empty{padding:1.35rem}.roster-empty p{margin:0;color:var(--muted)}
.ability{margin:1rem 0;padding:1.1rem}.ability summary{gap:.85rem}
.ability-slot{padding-top:1.5rem}.ability-slot>.eyebrow{margin-bottom:1.1rem;line-height:1.65}
.ability-cost{line-height:1.65;-webkit-line-clamp:2}.ability-effect{line-height:1.65}
.ability dl{row-gap:1rem;margin-top:1.2rem}.ability[open] summary{padding-bottom:1.1rem}
.row .small{margin-top:.4rem;line-height:1.65}.row{gap:1rem}
.section-head{flex-wrap:wrap}.section-head .text-link{font-size:.875rem}
@media(max-width:720px){
 .nav{grid-template-columns:.8fr 1fr 1.3fr .95fr 1fr 1.15fr;gap:.25rem;padding-inline:.4rem;border-top:2px solid var(--line)}
 .nav button{padding:.35rem .05rem;height:66px;gap:.35rem;justify-content:flex-start}
 .nav button span{overflow-wrap:normal;word-break:normal;hyphens:none;min-height:2.3em;line-height:1.15}
 .workspace{padding-bottom:calc(6.8rem + env(safe-area-inset-bottom))}
 .title-row{row-gap:1rem;margin-bottom:1.35rem}
 .title-row:has(h1):has(+.reference-reminder){grid-template-columns:1fr}
 .title-row:has(+.reference-reminder) select{justify-self:end;max-width:180px!important}
 .card{padding:1.25rem 1.1rem}.resources{margin-top:1.25rem;margin-bottom:1.25rem}
 .stats-row{padding-top:1.2rem}.stats-row p{margin-top:.7rem!important;line-height:1.65}
 .ability{padding:1rem}.ability-name{line-height:1.35}.ability summary{gap:.85rem}
 .reference-reminder>button{width:100%}.card>input+p{margin-top:.85rem}
 .roster-controls>.actions{gap:.75rem}.roster-controls>p{margin-top:1rem;line-height:1.7}
}

/* Generic roster annotations stay flat and readable on narrow screens. */
.roster-member .roster-attributes{grid-template-columns:repeat(auto-fit,minmax(min(100%,9rem),1fr));margin-block:1.2rem}
.roster-attributes .attribute strong{font-family:var(--body-font,system-ui,sans-serif);font-size:1.1rem;line-height:1.45;overflow-wrap:anywhere}
.threshold-reached{padding:.8rem 1rem;background:var(--soft);border-left:4px solid var(--line);border-radius:.4rem;color:var(--ink);font-weight:650}
.error{overflow-wrap:anywhere}

/* Shared character and roster displays: full-row native disclosure targets. */
.ability-display summary,.move-display summary{display:flex;flex-direction:column;align-items:stretch;gap:.8rem;padding:1rem;min-height:44px;touch-action:manipulation}
.ability-display summary::before,.move-display summary::before{content:none}
.ability-display,.move-display{padding:0;overflow-wrap:anywhere;background:var(--card)}
.ability-display dl,.move-display dl{padding:0 1rem 1rem;line-height:1.7}
.ability-preview,.ability-facts{display:grid;gap:.75rem}.ability-facts>span{display:block;white-space:pre-wrap}
.ability-facts b{display:block;color:var(--ink)}.effect-preview{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;white-space:pre-wrap;line-height:1.65}
.more-cue,.collapse-cue{color:var(--ink);font-weight:650;font-size:.9rem}.collapse-cue{display:none}
.ability-display[open] .ability-preview,.move-display[open] .more-cue{display:none}
.ability-display[open] .collapse-cue,.move-display[open] .collapse-cue{display:block}
.ability-slot .actions{gap:.75rem;margin:1rem 0}.ability-slot button{min-height:44px}
.character-attributes{grid-template-columns:repeat(3,minmax(0,1fr));gap:.9rem}.attribute{min-width:0;overflow-wrap:anywhere;line-height:1.6}
.move-facts{display:flex;flex-wrap:wrap;gap:.7rem 1.2rem;background:var(--soft);padding:.75rem;border-radius:5px}.low-pp{color:var(--notice-ink);background:var(--notice-fill);padding:.2rem .35rem}
.threshold summary,.technical summary{padding:.8rem 0;min-height:44px;cursor:pointer}.threshold.is-complete{background:var(--soft);color:var(--ink);padding:.5rem .75rem}.technical{font-size:.85rem;overflow-wrap:anywhere}.threshold>p{line-height:1.7}
.empty-slots{padding:1rem 0;border-top:1px solid var(--line)}.build-label{font:500 .8rem/1.6 system-ui,sans-serif;color:var(--ink);margin:1rem 0}
.nav button{position:relative}.attention-dot{position:absolute;top:.3rem;right:.3rem;width:.55rem;height:.55rem;border-radius:50%;background:var(--badge);border:1px solid var(--line)}
.handoff-active{border-left:5px solid var(--primary)!important}.handoff-quiet{background:var(--panel)!important}.handoff-quiet h2{font-size:1.1rem;line-height:1.5}.handoff-tools summary{cursor:pointer;min-height:44px;padding:.65rem 0}
.vitals .resource{background:var(--card)}.vitals .stats-row{margin-top:1rem}.vitals{margin-bottom:1.4rem}
@media(max-width:430px){.character-attributes{grid-template-columns:repeat(2,minmax(0,1fr))}.ability-display summary,.move-display summary{padding:.85rem}.ability-display dl,.move-display dl{grid-template-columns:1fr}.ability-name{font-size:1.4rem}}
/* Handoff workflow polish: flat readable surfaces, sage / shore / cream. */
.updates-layout{display:grid;grid-template-columns:minmax(0,1fr);gap:1.6rem;align-items:start}
.updates-layout>.stack,.updates-flow{min-width:0}
.exchange-stepper{background:var(--panel);border-color:var(--line);border-top-color:var(--line);padding:1.4rem}
.exchange-stepper>h2{font-size:1.8rem;line-height:1.2;margin-bottom:.8rem}
.exchange-stepper>p{max-width:42rem}
.exchange-stepper ol{padding-left:1.7rem;margin:1.5rem 0}
.exchange-stepper .exchange-step{padding:1rem;margin:0 0 1rem;border:1px solid var(--line);border-left:4px solid var(--line);border-radius:8px;background:var(--panel);line-height:1.55}
.exchange-step::marker{font-weight:750;color:var(--ink);font-size:1.1rem}
.step-heading{display:grid;gap:.6rem;margin-bottom:1rem}
.step-heading strong{font:650 1.05rem/1.5 system-ui,sans-serif;letter-spacing:0}
.step-state{width:fit-content;font-size:.75rem;font-weight:750;letter-spacing:.035em;padding:.25rem .65rem;border-radius:99px;background:var(--pending-fill);color:var(--ink);border:1px solid var(--line)}
.exchange-step.is-done{border-color:var(--line);border-left-color:var(--line)}
.is-done .step-state{background:var(--locked-fill);color:var(--ink);border-color:var(--line)}
.exchange-step.needs-attention{border-left-color:var(--line)}
.needs-attention .step-state{background:var(--notice-fill);color:var(--notice-ink);border-color:var(--line)}
.exchange-step .actions{display:grid;gap:.65rem;margin-top:1rem}
.exchange-step button{width:100%;text-align:left;min-height:48px;line-height:1.45;padding:.7rem .85rem;background:var(--card);border-color:var(--line)}
.exchange-step button:disabled{cursor:default;color:var(--muted);background:var(--soft);border-color:var(--line);opacity:1}@media (hover:hover) and (pointer:fine){
.exchange-step button:not(:disabled):hover{background:var(--hover-fill)}}
.exchange-step button[data-action="summary"],.exchange-step button[data-action="exchange-finish"]:not(:disabled){background:var(--primary);color:var(--on-primary);border-color:var(--line)}
.exchange-step button[data-action="summary"]:disabled{background:var(--soft);color:var(--muted);border-color:var(--line)}
.exchange-attention{padding:.85rem;margin:1rem 0;background:var(--notice-fill);color:var(--notice-ink);border-radius:5px;font-size:.9rem}
.exchange-complete{padding:1rem;background:var(--locked-fill);color:var(--ink);border:1px solid var(--line);border-radius:7px;font-weight:700;line-height:1.6}
.exchange-stepper>.actions{padding-top:.9rem;border-top:1px solid var(--line);gap:.8rem}
.update-import{border-top-color:var(--line);background:var(--card)}
.update-import>h2{font-size:1.8rem;line-height:1.25}
.update-import>p{margin-bottom:1.35rem}
.update-import>.actions{margin-bottom:1.5rem}
.update-import .file-input{padding-top:1.25rem;border-top:1px solid var(--line);line-height:1.5}
.play-grid>.stack{gap:1.6rem}
.play-grid .card{background:var(--card);border-color:var(--line)}
.play-grid .card.calendar{background:var(--panel);border-color:var(--line)}
.play-grid .calendar .day-number,.play-grid .calendar .day-token{background:var(--panel)}
.play-grid .character-head{margin-bottom:1.4rem;gap:1.2rem}
.play-grid .resources{gap:.9rem;margin-block:1.5rem}
.play-grid .resource{padding:1rem;background:var(--card)}
.play-grid .stats-row{padding-top:1.3rem;gap:1.2rem;background:var(--card)}
.play-grid .resource-label{font-size:.9rem;letter-spacing:.035em;color:var(--ink)}
.play-grid .calendar>p:last-child{margin-top:1.1rem}
#day-handoff{scroll-margin-top:1.5rem}
#day-handoff>h2{margin-bottom:1rem}
#day-handoff>button[data-action="summary"]{display:block;margin-top:1.2rem;background:var(--primary);color:var(--on-primary);border-color:var(--line)}
#day-handoff>.small{margin:.8rem 0 1.2rem}
.token-check{border-top:1px solid var(--line);padding-top:1.1rem;margin-top:1.2rem}
.token-check p{margin:.6rem 0 0}
@media(min-width:1050px){.updates-layout{grid-template-columns:minmax(0,1.1fr) minmax(0,1fr);gap:1.8rem}}
@media(max-width:600px){
 .updates-layout{gap:1.4rem}.exchange-stepper{padding:1.2rem .95rem}.exchange-stepper ol{padding-left:1.35rem}
 .exchange-stepper .exchange-step{padding:.9rem .8rem}.step-heading strong{font-size:1rem}
 .exchange-stepper>.actions{display:grid}.exchange-stepper>.actions button{width:100%;min-height:48px}
 .update-import>.actions{display:grid;grid-template-columns:1fr}.update-import>.actions button{width:100%;min-height:48px}
 .play-grid .character-head{align-items:flex-start;flex-wrap:wrap}.play-grid .identity{min-width:0}
 .play-grid .resources{grid-template-columns:repeat(2,minmax(0,1fr))}.play-grid .resource{padding:.9rem .75rem}
 .play-grid .big-number{font-size:clamp(2.4rem,9vw,3.5rem);line-height:1.25}.play-grid .big-number span{font-size:1rem}
 #day-handoff>button{width:100%;min-height:48px}.token-check button{min-height:48px}
}

.handoff-empty{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:.8rem;padding:.9rem!important}.handoff-empty>details>summary{min-height:44px;cursor:pointer;font-size:.9rem;line-height:1.5;font-weight:650;padding:.4rem 0}.handoff-empty>details[open]{grid-column:1/-1}#day-handoff.handoff-empty>button[data-action="summary"]{margin:0;font-size:.8rem;min-height:44px;padding:.65rem;max-width:8rem}

/* Safe-area shield: zero height on devices without a top inset. */
body{padding-top:env(safe-area-inset-top)}
body::before{content:"";position:fixed;top:0;left:0;right:0;height:env(safe-area-inset-top);background:var(--paper);z-index:100;pointer-events:none}
.ability-facts>span{white-space:normal}.ability-facts>span>span{display:block;white-space:pre-wrap}

.ability-display summary,.move-display summary{-webkit-user-select:none;user-select:none;cursor:pointer}
.ability-display dl,.move-display dl{-webkit-user-select:text;user-select:text}
@media(max-width:720px){.nav button span{display:block;width:100%;min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;-webkit-line-clamp:unset;min-height:1.3em}.nav button{justify-content:center}.nav button.active{border:1px solid var(--primary)}}

/* Exchange controls follow the existing completion rules, in one column. */
.exchange-stepper{max-width:54rem}.exchange-after{max-width:54rem;margin-top:1.6rem}
.exchange-step{scroll-margin-top:calc(1rem + env(safe-area-inset-top))}
.exchange-step .step-toggle{display:flex;align-items:flex-start;gap:.8rem;justify-content:space-between;background:transparent;border:0;padding:0;text-align:left}
.step-toggle strong{font-size:1rem;line-height:1.5}.step-toggle .step-state{flex-shrink:0}
.step-summary{margin:.6rem 0 0}.step-content{margin-top:1.2rem}.exchange-step>.notice{margin-top:1rem}
.exchange-step .update-import{border:0}.exchange-step .update-import input{min-width:0}
.exchange-step button.primary{background:var(--primary);color:var(--on-primary)}
@media(max-width:430px){.step-toggle,.step-heading{flex-wrap:wrap}.exchange-stepper ol{padding-left:1.1rem}.exchange-stepper .exchange-step{padding:.9rem .7rem}}

@media (hover:hover) and (pointer:fine){.nav button.active:hover{background:var(--selected-fill)}.exchange-step button.primary:hover,.exchange-step button[data-action="summary"]:hover,.exchange-step button[data-action="exchange-finish"]:hover{background:var(--primary-hover)}}

@media(max-width:720px){.nav button:not([data-tab="roster"]) span{white-space:normal;text-overflow:clip;overflow-wrap:normal;word-break:normal}.nav button[data-tab="roster"] span{white-space:nowrap;text-overflow:ellipsis}}
.step-content>.notice{margin-top:1.2rem}

.update-ready{margin:calc(.8rem + env(safe-area-inset-top)) .9rem .8rem;position:relative;z-index:6}.update-ready[hidden]{display:none}.update-ready p{margin:.5rem 0}.update-ready button{margin-top:.6rem}

/* Reference handoff actions remain visible, including on owner-hidden campaigns. */
.reference-reminder { display: grid; gap: .8rem; }
.reference-reminder p { margin: 0; }
.reference-export-row { display: flex; flex-wrap: wrap; align-items: center; gap: .65rem 1rem; }
.reference-export-row > span { flex: 1 1 10rem; font-weight: 600; overflow-wrap: anywhere; }
.reference-export-row button, .character-reference button { min-height: 44px; white-space: normal; }
.reference-management { margin-top: 1.25rem; border-top: 1px solid var(--line); padding-top: .75rem; }
.reference-management > summary { min-height: 44px; display: flex; align-items: center; cursor: pointer; }
.reference-management > summary::before { content: '＋'; margin-right: .6rem; }
.reference-management[open] > summary::before { content: '−'; }
@media(max-width: 480px) { .reference-export-row button, .character-reference > .actions > button { width: 100%; } }

.exchange-skip { margin-top: 1.25rem; padding-top: 1rem; border-top: 1px solid var(--line); }
.exchange-skip p { margin: .65rem 0 0; }
.exchange-step.is-skipped { border-color: var(--line); background: var(--pending-fill); }
.exchange-step.is-skipped .step-state { color: var(--ink); }

/* Touch controls: prevent sub-16px focus zoom without restricting user zoom.
   Keep inherited larger text and monospace families; override compact selectors. */
@media (max-width: 720px), (pointer: coarse) {
  html body input, html body select, html body textarea {
    font-size: max(16px, 1em) !important;
  }
  dialog { overflow-wrap: anywhere; }
  dialog input, dialog select, dialog textarea { min-width: 0; max-width: 100%; }
}
