/* Shared party look: gold frame, dark jade body, one primary action per area. Search panel reuses these tokens. */
.party-dock,.party-manager,.party-modal,.party-menu,.party-search-panel,.ps-notice,.party-invite-card{
  --party-gold:#d9ba61;--party-gold-soft:#a28b4c;--party-ink:#f1dfaa;--party-muted:#c6bd98;--party-faint:#9f9878;
  --party-body:linear-gradient(160deg,#1f3a27f2,#0f1c13f8);--party-head:linear-gradient(#4a3017,#211609);
  --party-row:#0c2117e0;--party-row-hover:#173523;--party-line:#6b6031;--party-warn:#ffb47c;--party-good:#a9dfa9;--party-danger:#e4775d;
  --party-font:SimSun,"宋体","Microsoft YaHei",serif;
  box-sizing:border-box;color:var(--party-ink);font:13px/1.5 var(--party-font);text-shadow:1px 1px 1px #000}
.party-dock[hidden],.party-hud[hidden],.party-manager[hidden],.party-modal-overlay[hidden],.party-invite-card[hidden],.party-invite-pill[hidden],.party-menu[hidden],.party-status[hidden],.party-hud-members[hidden]{display:none!important}
/* Buttons */
.party-button,.ps-button{font:inherit;font-size:13px;color:#efdaa1;background:linear-gradient(#59451d,#302510);border:1px solid var(--party-gold-soft);box-shadow:inset 0 0 0 1px #201609;min-height:28px;padding:3px 10px;cursor:pointer;text-shadow:1px 1px 1px #000;white-space:nowrap;border-radius:0}
.party-button:hover:not(:disabled),.ps-button:hover:not(:disabled){background:linear-gradient(#7b6026,#483415);color:#fff4b7}
.party-button:focus-visible,.ps-button:focus-visible{outline:2px solid #fff3a4;outline-offset:2px}
.party-button:active:not(:disabled),.ps-button:active:not(:disabled){transform:translateY(1px);filter:brightness(.85)}
.party-button:disabled,.ps-button:disabled{opacity:.45;cursor:default}
.party-button[aria-pressed=true],.ps-button[aria-pressed=true]{background:#746029;color:#fff5b5;box-shadow:inset 0 0 0 1px #d6bd63;opacity:1}
.party-button.is-primary,.ps-button.is-primary{background:linear-gradient(#b48a2c,#6b4e14);border-color:#f0d27a;color:#fff6c8}
.party-button.is-primary:hover:not(:disabled),.ps-button.is-primary:hover:not(:disabled){background:linear-gradient(#cfa03a,#7d5c18)}
.party-button.is-danger,.ps-button.is-danger{background:linear-gradient(#6a2a1c,#3a150d);border-color:#b8664c;color:#ffd6c4}
.party-button.is-danger:hover:not(:disabled),.ps-button.is-danger:hover:not(:disabled){background:linear-gradient(#83351f,#4a1b10)}
.party-button.is-icon{min-height:22px;min-width:24px;padding:0 6px;font-size:12px;line-height:20px}
.party-button kbd{display:inline-block;margin-left:5px;padding:0 3px;font:11px/14px Arial,sans-serif;border:1px solid #f1d98c88;color:#fff3c0;text-shadow:none;vertical-align:1px}
/* Dock: roster HUD + invitation card */
.party-dock{position:absolute;left:4px;top:19%;width:212px;display:flex;flex-direction:column;gap:6px;pointer-events:none}
.party-dock>*{pointer-events:auto}
.party-hud{position:relative;z-index:24;max-height:calc(100vh - 260px);display:flex;flex-direction:column;background:#081710c8;border:1px solid #8e7a3a;box-shadow:inset 0 0 0 1px #1f1608,0 3px 10px #0007}
.party-hud-header{display:flex;align-items:center;justify-content:space-between;gap:4px;padding:2px 3px 2px 7px;background:var(--party-head);border-bottom:1px solid #9d863b;flex:none}
.party-hud-title{flex:1;cursor:move;touch-action:none;user-select:none;color:#f4d86c;letter-spacing:1px;font-size:13px;white-space:nowrap}
.party-hud-tools{display:flex;gap:3px}
.party-hud-members{overflow:auto;padding:3px;scrollbar-width:thin;scrollbar-color:#927335 #241d0b}
.party-member{position:relative;padding:5px 7px 6px;background:var(--party-row);border:1px solid #4d4524;margin:0 0 4px;min-width:0}
.party-member:last-child{margin-bottom:0}
.party-member-compact{padding:3px 6px 4px;margin-bottom:3px;border-color:#3d3a1e}
.party-member-compact:hover{background:var(--party-row-hover);border-color:#8e7a3a}
.party-member-line{display:flex;align-items:center;gap:4px;min-width:0}
.party-crown{flex:none;width:14px;color:#ffd75e;font-size:13px;line-height:1;text-align:center;font-family:"Segoe UI Symbol","Microsoft YaHei",sans-serif}
.party-member-name{flex:1;min-width:0;display:block;text-align:left;overflow:hidden;text-overflow:ellipsis;border:0!important;box-shadow:none!important;background:transparent!important;padding:0!important;min-height:22px;color:#f4e3b0;font-size:13px}
.party-member.is-leader .party-member-name{color:#ffe36a}
.party-member-name:disabled{opacity:1!important;color:#c3b899}
.party-member-meta{flex:none;font:11px/14px Arial,"Microsoft YaHei",sans-serif;color:var(--party-faint);white-space:nowrap}
/* Out-of-view members dim only their status; actions stay at full strength. */
.party-member.is-away .party-member-name{color:#a9a184}
.party-member.is-away .party-member-meta{color:#8f8a70}
.party-member.is-away .party-gauges{opacity:.55}
.party-member.is-dead .party-member-meta{color:#ff8f7a}
.party-member.is-dead .party-gauge-fill{background:#555!important}
.party-gauges{position:relative;display:grid;grid-template-columns:1fr 1fr;gap:4px;margin-top:2px}
.party-member-compact .party-gauges{grid-template-columns:1fr;gap:2px}
.party-gauge{height:15px;position:relative;background:#171a12;border:1px solid #615a32;overflow:hidden}
.party-member-compact .party-gauge{height:13px}
.party-member-compact .party-gauge-mp{height:5px}
.party-member-compact .party-gauge-mp .party-gauge-text{display:none}
.party-gauge-fill{position:absolute;inset:0 auto 0 0;background:#a82d23;pointer-events:none;transition:width .25s ease-out}
.party-gauge-hp .party-gauge-fill{background:#b43228 url('./assets/party/party_gage_hp.png') left center / auto 100% repeat-x}
.party-gauge-mp .party-gauge-fill{background:linear-gradient(#3d7cc8,#1f4f8c)}
.party-gauge-text{display:block;position:relative;font:11px/13px Arial,"Microsoft YaHei",sans-serif;text-align:center;color:#fff;text-shadow:1px 1px #000;white-space:nowrap}
.party-member-compact .party-gauge-text{font-size:10px;line-height:11px}
.party-gauge.is-unknown .party-gauge-text{color:#c0bba4}
.party-member.is-danger{border-color:#c4452f}
.party-member.is-danger .party-gauge-hp{border-color:#e05a3c;animation:party-danger 1.1s ease-in-out infinite}
@keyframes party-danger{50%{box-shadow:0 0 6px 1px #ff4a2acc}}
/* Invitation card */
.party-invite-card{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:280px;max-width:calc(100% - 24px);max-height:calc(100% - 100px);overflow:auto;pointer-events:auto;z-index:90;padding:8px 10px 10px;background:linear-gradient(#4a311bf5,#21190df8);border:2px solid var(--party-gold);box-shadow:0 0 0 1px #30200d,0 6px 18px #000a;animation:party-in .18s ease-out}
@keyframes party-in{from{transform:translate(-50%,calc(-50% - 6px));opacity:0}}
.party-invite-head{display:flex;justify-content:space-between;align-items:center}
.party-invite-head h3{margin:0;font-size:15px;font-weight:normal;color:#f4d86c;letter-spacing:2px}
.party-invite-text{margin:6px 0 2px;font-size:14px;overflow-wrap:anywhere}
.party-invite-meta{margin:0 0 6px;font-size:12px;color:var(--party-muted)}
.party-invite-progress{height:4px;background:#1a140a;border:1px solid #6b5a2a;margin-bottom:8px;overflow:hidden}
.party-invite-progress-fill{display:block;height:100%;background:linear-gradient(90deg,#d9ba61,#fff0a8);transition:width 1s linear}
.party-invite-actions{display:flex;gap:8px}
.party-invite-actions .party-button{flex:1}
.party-invite-card .party-warning,.party-invite-card .party-note{margin:0 0 7px}
.party-invite-pill{position:relative;z-index:90;align-self:flex-start;font-size:12px;min-height:24px;padding:1px 10px;border-color:var(--party-gold);animation:party-pulse 1.6s ease-in-out infinite}
@keyframes party-pulse{50%{box-shadow:0 0 8px 1px #f0d27a99}}
/* Member context menu */
.party-menu{position:absolute;z-index:120;min-width:132px;display:flex;flex-direction:column;gap:3px;padding:6px;background:linear-gradient(#3b2915f7,#1c140bfa);border:1px solid var(--party-gold);box-shadow:0 6px 18px #000b}
.party-menu-title{margin:0 2px 3px;font-size:12px;color:#f4d86c;border-bottom:1px solid var(--party-line);padding-bottom:3px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.party-menu .party-button{text-align:left;min-height:26px}
/* Manager */
.party-manager{position:absolute;left:228px;top:100px;width:372px;max-height:calc(100% - 200px);z-index:72;background:var(--party-body);border:2px solid #c3a448;box-shadow:0 0 0 2px #30200d,0 6px 20px #0009;display:flex;flex-direction:column;pointer-events:auto}
.party-header{display:flex;align-items:center;gap:8px;padding:6px 8px 6px 12px;background:var(--party-head);border-bottom:2px solid #a98b36;flex:none;cursor:move;touch-action:none;user-select:none}
.party-header h2,.party-modal h2{font-size:18px;font-weight:normal;margin:0;color:#f4d86c;letter-spacing:3px}
.party-header-count{flex:1;font-size:12px;color:var(--party-muted)}
.party-status{flex:none;margin:0;padding:5px 12px;font-size:12px;border-bottom:1px solid #4f4626;background:#2a2410;color:#eddea5;overflow-wrap:anywhere}
.party-status[data-tone=success]{background:#173220;color:var(--party-good)}
.party-status[data-tone=warning]{background:#3a2412;color:var(--party-warn)}
.party-status[data-tone=pending]{background:#2a2410;color:#f2dc93}
.party-content{flex:1;min-height:0;padding:8px 10px;overflow:auto;scrollbar-width:thin;scrollbar-color:#927335 #132116}
.party-content p,.party-modal p{margin:5px 0 8px;overflow-wrap:anywhere}
.party-footer{flex:none;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:6px 10px;border-top:1px solid #a98b36;background:#14100acc}
.party-footer:empty{display:none}
.party-help{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border:1px solid var(--party-gold-soft);border-radius:50%;font:12px/1 Arial,sans-serif;color:var(--party-muted);cursor:help}
.party-invite-target{margin:0 0 8px;padding:8px;border:1px solid #6b6031;background:#14281bcc}
.party-invite-line{display:flex;align-items:center;gap:8px}
.party-invite-label{flex:1;min-width:0;margin:0!important;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.party-invite-label strong{font-weight:normal;color:#fff0b4}
.party-nearby-select{display:block;width:100%;margin-top:6px;box-sizing:border-box;border:1px solid #88773b;background:#091c12;color:#f2e2b5;font:13px/1.4 var(--party-font);min-height:28px;padding:2px 5px}
.party-invite-target .party-note{margin:6px 0 0}
.party-manager-members{display:flex;flex-direction:column;gap:4px}
.party-manager-members .party-member{margin:0}
.party-member-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:5px;margin-top:6px;padding-top:6px;border-top:1px dashed #5f552c}
.party-member-actions .party-button{font-size:12px;padding:2px 8px;min-height:26px}
.party-row-note{margin:4px 0 0!important;text-align:right}
.party-teleport-guide{margin:0 0 8px;padding:8px;border:1px solid #8b7539;background:#30250e99}
.party-teleport-guide h3{font-size:15px;color:#eed486;margin:0 0 4px;font-weight:normal}
.party-teleport-cost{color:#efce79;border-top:1px solid #766335;border-bottom:1px solid #766335;padding:9px 0;font-size:13px}
.party-settings{margin-top:8px}
.party-rules{border:1px solid #736134;margin:0 0 6px;padding:6px 8px 8px;display:grid;grid-template-columns:1fr 1fr;gap:5px}
.party-rules legend{padding:0 6px;color:#e6c979}
.party-rules .party-button{font-size:12px;min-height:26px;padding:2px 4px}
.party-recruit{border:1px solid #736134;margin:0 0 6px;padding:6px 8px 8px}
.party-recruit legend{padding:0 6px;color:#e6c979}
.party-recruit .party-note{margin:6px 0 0}
.party-join-mode{display:flex;align-items:center;gap:6px;margin-top:8px}.party-join-label{font-size:13px;color:#e6c979;margin-right:2px}.party-join-mode .party-button{flex:1;font-size:12px;min-height:26px}
.party-link{display:block;width:100%;margin-top:8px;font-size:12px;min-height:26px}
.party-invite-member{margin-left:4px;font-size:12px;color:var(--party-muted)}
.party-visibility{display:flex;align-items:center;gap:6px;margin:2px 0 0;font-size:13px}
.party-visibility input{accent-color:#b29643;width:14px;height:14px;margin:0}
.party-note{font-size:12px;color:var(--party-muted)}
.party-warning{font-size:13px;color:var(--party-warn);border-left:2px solid #cb8149;padding-left:8px}
.party-empty{padding:8px 0;color:var(--party-muted)}
/* Confirmation modal: the only blocking party surface */
.party-modal-overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;padding:16px;box-sizing:border-box;background:#0005;z-index:180;pointer-events:auto}
.party-modal{width:350px;max-width:100%;max-height:calc(100% - 100px);overflow:auto;background:linear-gradient(#49301d,#201a0e);border:3px double #d8ba61;box-shadow:0 6px 35px #000b;padding:18px}
.party-modal h2{margin-bottom:12px}
.party-modal-actions{display:flex;gap:12px;justify-content:center;margin-top:16px;flex-wrap:wrap}
@media(max-width:700px){.party-dock{width:184px}.party-hud{max-height:calc(100vh - 230px)}.party-manager{left:50%;transform:translateX(-50%);top:60px;width:min(372px,calc(100% - 20px));max-height:calc(100% - 170px)}.party-header{cursor:default}}
@media(max-height:560px){.party-dock{top:80px}.party-hud{max-height:calc(100vh - 190px)}.party-manager{top:16px;max-height:calc(100% - 100px)}.party-modal{max-height:calc(100% - 70px)}}
@media(prefers-reduced-motion:reduce){.party-button:active:not(:disabled),.ps-button:active:not(:disabled){transform:none}.party-member.is-danger .party-gauge-hp,.party-invite-pill,.party-invite-card{animation:none}.party-gauge-fill,.party-invite-progress-fill{transition:none}}
/* Teleport palette (matches map-teleport.css and guild-panel.css) for every party surface:
   roster HUD, manager, modal, member menu, invitation card and the party search panel. Rules above keep layout. */
.party-dock,.party-manager,.party-modal,.party-menu,.party-search-panel,.ps-notice,.party-invite-card,.party-invite-pill{
  --party-gold:#a98a45;--party-gold-soft:#aa873f;--party-ink:#ead497;--party-muted:#c9b27a;--party-faint:#a8925f;
  --party-body:#1d160c;--party-head:transparent;--party-row:#160f08;--party-row-hover:#2a1d0f;--party-line:#6d5627;
  --party-warn:#ff9a7a;--party-good:#a5f2d5;--party-danger:#ff9a7a;text-shadow:none}
/* Flat bronze buttons; same selectors as above so these later rules win */
.party-button,.ps-button{background:#281b10;border-color:#aa873f;box-shadow:none;color:#ead497;text-shadow:none}
.party-button:hover:not(:disabled),.ps-button:hover:not(:disabled){background:#493218;color:#ead497}
.party-button[aria-pressed=true],.ps-button[aria-pressed=true]{background:#6b4a1c;border-color:#e0bb62;color:#fff2b8;box-shadow:none}
.party-button.is-primary,.ps-button.is-primary{background:#6b4a1c;border-color:#e0bb62;color:#fff2b8}
.party-button.is-primary:hover:not(:disabled),.ps-button.is-primary:hover:not(:disabled){background:#7d5822}
.party-button.is-danger,.ps-button.is-danger{background:#2a140c;border-color:#a0573e;color:#ff9a7a}
.party-button.is-danger:hover:not(:disabled),.ps-button.is-danger:hover:not(:disabled){background:#3d1d10}
.party-button kbd{border-color:#aa873f;color:#fff2b8}
.party-button:focus-visible,.ps-button:focus-visible{outline-color:#fff3a4}
/* Roster HUD: sits over the 3D scene, so it keeps a text shadow and slight translucency */
.party-hud{background:#1d160ce0;border:1px solid #a98a45;box-shadow:inset 0 0 0 1px #4a3a18,0 3px 10px #0007;text-shadow:1px 1px 1px #000}
.party-hud .party-button{text-shadow:none}
.party-hud-header{border-bottom:1px solid #6d5627}
.party-hud-title{color:#ffdf7a;font-weight:bold}
.party-hud-members{scrollbar-color:#8c7036 #1d160c}
.party-member{border-color:#3a2c14}
.party-member-compact{border-color:#3a2c14;background:#160f08cc}
.party-member-compact:hover{background:#2a1d0f;border-color:#aa873f}
.party-crown{color:#ffdf7a}
.party-member-name{color:#ead497}
.party-member.is-leader .party-member-name{color:#ffdf7a}
.party-member-name:disabled{color:#c9b27a}
.party-member.is-away .party-member-name{color:#a8925f}
.party-member.is-away .party-member-meta{color:#8f7f5a}
.party-member.is-dead .party-member-meta{color:#ff9a7a}
.party-gauge{background:#100b05;border-color:#5a4520}
.party-gauge.is-unknown .party-gauge-text{color:#c9b27a}
/* Manager */
.party-manager{border:2px solid #a98a45;box-shadow:inset 0 0 0 2px #4a3a18,0 6px 24px rgba(0,0,0,.6);padding:2px}
.party-header{border-bottom:1px solid #6d5627}
.party-header h2,.party-modal h2{font:bold 16px/22px var(--party-font);color:#ffdf7a;letter-spacing:2px}
.party-status{background:#281b10;border-bottom:1px solid #3a2c14;color:#ead497}
.party-status[data-tone=success]{background:#16140c;color:#a5f2d5}
.party-status[data-tone=warning]{background:#2a140c;color:#ff9a7a}
.party-status[data-tone=pending]{background:#281b10;color:#f0d79a}
.party-content{scrollbar-color:#8c7036 #1d160c}
.party-footer{background:transparent;border-top:1px solid #6d5627}
.party-help{border-color:#aa873f;color:#c9b27a}
.party-invite-target{border-color:#6d5627;background:#160f08}
.party-invite-label strong{color:#fff2b8}
.party-nearby-select{border-color:#8c7036;background:#f6f0dc;color:#1d160c;color-scheme:light;min-height:30px}
.party-nearby-select option{background:#f6f0dc;color:#1d160c}
.party-nearby-select:focus-visible{outline:2px solid #e0bb62;outline-offset:1px}
.party-member-actions{border-top-color:#3a2c14}
.party-teleport-guide{border-color:#6d5627;background:#160f08}
.party-teleport-guide h3{color:#d9a35a}
.party-teleport-cost{color:#ffdf7a;border-color:#6d5627}
.party-rules,.party-recruit{border-color:#6d5627}
.party-rules legend,.party-recruit legend,.party-join-label{color:#d9a35a}
.party-visibility input{accent-color:#b38a3c}
.party-warning{border-left-color:#a0573e}
/* Modal, menu and invitation card share the teleport frame */
.party-modal,.party-invite-card{background:#1d160c;border:2px solid #a98a45;box-shadow:inset 0 0 0 2px #4a3a18,0 6px 24px rgba(0,0,0,.6)}
.party-modal h2{text-align:center;padding-bottom:6px;border-bottom:1px solid #6d5627}
.party-modal-overlay{background:#0a070380}
.party-menu{background:#1d160c;border-color:#a98a45;box-shadow:inset 0 0 0 1px #4a3a18,0 6px 18px #000b}
.party-menu-title{color:#ffdf7a;border-bottom-color:#6d5627}
.party-invite-head h3{font:bold 15px/22px var(--party-font);color:#ffdf7a;letter-spacing:1px}
.party-invite-progress{background:#160f08;border-color:#6d5627}
.party-invite-progress-fill{background:#e0bb62}
.party-invite-pill{background:#6b4a1c;border-color:#e0bb62;color:#fff2b8}
@keyframes party-pulse{50%{box-shadow:0 0 8px 1px #e0bb6299}}
