/* === Contenedor de cada opción === */ .image-container { position: relative; display: flex; flex-direction: column; align-items: center; text-align: center; /* Tamaño adaptable */ width: 100%; max-width: 200px; /* Para evitar que la imagen sobresalga al hacer zoom */ overflow: hidden; /* Borde invisible por defecto para evitar movimiento al seleccionar */ border: 4px solid transparent; border-radius: 8px; padding: 8px; margin-inline: 5px; transition: border 0.3s ease; } /* === Imagen interna === */ .image-container img { max-width: 100%; max-height: 150px; display: block; transform-origin: center center; transition: transform 0.3s ease; } /* Borde cuando está seleccionado, sin JS */ .image-container:has(input:checked) { border-color: #92b2a7; } /* Si quieres la animación al seleccionar */ .image-container:has(input:checked) .image-presupuesto { animation: zoomPop 800ms cubic-bezier(0.68,-0.55,0.27,1.55); } /* === Animación de zoom con rebote === */ .image-presupuesto.zoom-anim { animation: zoomPop 800ms cubic-bezier(0.68, -0.55, 0.27, 1.55); } /* Keyframes para la animación */ @keyframes zoomPop { 0% { transform: scale(1); } 40% { transform: scale(0.85); } 80% { transform: scale(1.05); } 100% { transform: scale(1); } } .image-container:hover { cursor: pointer; box-shadow: 0 0 10px rgba(104, 124, 254, 0.3); } @media (max-width: 576px) { .image-container { max-width: 100%; } } .gramaje-radio { display: flex; flex-direction: column; align-items: center; justify-content: center; min-width: 70px; /* Ancho mínimo */ min-height: 70px; /* Alto mínimo */ max-width: 70px; /* Ancho máximo */ max-height: 70px; /* Alto máximo */ } @keyframes fadeInUpBounce { 0% { opacity: 0; transform: translateY(30px); } 60% { opacity: 1; transform: translateY(-10px); } 80% { transform: translateY(5px); } 100% { transform: translateY(0); } } .animate-fadeInUpBounce { animation: fadeInUpBounce 0.6s ease-out both; animation-delay: 0.1s; will-change: transform; } .service-option { cursor: pointer; transition: all 0.3s ease-in-out; border: 1px solid #d0d7e5; border-radius: 0.5rem; background-color: #fff; } .service-option.checked { border-color: #4b7bec; background-color: #f0f5ff; box-shadow: 0 0 0 2px #4b7bec inset; } .service-option .price { font-weight: 600; font-size: 1rem; margin-top: 1rem; } .service-desc { min-height: 2.2rem; /* ajusta según el tamaño de fuente que uses */ display: flex; align-items: center; justify-content: center; } .service-checkbox { display: none; } .btn-check-service+.btn { position: relative; /* <-- Esto es lo más importante */ display: flex; flex-direction: column; align-items: center; justify-content: center; white-space: normal; line-height: 1.2; min-height: 180px; padding: 1rem 0.75rem; border-radius: 0.5rem; color: #92b2a7; border: 1px solid #92b2a7; transition: all 0.3s ease-in-out; } /* ESTILO CUANDO ESTÁ MARCADO */ .btn-check-service:checked+.btn { background-color: #92b2a7; color: #ffffff !important; border-color: #92b2a7; } /* Forzamos el color blanco en los subelementos */ .btn-check-service:checked+.btn .service-title, .btn-check-service:checked+.btn .service-desc, .btn-check-service:checked+.btn .service-price { color: #ffffff !important; } /* Forzamos el color azul cuando no está marcado */ .btn-check-service+.btn .service-title, .btn-check-service+.btn .service-desc, .btn-check-service+.btn .service-price { color: #92b2a7; } /* ribbon-service */ .ribbon-service { position: absolute; top: -5px; right: -5px; overflow: hidden; width: 90px; height: 90px; z-index: 1; } .ribbon-service span { position: absolute; display: block; width: 120px; padding: 5px 0; background: #e5745b; color: white; font-size: 12px; text-align: center; font-weight: bold; transform: rotate(45deg); top: 20px; right: -30px; box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2); } /* ===== Tiradas (pricing cards) ===== */ .tirada-card { --il-accent: #92b2a7; /* verde grisáceo */ --radius: 18px; --sel-scale-y: 1.12; /* cuánto más alta la seleccionada (crece arriba y abajo) */ /* círculo */ --arc-w: 280px; --arc-h: 190px; --arc-y: -23px; /* tu valor */ --arc-stop: 65%; border: 1px solid #e9ecef; border-radius: var(--radius); background-color: #fff; background-image: radial-gradient(var(--arc-w) var(--arc-h) at 50% var(--arc-y), rgba(146, 178, 167, .24) 0 var(--arc-stop), transparent calc(var(--arc-stop) + 1%)); padding: 1.25rem 1.25rem 1rem; text-align: center; position: relative; height: 100%; box-shadow: 0 4px 14px rgba(146, 178, 167, .12); overflow: hidden; transform-origin: center center; will-change: transform; transition: transform .22s ease, box-shadow .22s ease, border-color .22s ease, background .22s ease; } /* sin elevación al hover */ .tirada-card:hover { transform: none; } /* Tipografías */ .tirada-card .title { font-weight: 700; letter-spacing: .04em; font-size: .9rem; color: var(--il-accent); text-transform: uppercase; } .tirada-card .price-big { font-size: 1.15rem; font-weight: 800; line-height: 1.1; margin: .35rem 0 .15rem; color: var(--il-accent); } .tirada-card .price-total { font-size: 1.8rem; color: #92b2a7; } .tirada-card .per { font-size: .85rem; color: #7f8fa9; } .tirada-card .price-row { margin-top: .75rem; } .tirada-card .muted { color: #8e9bb3; font-size: .9rem; } /* Botón */ .tirada-card .btn-select-tirada { margin-top: 1rem; border-radius: 999px; padding: .6rem 1rem; font-weight: 600; border: 2px solid var(--il-accent); color: var(--il-accent); background: transparent; width: 100%; transition: background .2s ease, color .2s ease; } /* ===== Seleccionada ===== */ .tirada-card.selected { transform: scaleY(var(--sel-scale-y)); z-index: 2; box-shadow: 0 18px 48px rgba(146, 178, 167, .32); border-color: var(--il-accent); /* círculo sólido */ background-image: radial-gradient(var(--arc-w) var(--arc-h) at 50% var(--arc-y), #92b2a7 0 var(--arc-stop), transparent calc(var(--arc-stop) + 1%)); } .tirada-card.selected:hover { transform: scaleY(var(--sel-scale-y)); } .tirada-card.selected .btn-select-tirada { background: var(--il-accent); color: #fff; } /* texto en blanco dentro del círculo */ .tirada-card.selected .title, .tirada-card.selected .price-big, .tirada-card.selected .per { color: #fff; } /* Línea inferior integrada (solo en no seleccionadas) */ .tirada-card:not(.selected)::after { content: ""; position: absolute; left: 1px; right: 1px; bottom: 1px; height: 8px; background: var(--il-accent); border-bottom-left-radius: calc(var(--radius) - 1px); border-bottom-right-radius: calc(var(--radius) - 1px); pointer-events: none; } .tirada-card.selected::after { content: none; } /* Oculta el radio */ .tirada-card input[type="radio"] { display: none; } .nav-link.active .bg-soft-primary { background-color: #ffffff33 !important; /* #4c5c63 al 20% */ } .nav-link.active .text-primary { color: #ffffff !important; /* #4c5c63 al 20% */ } .nav-link:not(.active) .bg-soft-primary { background-color: #4c5c6366 !important; /* #4c5c63 al 20% */ } .nav-link:not(.active) .text-primary { color: #000000 !important; /* #4c5c63 al 20% */ } /* base */ .btn-service-option { background-color: rgba(146, 178, 167, 0.2); color: #92b2a7; border: 1px solid #92b2a7; transition: all .3s ease-in-out; } /* hover no seleccionado */ .btn-check-service+.btn-service-option:hover { background-color: rgba(146, 178, 167, 0.3); color: #92b2a7; } /* seleccionado */ .btn-check-service:checked+.btn-service-option { background-color: #92b2a7; color: #fff; border-color: #92b2a7; } /* hover estando seleccionado (que no se aclare) */ .btn-check-service:checked+.btn-service-option:hover { background-color: #92b2a7; color: #fff; } /* heredan color para textos internos */ .btn-service-option .service-title, .btn-service-option .service-desc, .btn-service-option .service-price { color: inherit; } .form-switch-presupuesto .form-check-input:checked { border-color: #92b2a7; background-color: #cbcecd; } .form-switch-custom.form-switch-presupuesto .form-check-input:checked::before { color: #92b2a7; } /* ==== Paso al resumen ==== */ /* ---- Ajustes rápidos ---- */ /* Valores por defecto (col-9 / col-3 ≈ 75% / 25%) */ #presupuesto-row{ --main-col: 75%; --summary-col: 25%; --il-dur-main: 1.4s; --il-dur-summary: .6s; --il-delay-main: .15s; /* empieza un poco después */ --il-delay-summary: 0s; --il-ease-main: cubic-bezier(.2,.8,.2,1); --il-ease-summary: cubic-bezier(.4,0,.2,1); --il-shift: 32px; } /* Forzamos que el ancho venga de las variables (y sea animable) */ @media (prefers-reduced-motion: no-preference){ #presupuesto-row .col-main{ flex: 0 0 var(--main-col) !important; max-width: var(--main-col) !important; transition: flex-basis var(--il-dur-main) var(--il-ease-main) var(--il-delay-main), max-width var(--il-dur-main) var(--il-ease-main) var(--il-delay-main); } #presupuesto-row .summary-col{ flex: 0 0 var(--summary-col) !important; max-width: var(--summary-col) !important; transition: flex-basis var(--il-dur-summary) var(--il-ease-summary) var(--il-delay-summary), max-width var(--il-dur-summary) var(--il-ease-summary) var(--il-delay-summary), opacity var(--il-dur-summary) var(--il-ease-summary) var(--il-delay-summary), transform var(--il-dur-summary) var(--il-ease-summary) var(--il-delay-summary); } } /* Estado expandido: cambiamos SOLO las variables (esto sí se anima) */ #presupuesto-row.expanded{ --main-col: 100%; --summary-col: 0%; } #presupuesto-row.expanded .summary-col{ opacity: 0; transform: translateX(var(--il-shift)); pointer-events: none; overflow: hidden; } @media (min-width: 1200px){ /* Evita que las columnas se vayan a la siguiente línea durante la animación */ #presupuesto-row{ display: flex; /* por si acaso algún wrapper cambia el display */ flex-wrap: nowrap; /* <-- clave */ align-items: stretch; } /* Permite que las columnas puedan encoger sin forzar salto de línea */ #presupuesto-row .col-main, #presupuesto-row .summary-col{ min-width: 0; /* <-- clave para que el contenido no fuerce ancho */ } /* Opcional: evita “asomar” algo durante el slide */ #presupuesto-row .summary-col{ overflow: hidden; } }