/* Campaign profiles share the tabletop's modal and controls. */
.campaign-party-trigger{white-space:nowrap}
#modal:has(.campaign-party-content){width:min(970px,calc(100vw - 32px));max-width:970px}
.campaign-party-content{min-width:0}
.campaign-party-message{margin:0 0 18px!important;padding:12px 14px;border:1px solid #789b844d;border-radius:8px;background:#7f9d6412;color:#c5d8ce!important}
.campaign-party-message.has-warning{border-color:#b58e515e;background:#b88a3c13;color:#e4c99d!important}
.campaign-party-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}
.campaign-party-card{min-width:0;padding:18px;border:1px solid #a8c1bd24;border-radius:12px;background:#121d24;display:flex;flex-direction:column}
.campaign-party-card-heading{display:flex;gap:14px;align-items:center;margin-bottom:17px}
.campaign-party-card-heading>div{min-width:0}
.campaign-party-portrait-frame{display:block;position:relative;width:84px;height:84px;flex:0 0 84px;overflow:hidden;border-radius:10px;border:1px solid #afc5bc3b;background:#223339}
.campaign-party-portrait{display:block;width:100%;height:100%;object-fit:cover;object-position:left top}
/* Display only the artwork in the original screenshots; source files stay intact.
   Garrick: 286×255 source, square at (0,38), size 196. Nox: 317×216, (2,0), size 200. */
.campaign-party-portrait-frame[data-character="campaign-garrick-voss"] .campaign-party-portrait{position:absolute;max-width:none;width:145.918367%;height:130.102041%;left:0;top:-19.387755%;object-fit:fill}
.campaign-party-portrait-frame[data-character="campaign-nox"] .campaign-party-portrait{position:absolute;max-width:none;width:158.5%;height:108%;left:-1%;top:0;object-fit:fill}
.campaign-party-placeholder{display:flex;width:100%;height:100%;align-items:center;justify-content:center;color:#c2d7c9;font-size:25px;letter-spacing:1px}
.campaign-party-card h3{margin:0 0 5px;font-size:19px;font-weight:650;letter-spacing:-.3px;color:#e2e9e4;overflow-wrap:anywhere}
.campaign-party-card-heading p{margin:0!important;font-size:11px!important;line-height:1.5!important;color:#a3b7b9!important}
.campaign-party-state{display:inline-block;margin-top:8px;font-size:10px;line-height:1.4;color:#9eb6b6}
.campaign-party-state.is-present{color:#bcd8b5}
.campaign-party-state.is-present:before{content:'✓ ';font-weight:700}
.campaign-party-stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:4px;margin:0;border-top:1px solid #a8c1bd1f;border-bottom:1px solid #a8c1bd1f;padding:12px 0}
.campaign-party-stats>div{text-align:center;min-width:0}
.campaign-party-stats dt{margin-bottom:6px;font-size:9px;line-height:1.3;color:#8fa9ac}
.campaign-party-stats dd{margin:0;font-size:23px;font-weight:600;line-height:1.15;color:#d9e5dc}
.campaign-party-stats dd small{font-size:10px;font-weight:400;color:#91aaa7}
.campaign-party-snapshot{margin:9px 0 11px!important;font-size:10px!important;color:#96b1b4!important}
.campaign-party-counters{list-style:none;margin:0 0 12px;padding:0;display:flex;flex-wrap:wrap;gap:6px}
.campaign-party-counters li{display:flex;align-items:center;gap:7px;max-width:100%;border:1px solid #91ada026;border-radius:5px;padding:5px 7px;font-size:10px;color:#aebfbe;background:#91ada007}
.campaign-party-counters li span{overflow-wrap:anywhere}
.campaign-party-counters b{color:#d0dfcf;white-space:nowrap;font-weight:600}
.campaign-party-notes{margin:0 0 13px}
.campaign-party-notes summary{font-size:11px;cursor:pointer;color:#b7c8bf;padding:5px 0}
.campaign-party-notes p{font-size:11px!important;white-space:pre-wrap;overflow-wrap:anywhere;margin:6px 0!important}
.campaign-party-card-actions{margin-top:auto;display:flex;justify-content:space-between;gap:8px;padding-top:6px}
.campaign-party-card-actions button{min-height:37px;padding:8px 11px;font-size:11px}
.campaign-party-footnote{margin:17px 0 0!important;font-size:11px!important;color:#94a9ab!important}
.campaign-party-inspector{display:flex;gap:13px;align-items:flex-end;margin:0 0 14px}
.campaign-party-inspector .campaign-party-portrait-frame{width:96px;height:96px;flex-basis:96px}
.campaign-party-inspector button{padding:8px 9px;min-height:36px;font-size:10px;line-height:1.4;white-space:normal;text-align:left}
.campaign-party-reference-heading{display:flex;align-items:center;gap:18px;margin-bottom:20px}
.campaign-party-reference-heading .campaign-party-portrait-frame{width:110px;height:110px;flex-basis:110px}
.token.has-character-portrait .token-initials,.token.has-character-portrait>.token-num{display:none}
.token-picture{position:absolute;inset:0;display:block;pointer-events:none;overflow:hidden;border-radius:50%}
.token-picture .campaign-party-portrait-frame{width:100%;height:100%;border:0;border-radius:50%;flex-basis:auto}
.token-picture .campaign-party-portrait{pointer-events:none}
.battlefield-token-name{position:absolute;top:calc(100% + 11px);left:50%;transform:translateX(-50%);min-width:48px;max-width:100px;width:max-content;padding:2px 5px;border:1px solid #8eaaa43b;border-radius:4px;background:#0a151ee8;color:#edf5ef;font:600 10px/1.25 system-ui,sans-serif;white-space:normal;text-align:center;text-shadow:0 1px 2px #000;pointer-events:none}
.token.party .battlefield-token-name{border-color:#98cab361}
.initiative-portrait{flex:none;width:35px;height:35px}
.initiative-portrait .campaign-party-portrait-frame{width:35px;height:35px;flex-basis:35px;border-radius:50%}
.campaign-party-reference pre{white-space:pre-wrap;overflow-wrap:anywhere;font:12px/1.8 system-ui,sans-serif;color:#d1ded8;margin:0;padding:20px;background:#121c23;border:1px solid #a8c1bd24;border-radius:9px;max-height:60vh;overflow:auto;tab-size:2}
@media(max-width:1000px){.topbar.has-campaign-party{height:auto;min-height:56px;gap:10px;padding-top:8px;padding-bottom:8px}.topbar.has-campaign-party .top-actions{flex-wrap:wrap;justify-content:flex-end;gap:7px}.campaign-party-trigger{font-size:11px;padding:8px 10px}}
@media(max-width:650px){.topbar.has-campaign-party{flex-wrap:wrap;gap:8px}.topbar.has-campaign-party .top-actions{width:100%;justify-content:flex-start}.campaign-party-trigger{min-height:34px}.campaign-party-grid{grid-template-columns:1fr;gap:12px}#modal:has(.campaign-party-content){width:calc(100vw - 18px);max-width:calc(100vw - 18px)}.campaign-party-card{padding:15px}.campaign-party-card h3{font-size:20px}.campaign-party-card-actions button{min-height:42px;font-size:12px}.campaign-party-reference pre{padding:14px;font-size:11px}.campaign-party-reference-heading{align-items:flex-start;gap:13px}.campaign-party-reference-heading .campaign-party-portrait-frame{width:84px;height:84px;flex-basis:84px}}
