/* ============================================ FUENTES DE MARCA ============================================ */ @import url('https://fonts.googleapis.com/css2?family=Jost:wght@400;500;600;700&family=Literata:ital,wght@0,400;0,700;1,400;1,700&family=Raleway:wght@400;500;600;700&family=Windsong&display=swap'); /* ============================================ 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 de Marca */ --font-title: 'Literata', serif; --font-subtitle: 'Literata', serif; --font-body: 'Raleway', sans-serif; --font-small: 'Jost', sans-serif; --font-signature: 'Windsong', cursive; --font-family-base: var(--font-body); --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; } /* Títulos principales */ h1, h2, h3 { font-family: var(--font-title); font-style: italic; font-weight: 700; } /* Subtítulos */ h4, h5, h6 { font-family: var(--font-subtitle); font-style: italic; font-weight: 400; } /* Textos pequeños */ small { font-family: var(--font-small); } /* Botones */ button, .btn, [class*="btn-"] { font-family: var(--font-small); } /* Firmas / textos manuscritos */ .signature, .firma { font-family: var(--font-signature); font-weight: 400; } 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 { background: none; border: 1px solid var(--border); color: var(--text-primary); padding: 0.45rem 1.1rem; cursor: pointer; font-size: 0.95rem; font-weight: 500; border-radius: 24px; /* Bordes redondeados modernos */ display: inline-flex; align-items: center; justify-content: center; gap: 0.5rem; /* Separación entre el icono y el texto */ transition: all 0.3s ease; } .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 { background-color: var(--bg-surface-elevated); border-color: var(--text-primary); } .theme-toggle:hover { background-color: var(--bg-surface-elevated); border-color: var(--text-primary); } .menu-icon { width: 18px; height: 18px; display: block; flex-shrink: 0; transition: transform 0.2s ease; } .menu-toggle:hover .menu-icon { transform: scale(1.08); } /* ============================================ 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(34, 23, 40, 0.9); backdrop-filter: blur(4px); 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: 52vh; /* Mitad del alto en desktop */ background-color: var(--bg-surface); border-top-left-radius: 20px; border-top-right-radius: 20px; transform: translateY(100%); transition: transform 0.4s cubic-bezier(0.16, 1, 0.3, 1); z-index: 999; overflow-y: auto; padding: var(--spacing-md) var(--spacing-lg); box-shadow: 0 -10px 40px -5px 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.1rem; width: 36px; height: 36px; cursor: pointer; border-radius: 50%; display: flex; align-items: center; justify-content: center; transition: all 0.25s ease; } .menu-close:hover { background-color: var(--bg-surface-elevated); border-color: var(--text-primary); transform: rotate(90deg); } .menu-content { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--spacing-lg); max-width: 1200px; margin: 0 auto; padding-top: 0.5rem; } .menu-column h3 { font-family: var(--font-small); font-style: normal; font-size: 0.85rem; letter-spacing: 1.2px; text-transform: uppercase; margin-bottom: var(--spacing-sm); color: var(--text-secondary); font-weight: 700; border-bottom: 1px solid var(--border); padding-bottom: 0.4rem; } .menu-column ul { display: flex; flex-direction: column; gap: 0.35rem; } .menu-column a { color: var(--text-primary); font-size: 0.95rem; padding: 0.25rem 0; display: inline-block; transition: transform 0.2s ease, color 0.2s ease; } .menu-column a:hover { color: var(--btn-primary-bg); transform: translateX(4px); } /* Columna 3 - Contacto y botones */ .menu-contact-info { margin-bottom: var(--spacing-sm); } .menu-contact-info p { margin-bottom: 0.35rem; color: var(--text-muted); font-size: 0.9rem; } .menu-social { display: flex; gap: var(--spacing-sm); margin: var(--spacing-xs) 0 var(--spacing-sm); } .menu-social a { font-size: 0.85rem; font-weight: 600; color: var(--text-secondary); } .menu-buttons { display: flex; flex-direction: column; gap: 0.65rem; } .btn-menu { display: block; padding: 0.65rem 1.2rem; text-align: center; border-radius: 999px; font-weight: 600; font-size: 0.9rem; transition: all 0.25s ease; } .btn-menu-primary { background-color: var(--btn-primary-bg); color: var(--text-on-accent) !important; border: 1.5px solid var(--btn-primary-bg); box-shadow: 0 4px 14px -3px rgba(186, 18, 77, 0.35); } .btn-menu-primary:hover { background-color: var(--btn-primary-hover); border-color: var(--btn-primary-hover); transform: translateY(-1px); } .btn-menu-secondary { background-color: transparent; border: 1.5px solid var(--text-secondary); color: var(--text-primary); } .btn-menu-secondary:hover { background-color: var(--bg-surface-elevated); border-color: var(--btn-primary-bg); color: var(--btn-primary-bg); transform: translateY(-1px); } .menu-brand { margin-top: 1.75rem; display: flex; justify-content: flex-end; align-items: center; border-top: none; } .menu-brand img { height: 36px; width: auto; opacity: 0.95; transition: opacity 0.2s ease; } .menu-brand img:hover { opacity: 1; } .contact-item { display: flex; align-items: center; gap: 0.6rem; color: var(--text-primary); } .contact-icon { width: 24px; height: 16px; display: inline-block; background-color: currentColor; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; -webkit-mask-position: center; mask-position: center; -webkit-mask-size: contain; mask-size: contain; } .icon-email { -webkit-mask-image: url("../assets/iconos/buzon.svg"); mask-image: url("../assets/iconos/buzon.svg"); } .icon-phone { -webkit-mask-image: url("../assets/iconos/contacto.svg"); mask-image: url("../assets/iconos/contacto.svg"); } /* Responsive - Mobile */ @media (max-width: 768px) { .fullscreen-menu { height: 85vh; /* En mobile ocupa más espacio */ padding: var(--spacing-md); padding-bottom: var(--spacing-lg); } .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); }