Files
ark-stronghold-protocol/public/css/screens/lobby.css
T
sganggs f3658a0dd4 0.2.3: prepare follow-up fixes and client features (#407, #408, #410, #413, #431, #435, #436, #440, #444)
Add special-target activation without bypassing attack cadence, cooperative
card preferences and emotes, skill sound banks, per-operator voice choices,
text sizing, install prompts, closed-tab recovery and unanimous setup rerolls.
Retain late deployment elapsed time and resolve echo/counter pulses without
recursive hook overflow. Independent final review remains pending.

Golden: roster-016, roster-035, roster-036, roster-045;
boss-boss_1-pair, boss-boss_3-pair, boss-boss_5-pair, boss-boss_7-pair,
hidden-boss_9-pair; solo-HARD-9-boosted: Lemuen attack cadence.
diy-132: Necras extra activation targets.
coop2-NORMAL-14-standins: cooperative purchase preference and simulation fixes.
hidden-boss_10-solo: echo pulse FIFO resolution.
See DESIGN 28.13-28.24 for assumptions, sources and contributor credit.
2026-10-09 22:55:24 +08:00

241 lines
11 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* ==========================================================================================
screens/lobby.css — mode cards (独立/同盟), difficulty cards, create button, join panel.
========================================================================================== */
.lobby-body {
display: grid;
grid-template-columns: minmax(0, 1.25fr) minmax(0, 1fr);
gap: .5rem;
width: 100%;
max-width: 19.2rem;
margin: 0 auto;
padding: .36rem .6rem .4rem;
align-content: start;
}
.lobby-left, .lobby-right { display: flex; flex-direction: column; min-width: 0; }
/* ---- mode cards ------------------------------------------------------------------------------------ */
.mode-cards { display: grid; grid-template-columns: 1fr 1fr; gap: .24rem; margin-bottom: .34rem; }
.mode-card {
--bk-c: transparent;
--bk-l: .2rem;
position: relative;
display: flex;
flex-direction: column;
align-items: flex-start;
gap: .22rem;
min-height: 4.3rem;
padding: .34rem .32rem .3rem;
overflow: hidden;
text-align: left;
background: linear-gradient(180deg, rgba(28, 34, 31, .92), rgba(13, 16, 15, .94));
border: 1px solid var(--line);
color: var(--text-hi);
transition: border-color var(--t-med) var(--ease-out), box-shadow var(--t-med) var(--ease-out), transform var(--t-fast) var(--ease-out);
animation: card-in var(--t-slow) var(--ease-out) backwards;
}
.mode-card:nth-child(2) { animation-delay: 60ms; }
.mode-card__bg {
position: absolute;
inset: 0;
pointer-events: none;
background:
radial-gradient(70% 55% at 100% 0%, rgba(78, 216, 175, .10), transparent 70%),
repeating-linear-gradient(-45deg, rgba(255, 255, 255, .018) 0 2px, transparent 2px 12px),
linear-gradient(transparent 70%, rgba(0, 0, 0, .35));
transition: opacity var(--t-med);
}
.mode-card::before {
content: '';
position: absolute;
left: 0;
right: 0;
bottom: 0;
height: 3px;
background: linear-gradient(90deg, var(--mint-500), transparent);
transform: scaleX(0);
transform-origin: left;
transition: transform var(--t-slow) var(--ease-out);
}
.mode-card__icon {
position: relative;
width: .88rem;
height: .88rem;
display: grid;
place-items: center;
background: #0c0f0e;
border: 1px solid var(--line-2);
color: var(--text-md);
clip-path: polygon(25% 0, 75% 0, 100% 50%, 75% 100%, 25% 100%, 0 50%);
transition: background var(--t-med), color var(--t-med);
}
.mode-card__icon .icon { width: .44rem; height: .44rem; }
.mode-card__text { position: relative; display: flex; flex-direction: column; gap: .1rem; }
.mode-card__name { font-size: calc(.46 * var(--t)); font-weight: 900; letter-spacing: .08em; line-height: 1.1; }
.mode-card__desc { font-size: calc(.17 * var(--t)); color: var(--text-lo); line-height: 1.65; max-width: 3.6rem; }
.mode-card__points { display: flex; flex-direction: column; gap: .05rem; margin-top: .06rem; font-size: calc(.15 * var(--t)); color: var(--text-md); }
.mode-card__points span::before {
content: '';
display: inline-block;
width: .06rem;
height: .06rem;
margin: 0 .1rem .02rem 0;
background: var(--mint-700);
transform: rotate(45deg);
vertical-align: middle;
}
.mode-card__check {
position: absolute;
top: .2rem;
right: .2rem;
display: flex;
align-items: center;
gap: .05rem;
padding: .04rem .12rem .04rem .08rem;
background: var(--mint-500);
color: var(--text-on-mint);
font-size: calc(.14 * var(--t));
font-weight: 700;
opacity: 0;
transform: translateY(-.06rem);
transition: opacity var(--t-med), transform var(--t-med) var(--ease-out);
}
.mode-card__check .icon { width: .16rem; height: .16rem; }
.mode-card:hover { border-color: var(--line-3); --bk-c: var(--line-3); }
.mode-card:active { transform: translateY(1px); }
.mode-card.is-selected {
--bk-c: var(--mint-400);
border-color: var(--mint-700);
box-shadow: 0 0 0 1px rgba(78, 216, 175, .22), 0 0 .44rem rgba(23, 249, 183, .13), inset 0 0 .7rem rgba(23, 249, 183, .05);
}
.mode-card.is-selected::before { transform: scaleX(1); }
.mode-card.is-selected .mode-card__icon { background: var(--mint-500); border-color: var(--mint-400); color: var(--text-on-mint); }
.mode-card.is-selected .mode-card__check { opacity: 1; transform: none; }
@keyframes card-in { from { opacity: 0; transform: translateY(.14rem); } }
/* ---- join panel ------------------------------------------------------------------------------------ */
.join-panel .panel__body { display: flex; flex-direction: column; gap: .14rem; padding: .22rem .26rem .18rem; }
.join-row { display: flex; gap: .16rem; align-items: stretch; }
.join-row .field { flex: 1; }
.join-row .btn { height: .64rem; }
.join-foot { display: flex; align-items: center; flex-wrap: wrap; gap: .1rem; min-height: .32rem; font-size: calc(.14 * var(--t)); }
.code-chip {
padding: .03rem .12rem .03rem .16rem;
border: 1px solid var(--line-2);
background: rgba(0, 0, 0, .3);
color: var(--amber);
font-size: calc(.17 * var(--t));
font-weight: 700;
letter-spacing: .2em;
transition: border-color var(--t-fast), background-color var(--t-fast);
}
.code-chip:hover { border-color: var(--amber); background: rgba(246, 163, 41, .08); }
/* ---- tips -------------------------------------------------------------------------------------------- */
.tips {
--bk-c: var(--line-3);
margin-top: .3rem;
padding: .16rem .22rem .2rem;
background: rgba(8, 10, 9, .55);
border: 1px solid var(--line);
}
.tips__head { display: flex; align-items: center; gap: .1rem; font-size: calc(.16 * var(--t)); font-weight: 700; color: var(--text-md); }
.tips__head > .icon { width: .2rem; height: .2rem; color: var(--mint-500); }
.tips__idx { margin-left: auto; font-size: calc(.16 * var(--t)); color: var(--text-md); }
.tips__nav {
display: grid;
place-items: center;
width: .3rem;
height: .3rem;
padding: 0;
border: 1px solid var(--line-2);
background: transparent;
color: var(--text-lo);
transition: color var(--t-fast), border-color var(--t-fast);
}
.tips__nav:hover { color: var(--mint-400); border-color: var(--mint-700); }
.tips__nav .icon { width: .18rem; height: .18rem; }
.tips__text { margin-top: .1rem; font-size: calc(.17 * var(--t)); color: var(--text-lo); line-height: 1.6; animation: tip-in var(--t-slow) var(--ease-out); }
@keyframes tip-in { from { opacity: 0; transform: translateX(.1rem); } }
/* ---- difficulty cards -------------------------------------------------------------------------------- */
.diff-list { display: flex; flex-direction: column; gap: .14rem; }
.diff-card {
--d-color: var(--amber);
position: relative;
display: grid;
grid-template-columns: minmax(0, 1fr) auto;
grid-template-rows: auto auto auto;
gap: .06rem .2rem;
padding: .18rem .24rem .18rem .36rem;
overflow: hidden;
text-align: left;
background: linear-gradient(90deg, rgba(28, 34, 31, .93), rgba(15, 19, 17, .93));
border: 1px solid var(--line);
color: var(--text-hi);
transition: border-color var(--t-med), box-shadow var(--t-med), background var(--t-med);
animation: card-in var(--t-slow) var(--ease-out) backwards;
}
.diff-card:nth-child(2) { animation-delay: 40ms; }
.diff-card:nth-child(3) { animation-delay: 80ms; }
.diff-card:nth-child(4) { animation-delay: 120ms; }
.diff-card__bar { position: absolute; left: 0; top: 0; bottom: 0; width: .06rem; background: var(--d-color); opacity: .45; transition: opacity var(--t-med), box-shadow var(--t-med); }
.diff-card__head { grid-column: 1 / -1; display: flex; align-items: center; gap: .1rem; min-width: 0; }
.diff-card__glyph { width: .28rem; height: .28rem; color: var(--d-color); filter: drop-shadow(0 0 5px var(--d-color)); filter: drop-shadow(0 0 5px color-mix(in srgb, var(--d-color) 55%, transparent)); }
.diff-card__name { font-size: calc(.27 * var(--t)); font-weight: 900; letter-spacing: .06em; color: var(--d-color); }
.diff-card__code { font-size: calc(.14 * var(--t)); color: var(--text-dim); letter-spacing: .1em; }
.diff-card__meta { margin-left: auto; display: flex; align-items: center; gap: .04rem; font-size: calc(.14 * var(--t)); color: var(--text-lo); white-space: nowrap; }
.diff-card__meta .num { color: var(--text-hi); font-weight: 700; font-size: calc(.17 * var(--t)); }
.diff-card__hidden {
margin-left: .08rem;
padding: 0 .07rem;
border: 1px solid transparent; border: 1px solid color-mix(in srgb, var(--d-color) 45%, transparent);
color: var(--d-color); color: color-mix(in srgb, var(--d-color) 80%, #fff);
font-size: calc(.12 * var(--t));
line-height: 1.6;
}
.diff-card__desc { grid-column: 1; font-size: calc(.16 * var(--t)); color: var(--text-md); }
.diff-card__effects { grid-column: 1; display: flex; flex-wrap: wrap; gap: .04rem .2rem; font-size: calc(.14 * var(--t)); color: var(--text-lo); }
.diff-card__effects span::before { content: '·'; margin-right: .05rem; color: var(--d-color); font-weight: 900; }
/* battlefield pool note (config.json modes[].stages): 战场固定为 战场#01 / 战场随机(共N张) — the last item of the
effects row (no extra card height: the lobby must not scroll at 1280×720 / 1920×1080) */
.diff-card__effects .diff-card__stage { display: inline-flex; align-self: flex-start; align-items: center; gap: .05rem; }
.diff-card__effects .diff-card__stage::before { content: none; }
.diff-card__stage .icon { flex: none; width: .15rem; height: .15rem; color: var(--d-color); opacity: .85; }
.diff-card__check {
grid-column: 2;
grid-row: 2 / span 2;
align-self: center;
display: flex;
flex-direction: column;
align-items: center;
gap: .03rem;
font-size: calc(.12 * var(--t));
color: var(--text-dim);
}
.diff-card__check .icon {
width: .46rem;
height: .46rem;
padding: .09rem;
border-radius: 50%;
border: 2px solid var(--line-2);
color: transparent;
transition: background var(--t-med), border-color var(--t-med), color var(--t-med), transform var(--t-med) var(--ease-out);
}
.diff-card__check span { opacity: 0; transition: opacity var(--t-med); }
.diff-card:hover { border-color: var(--line-3); }
.diff-card.is-selected {
border-color: var(--d-color); border-color: color-mix(in srgb, var(--d-color) 65%, transparent);
background: linear-gradient(90deg, #151a18, rgba(15, 19, 17, .95) 70%); background: linear-gradient(90deg, color-mix(in srgb, var(--d-color) 15%, #151a18), rgba(15, 19, 17, .95) 70%);
box-shadow: 0 0 .3rem transparent; box-shadow: 0 0 .3rem color-mix(in srgb, var(--d-color) 16%, transparent);
}
.diff-card.is-selected .diff-card__bar { opacity: 1; box-shadow: 0 0 .14rem var(--d-color); }
.diff-card.is-selected .diff-card__check { color: var(--d-color); }
.diff-card.is-selected .diff-card__check .icon { background: var(--d-color); border-color: var(--d-color); color: #150a04; transform: rotate(-8deg); }
.diff-card.is-selected .diff-card__check span { opacity: 1; }
/* ---- create ------------------------------------------------------------------------------------------ */
.create-box { margin-top: .3rem; display: flex; flex-direction: column; gap: .12rem; }
.create-box .btn--xl { height: .92rem; font-size: calc(.32 * var(--t)); letter-spacing: .3em; }
.create-box__hint { display: flex; align-items: center; justify-content: center; min-height: .3rem; font-size: calc(.14 * var(--t)); color: var(--text-lo); }