File size: 30,990 Bytes
fcce7e3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6468c17
fcce7e3
 
 
 
 
 
 
 
 
 
3597f5a
 
 
 
 
6468c17
fcce7e3
 
 
 
 
 
 
 
b51e03a
 
 
 
 
 
 
 
 
fcce7e3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6468c17
fcce7e3
 
 
6468c17
 
fcce7e3
6468c17
fcce7e3
 
 
 
 
 
 
6468c17
fcce7e3
 
 
6468c17
 
bebd577
 
 
 
 
 
 
 
 
6468c17
bebd577
 
 
 
 
 
 
6468c17
bebd577
 
 
6468c17
bebd577
 
 
 
 
6468c17
bebd577
 
 
 
 
 
 
 
6468c17
bebd577
6468c17
bebd577
 
6468c17
 
bebd577
 
6468c17
bebd577
 
 
 
 
6468c17
bebd577
 
 
 
 
 
 
 
 
6468c17
bebd577
 
 
6468c17
bebd577
 
 
 
 
6468c17
bebd577
 
 
6468c17
 
 
bebd577
 
6468c17
bebd577
6468c17
bebd577
 
 
 
6468c17
 
bebd577
6468c17
bebd577
 
 
 
 
 
b113913
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b51e03a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
/* ============================================================================
   ARMORY — styling for the tabbed store rebuilt in src/storeui.js.
   #storeList is a flex column (see ui.css) whose children stretch to its
   full width by default, so nothing here needs vw units — every box is
   sized off its own flex/percentage parent, which is what keeps a panel
   this narrow from ever losing its right edge.
   ============================================================================ */

/* ---- header: cores / spent / maxed ---------------------------------------- */
.armStats{display:flex;gap:7px;box-sizing:border-box;margin-bottom:1px;min-width:0;max-width:100%}
.armStat{flex:1;min-width:0;text-align:center;border-radius:10px;padding:7px 4px;
  border:1px solid transparent;background:var(--panelG) padding-box,var(--steelB) border-box;
  box-shadow:0 3px 9px rgba(0,0,0,.4),inset 0 1px 0 rgba(255,255,255,.09)}
.armStat b{display:block;font-family:var(--fT);font-size:15px;color:#8be8ff;
  font-variant-numeric:tabular-nums;text-shadow:0 0 8px rgba(65,200,255,.35)}
.armStat span{display:block;font-size:9px;letter-spacing:.13em;color:#7fa8c4;
  font-weight:700;margin-top:2px;white-space:nowrap}

/* ---- tabs ------------------------------------------------------------------
   .tabRow/.tabBtn come from ui.css; tabCt is the small per-category maxed
   counter added on top of that shared look. */
.tabCt{opacity:.7;font-size:9px;margin-left:1px}
.armTabWrap{position:sticky;top:0;z-index:6;flex:0 0 auto;min-width:0;max-width:100%;overflow:hidden;
  padding-top:2px;background:linear-gradient(180deg,rgba(3,8,14,.99),rgba(3,8,14,.92) 82%,transparent)}
/* The shared .tabRow is sticky itself. Here the wrapper owns stickiness so it
   keeps a real flex height even when a long inventory list needs to scroll. */
#armTabs{position:static;width:100%;box-sizing:border-box;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:4px;overflow:visible}
#armTabs .tabBtn{flex:none;min-width:0;width:100%;justify-content:center;padding:8px 2px;font-size:8px;letter-spacing:.06em}
#armTabs .tabBtn .tEm{font-size:11px}
.armTabHint{display:none}
#storeList{padding-bottom:calc(var(--sab) + 28px)}
.armTabHint{text-align:right;margin:-3px 3px 2px;font-family:var(--fT);font-size:9px;
  letter-spacing:.12em;color:#5f88a6;font-weight:800;pointer-events:none}
#armTabs.fits+.armTabHint{display:none}
.armCatIntro{padding:8px 10px 9px;border-radius:10px;text-align:left;box-sizing:border-box;min-width:0;max-width:100%;
  background:linear-gradient(90deg,rgba(35,86,120,.32),rgba(10,22,35,.2));
  border-left:3px solid #41c8ff}
.armCatIntro b{display:block;font-family:var(--fT);font-size:9px;letter-spacing:.16em;color:#9eeaff}
.armCatIntro span{display:block;margin-top:2px;font-size:10px;line-height:1.35;color:#8fb3cc;font-weight:600}

/* Four-section mobile storefront: cinematic hero, one sub-filter row and a
   reviewable basket. The basket stays in normal document flow so it never
   covers the Android system-safe footer or traps the scroll position. */
.armMarketHero{position:relative;min-height:92px;display:flex;align-items:center;gap:12px;padding:11px 13px;border-radius:14px;overflow:hidden;text-align:left;border:1px solid rgba(87,202,245,.32);background:radial-gradient(circle at 12% 42%,rgba(57,190,239,.24),transparent 36%),linear-gradient(110deg,rgba(12,43,65,.97),rgba(5,13,22,.99));box-shadow:0 8px 22px rgba(0,0,0,.38)}
.armMarketHero:after{content:'';position:absolute;right:-42px;top:-70px;width:180px;height:180px;border-radius:50%;border:10px double rgba(89,211,255,.07)}.armMarketHero>div{flex:0 0 70px;height:70px;display:grid;place-items:center;border-radius:12px;background:rgba(2,8,14,.58);box-shadow:inset 0 0 17px rgba(84,210,255,.18)}.armMarketHero .itemArt{width:66px!important;height:66px!important;object-fit:contain}.armMarketHero>span{position:relative;min-width:0}.armMarketHero i,.armMarketHero b,.armMarketHero small{display:block}.armMarketHero i{color:#66d9ff;font:900 7px var(--fT);font-style:normal;letter-spacing:.16em}.armMarketHero b{margin-top:5px;color:#f2fbff;font:900 15px var(--fT);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.armMarketHero small{margin-top:5px;color:#9dc3d7;font:700 9px/1.3 var(--fU)}
.armMarketFilters{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:5px}.armMarketFilter{min-width:0;min-height:43px;padding:4px;border-radius:9px;color:#698da4;border:1px solid rgba(96,153,188,.23);background:rgba(7,17,29,.9);font:850 7px/1 var(--fT);letter-spacing:.04em}.armMarketFilter.on{color:#e8f9ff;border-color:#53cdf8;background:linear-gradient(180deg,rgba(35,110,148,.76),rgba(10,40,62,.94));box-shadow:0 0 10px rgba(61,197,244,.2)}
.armCartBar{display:flex;align-items:center;justify-content:space-between;gap:10px;min-height:54px;padding:8px 10px;border:1px solid rgba(255,201,95,.34);border-radius:11px;background:linear-gradient(100deg,rgba(66,48,17,.7),rgba(9,20,32,.96));box-shadow:inset 3px 0 #ffd469;text-align:left}.armCartBar div{min-width:0}.armCartBar span,.armCartBar b{display:block}.armCartBar span{color:#b8924f;font:850 7px/1 var(--fT);letter-spacing:.12em}.armCartBar b{margin-top:4px;color:#ffe49a;font:900 10px/1 var(--fT)}.armCartBar button{flex:0 0 76px;min-height:38px;border-radius:8px;color:#ffdf88;border:1px solid rgba(255,207,98,.45);background:rgba(45,31,8,.6);font:900 8px var(--fT);letter-spacing:.08em}
.armCartPanel{padding:9px;border:1px solid rgba(255,199,88,.3);border-radius:12px;background:linear-gradient(160deg,rgba(35,29,18,.97),rgba(5,12,20,.99));box-shadow:0 8px 23px rgba(0,0,0,.4)}.armCartRows{display:flex;flex-direction:column;gap:5px}.armCartRow{display:grid;grid-template-columns:32px minmax(0,1fr) auto 34px;gap:7px;align-items:center;min-height:50px;padding:5px 5px 5px 8px;border-radius:8px;background:rgba(9,19,30,.78);border:1px solid rgba(115,153,178,.16);text-align:left}.armCartRow>i{font-size:20px;font-style:normal;text-align:center}.armCartRow span{min-width:0}.armCartRow span b,.armCartRow span small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.armCartRow span b{color:#e8f7ff;font:850 8.5px var(--fT)}.armCartRow span small{margin-top:3px;color:#6e90a5;font:750 7px var(--fT);letter-spacing:.04em}.armCartRow strong{color:#ffdf83;font:900 9px var(--fT)}.armCartRow>button{width:34px;height:34px;border-radius:7px;color:#ff9e8d;border:1px solid rgba(255,111,91,.34);background:rgba(60,17,13,.45);font-size:18px}.armCartEmpty{padding:15px 10px;color:#7897aa;font:650 9px/1.4 var(--fU);text-align:center}.armCartTotal{display:flex;justify-content:space-between;align-items:center;margin-top:7px;padding:9px 4px 6px;border-top:1px solid rgba(255,201,91,.19)}.armCartTotal span{color:#9d7c42;font:900 8px var(--fT);letter-spacing:.14em}.armCartTotal b{color:#ffe18a;font:900 14px var(--fT)}.armCartCheckout{width:100%;min-height:50px;border-radius:9px;color:#101008;border:1px solid #fff1ac;background:linear-gradient(180deg,#ffe98d,#d9a82c);box-shadow:0 0 15px rgba(255,197,62,.22);font:950 9px var(--fT);letter-spacing:.08em}.armCartCheckout:disabled{color:#637381;border-color:#4b5d6b;background:rgba(20,31,41,.85);box-shadow:none}.armCommerceState{margin-top:7px;padding:8px 9px;border-radius:8px;border:1px solid rgba(116,147,168,.2);background:rgba(3,9,15,.64);text-align:left}.armCommerceState b,.armCommerceState span{display:block}.armCommerceState b{color:#7e9daf;font:850 7px var(--fT);letter-spacing:.08em}.armCommerceState span{margin-top:4px;color:#607d90;font:650 8px/1.35 var(--fU)}.armCommerceState.ready b{color:#75e7a6}

/* ---- perk rows -------------------------------------------------------------
   Reuses .sItem/.sEm/.sTx/.sTier/.sDs/.sBuy from ui.css so the Armory keeps
   the game's established look; armIt only adds the bits those rules don't
   already cover — the effect line and the "why greyed out" note. */
.armIt{box-sizing:border-box;min-width:0;max-width:100%}
.armIt .sTx{min-width:0}
.fxRow{margin-top:4px;display:flex;align-items:baseline;flex-wrap:wrap;gap:4px;
  font-size:10.5px;font-weight:700;line-height:1.35}
.fxNow{color:#bfe0f5}
.fxNow.dim{color:#5c7f99;font-weight:600;font-style:italic}
.fxArrow{color:#5c7f99;font-weight:700}
.fxNext{color:var(--gold)}
.sWarn{margin-top:3px;font-size:9.5px;font-weight:700;color:#ff9c8a}
.sBuy.cant{opacity:.45;filter:saturate(.5)}
.sItem.armIt.cant{opacity:.88}

/* purchase feedback: a short glow so a buy reads as an event, not a silent
   number change underneath the tier badge. */
@keyframes armFlash{
  0%{box-shadow:0 0 0 rgba(255,210,87,0);transform:scale(1)}
  35%{box-shadow:0 0 20px rgba(255,210,87,.8);transform:scale(1.015)}
  100%{box-shadow:0 3px 9px rgba(0,0,0,.45);transform:scale(1)}
}
.sItem.flash{animation:armFlash .6s ease}

/* ---- cosmetic tab: unchanged swatch grid, just no longer glued to the
   bottom of an unsorted list ---------------------------------------------- */
#colorRow{flex-wrap:wrap}

/* ---- persistent mission inventory ---------------------------------------- */
.invLegend{display:flex;flex-wrap:wrap;gap:5px;justify-content:center;padding:2px 0}
.invLegend span{--rar:#aeb9c6;display:flex;align-items:center;gap:3px;font:700 9px var(--fT);letter-spacing:.06em;color:var(--rar)}
.invLegend i{width:6px;height:6px;border-radius:50%;background:var(--rar);box-shadow:0 0 5px var(--rar)}
.invSlotStrip{display:grid;grid-template-columns:repeat(3,1fr);gap:5px}
.invSlotStrip div{min-width:0;padding:7px 5px;border-radius:8px;text-align:center;background:rgba(14,27,42,.82);border:1px solid rgba(102,153,188,.2)}
.invSlotStrip span{display:block;font:800 9px var(--fT);letter-spacing:.12em;color:#6e95ae}
.invSlotStrip b{display:block;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font:800 9px var(--fT);color:#d9f1ff}
.invReadyNote{padding:7px 9px;border-radius:8px;text-align:center;background:rgba(19,50,68,.54);
  color:#8bcce9;font:700 9px var(--fT);letter-spacing:.05em}
.invItem{--rar:#aeb9c6;display:flex;align-items:center;gap:9px;min-height:64px;padding:8px 9px;border-radius:11px;text-align:left;
  background:linear-gradient(180deg,rgba(29,43,59,.96),rgba(9,16,26,.98));border:1px solid rgba(112,159,190,.25);border-left:3px solid var(--rar);
  box-shadow:0 3px 9px rgba(0,0,0,.42),inset 0 1px 0 rgba(255,255,255,.06);touch-action:manipulation}
.invItem.equipped{box-shadow:0 0 14px var(--rar),inset 0 1px 0 rgba(255,255,255,.12)}
.invItem.locked{opacity:.43;filter:saturate(.3)}
.invItem:active:not(.locked){transform:scale(.98)}
.invEm{flex:0 0 34px;text-align:center;color:var(--rar);font-size:27px;line-height:1;filter:drop-shadow(0 0 5px var(--rar))}
.invTx{flex:1;min-width:0}.invTx i{display:block;color:var(--rar);font:800 9px var(--fT);letter-spacing:.12em;font-style:normal}
.invTx b{display:block;margin-top:2px;color:#e9f7ff;font:800 11.5px var(--fT);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.invTx span{display:block;margin-top:3px;color:#93b4ca;font-size:10px;font-weight:600;line-height:1.25}
.invAct{flex:0 0 66px;min-height:40px;padding:5px;display:flex;align-items:center;justify-content:center;text-align:center;border-radius:8px;
  color:var(--rar);background:rgba(5,11,18,.68);border:1px solid var(--rar);font:800 9px var(--fT);letter-spacing:.04em}
.invItem.locked .invAct{border-color:#607486;color:#8495a3;font-size:9px}

/* ---- TWO-LAYER ACCOUNT ARMORY / SESSION LOADOUT ---------------------------
   Isolated `armInv*` names keep this denser interaction model from changing
   perk rows, Development modules, or the in-match inventory presentation. */
.armInvLayerHead{display:flex;align-items:stretch;gap:8px;padding:10px;border-radius:12px;text-align:left;
  border:1px solid rgba(91,177,226,.3);background:linear-gradient(135deg,rgba(21,56,81,.94),rgba(7,16,27,.98));
  box-shadow:0 5px 16px rgba(0,0,0,.4),inset 0 1px 0 rgba(255,255,255,.07)}
.armInvLayerHead.session{border-color:rgba(255,205,91,.34);background:linear-gradient(135deg,rgba(67,49,19,.58),rgba(8,17,29,.98))}
.armInvLayerHead>div:first-child{flex:1;min-width:0}
.armInvLayerHead i{display:block;color:#70d9ff;font:800 9px var(--fT);font-style:normal;letter-spacing:.17em}
.armInvLayerHead.session i{color:#ffd86d}
.armInvLayerHead>div>b{display:block;margin-top:3px;color:#e8f8ff;font:900 15px var(--fT);letter-spacing:.09em}
.armInvLayerHead>div>span{display:block;margin-top:4px;color:#9abbd1;font-size:10px;font-weight:600;line-height:1.3}
.armInvCapacity{flex:0 0 88px;display:flex!important;flex-direction:column;align-items:center;justify-content:center;padding:6px;
  border-radius:9px;text-align:center;background:rgba(3,10,17,.6);border:1px solid rgba(117,196,238,.22)}
.armInvCapacity b{margin:0!important;color:#8ce7ff!important;font-size:18px!important;letter-spacing:.02em!important;font-variant-numeric:tabular-nums}
.armInvLayerHead.session .armInvCapacity b{color:#ffe083!important}
.armInvCapacity span{margin-top:2px!important;color:#779ab1!important;font:800 9px var(--fT)!important;letter-spacing:.1em!important}
.armInvMeters{display:grid;grid-template-columns:repeat(3,1fr);gap:5px}
.armInvMeters div{min-width:0;padding:7px 4px;border-radius:8px;text-align:center;background:rgba(10,23,36,.86);border:1px solid rgba(90,147,182,.18)}
.armInvMeters b{display:block;color:#d9f4ff;font:800 10px var(--fT);font-variant-numeric:tabular-nums}
.armInvMeters span{display:block;margin-top:2px;color:#6389a2;font:800 9px var(--fT);letter-spacing:.08em;white-space:nowrap}

.armInvFilters{display:flex;gap:5px;max-width:100%;overflow-x:auto;padding:1px 0 3px;scrollbar-width:none;overscroll-behavior-x:contain}
.armInvFilters::-webkit-scrollbar{display:none}
.armInvFilter{flex:0 0 auto;min-width:72px;min-height:46px;padding:0 10px;border-radius:9px;color:#789cb5;
  border:1px solid rgba(99,155,190,.26);background:linear-gradient(180deg,rgba(23,39,56,.96),rgba(8,16,27,.97));
  font:800 9px var(--fT);letter-spacing:.08em;touch-action:manipulation}
.armInvFilter.on{color:#d8f6ff;border-color:#52cfff;background:linear-gradient(180deg,rgba(37,112,151,.8),rgba(12,45,70,.96));box-shadow:0 0 10px rgba(65,200,255,.28)}

.armInvPreview{--rar:#aeb9c6;display:grid;grid-template-columns:58px minmax(0,1fr) 82px;gap:8px;align-items:center;padding:10px;border-radius:13px;text-align:left;
  border:1px solid var(--rar);border-left:4px solid var(--rar);background:radial-gradient(circle at 8% 20%,color-mix(in srgb,var(--rar) 18%,transparent),transparent 36%),linear-gradient(145deg,rgba(27,42,58,.98),rgba(5,12,21,.99));
  box-shadow:0 4px 15px rgba(0,0,0,.48),0 0 14px color-mix(in srgb,var(--rar) 16%,transparent)}
.armInvPreviewArt{width:54px;height:54px;display:flex;align-items:center;justify-content:center;border-radius:10px;
  background:rgba(2,8,14,.55);box-shadow:inset 0 0 12px color-mix(in srgb,var(--rar) 22%,transparent)}
.armInvPreviewArt .itemArt{width:54px!important;height:54px!important;object-fit:contain}
.armInvPreviewInfo{min-width:0}.armInvPreviewInfo i{display:block;color:var(--rar);font:800 9px var(--fT);font-style:normal;letter-spacing:.1em}
.armInvPreviewInfo b{display:block;margin-top:3px;color:#f1faff;font:900 13px var(--fT);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.armInvPreviewInfo span{display:block;margin-top:4px;color:#799bb2;font:700 9px var(--fT);letter-spacing:.07em}
.armInvExact{align-self:stretch;min-width:0;padding:6px 4px;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;border-radius:9px;
  background:rgba(2,8,14,.67);border:1px solid color-mix(in srgb,var(--rar) 45%,transparent)}
.armInvExact span{color:#7697ad;font:800 9px var(--fT);letter-spacing:.08em}.armInvExact b{margin-top:2px;color:var(--rar);font:900 15px var(--fT)}
.armInvExact i{margin-top:2px;color:#bad2e1;font:800 9px var(--fT);font-style:normal;letter-spacing:.05em}
.armInvPreview p{grid-column:1/-1;margin:0;color:#acc7d8;font-size:10.5px;font-weight:600;line-height:1.35}
.armInvCompare{grid-column:1/-1;padding:6px 8px;border-radius:7px;color:#d0e9f5;background:rgba(51,102,132,.18);
  border-left:2px solid var(--rar);font:800 9px var(--fT);letter-spacing:.055em;line-height:1.35}
.armInvCommit{grid-column:1/-1;min-height:48px;border-radius:9px;color:#081018;border:1px solid transparent;
  background:linear-gradient(180deg,color-mix(in srgb,var(--rar) 74%,white),var(--rar));font:900 9px var(--fT);letter-spacing:.1em;touch-action:manipulation}
.armInvCommit.disabled{color:#637889;border-color:#526575;background:rgba(19,30,41,.85)}
.armInvPreview small{grid-column:1/-1;color:#6f90a6;font-size:9px;font-weight:600;line-height:1.35;text-align:center}
.armInvSectionLabel{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:3px 2px}
.armInvSectionLabel b{color:#93ddfa;font:800 9px var(--fT);letter-spacing:.14em}.armInvSectionLabel span{color:#607f94;font:800 9px var(--fT);letter-spacing:.07em}

.armVaultList{display:flex;flex-direction:column;gap:6px}
.armVaultItem{--rar:#aeb9c6;width:100%;min-height:68px;display:flex;align-items:center;gap:9px;padding:7px 8px;border-radius:10px;text-align:left;
  color:inherit;border:1px solid rgba(105,149,178,.23);border-left:3px solid var(--rar);background:linear-gradient(180deg,rgba(25,39,54,.96),rgba(7,14,23,.98));
  box-shadow:0 3px 8px rgba(0,0,0,.38);touch-action:manipulation}
.armVaultItem.selected{border-color:var(--rar);box-shadow:0 0 12px color-mix(in srgb,var(--rar) 34%,transparent),inset 0 1px 0 rgba(255,255,255,.08)}
.armVaultItem.equipped{background:linear-gradient(90deg,color-mix(in srgb,var(--rar) 13%,rgba(15,28,42,.98)),rgba(7,14,23,.98))}
.armVaultItem.locked{opacity:.42;filter:saturate(.35)}
.armVaultArt{flex:0 0 42px;height:44px;display:flex;align-items:center;justify-content:center}.armVaultArt .itemArt{width:40px!important;height:40px!important;object-fit:contain}
.armVaultCopy{flex:1;min-width:0}.armVaultCopy i{display:block;color:var(--rar);font:800 9px var(--fT);font-style:normal;letter-spacing:.1em}
.armVaultCopy b{display:block;margin-top:2px;color:#e9f7ff;font:800 10.5px var(--fT);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.armVaultCopy em{display:block;margin-top:3px;color:#93b5ca;font-size:9px;font-weight:700;font-style:normal}
.armVaultState{flex:0 0 65px;min-height:34px;display:flex;align-items:center;justify-content:center;padding:3px;border-radius:7px;text-align:center;
  color:var(--rar);background:rgba(2,8,14,.56);border:1px solid color-mix(in srgb,var(--rar) 60%,transparent);font:800 9px var(--fT);letter-spacing:.05em}
.armInvEmpty{padding:18px 12px;border-radius:10px;text-align:center;background:rgba(10,22,35,.74);border:1px dashed rgba(95,153,189,.3)}
.armInvEmpty b{display:block;color:#a6cadd;font:800 9px var(--fT);letter-spacing:.1em}.armInvEmpty span{display:block;margin-top:4px;color:#6d8da2;font-size:9.5px;font-weight:600}

.armLoadoutRule{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 10px;border-radius:9px;text-align:left;
  background:linear-gradient(90deg,rgba(111,77,20,.35),rgba(11,24,38,.88));border-left:3px solid #ffd567}
.armLoadoutRule b{color:#ffe08a;font:900 9px var(--fT);letter-spacing:.1em;white-space:nowrap}.armLoadoutRule span{color:#a9bdc9;font-size:9px;font-weight:600;text-align:right}
.armLoadoutGrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px}
.armLoadSlot{--rar:#758da0;min-width:0;min-height:126px;display:flex;flex-direction:column;padding:8px;border-radius:11px;text-align:left;
  border:1px solid color-mix(in srgb,var(--rar) 48%,transparent);border-top:3px solid var(--rar);background:linear-gradient(150deg,color-mix(in srgb,var(--rar) 10%,rgba(20,34,48,.98)),rgba(5,12,20,.99));box-shadow:0 4px 10px rgba(0,0,0,.4)}
.armLoadSlot.empty{border-style:dashed;opacity:.86}.armLoadSlotTop{display:flex;justify-content:space-between;gap:5px}.armLoadSlotTop i{color:var(--rar);font:900 9px var(--fT);font-style:normal;letter-spacing:.1em}
.armLoadSlotTop span{color:#6c8da3;font:800 9px var(--fT);letter-spacing:.07em}.armLoadSlot>b{margin-top:14px;color:#99b6c8;font:800 9px var(--fT)}
.armLoadSlot>small{display:block;margin-top:4px;color:#6e8da1;font-size:9px;font-weight:600;line-height:1.25}
.armLoadEquipped{display:flex;align-items:center;gap:6px;margin-top:8px;min-width:0}.armLoadEquipped>span{flex:0 0 38px;height:38px;display:flex;align-items:center;justify-content:center}
.armLoadEquipped .itemArt{width:36px!important;height:36px!important;object-fit:contain}.armLoadEquipped>div{min-width:0}.armLoadEquipped b{display:block;color:#edf9ff;font:800 9px var(--fT);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.armLoadEquipped em{display:block;margin-top:3px;color:var(--rar);font-size:9px;font-weight:800;font-style:normal;line-height:1.2}
.armLoadSlot button{width:100%;min-height:44px;margin-top:auto;border-radius:8px;color:var(--rar);border:1px solid color-mix(in srgb,var(--rar) 68%,transparent);
  background:rgba(4,10,17,.7);font:900 9px var(--fT);letter-spacing:.09em;touch-action:manipulation}
.armLoadSlot.empty button{color:#9bdfff;border-color:#3aaedc;background:rgba(25,83,111,.25)}
.armMissionPackage{padding:9px;border-radius:12px;text-align:left;background:linear-gradient(160deg,rgba(18,35,51,.96),rgba(5,12,20,.99));border:1px solid rgba(91,153,190,.24)}
.armMissionFx{--rar:#aeb9c6;display:grid;grid-template-columns:8px minmax(0,1fr) auto;gap:7px;align-items:center;padding:7px 4px;border-bottom:1px solid rgba(99,142,168,.13)}
.armMissionFx>i{width:7px;height:7px;border-radius:50%;background:var(--rar);box-shadow:0 0 6px var(--rar)}.armMissionFx div{min-width:0}
.armMissionFx div b{display:block;color:#dceef7;font:800 9px var(--fT);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.armMissionFx div span{display:block;margin-top:2px;color:#698ba0;font:700 9px var(--fT);letter-spacing:.07em}
.armMissionFx strong{max-width:115px;color:var(--rar);font:800 9px var(--fT);text-align:right}.armMissionPackage>p{margin:8px 3px 1px;color:#738fa2;font-size:9px;font-weight:600;line-height:1.35;text-align:center}
.armReturnVault{min-height:48px;border-radius:9px;color:#b9ecff;border:1px solid #46bde9;background:linear-gradient(180deg,rgba(37,100,135,.7),rgba(12,39,61,.94));
  font:900 9px var(--fT);letter-spacing:.11em;touch-action:manipulation}

@media(max-width:350px){
  .armInvPreview{grid-template-columns:50px minmax(0,1fr) 72px;padding:8px;gap:6px}
  .armInvPreviewArt,.armInvPreviewArt .itemArt{width:48px!important;height:48px!important}
  .armInvCapacity{flex-basis:78px}.armLoadoutGrid{grid-template-columns:1fr}
}

/* ---------- ITEM 5b — chassis lock picker (src/storeui.js) ----------
   A type-scoped consumable needs a target before it can be readied, so the
   chooser sits between the effect copy and the commit button, where the eye
   already is. Chips are 34px tall and wrap: 26 chassis is a lot of names, and
   a horizontal scroller hides the ones at the end. */
.armInvLock{margin:9px 0 4px;padding:9px 10px;border-radius:10px;
  border:1px solid rgba(120,160,190,.32);background:rgba(6,14,23,.5)}
.armInvLock>span{display:block;color:#79bfdf;font:900 9px/1.4 var(--fT);letter-spacing:.16em}
.armInvLock>i{display:block;margin-top:6px;color:#9fc4dc;font:600 10.5px/1.35 var(--fU);font-style:normal}
.armInvLockRow{display:flex;flex-wrap:wrap;gap:5px;margin-top:7px}
.armInvChip{min-height:34px;padding:6px 9px;border-radius:8px;border:1px solid transparent;
  background:var(--panelG2) padding-box,var(--steelB) border-box;color:#cfe6f6;
  font:800 9px/1.1 var(--fT);letter-spacing:.06em;white-space:nowrap}
.armInvChip.on{background:var(--panelG2) padding-box,var(--goldB) border-box;color:#ffe9ad;
  box-shadow:0 0 12px rgba(255,200,90,.25)}
.armInvChip:active{filter:brightness(1.25)}
.armInvLockOn{border-color:rgba(255,200,90,.45);display:flex;align-items:center;gap:9px}
.armInvLockOn>b{color:#ffe9ad;font:900 11px/1.2 var(--fT);letter-spacing:.1em}

/* ---------- STAGE 8 — META ECONOMY QUALITY ----------------------------------
   Glassmorphism storefront, pinned wallet, daily deals, purchase flash,
   restocking and locked-item teases. All cosmetic or off-line-first economy
   touches; nothing here adds a network call. */

/* ---- glass panel -----------------------------------------------------------
   The base .overlay is an opaque black sheet (rgba(3,7,14,.9), blur 6px). The
   Armory overrides it with a translucent tint and a heavier blur so the menu
   battlefield stays alive behind the store instead of being switched off. */
#armory{background:rgba(9,17,27,.55);backdrop-filter:blur(16px) saturate(1.25);-webkit-backdrop-filter:blur(16px) saturate(1.25)}

/* ---- pinned wallet + category bar ------------------------------------------
   One sticky wrapper carries both the currency HUD and the tabs; the shared
   .armTabWrap's own stickiness is disabled inside it so the two never fight. */
.armStickyHead{position:sticky;top:0;z-index:7;flex:0 0 auto;min-width:0;max-width:100%;
  margin:0 0 2px;padding:6px 0 4px;border-radius:12px;
  background:linear-gradient(180deg,rgba(4,10,16,.98),rgba(4,10,16,.9) 74%,rgba(4,10,16,.16))}
.armStickyHead .armTabWrap{position:static;padding-top:2px;background:none;z-index:auto}
.armStat.cr b{color:#8be8ff}
.armStat.rd b{color:#e3c9ff;text-shadow:0 0 8px rgba(182,124,255,.45)}

/* ---- daily deals ----------------------------------------------------------- */
.armDeals{border-radius:12px;padding:9px;text-align:left;min-width:0;max-width:100%;box-sizing:border-box;
  border:1px solid rgba(255,190,90,.28);background:linear-gradient(150deg,rgba(74,48,14,.55),rgba(14,24,36,.92));
  box-shadow:0 4px 12px rgba(0,0,0,.4)}
.armDealsHd{display:flex;align-items:center;justify-content:space-between;gap:8px}
.armDealsHd b{color:#ffd980;font:900 9px var(--fT);letter-spacing:.16em;white-space:nowrap}
.armDealsHd span{color:#b98a45;font:800 8.5px var(--fT);letter-spacing:.07em;text-align:right}
.armDealRow{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;margin-top:7px}
.armDeal{min-width:0;display:flex;flex-direction:column;align-items:center;gap:4px;padding:8px 4px;border-radius:10px;text-align:center;
  color:inherit;border:1px solid rgba(255,190,90,.22);background:rgba(5,11,18,.7);touch-action:manipulation}
.armDeal.sold{opacity:.55;filter:saturate(.4)}
.armDealArt{width:32px;height:32px;display:flex;align-items:center;justify-content:center}
.armDealArt .itemArt{width:30px!important;height:30px!important;object-fit:contain}
.armDealTx{min-width:0;max-width:100%}.armDealTx i{display:block;color:#e8c07a;font:800 8.5px var(--fT);font-style:normal;letter-spacing:.05em;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.armDealTx b{display:block;margin-top:2px;color:#f4f9fd;font:900 9px var(--fT)}
.armDealTx em{display:block;margin-top:2px;color:#8fa9ba;font-size:8.5px;font-weight:700;font-style:normal;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.armDealPrice{margin-top:2px;display:flex;align-items:baseline;justify-content:center;gap:4px;font:900 10px var(--fT)}
.armDealPrice s{color:#8b6b3c;font-size:9px;font-weight:700}
.armDealPrice b{color:#ffe9a3;text-shadow:0 0 8px rgba(255,200,90,.5)}
.armDeal.sold .armDealPrice{color:#7f96a6;font-size:9px}

/* ---- purchase flash overlay ------------------------------------------------
   pointer-events:none so the burst never swallows the tap that bought the
   item; JS removes it on a timer because renderArmory replaces innerHTML. */
.armBuyFlash{position:fixed;inset:0;z-index:999;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;
  pointer-events:none;
  background:radial-gradient(circle at 50% 46%,rgba(255,214,120,.3),rgba(8,12,20,.06) 42%,rgba(4,8,14,.5) 78%);
  animation:armFlashFade .9s ease both}
.armBuyFlash i{font-size:64px;line-height:1;filter:drop-shadow(0 0 18px rgba(255,200,90,.95));
  animation:armFlashPop .9s cubic-bezier(.18,.9,.3,1.35) both}
.armBuyFlash b{color:#ffe9ad;font:900 13px var(--fT);letter-spacing:.22em;text-shadow:0 0 14px rgba(255,190,80,.9);
  animation:armFlashPop .9s cubic-bezier(.18,.9,.3,1.35) both}
@keyframes armFlashFade{0%{opacity:0}25%{opacity:1}75%{opacity:1}100%{opacity:0}}
@keyframes armFlashPop{0%{transform:scale(.4);opacity:0}30%{transform:scale(1.12);opacity:1}45%{transform:scale(1)}100%{transform:scale(1.04) translateY(-8px);opacity:1}}

/* ---- store entrance --------------------------------------------------------
   Plays only on the first render of a visit (opening flag in renderArmory).
   Direct children stagger in with a slide; the category icons and deal cards
   pop afterwards so the panel reads as arriving whole, not as a list re-drawn.
   --i is set inline by renderArmory on every render and is harmless when the
   class is absent. */
@keyframes armSlideIn{from{opacity:0;transform:translateX(34px)}to{opacity:1;transform:none}}
@keyframes armIconIn{from{opacity:0;transform:scale(.5)}to{opacity:1;transform:scale(1)}}
#storeList.armEnter>*{animation:armSlideIn .42s cubic-bezier(.16,.84,.3,1) both;animation-delay:calc(var(--i,0)*.035s)}
#storeList.armEnter .tabBtn{animation:armIconIn .3s cubic-bezier(.16,.84,.3,1) both;animation-delay:calc(.18s + var(--i,0)*.04s)}
#storeList.armEnter .armDeal{animation:armIconIn .3s cubic-bezier(.16,.84,.3,1) both;animation-delay:calc(.3s + var(--i,0)*.05s)}

/* ---- loadout / inventory preview touches ----------------------------------- */
.armInvRestock{grid-column:1/-1;min-height:44px;border-radius:9px;color:#ffd980;
  border:1px solid rgba(255,190,90,.4);background:rgba(58,38,8,.5);
  font:900 9px var(--fT);letter-spacing:.1em;touch-action:manipulation}
.armVaultDelta{display:block;margin-top:3px;color:#6dff9a;font:800 8.5px var(--fT);letter-spacing:.04em;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.armVaultReq{display:block;margin-top:3px;color:#a8c4d8;font:800 8.5px var(--fT);letter-spacing:.05em;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
@media(hover:hover){
  /* Pointer devices get a hover highlight that also nudges the row so the
     stat-delta chip reads as being revealed, not just recoloured. */
  .armVaultItem:hover{border-color:var(--rar);transform:translateX(2px);
    box-shadow:0 0 10px color-mix(in srgb,var(--rar) 30%,transparent)}
}

/* ---- locked-item silhouette -------------------------------------------------
   A locked vault row blacks out its art into a shape with a lock glyph and
   names the unlock route in place of the effect line. */
.armVaultItem.locked .armVaultArt{position:relative;filter:brightness(.28) grayscale(1) contrast(1.5);opacity:.95}
.armVaultItem.locked .armVaultArt::after{content:'🔒';position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  font-size:17px;text-shadow:0 1px 3px #000}