Feature: add town systems, saves, recovery, and level progression

This commit is contained in:
Keith Solomon
2026-03-18 19:37:01 -05:00
parent a4d2890cd9
commit 8600f611a6
22 changed files with 2434 additions and 16 deletions

View File

@@ -111,6 +111,27 @@ select {
rgba(48, 22, 18, 0.92);
}
.alert-banner-victory {
background:
linear-gradient(90deg, rgba(45, 93, 54, 0.92), rgba(26, 46, 29, 0.92)),
rgba(26, 46, 29, 0.92);
border-color: rgba(125, 219, 150, 0.28);
}
.alert-banner-defeat {
background:
linear-gradient(90deg, rgba(113, 33, 33, 0.92), rgba(48, 18, 18, 0.92)),
rgba(48, 18, 18, 0.92);
border-color: rgba(232, 123, 123, 0.3);
}
.alert-banner-level {
background:
linear-gradient(90deg, rgba(133, 87, 24, 0.92), rgba(59, 38, 14, 0.92)),
rgba(59, 38, 14, 0.92);
border-color: rgba(244, 205, 120, 0.32);
}
.alert-kicker {
display: block;
color: #ffbf78;
@@ -156,6 +177,10 @@ select {
grid-column: span 12;
}
.panel-saves {
grid-column: span 8;
}
.panel-town-hub {
grid-column: span 8;
}
@@ -183,7 +208,7 @@ select {
.stat-strip {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
grid-template-columns: repeat(5, minmax(0, 1fr));
gap: 0.75rem;
}
@@ -228,6 +253,80 @@ select {
margin-top: 1rem;
}
.town-services {
display: grid;
gap: 0.75rem;
margin-top: 1rem;
}
.recovery-panel {
margin-top: 1.25rem;
padding-top: 1.25rem;
border-top: 1px solid rgba(255, 231, 196, 0.12);
}
.recovery-grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 0.75rem;
margin-top: 1rem;
}
.recovery-card {
padding: 1rem;
border: 1px solid rgba(255, 231, 196, 0.1);
background: rgba(255, 245, 223, 0.04);
}
.recovery-card strong {
display: block;
margin-top: 0.25rem;
color: #fff2d6;
font-size: 1.05rem;
}
.town-ledger {
margin-top: 1.25rem;
padding-top: 1.25rem;
border-top: 1px solid rgba(255, 231, 196, 0.12);
}
.town-ledger-grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 0.75rem;
margin-top: 1rem;
}
.town-ledger-card {
padding: 1rem;
border: 1px solid rgba(255, 231, 196, 0.1);
background: rgba(255, 245, 223, 0.04);
}
.town-ledger-card h3 {
margin: 0 0 0.75rem;
color: #fff2d6;
font-size: 1.05rem;
}
.town-service-card {
display: flex;
justify-content: space-between;
gap: 1rem;
align-items: center;
padding: 1rem;
border: 1px solid rgba(255, 231, 196, 0.1);
background: rgba(255, 245, 223, 0.04);
}
.town-service-card strong {
display: block;
margin-top: 0.25rem;
color: #fff2d6;
font-size: 1.05rem;
}
.room-title {
margin: 0 0 0.35rem;
font-size: 1.5rem;
@@ -249,6 +348,26 @@ select {
margin-top: 1rem;
}
.treasure-row {
display: flex;
justify-content: space-between;
gap: 1rem;
align-items: center;
padding: 0.75rem 0;
border-top: 1px solid rgba(255, 231, 196, 0.08);
}
.treasure-row:first-of-type {
border-top: 0;
padding-top: 0;
}
.treasure-actions {
display: flex;
gap: 0.5rem;
flex-wrap: wrap;
}
.button {
border: 1px solid rgba(255, 217, 163, 0.24);
background: rgba(255, 245, 223, 0.04);
@@ -287,9 +406,23 @@ select {
margin-top: 1rem;
}
.combat-summary-grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 0.75rem;
margin-top: 1rem;
}
.combat-feed {
display: grid;
gap: 0.75rem;
margin-top: 1rem;
}
.move-list,
.mini-map,
.enemy-list {
.enemy-list,
.save-list {
display: grid;
gap: 0.75rem;
}
@@ -301,7 +434,8 @@ select {
.move-card,
.map-node,
.enemy-card {
.enemy-card,
.save-card {
width: 100%;
text-align: left;
padding: 0.95rem;
@@ -347,13 +481,28 @@ select {
}
.move-card em,
.enemy-card span {
.enemy-card span,
.save-card span {
display: block;
margin-top: 0.3rem;
font-style: normal;
color: rgba(244, 239, 227, 0.7);
}
.save-card strong {
display: block;
margin-top: 0.3rem;
font-size: 1rem;
color: #fff2d6;
}
.save-actions {
display: flex;
gap: 0.5rem;
margin-top: 1rem;
flex-wrap: wrap;
}
.map-node-active {
border-color: rgba(243, 186, 115, 0.55);
background: rgba(243, 186, 115, 0.12);
@@ -405,7 +554,23 @@ select {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.combat-summary-grid,
.town-summary-grid {
grid-template-columns: 1fr;
}
.town-service-card {
flex-direction: column;
align-items: stretch;
}
.recovery-grid,
.town-ledger-grid {
grid-template-columns: 1fr;
}
.treasure-row {
flex-direction: column;
align-items: stretch;
}
}