Five-player briscola with a descending calling auction and a secret partner. Starting with the player after the dealer, each player bids a lower rank (A > 3 > K > H > J > 7 > 6 > 5 > 4 > 2) or passes; once the standing bid is the two the auction continues on points (62, 64, ...). The last player standing must bid, and the winner names any card of the won rank: its holder is the secret partner, or the caller plays alone when it is one of their own cards, and its suit becomes the trump. The calling side must reach 61 (or the raised target); a 60-60 deal with the plain target is a patta and is replayed. A match is a single deal, so the caller and partner (or the lone caller) against the other players map onto the platform's two-team result, Elo and match history. The rules live in tavolo.briscola.chiamata with the BriscolaChiamataEngine adapter registered alongside the other briscola variants; the partner's role and the side totals stay hidden until the called card is played. The web client gets a five-seat table, the auction panel with legal bids and point raises, the call picker, the reveal bands and a chiamata-aware final summary.
This commit is contained in:
+159
@@ -667,3 +667,162 @@ body {
|
||||
gap: 0.4rem;
|
||||
}
|
||||
}
|
||||
|
||||
/* ---------- briscola chiamata ---------- */
|
||||
|
||||
/* Five seats: two across the top and one on each side of the viewer. */
|
||||
.table-grid.cinque {
|
||||
grid-template-columns: minmax(0, 1fr) minmax(0, 2fr) minmax(0, 1fr);
|
||||
grid-template-rows: auto 1fr auto;
|
||||
grid-template-areas:
|
||||
"tl . tr"
|
||||
"left center right"
|
||||
"bottom bottom bottom";
|
||||
}
|
||||
|
||||
.seat-tl {
|
||||
grid-area: tl;
|
||||
}
|
||||
|
||||
.seat-tr {
|
||||
grid-area: tr;
|
||||
}
|
||||
|
||||
.called-badge {
|
||||
background: var(--panel-light);
|
||||
color: var(--accent);
|
||||
font-weight: 700;
|
||||
border-radius: 999px;
|
||||
padding: 0.15rem 0.6rem;
|
||||
border: 1px solid var(--accent);
|
||||
}
|
||||
|
||||
.role-badge {
|
||||
background: var(--accent);
|
||||
color: var(--felt-dark);
|
||||
}
|
||||
|
||||
.reveal-banner {
|
||||
background: rgba(232, 197, 71, 0.15);
|
||||
border: 1px solid var(--accent);
|
||||
border-radius: 8px;
|
||||
padding: 0.35rem 0.75rem;
|
||||
}
|
||||
|
||||
.patta-banner {
|
||||
background: rgba(217, 83, 79, 0.25);
|
||||
}
|
||||
|
||||
/* The calling auction: standing bid, trail and the bid buttons. */
|
||||
.auction-panel {
|
||||
background: rgba(0, 0, 0, 0.25);
|
||||
border-radius: 10px;
|
||||
padding: 0.75rem 1rem;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
max-width: 32rem;
|
||||
}
|
||||
|
||||
.auction-standing {
|
||||
font-weight: 600;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.auction-history {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0.3rem;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.auction-chip {
|
||||
background: var(--panel-light);
|
||||
color: var(--muted);
|
||||
border-radius: 4px;
|
||||
padding: 0.1rem 0.4rem;
|
||||
font-size: 0.75rem;
|
||||
}
|
||||
|
||||
.bid-options {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0.35rem;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.bid-button {
|
||||
background: var(--panel-light);
|
||||
color: var(--text);
|
||||
border: 1px solid var(--accent);
|
||||
border-radius: 6px;
|
||||
padding: 0.25rem 0.6rem;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.bid-button:hover {
|
||||
background: var(--accent);
|
||||
color: var(--felt-dark);
|
||||
}
|
||||
|
||||
.bid-button.points {
|
||||
border-color: var(--team-a);
|
||||
}
|
||||
|
||||
.pass-button {
|
||||
background: transparent;
|
||||
color: var(--muted);
|
||||
border: 1px solid var(--muted);
|
||||
border-radius: 6px;
|
||||
padding: 0.25rem 0.6rem;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.pass-button:hover {
|
||||
color: var(--text);
|
||||
border-color: var(--text);
|
||||
}
|
||||
|
||||
/* The auction winner's call picker: one card per suit. */
|
||||
.call-option {
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.call-option .playing-card {
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.call-label {
|
||||
display: block;
|
||||
font-size: 0.85rem;
|
||||
color: var(--text);
|
||||
margin-top: 0.25rem;
|
||||
}
|
||||
|
||||
.solo-note {
|
||||
display: block;
|
||||
font-size: 0.7rem;
|
||||
color: var(--accent);
|
||||
}
|
||||
|
||||
.chiamata-row .score-title {
|
||||
color: var(--accent);
|
||||
}
|
||||
|
||||
@media (max-width: 576px) {
|
||||
.table-grid.cinque {
|
||||
grid-template-columns: 1fr 1fr;
|
||||
grid-template-areas:
|
||||
"tl tr"
|
||||
"left right"
|
||||
"center center"
|
||||
"bottom bottom";
|
||||
}
|
||||
|
||||
.auction-panel {
|
||||
padding: 0.5rem;
|
||||
max-width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user