/* ============================================ VARIABLES DE TEMA (modo claro por defecto) ============================================ */ :root { /* Paleta Base / Primitivas de Marca */ --brand-plum: #221728; --brand-crimson: #ba124d; --brand-teal: #003f52; --brand-sage-light: #eaf0ee; --brand-rose-muted: #dfbdb9; /* Tema Claro (Por Defecto) */ --bg-base: var(--brand-sage-light); --bg-surface: #ffffff; --bg-surface-elevated: #f5f9f8; --text-primary: var(--brand-plum); --text-secondary: var(--brand-teal); --text-muted: rgba(34, 23, 40, 0.65); --text-on-accent: #ffffff; --btn-primary-bg: var(--brand-crimson); --btn-primary-hover: #9c0f40; --btn-secondary-bg: var(--brand-teal); --btn-secondary-hover: #002c3a; --badge-bg: var(--brand-rose-muted); --badge-text: var(--brand-plum); --border: rgba(0, 63, 82, 0.12); --shadow: 0 4px 20px -2px rgba(34, 23, 40, 0.08); --glow-animation: rgba(186, 18, 77, 0.25); /* Tipografía - se completará */ --font-family-base: sans-serif; --font-size-base: 16px; /* Espaciados - se completarán */ --spacing-xs: 0.5rem; --spacing-sm: 1rem; --spacing-md: 2rem; --spacing-lg: 4rem; } /* Modo oscuro */ [data-theme="dark"] { --bg-base: var(--brand-plum); --bg-surface: #2d2034; --bg-surface-elevated: #392842; --text-primary: var(--brand-sage-light); --text-secondary: var(--brand-rose-muted); --text-muted: rgba(234, 240, 238, 0.65); --text-on-accent: #ffffff; --btn-primary-bg: var(--brand-crimson); --btn-primary-hover: #d81a5c; --btn-secondary-bg: #0b5066; --btn-secondary-hover: #10637d; --badge-bg: rgba(223, 189, 185, 0.18); --badge-text: var(--brand-rose-muted); --border: rgba(234, 240, 238, 0.12); --shadow: 0 4px 24px -2px rgba(0, 0, 0, 0.45); --glow-animation: rgba(186, 18, 77, 0.45); } /* ============================================ RESET BÁSICO ============================================ */ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } html { font-size: var(--font-size-base); scroll-behavior: smooth; } body { font-family: var(--font-family-base); background-color: var(--bg-base); color: var(--text-primary); line-height: 1.5; min-height: 100vh; display: flex; flex-direction: column; transition: background-color 0.3s ease, color 0.3s ease; } body.menu-open { overflow: hidden; padding-right: var(--scrollbar-width, 0px); } main { flex: 1; } img, video { max-width: 100%; display: block; } a { color: inherit; text-decoration: none; } ul { list-style: none; } /* ============================================ HEADER Y NAVEGACIÓN ============================================ */ .site-header { background-color: var(--bg-surface); border-bottom: 1px solid var(--border); padding: var(--spacing-sm); position: sticky; top: 0; z-index: 100; box-shadow: var(--shadow); } .main-nav { display: flex; justify-content: space-between; align-items: center; max-width: 1400px; margin: 0 auto; } /* Logo */ .logo { display: flex; align-items: center; } .logo img { height: 40px; width: auto; } .logo-light { display: block; } .logo-dark { display: none; } [data-theme="dark"] .logo-light { display: none; } [data-theme="dark"] .logo-dark { display: block; } /* ============================================ ESTILOS DE BARRA DE NAVEGACIÓN (BOTONES) ============================================ */ /* Contenedor general de acciones */ .nav-actions { display: flex; gap: var(--spacing-sm); align-items: center; } /* Base común para botones (menú y tema) */ .menu-toggle, .theme-toggle { background: none; border: 1px solid var(--border); color: var(--text-primary); padding: 0.5rem 1rem; cursor: pointer; font-size: 1rem; border-radius: 4px; transition: all 0.3s ease; } .menu-toggle:hover, .theme-toggle:hover { background-color: var(--bg-surface-elevated); border-color: var(--text-primary); } /* ============================================ SWITCH DE TEMA (ESPECÍFICO CON ANIMACIÓN) ============================================ */ /* Ajustes del botón contenedor para que sea relativo y un círculo */ .theme-toggle { padding: 0; /* Removemos el padding para controlar el centrado */ width: 40px; height: 40px; display: flex; align-items: center; justify-content: center; border-radius: 50%; /* Es más estético como un círculo */ overflow: hidden; /* Mantiene la rotación dentro del botón */ position: relative; /* Esencial para superponer los iconos */ } /* Estilos base para los iconos SVG */ .theme-icon { width: 20px; height: 20px; display: block; position: absolute; /* Superponemos los iconos uno encima del otro */ /* === EL EFECTO: Transiciones suaves de opacidad y rotación === */ transition: transform 0.5s ease, opacity 0.5s ease; } /* --- LÓGICA DE VISIBILIDAD Y ANIMACIÓN CON DATA-THEME --- */ /* 1. MODO CLARO (POR DEFECTO) O INICIAL */ /* Sol (oculto en modo claro, rotado 180 grados y transparente) */ [data-theme="light"] .icon-sun, :root:not([data-theme="dark"]) .icon-sun { opacity: 0; transform: rotate(180deg); pointer-events: none; /* No interactuable */ } /* Luna (visible en modo claro, posición normal y opaca) */ [data-theme="light"] .icon-moon, :root:not([data-theme="dark"]) .icon-moon { opacity: 1; transform: rotate(0deg); pointer-events: auto; /* Interactuable */ } /* 2. MODO OSCURO */ /* Sol (visible en modo oscuro, posición normal y opaco) */ [data-theme="dark"] .icon-sun { opacity: 1; transform: rotate(0deg); pointer-events: auto; /* Interactuable */ } /* Luna (oculta en modo oscuro, rotada negativamente y transparente) */ [data-theme="dark"] .icon-moon { opacity: 0; transform: rotate(-180deg); /* Rota en dirección opuesta al sol */ pointer-events: none; /* No interactuable */ } /* ============================================ MENÚ DESPLEGABLE (desde abajo) ============================================ */ .menu-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.5); opacity: 0; visibility: hidden; transition: opacity 0.3s ease, visibility 0.3s ease; z-index: 998; } .menu-overlay.is-open { opacity: 1; visibility: visible; } .fullscreen-menu { position: fixed; bottom: 0; left: 0; width: 100%; height: 50vh; /* Mitad del alto en desktop */ background-color: var(--bg-surface); transform: translateY(100%); transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1); z-index: 999; overflow-y: auto; padding: var(--spacing-md) var(--spacing-lg); box-shadow: 0 -4px 20px -2px rgba(0, 0, 0, 0.15); } .fullscreen-menu.is-open { transform: translateY(0); } .menu-close { position: absolute; top: var(--spacing-sm); right: var(--spacing-md); background: none; border: 1px solid var(--border); color: var(--text-primary); font-size: 1.5rem; width: 40px; height: 40px; cursor: pointer; border-radius: 4px; display: flex; align-items: center; justify-content: center; transition: all 0.3s ease; } .menu-close:hover { background-color: var(--bg-surface-elevated); border-color: var(--text-primary); } .menu-content { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--spacing-md); max-width: 1400px; margin: 0 auto; height: 100%; align-content: start; } .menu-column h3 { font-size: 1rem; margin-bottom: var(--spacing-sm); color: var(--text-secondary); font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; } .menu-column ul { display: flex; flex-direction: column; gap: var(--spacing-xs); } .menu-column a { color: var(--text-primary); font-size: 0.95rem; transition: color 0.3s ease; display: block; padding: 0.2rem 0; } .menu-column a:hover { color: var(--btn-primary-bg); } /* Columna 3 - Contacto y botones */ .menu-contact-info { margin-bottom: var(--spacing-sm); } .menu-contact-info p { margin-bottom: 0.25rem; color: var(--text-muted); font-size: 0.9rem; } .menu-social { display: flex; gap: var(--spacing-sm); margin-top: var(--spacing-xs); } .menu-social a { font-size: 0.9rem; color: var(--text-secondary); } .menu-buttons { display: flex; flex-direction: column; gap: var(--spacing-xs); margin-top: var(--spacing-sm); } .btn-menu { display: block; padding: 0.6rem 1.2rem; text-align: center; border-radius: 4px; font-weight: 600; font-size: 0.9rem; transition: all 0.3s ease; } .btn-menu-primary { background-color: var(--btn-primary-bg); color: var(--text-on-accent); } .btn-menu-primary:hover { background-color: var(--btn-primary-hover); } .btn-menu-secondary { background-color: var(--btn-secondary-bg); color: var(--text-on-accent); } .btn-menu-secondary:hover { background-color: var(--btn-secondary-hover); } /* Responsive - Mobile */ @media (max-width: 768px) { .fullscreen-menu { height: 85vh; /* En mobile ocupa más espacio */ padding: var(--spacing-md); } .menu-content { grid-template-columns: 1fr; gap: var(--spacing-md); } .menu-column h3 { font-size: 1.1rem; } .menu-column a { font-size: 1rem; } } /* Pantallas muy pequeñas */ @media (max-width: 480px) { .fullscreen-menu { height: 90vh; } } /* ============================================ SECCIONES BÁSICAS ============================================ */ main section { padding: var(--spacing-md) var(--spacing-sm); border-bottom: 1px dashed var(--border); } main section h2 { margin-bottom: var(--spacing-sm); font-size: 1.5rem; } /* ============================================ FOOTER ============================================ */ .site-footer { border-top: 1px solid var(--border); padding: var(--spacing-md) var(--spacing-sm); margin-top: auto; background-color: var(--bg-surface); } .footer-content { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: var(--spacing-md); margin-bottom: var(--spacing-md); max-width: 1400px; margin-left: auto; margin-right: auto; } .footer-col h4 { margin-bottom: var(--spacing-xs); color: var(--text-secondary); } .footer-bottom { border-top: 1px solid var(--border); padding-top: var(--spacing-sm); text-align: center; font-size: 0.875rem; color: var(--text-muted); }