/* Codex Studio | Refinamentos comuns (sem alterar a paleta) */
/* Mantém o mesmo estilo de molduras dos três modelos de referência. */
.image-frame { padding-bottom: 0 !important; align-self: start; min-height: 0; transition: transform .28s ease, box-shadow .28s ease; }
.image-frame > img { display: block; vertical-align: bottom; width: 100%; border-radius: 5px 5px 3px 3px; }
.image-frame:hover { transform: rotate(0deg) translateY(-2px); }
.file-container { animation: codexPageEnter .65s cubic-bezier(.2,.65,.2,1) both; }
@keyframes codexPageEnter { from { opacity:0; transform:translateY(12px); } to { opacity:1; transform:translateY(0); } }
.skill-bar-fill { transform-origin: left center; animation: codexSkillEnter 1s cubic-bezier(.17,.67,.2,1) both; }
@keyframes codexSkillEnter { 0% { transform: scaleX(.02); } 100% { transform: scaleX(1); } }
.social-box, .skill-icon, .page-links a { transition: transform .23s ease, box-shadow .23s ease, filter .23s ease; }
.social-box:not(.disabled):hover, .skill-icon:hover, .page-links a:hover { transform: translateY(-3px); }
a:focus-visible { outline: 3px solid currentColor; outline-offset:3px; }
/* No arquivo de projetos, evita lacunas depois do rodapé. */
.project-container { height: auto !important; min-height: 0 !important; flex: none; align-self: flex-start; }
.project-container .footer-bar { margin-top: 24px; }
@media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration:.01ms !important; animation-iteration-count:1 !important; transition-duration:.01ms !important; scroll-behavior:auto !important; } }
