.preview-container { position: relative; padding: 1rem; min-height: 100px; display: flex; align-items: center; justify-content: center; background: repeating-conic-gradient(#80808010 0% 25%, transparent 0% 50%) 50% / 20px 20px; } .preview-container img { max-width: 100%; max-height: 300px; height: auto; object-fit: contain; } .effect-grid { display: grid; gap: 1rem; margin-top: 2rem; } /* 横書き時のグリッドレイアウト */ .effect-grid:not([data-vertical="true"]) { grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); } /* 縦書き時のグリッドレイアウト */ .effect-grid[data-vertical="true"] { grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); } .effect-item { background: #f8f9fa; border: 1px solid #dee2e6; border-radius: 0.5rem; padding: 1rem; text-align: center; display: flex; flex-direction: column; } .effect-name { font-size: 1.1rem; margin-bottom: 1rem; font-weight: 500; } .effect-item.error { background: #fff3f3; border-color: #ffcdd2; } .text-danger { color: #dc3545; } /* エフェクトレンダリング用のスタイル */ .effect-renderer { position: absolute; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; } .effect-renderer canvas { position: absolute; top: 0; left: 0; } /* パーティクルエフェクト用のスタイル */ .particle-container { position: absolute; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; z-index: 1; } /* 3Dエフェクト用のスタイル */ .three-container { position: absolute; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; z-index: 2; } /* アニメーションエフェクト用のスタイル */ @keyframes sparkle { 0%, 100% { opacity: 0; } 50% { opacity: 1; } } @keyframes fire { 0% { transform: translateY(0) scale(1); } 100% { transform: translateY(-20px) scale(0.8); opacity: 0; } } @keyframes electric { 0%, 100% { opacity: 1; } 50% { opacity: 0.7; } } @keyframes underwater { 0% { transform: translateY(0) translateX(0); } 50% { transform: translateY(-10px) translateX(5px); } 100% { transform: translateY(0) translateX(0); } }