Files
ark-stronghold-protocol/public/css/screens/lobby.css
T
sganggs 01a44cd288 卫戍协议:盟约 web remake — initial import
Online co-op browser remake of Arknights' Stronghold Protocol: Alliance
(client-simulated combat, official waves/bonds/items/strategies, 3D board,
facing wheel, operator loadout, official emotes, deployment scripts).
2026-09-29 16:21:31 +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: .46rem; font-weight: 900; letter-spacing: .08em; line-height: 1.1; }
.mode-card__desc { font-size: .17rem; 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: .15rem; 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: .14rem;
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: .14rem; }
.code-chip {
padding: .03rem .12rem .03rem .16rem;
border: 1px solid var(--line-2);
background: rgba(0, 0, 0, .3);
color: var(--amber);
font-size: .17rem;
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: .16rem; 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: .16rem; 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: .17rem; 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: .27rem; font-weight: 900; letter-spacing: .06em; color: var(--d-color); }
.diff-card__code { font-size: .14rem; color: var(--text-dim); letter-spacing: .1em; }
.diff-card__meta { margin-left: auto; display: flex; align-items: center; gap: .04rem; font-size: .14rem; color: var(--text-lo); white-space: nowrap; }
.diff-card__meta .num { color: var(--text-hi); font-weight: 700; font-size: .17rem; }
.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: .12rem;
line-height: 1.6;
}
.diff-card__desc { grid-column: 1; font-size: .16rem; color: var(--text-md); }
.diff-card__effects { grid-column: 1; display: flex; flex-wrap: wrap; gap: .04rem .2rem; font-size: .14rem; 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: .12rem;
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: .32rem; letter-spacing: .3em; }
.create-box__hint { display: flex; align-items: center; justify-content: center; min-height: .3rem; font-size: .14rem; color: var(--text-lo); }