Spaces:
Running
Running
| /* =========================================== | |
| ADAPTIVE TACTICS - Transitions Stylesheet | |
| =========================================== */ | |
| /* Screen Transitions */ | |
| .screen { | |
| transition: opacity 0.4s ease-in-out; | |
| } | |
| .screen.fade-in { | |
| animation: fadeIn 0.4s ease-in-out forwards; | |
| } | |
| .screen.fade-out { | |
| animation: fadeOut 0.4s ease-in-out forwards; | |
| } | |
| @keyframes fadeIn { | |
| from { | |
| opacity: 0; | |
| } | |
| to { | |
| opacity: 1; | |
| } | |
| } | |
| @keyframes fadeOut { | |
| from { | |
| opacity: 1; | |
| } | |
| to { | |
| opacity: 0; | |
| } | |
| } | |
| /* Transition Screen Entrance */ | |
| #transition-screen.active .transition-content { | |
| animation: transitionSlideIn 0.6s ease-out forwards; | |
| } | |
| @keyframes transitionSlideIn { | |
| from { | |
| opacity: 0; | |
| transform: translateY(20px); | |
| } | |
| to { | |
| opacity: 1; | |
| transform: translateY(0); | |
| } | |
| } | |
| /* Portrait Reveal */ | |
| #transition-portrait { | |
| animation: portraitReveal 0.8s ease-out 0.2s both; | |
| } | |
| @keyframes portraitReveal { | |
| from { | |
| opacity: 0; | |
| transform: scale(0.9); | |
| } | |
| to { | |
| opacity: 1; | |
| transform: scale(1); | |
| } | |
| } | |
| /* Quote Fade In */ | |
| .transition-quote { | |
| animation: quoteFadeIn 0.6s ease-out 0.4s both; | |
| } | |
| .transition-hint { | |
| animation: quoteFadeIn 0.6s ease-out 0.6s both; | |
| } | |
| @keyframes quoteFadeIn { | |
| from { | |
| opacity: 0; | |
| } | |
| to { | |
| opacity: 1; | |
| } | |
| } | |
| /* Phase Banner */ | |
| .phase-banner { | |
| position: fixed; | |
| top: 50%; | |
| left: 50%; | |
| transform: translate(-50%, -50%); | |
| font-family: var(--font-display); | |
| font-size: 2rem; | |
| color: var(--gold); | |
| text-shadow: 0 2px 8px rgba(0, 0, 0, 0.8); | |
| z-index: 500; | |
| pointer-events: none; | |
| animation: phaseBannerShow 1.5s ease-in-out forwards; | |
| } | |
| .phase-banner--enemy { | |
| color: var(--crimson); | |
| } | |
| @keyframes phaseBannerShow { | |
| 0% { | |
| opacity: 0; | |
| transform: translate(-50%, -50%) scale(0.8); | |
| } | |
| 15% { | |
| opacity: 1; | |
| transform: translate(-50%, -50%) scale(1); | |
| } | |
| 85% { | |
| opacity: 1; | |
| transform: translate(-50%, -50%) scale(1); | |
| } | |
| 100% { | |
| opacity: 0; | |
| transform: translate(-50%, -50%) scale(1.1); | |
| } | |
| } | |
| /* Victory Banner */ | |
| .victory-banner { | |
| position: fixed; | |
| top: 50%; | |
| left: 50%; | |
| transform: translate(-50%, -50%); | |
| font-family: var(--font-display); | |
| font-size: 2.5rem; | |
| color: var(--gold); | |
| text-shadow: 0 0 20px rgba(212, 168, 75, 0.6); | |
| z-index: 500; | |
| pointer-events: none; | |
| animation: victoryBannerShow 2s ease-in-out forwards; | |
| } | |
| @keyframes victoryBannerShow { | |
| 0% { | |
| opacity: 0; | |
| transform: translate(-50%, -50%) scale(0.5); | |
| } | |
| 20% { | |
| opacity: 1; | |
| transform: translate(-50%, -50%) scale(1.1); | |
| } | |
| 30% { | |
| transform: translate(-50%, -50%) scale(1); | |
| } | |
| 80% { | |
| opacity: 1; | |
| transform: translate(-50%, -50%) scale(1); | |
| } | |
| 100% { | |
| opacity: 0; | |
| transform: translate(-50%, -50%) scale(1); | |
| } | |
| } | |
| /* Defeat Flash */ | |
| .defeat-flash { | |
| position: fixed; | |
| inset: 0; | |
| background: var(--crimson); | |
| z-index: 400; | |
| pointer-events: none; | |
| animation: defeatFlash 0.5s ease-out forwards; | |
| } | |
| @keyframes defeatFlash { | |
| 0% { | |
| opacity: 0.6; | |
| } | |
| 100% { | |
| opacity: 0; | |
| } | |
| } | |
| /* Unit Move Animation */ | |
| .unit-sprite--moving { | |
| transition: left 0.2s ease, top 0.2s ease; | |
| } | |
| /* Combat Shake */ | |
| .tile--shake { | |
| animation: combatShake 0.3s ease; | |
| } | |
| @keyframes combatShake { | |
| 0%, 100% { | |
| transform: translateX(0); | |
| } | |
| 20% { | |
| transform: translateX(-2px); | |
| } | |
| 40% { | |
| transform: translateX(2px); | |
| } | |
| 60% { | |
| transform: translateX(-2px); | |
| } | |
| 80% { | |
| transform: translateX(1px); | |
| } | |
| } | |
| /* Button Press Effect */ | |
| button:active:not(:disabled) { | |
| transform: scale(0.98); | |
| } | |
| /* Loading Spinner (for async operations) */ | |
| .loading-spinner { | |
| width: 40px; | |
| height: 40px; | |
| border: 3px solid var(--border-mid); | |
| border-top-color: var(--gold); | |
| border-radius: 50%; | |
| animation: spin 1s linear infinite; | |
| } | |
| @keyframes spin { | |
| to { | |
| transform: rotate(360deg); | |
| } | |
| } | |
| /* Modal Transitions */ | |
| .modal { | |
| transition: opacity 0.3s ease; | |
| } | |
| .modal .modal-content { | |
| transition: transform 0.3s ease; | |
| } | |
| .modal.active .modal-content { | |
| animation: modalSlideIn 0.3s ease forwards; | |
| } | |
| @keyframes modalSlideIn { | |
| from { | |
| transform: translateY(-20px); | |
| opacity: 0; | |
| } | |
| to { | |
| transform: translateY(0); | |
| opacity: 1; | |
| } | |
| } | |