dok/public/css/building.css
2026-03-15 12:05:32 +00:00

928 lines
15 KiB
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;
}
/* =========================
Popup Fenster
========================= */
.building-popup {
position: fixed;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
width: 900px;
max-width: 90vw;
background: url("/images/parchment.png") center / cover no-repeat;
border: 4px solid #6b4b2a;
border-radius: 10px;
box-shadow:
0 0 40px rgba(0, 0, 0, 0.9),
inset 0 0 25px rgba(0, 0, 0, 0.5);
display: none;
z-index: 1000;
animation: popupFade 0.25s ease;
}
/* =========================
Popup Header
========================= */
.popup-header {
padding: 14px;
font-family: "Tangerine", serif;
font-size: 36px;
background: linear-gradient(#6b4b2a, #3c2414);
border-bottom: 2px solid #8b6a3c;
display: flex;
justify-content: space-between;
color: #f0d9a6;
text-shadow: 0 2px 4px black;
}
.popup-header span {
cursor: pointer;
}
/* =========================
Tabs
========================= */
.popup-tabs {
display: flex;
border-bottom: 2px solid #8b6a3c;
}
.popup-tabs button {
flex: 1;
padding: 10px;
font-family: "Cinzel", serif;
font-weight: bold;
background: linear-gradient(#5c3b20, #3a2513);
border: 1px solid #8b6a3c;
color: #e7d9b4;
cursor: pointer;
transition: 0.2s;
}
.popup-tabs button:hover {
background: linear-gradient(#8b6a3c, #5c3b20);
}
.popup-tabs button.active {
background: linear-gradient(#d4b97a, #9c7a3a);
color: #2b1b0f;
}
/* =========================
Popup Inhalt
========================= */
.popup-content {
padding: 20px;
font-size: 20px;
line-height: 1.6;
letter-spacing: 0.5px;
background: rgba(255, 255, 255, 0.08);
border-radius: 6px;
color: #2b1b0f;
}
.popup-content h3 {
font-family: "Tangerine", serif;
font-size: 32px;
color: #3b2412;
margin-top: 0;
}
.popup-content p {
color: #3a2413;
}
/* =========================
Tab Inhalte
========================= */
.tab-content {
display: none;
}
.tab-content.active {
display: block;
}
/* =========================
Buttons
========================= */
.popup-content button {
margin-top: 10px;
background: linear-gradient(#7a5a2a, #caa24b);
border: 1px solid #e0c67b;
padding: 10px 18px;
color: #1a1206;
font-weight: bold;
cursor: pointer;
transition: 0.2s;
}
.popup-content button:hover {
transform: scale(1.05);
box-shadow:
0 0 10px #ffd66b,
0 0 25px #caa24b;
}
/* =========================
Tooltip
========================= */
#map-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;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.4);
}
#map-tooltip strong {
color: #ffd700;
}
/* =========================
Character Window
========================= */
#character-ui {
display: flex;
align-items: center;
justify-content: center;
gap: 16px;
padding: 16px 0 8px 0;
}
/* Linke & Rechte Slot-Spalte */
.equip-col {
display: flex;
flex-direction: column;
gap: 10px;
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: 180px;
height: 320px;
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: 10px;
justify-content: center;
}
/* Bottom-Slots (Gürtel + Stiefel) unter dem Avatar */
.equip-bottom {
display: flex;
gap: 10px;
justify-content: center;
}
/* =========================
Equipment Slots
========================= */
.slot {
width: 76px;
height: 76px;
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: 30px;
color: #3b2412;
text-align: center;
margin: 8px 0 4px 0;
border-top: 1px solid #8b6a3c;
padding-top: 10px;
letter-spacing: 1px;
}
#inventory-grid {
display: grid;
grid-template-columns: repeat(8, 62px);
grid-auto-rows: 62px;
gap: 6px;
width: max-content;
margin: 0 auto;
padding: 8px;
}
#inventory-wrapper {
display: flex;
align-items: center;
justify-content: center;
}
#inventory-page {
font-family: "Cinzel", serif;
font-size: 14px;
font-weight: bold;
color: #3b2412;
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: 62px;
height: 62px;
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);
}
/* =========================
Game Notification
========================= */
#game-notification {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%) scale(0.85);
z-index: 9999;
width: 360px;
max-width: 90vw;
background: url("/images/parchment.png") center / cover no-repeat;
border: 3px solid #6b4b2a;
border-radius: 10px;
box-shadow:
0 0 40px rgba(0, 0, 0, 0.9),
inset 0 0 20px rgba(0, 0, 0, 0.4);
display: none;
opacity: 0;
transition:
opacity 0.2s ease,
transform 0.2s ease;
}
#game-notification.show {
display: block;
opacity: 1;
transform: translate(-50%, -50%) scale(1);
}
.notification-header {
padding: 12px 16px;
background: linear-gradient(#6b4b2a, #3c2414);
border-bottom: 2px solid #8b6a3c;
border-radius: 7px 7px 0 0;
font-family: "Tangerine", serif;
font-size: 28px;
color: #f0d9a6;
text-shadow: 0 2px 4px black;
display: flex;
align-items: center;
gap: 8px;
}
.notification-body {
padding: 20px 20px 10px 20px;
font-family: "Cinzel", serif;
font-size: 15px;
color: #2b1b0f;
line-height: 1.8;
text-align: center;
white-space: pre-line;
}
.notification-footer {
padding: 10px 20px 16px 20px;
display: flex;
justify-content: center;
}
.notification-btn {
padding: 8px 28px !important;
font-size: 14px !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;
}
.notification-btn:hover {
transform: scale(1.05);
box-shadow:
0 0 10px #ffd66b,
0 0 20px #caa24b;
}
#game-notification-overlay {
position: fixed;
inset: 0;
background: rgba(0, 0, 0, 0.5);
z-index: 9998;
display: none;
}
#game-notification-overlay.show {
display: block;
}
/* =========================
Animation
========================= */
@keyframes popupFade {
from {
opacity: 0;
transform: translate(-50%, -40%);
}
to {
opacity: 1;
transform: translate(-50%, -50%);
}
}
/* =========================
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;
}