dok/public/css/building.css
2026-04-10 10:11:45 +01:00

633 lines
11 KiB
CSS
Raw Permalink 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.

/* ================================================
building.css Charakter, Equipment, Inventar
Dynasty of Knights
Popup/Tooltip/Notification → popup.css
================================================ */
/* =========================
Base
========================= */
body {
margin: 0;
height: 100vh;
font-family: "Cinzel", serif;
color: #2b1b0f;
}
/* =========================
Progress Bar
========================= */
.progress-bar {
width: 100%;
height: 12px;
background: #5b3a1f;
border: 1px solid #8b6a3c;
margin-top: 8px;
}
.progress-fill {
height: 100%;
background: linear-gradient(#3cff3c, #1ea01e);
box-shadow: 0 0 6px #3cff3c;
}
/* =========================
Character Window
========================= */
#character-ui {
display: flex;
align-items: center;
justify-content: center;
gap: 14px;
padding: 8px 0 4px 0;
}
/* Linke & Rechte Slot-Spalte */
.equip-col {
display: flex;
flex-direction: column;
gap: 8px;
align-items: center;
}
/* Avatar in der Mitte */
.character-center {
display: flex;
flex-direction: column;
align-items: center;
gap: 8px;
position: relative;
}
/* ========================
Avatar Wrapper
======================== */
.avatar-wrapper {
position: relative;
width: 160px;
height: 270px;
border-radius: 8px;
border: 2px solid #8b6a3c;
background: radial-gradient(ellipse at center, #2a1f14 0%, #0d0a07 100%);
box-shadow:
0 0 20px rgba(0, 0, 0, 0.8),
inset 0 0 30px rgba(0, 0, 0, 0.5);
overflow: hidden;
}
.avatar-base {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
object-fit: contain;
display: block;
opacity: 0.9;
}
/* Item Overlays */
.avatar-overlay {
position: absolute;
pointer-events: none;
display: none;
z-index: 2;
}
.avatar-overlay.visible {
display: block;
animation: overlayFadeIn 0.25s ease;
}
.avatar-overlay img {
width: 100%;
height: 100%;
object-fit: contain;
filter: drop-shadow(0 0 4px rgba(255, 200, 80, 0.5))
drop-shadow(0 2px 6px rgba(0, 0, 0, 0.9));
}
@keyframes overlayFadeIn {
from {
opacity: 0;
transform: scale(1.15);
}
to {
opacity: 1;
transform: scale(1);
}
}
/* Positionen der Item-Overlays (180x320px) */
.avatar-overlay[data-slot="helmet"] {
top: 1%;
left: 22%;
width: 56%;
height: 20%;
}
.avatar-overlay[data-slot="amulet"] {
top: 21%;
left: 58%;
width: 30%;
height: 11%;
}
.avatar-overlay[data-slot="shoulder"] {
top: 19%;
left: 3%;
width: 30%;
height: 13%;
}
.avatar-overlay[data-slot="weapon"] {
top: 38%;
left: 56%;
width: 40%;
height: 32%;
}
.avatar-overlay[data-slot="gloves"] {
top: 54%;
left: 2%;
width: 30%;
height: 13%;
}
.avatar-overlay[data-slot="shield"] {
top: 36%;
left: 4%;
width: 36%;
height: 30%;
}
.avatar-overlay[data-slot="belt"] {
top: 51%;
left: 18%;
width: 64%;
height: 11%;
}
.avatar-overlay[data-slot="ring"] {
top: 67%;
left: 3%;
width: 24%;
height: 9%;
}
.avatar-overlay[data-slot="boots"] {
top: 80%;
left: 12%;
width: 76%;
height: 18%;
}
/* Top-Slots (Helm + Amulett) über dem Avatar */
.equip-top {
display: flex;
gap: 8px;
justify-content: center;
}
/* Bottom-Slots (Gürtel + Stiefel) unter dem Avatar */
.equip-bottom {
display: flex;
gap: 8px;
justify-content: center;
}
/* =========================
Equipment Slots
========================= */
.slot {
width: 68px;
height: 68px;
position: relative;
background-image: url("/images/items/slot_mittel.png");
background-size: cover;
background-position: center;
display: flex;
align-items: center;
justify-content: center;
border-radius: 4px;
transition: 0.2s;
cursor: pointer;
}
.slot:hover {
filter: brightness(1.3);
box-shadow: 0 0 8px rgba(200, 160, 60, 0.5);
}
.slot.drag-over {
outline: 3px solid gold;
box-shadow: 0 0 14px gold;
}
.slot.has-item {
box-shadow: 0 0 8px rgba(255, 200, 60, 0.4);
}
.slot-label {
position: absolute;
bottom: 4px;
left: 50%;
transform: translateX(-50%);
white-space: nowrap;
color: #ffffff;
font-family: "Cinzel", serif;
font-size: 9px;
font-weight: bold;
text-shadow:
0 0 3px #000,
0 0 6px #000;
pointer-events: none;
background: rgba(0, 0, 0, 0.45);
padding: 1px 4px;
border-radius: 3px;
}
.slot.has-item .slot-label {
display: none;
}
.slot img {
width: 80%;
height: 80%;
object-fit: contain;
}
/* =========================
Inventory
========================= */
.inventory-section-title {
font-family: "Tangerine", serif;
font-size: 26px;
color: #ffffff;
text-align: center;
margin: 4px 0 2px 0;
border-top: 1px solid #8b6a3c;
padding-top: 6px;
letter-spacing: 1px;
}
#inventory-grid {
display: grid;
grid-template-columns: repeat(8, 56px);
grid-auto-rows: 56px;
gap: 5px;
width: max-content;
margin: 0 auto;
padding: 6px;
}
#inventory-wrapper {
display: flex;
align-items: center;
justify-content: center;
}
#inventory-page {
font-family: "Cinzel", serif;
font-size: 14px;
font-weight: bold;
color: #ffffff;
display: flex;
align-items: center;
min-width: 100px;
justify-content: center;
}
#inv-left,
#inv-right {
background: none;
border: none;
font-size: 22px;
cursor: pointer;
padding: 4px 8px;
margin: 0;
display: flex;
align-items: center;
justify-content: center;
color: #5c3b20;
transition: 0.2s;
border-radius: 4px;
}
#inv-left:hover,
#inv-right:hover {
color: #f0d9a6;
background: rgba(90, 60, 20, 0.4);
transform: scale(1.1);
}
#inv-left:disabled,
#inv-right:disabled {
opacity: 0.25;
cursor: not-allowed;
transform: none;
}
#inventory-nav {
display: flex;
align-items: center;
justify-content: center;
gap: 10px;
margin-top: 8px;
padding: 6px;
background: rgba(0, 0, 0, 0.1);
border-top: 1px solid #8b6a3c;
border-radius: 0 0 6px 6px;
}
.inventory-slot {
width: 56px;
height: 56px;
background-image: url("/images/items/slot_mittel.png");
background-size: cover;
background-position: center;
display: flex;
align-items: center;
justify-content: center;
cursor: grab;
border-radius: 3px;
transition: 0.2s;
}
.inventory-slot:active {
cursor: grabbing;
}
.inventory-slot:hover {
filter: brightness(1.25);
box-shadow: 0 0 6px rgba(200, 160, 60, 0.4);
}
.inventory-slot img {
width: 80%;
height: 80%;
object-fit: contain;
}
.item-common {
box-shadow: 0 0 0 2px #9d9d9d inset;
}
.item-rare {
box-shadow: 0 0 0 2px #0070dd inset;
}
.item-epic {
box-shadow: 0 0 0 2px #a335ee inset;
}
.item-legendary {
box-shadow: 0 0 0 2px #ff8000 inset;
}
/* =========================
Tooltip (Items)
========================= */
#item-tooltip {
position: fixed;
pointer-events: none;
background: rgba(0, 0, 0, 0.85);
color: #fff;
padding: 8px 12px;
border-radius: 6px;
font-size: 14px;
display: none;
z-index: 9999;
max-width: 200px;
border: 1px solid #555;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.4);
}
/* =========================
Schwarzmarkt Tabs
========================= */
.market-tabs {
display: flex;
gap: 6px;
margin-bottom: 16px;
border-bottom: 2px solid #8b6a3c;
padding-bottom: 8px;
}
.market-tab {
padding: 8px 20px;
background: linear-gradient(#5c3b20, #3a2513);
color: #e7d9b4;
border: 1px solid #8b6a3c;
border-radius: 4px;
cursor: pointer;
font-family: "Cinzel", serif;
font-size: 13px;
font-weight: bold;
letter-spacing: 0.5px;
transition: 0.2s;
}
.market-tab:hover {
background: linear-gradient(#8b6a3c, #5c3b20);
box-shadow: 0 0 8px rgba(200, 160, 80, 0.4);
}
.market-tab.active {
background: linear-gradient(#d4b97a, #9c7a3a);
color: #2b1b0f;
border-color: #f0d9a6;
}
/* =========================
Schwarzmarkt Tab Inhalte
========================= */
.market-tab-content {
display: none;
}
.market-tab-content.active {
display: block;
}
/* =========================
Schwarzmarkt Seiten Grid
========================= */
#market-pages {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 16px;
padding: 10px 4px;
}
/* =========================
Schwarzmarkt Slot Karten
========================= */
.market-slot {
display: flex;
flex-direction: column;
align-items: center;
justify-content: space-between;
padding: 14px 10px;
gap: 8px;
border-radius: 8px;
border: 2px solid #8b6a3c;
background: linear-gradient(
160deg,
rgba(80, 50, 20, 0.6),
rgba(40, 25, 10, 0.8)
);
box-shadow:
0 4px 12px rgba(0, 0, 0, 0.4),
inset 0 1px 0 rgba(255, 220, 100, 0.1);
transition: 0.2s;
min-height: 150px;
position: relative;
}
/* Besessen */
.market-slot.owned {
border-color: #3caa3c;
background: linear-gradient(
160deg,
rgba(20, 60, 20, 0.6),
rgba(10, 35, 10, 0.8)
);
}
.market-slot.owned .bag-status {
font-size: 22px;
color: #3cff3c;
text-shadow: 0 0 8px #3cff3c;
}
/* Kaufbar */
.market-slot.buy {
cursor: pointer;
border-color: #caa24b;
}
.market-slot.buy:hover {
transform: translateY(-3px);
border-color: #f0d060;
box-shadow:
0 8px 20px rgba(0, 0, 0, 0.5),
0 0 15px rgba(200, 160, 60, 0.3);
}
/* Gesperrt */
.market-slot.locked {
opacity: 0.4;
filter: grayscale(60%);
}
/* =========================
Schwarzmarkt Slot Inhalt
========================= */
.bag-icon {
width: 64px;
height: 64px;
object-fit: contain;
filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.6));
}
.bag-label {
font-family: "Cinzel", serif;
font-size: 12px;
font-weight: bold;
color: #e7d9b4;
letter-spacing: 0.5px;
}
.bag-price {
font-family: "Cinzel", serif;
font-size: 14px;
font-weight: bold;
color: #ffd700;
text-shadow: 0 0 6px rgba(255, 215, 0, 0.5);
display: flex;
align-items: center;
gap: 4px;
}
.buy-button {
padding: 6px 16px !important;
font-size: 12px !important;
font-family: "Cinzel", serif !important;
font-weight: bold !important;
background: linear-gradient(#7a5a2a, #caa24b) !important;
border: 1px solid #e0c67b !important;
border-radius: 4px;
color: #1a1206 !important;
cursor: pointer;
transition: 0.2s;
margin-top: 0 !important;
width: 100%;
}
.buy-button:hover {
transform: scale(1.05);
box-shadow:
0 0 8px #ffd66b,
0 0 18px #caa24b;
}
/* Info Text über den Taschen */
.market-info-text {
font-family: "Cinzel", serif;
font-size: 20px;
color: #5c3b20;
text-align: center;
margin: 0 0 12px 0;
padding: 10px 16px;
border-bottom: 1px solid rgba(139, 106, 60, 0.4);
letter-spacing: 0.3px;
line-height: 1.6;
font-style: italic;
}
/* Placeholder Texte */
.market-placeholder {
text-align: center;
padding: 30px 20px;
color: #8b6a3c;
font-family: "Cinzel", serif;
font-size: 14px;
font-style: italic;
letter-spacing: 0.5px;
}