horiyouta's picture
2508181650
0fd1185
/* --- SF UI THEME FOR MACHINE LEARNING RPG --- */
@import url('https://fonts.googleapis.com/css2?family=Orbitron:wght@400;700&family=Share+Tech+Mono&display=swap');
:root {
--bg-color: #02041b;
--glass-bg: rgba(20, 25, 70, 0.4);
--glass-border: rgba(138, 143, 255, 0.2);
--text-primary: #e0e0ff;
--text-secondary: #a0a0c0;
--accent-indigo: #8a8fff;
--accent-cyan: #00f2ff;
--accent-red: #ff4a6d;
--accent-green: #4aff97;
--font-main: 'Orbitron', sans-serif;
--font-mono: 'Share Tech Mono', monospace;
}
* {
user-select: none;
box-sizing: border-box;
}
body {
background-color: var(--bg-color);
color: var(--text-primary);
font-family: var(--font-main);
overflow: hidden;
}
/* --- BACKGROUND EFFECTS --- */
.background-grid {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-image:
linear-gradient(rgba(138, 143, 255, 0.1) 1px, transparent 1px),
linear-gradient(90deg, rgba(138, 143, 255, 0.1) 1px, transparent 1px);
background-size: 50px 50px;
animation: pan-grid 60s linear infinite;
z-index: -2;
}
@keyframes pan-grid {
0% {
background-position: 0 0;
}
100% {
background-position: 500px 500px;
}
}
.background-glow {
position: fixed;
top: 50%;
left: 50%;
width: 800px;
height: 800px;
background: radial-gradient(circle, rgba(79, 70, 229, 0.3) 0%, rgba(79, 70, 229, 0) 70%);
transform: translate(-50%, -50%);
animation: pulse-glow 10s ease-in-out infinite;
z-index: -1;
}
@keyframes pulse-glow {
0%,
100% {
transform: translate(-50%, -50%) scale(1);
opacity: 0.8;
}
50% {
transform: translate(-50%, -50%) scale(1.2);
opacity: 1;
}
}
/* --- TYPOGRAPHY & HEADERS --- */
.text-glow {
text-shadow: 0 0 5px #fff, 0 0 10px #fff, 0 0 15px var(--accent-indigo), 0 0 20px var(--accent-indigo);
}
.text-glow-yellow {
text-shadow: 0 0 5px #fff, 0 0 10px #facc15, 0 0 15px #facc15;
}
.section-title {
font-size: 1.5rem;
font-weight: bold;
padding: 1rem;
color: var(--accent-cyan);
border-bottom: 1px solid var(--glass-border);
text-shadow: 0 0 8px var(--accent-cyan);
}
.character-name {
font-family: var(--font-mono);
font-size: 1.25rem;
text-align: center;
letter-spacing: 0.2em;
padding-bottom: 0.5rem;
}
/* --- GLASSMORPHISM PANELS --- */
.glass-pane {
background: var(--glass-bg);
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
border-radius: 16px;
border: 1px solid var(--glass-border);
box-shadow: 0 0 40px rgba(0, 0, 0, 0.5), inset 0 0 10px rgba(138, 143, 255, 0.1);
transition: all 0.3s ease;
}
.glass-pane-inner {
background: rgba(0, 0, 0, 0.2);
border-radius: 12px;
padding: 0.5rem;
border: 1px solid var(--glass-border);
}
/* --- LAYER & INVENTORY ITEMS --- */
.layer-item,
.player-layer {
background: rgba(0, 0, 0, 0.3);
border: 1px solid var(--glass-border);
border-radius: 12px;
padding: 0.75rem;
text-align: center;
transition: all 0.2s ease-in-out;
position: relative;
cursor: pointer;
overflow: hidden;
}
.layer-item::before,
.player-layer::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, var(--accent-cyan), transparent);
opacity: 0.3;
transition: left 0.4s ease;
}
.layer-item:hover::before,
.player-layer:hover::before {
left: 100%;
}
.layer-item:hover,
.player-layer:hover {
transform: translateY(-4px);
border-color: var(--accent-cyan);
box-shadow: 0 0 15px rgba(0, 242, 255, 0.4);
}
.player-layer {
display: flex;
justify-content: space-between;
align-items: center;
cursor: move;
}
.layer-icon {
font-size: 1.75rem;
margin-bottom: 0.25rem;
color: var(--accent-cyan);
text-shadow: 0 0 10px var(--accent-cyan);
}
/* Drag & Drop Styles */
.dragging {
opacity: 0.5;
transform: scale(0.95);
box-shadow: 0 0 20px var(--accent-indigo);
}
#player-model-layers.drag-over {
background-color: rgba(79, 70, 229, 0.3);
box-shadow: inset 0 0 20px rgba(138, 143, 255, 0.5);
}
.drop-placeholder {
height: 4px;
background-color: var(--accent-cyan);
margin: 4px 0;
border-radius: 2px;
box-shadow: 0 0 8px var(--accent-cyan);
}
/* --- BUTTONS --- */
.btn {
font-family: var(--font-main);
font-weight: bold;
padding: 0.75rem 1.5rem;
border-radius: 8px;
border: 1px solid transparent;
transition: all 0.3s ease;
cursor: pointer;
}
.btn-primary {
background-color: var(--accent-red);
color: white;
border-color: #ff7a8d;
text-shadow: 0 0 5px rgba(0, 0, 0, 0.5);
box-shadow: 0 0 10px rgba(255, 74, 109, 0.5), inset 0 0 5px rgba(255, 255, 255, 0.2);
}
.btn-primary:hover:not(:disabled) {
background-color: #ff6a7d;
box-shadow: 0 0 20px rgba(255, 74, 109, 0.8);
transform: translateY(-2px);
}
.btn-primary:disabled {
background-color: #552020;
color: #a0a0a0;
cursor: not-allowed;
box-shadow: none;
border-color: #773030;
}
.btn-secondary {
background-color: #4a4a6a;
color: var(--text-primary);
border-color: #6a6a8a;
}
.btn-secondary:hover {
background-color: #5a5a7a;
transform: translateY(-2px);
box-shadow: 0 0 15px rgba(138, 143, 255, 0.3);
}
/* --- BATTLE AREA --- */
.hp-bar-container {
background: rgba(0, 0, 0, 0.4);
border-radius: 9999px;
padding: 4px;
border: 1px solid var(--glass-border);
box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.4);
}
.hp-bar {
border-radius: 9999px;
transition: width 0.5s cubic-bezier(0.25, 1, 0.5, 1);
text-shadow: 1px 1px 2px black;
font-weight: bold;
color: white;
text-align: center;
height: 1.5rem;
line-height: 1.5rem;
}
#player-hp-bar {
background: linear-gradient(90deg, var(--accent-green), #8affc7);
}
#enemy-hp-bar {
background: linear-gradient(90deg, var(--accent-red), #ff8a9d);
}
.enemy-image-style {
border: 2px solid var(--accent-red);
box-shadow: 0 0 20px var(--accent-red);
filter: brightness(1.2) contrast(1.1);
}
#enemy-area {
width: 200px;
height: 200px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.enemy-scanline {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: linear-gradient(to bottom, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.05) 50%, rgba(255, 255, 255, 0) 100%);
background-size: 100% 4px;
animation: scan 5s linear infinite;
pointer-events: none;
}
@keyframes scan {
0% {
background-position: 0 0;
}
100% {
background-position: 0 200px;
}
}
/* --- MESSAGE LOG --- */
#message-log-area {
font-family: var(--font-mono);
}
#message-log-area p {
opacity: 0;
transform: translateY(10px);
animation: fade-in-up 0.5s forwards;
}
@keyframes fade-in-up {
to {
opacity: 1;
transform: translateY(0);
}
}
/* --- MODALS --- */
#item-selection-modal,
#animation-modal {
transition: opacity 0.3s ease;
}
#item-selection-modal .layer-item {
width: 12rem;
/* 192px */
height: 12rem;
/* 192px */
display: flex;
flex-direction: column;
justify-content: center;
}
#item-selection-modal .layer-icon {
font-size: 4rem;
}
/* --- PREVIEW AREA --- */
.idle-particles {
position: absolute;
width: 100%;
height: 100%;
}
.idle-particles::after {
content: "";
position: absolute;
width: 2px;
height: 2px;
background: var(--accent-cyan);
border-radius: 50%;
animation: particle-float 10s ease-in-out infinite;
box-shadow: 0 0 5px var(--accent-cyan),
-100px -50px 0 0 var(--accent-cyan),
120px -80px 0 -0.5px var(--accent-cyan),
80px 90px 0 0.5px var(--accent-cyan),
-70px 100px 0 0 var(--accent-cyan),
90px -120px 0 -0.2px var(--accent-cyan);
}
@keyframes particle-float {
0% {
transform: translate(0, 0);
opacity: 0.5;
}
25% {
transform: translate(10px, 20px);
opacity: 1;
}
50% {
transform: translate(-15px, -10px);
opacity: 0.7;
}
75% {
transform: translate(5px, -25px);
opacity: 1;
}
100% {
transform: translate(0, 0);
opacity: 0.5;
}
}
/* --- ANIMATION VISUALIZATION --- */
.stage-label {
position: absolute;
top: 50%;
opacity: 0;
transform: translateX(-50%) translateY(20px);
transition: all 0.3s ease-in-out;
font-size: 1.2rem;
font-weight: bold;
color: var(--accent-cyan);
text-shadow: 0 0 10px var(--accent-cyan);
white-space: nowrap;
}
.particle {
position: absolute;
width: 5px;
height: 5px;
background-color: #fde047;
/* yellow-300 */
border-radius: 50%;
box-shadow: 0 0 8px #fde047, 0 0 15px #facc15;
pointer-events: none;
opacity: 0;
}
.grid-cell {
transition: all 0.2s ease-in-out;
box-shadow: inset 0 0 2px rgba(0, 0, 0, 0.5);
}
/* ★★★ TITLE SCREEN STYLES ★★★ */
#title-screen {
background: var(--bg-color);
transition: opacity 1.5s ease-out;
}
.title-logo {
text-align: center;
line-height: 1;
position: relative;
animation: title-float 6s ease-in-out infinite;
}
.title-logo::before {
content: '';
position: absolute;
top: 50%;
left: 50%;
width: 600px;
height: 600px;
background: radial-gradient(circle, rgba(79, 70, 229, 0.4) 0%, rgba(79, 70, 229, 0) 65%);
transform: translate(-50%, -50%);
z-index: -1;
animation: pulse-glow 8s ease-in-out infinite;
}
.title-logo h1 {
color: var(--text-primary);
text-shadow: 0 0 8px #fff, 0 0 15px var(--accent-indigo);
}
.title-logo h2 {
margin-top: -1rem;
}
@keyframes title-float {
0%, 100% { transform: translateY(0); }
50% { transform: translateY(-20px); }
}
#start-game-btn {
animation: start-btn-pulse 2s infinite;
}
@keyframes start-btn-pulse {
0% { transform: scale(1); box-shadow: 0 0 20px rgba(255, 74, 109, 0.5); }
50% { transform: scale(1.05); box-shadow: 0 0 30px rgba(255, 74, 109, 0.9); }
100% { transform: scale(1); box-shadow: 0 0 20px rgba(255, 74, 109, 0.5); }
}
/* ★★★ GOLD RARE ITEM STYLES ★★★ */
.layer-item.gold-rare, .player-layer.gold-rare {
background: radial-gradient(ellipse at center, rgba(30,25,0,0.5) 0%, rgba(0,0,0,0.5) 70%),
linear-gradient(160deg, rgba(255, 215, 0, 0.3), rgba(255, 165, 0, 0.1));
border-color: #ffd700; /* gold */
box-shadow: 0 0 15px rgba(255, 215, 0, 0.6), inset 0 0 10px rgba(255, 215, 0, 0.2);
}
.layer-item.gold-rare::before, .player-layer.gold-rare::before {
background: linear-gradient(90deg, transparent, #fff, transparent);
opacity: 0.3;
}
.layer-item.gold-rare:hover, .player-layer.gold-rare:hover {
border-color: #fff;
box-shadow: 0 0 25px rgba(255, 215, 0, 0.9);
}
.layer-item.gold-rare .layer-icon, .player-layer.gold-rare .layer-icon {
color: #ffd700;
text-shadow: 0 0 10px #ffd700;
}
/* ゴールドレアアイテム用のキラキラエフェクト */
.sparkle-container {
position: absolute;
top: 0; left: 0;
width: 100%; height: 100%;
pointer-events: none;
overflow: hidden;
border-radius: 12px;
}
.sparkle {
position: absolute;
width: 3px;
height: 3px;
background: #fff;
border-radius: 50%;
box-shadow: 0 0 5px #fff, 0 0 10px #ffd700;
animation: sparkle-anim 1.5s ease-in-out infinite;
opacity: 0;
}
@keyframes sparkle-anim {
0% { transform: scale(0); opacity: 0; }
50% { transform: scale(1.5); opacity: 1; }
100% { transform: scale(0); opacity: 0; }
}
/* ★★★ 新しいインベントリのスタイルを追加 ★★★ */
#layer-inventory {
display: flex;
flex-direction: column;
gap: 0.75rem;
overflow-y: auto; /* ★★★ スクロールを有効化 ★★★ */
}
/* ★★★ インベントリアイテムのスタイルを微調整 ★★★ */
#layer-inventory .layer-item {
display: flex; /* アイコンとテキストを横並びに */
align-items: center;
text-align: left; /* テキストを左揃えに */
padding: 0.5rem 1rem; /* パディングを調整 */
}
#layer-inventory .layer-item .layer-icon {
font-size: 1.5rem; /* 24px */
margin-bottom: 0; /* 下マージンを削除 */
margin-right: 1rem; /* 右にマージンを追加 */
}
#layer-inventory .layer-item p {
flex-grow: 1; /* テキストエリアが残りのスペースを埋める */
}
/* ★★★ SCROLLBAR STYLES ★★★ */
/* 既存の ::-webkit-scrollbar { display: none; } は削除またはコメントアウトしてください */
::-webkit-scrollbar {
width: 8px;
}
::-webkit-scrollbar-track {
background: rgba(0, 0, 0, 0.2);
border-radius: 4px;
}
::-webkit-scrollbar-thumb {
background: var(--glass-border);
border-radius: 4px;
border: 1px solid rgba(0,0,0,0.3);
}
::-webkit-scrollbar-thumb:hover {
background: var(--accent-cyan);
}