Pabloler21 commited on
Commit
d94e704
·
1 Parent(s): dd42a9e

feat: entity panel CSS — fog, grain, vignette, flash and glitch keyframes

Browse files
Files changed (1) hide show
  1. styles.css +110 -0
styles.css CHANGED
@@ -362,3 +362,113 @@ footer { display: none !important; }
362
  animation: none !important;
363
  }
364
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
362
  animation: none !important;
363
  }
364
  }
365
+
366
+ /* ── 15. Entity panel — the child in the fog ──── */
367
+ .entity-stage {
368
+ position: relative;
369
+ aspect-ratio: 5 / 6;
370
+ overflow: hidden;
371
+ border-radius: 6px;
372
+ background: #0b0a10;
373
+ border: 1px solid #1c1528;
374
+ }
375
+
376
+ .entity-figure {
377
+ position: absolute;
378
+ inset: 0;
379
+ }
380
+
381
+ .entity-sway {
382
+ animation: entity-sway 9s ease-in-out infinite alternate;
383
+ transform-origin: 50% 100%;
384
+ }
385
+
386
+ @keyframes entity-sway {
387
+ from { transform: rotate(-0.5deg) translateX(-2px); }
388
+ to { transform: rotate(0.5deg) translateX(2px); }
389
+ }
390
+
391
+ .entity-img {
392
+ position: absolute;
393
+ inset: 0;
394
+ width: 100%;
395
+ height: 100%;
396
+ object-fit: cover;
397
+ }
398
+
399
+ /* terror flash: one-shot animation, restarts on Gradio re-mount */
400
+ .entity-flash-wrap {
401
+ position: absolute;
402
+ inset: 0;
403
+ }
404
+
405
+ .entity-flash {
406
+ position: absolute;
407
+ inset: 0;
408
+ width: 100%;
409
+ height: 100%;
410
+ object-fit: cover;
411
+ opacity: 0;
412
+ animation: entity-flash-anim 1.2s ease-out forwards;
413
+ }
414
+
415
+ .entity-flash-strong {
416
+ animation: entity-flash-anim 2s ease-out forwards,
417
+ entity-glitch 2s steps(2) forwards;
418
+ }
419
+
420
+ @keyframes entity-flash-anim {
421
+ 0% { opacity: 0; }
422
+ 12% { opacity: 1; }
423
+ 70% { opacity: 1; }
424
+ 100% { opacity: 0; }
425
+ }
426
+
427
+ @keyframes entity-glitch {
428
+ 0%, 100% { transform: translate(0, 0); }
429
+ 20% { transform: translate(-3px, 1px); }
430
+ 40% { transform: translate(2px, -2px); }
431
+ 60% { transform: translate(-2px, 2px); }
432
+ 80% { transform: translate(3px, -1px); }
433
+ }
434
+
435
+ /* atmosphere overlays, in front of the portrait */
436
+ .entity-fog {
437
+ position: absolute;
438
+ inset: -15%;
439
+ pointer-events: none;
440
+ background:
441
+ radial-gradient(ellipse 50% 25% at 30% 75%, rgba(150,140,165,0.14) 0%, transparent 70%),
442
+ radial-gradient(ellipse 55% 30% at 75% 35%, rgba(120,110,140,0.10) 0%, transparent 70%);
443
+ filter: blur(10px);
444
+ animation: entity-fog-drift 16s ease-in-out infinite alternate;
445
+ }
446
+
447
+ @keyframes entity-fog-drift {
448
+ from { transform: translateX(-3%) translateY(1%); }
449
+ to { transform: translateX(3%) translateY(-1.5%); }
450
+ }
451
+
452
+ .entity-grain {
453
+ position: absolute;
454
+ inset: 0;
455
+ pointer-events: none;
456
+ opacity: 0.13;
457
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='g'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23g)'/%3E%3C/svg%3E");
458
+ }
459
+
460
+ .entity-vig {
461
+ position: absolute;
462
+ inset: 0;
463
+ pointer-events: none;
464
+ background: radial-gradient(ellipse at 50% 42%, transparent 42%, rgba(5,4,9,0.82) 100%);
465
+ }
466
+
467
+ /* finale: struck-through treasure + decomposing type already inline;
468
+ reduced motion */
469
+ @media (prefers-reduced-motion: reduce) {
470
+ .entity-sway, .entity-fog, .entity-flash, .entity-flash-strong {
471
+ animation: none !important;
472
+ }
473
+ .entity-flash, .entity-flash-strong { opacity: 0 !important; }
474
+ }