{{-- /herramientas/afinador-kefir-agua — el afinador de kéfir de agua (docs/Afinador_Kefir_Web.md + Prosa_Afinador_Kefir_Web.md + SEO_Cierre). Tres decisiones de montaje que NO son cosméticas: · La página SE SIRVE con la propuesta de fábrica calculada dentro: sin JavaScript sigue habiendo cantidades, calendario y trueque (§4). · El calendario servido va en HORAS RELATIVAS («a las 48 h»); el JS pone las fechas al cargar. Así cada rastreo ve el mismo HTML (SEO §5.2). · Los textos de trueques y avisos vienen RENDERIZADOS en $resultado, de lang/motor.php vía la voz. Aquí no se escribe ninguno: si un texto de mentor apareciera en esta plantilla, la web y la app dirían cosas distintas del mismo cálculo (§1 bis, y hay un test que lo vigila). --}} @extends('layouts.web') @php $t = fn (string $k, array $p = []) => __("pagina_afinador_kefir.$k", $p); $r = $resultado; $totalHoras = $r['corte_h'] + $r['botella_h']; @endphp @section('seo') @endsection @push('head') {{-- Mismo preload de mono que el afinador de kombucha: su pliegue vive en JetBrains Mono y el swap tardío movía los controles (fase 5 hotfix). --}} @php $ldCrumbs = ['@context' => 'https://schema.org', '@type' => 'BreadcrumbList', 'itemListElement' => [ ['@type' => 'ListItem', 'position' => 1, 'name' => 'Inicio', 'item' => url('/')], ['@type' => 'ListItem', 'position' => 2, 'name' => 'Herramientas', 'item' => ruta('herramientas')], ['@type' => 'ListItem', 'position' => 3, 'name' => $t('hero.title'), 'item' => ruta('afinador-kefir')], ]]; $ldTool = ['@context' => 'https://schema.org', '@type' => 'SoftwareApplication', 'name' => $t('hero.title'), 'applicationCategory' => 'UtilitiesApplication', 'operatingSystem' => 'Web', 'url' => ruta('afinador-kefir'), 'description' => $t('seo.desc'), 'isAccessibleForFree' => true, 'offers' => ['@type' => 'Offer', 'price' => '0', 'priceCurrency' => 'EUR'], ]; @endphp @endpush @section('content')

{{ $t('hero.eyebrow') }}

{{ $t('hero.title') }}

{{ $t('hero.lede') }}

{{-- ══════════ EL INSTRUMENTO ══════════ --}}
$r['corte_h'], 'ajustes' => $r['ajustes']])' data-resultado='@json($r)' data-tramo-label="{{ $t('curva.tramo') }}" data-colar-label="{{ $t('curva.colar') }}"> {{-- El limitador, ENCIMA del instrumento: cuando salte, la explicación aparece justo donde la persona está tocando los mandos — y la última propuesta sigue intacta más abajo (§5: nunca se borra lo que ya tenía). --}}
{{-- Dos ejes y SEPARADOS a propósito: el modelo afirma que perfil y gas son independientes; meter el gas dentro del perfil sería contradecir el motor en la interfaz (§1 del briefing). --}}

{{ $t('panel.como') }}

@foreach($perfiles as $p) @endforeach

{{ $t('panel.pie_perfil.' . $inicial['perfil']) }}

{{ $t('panel.burbuja') }}

@foreach(['poco', 'normal', 'mucho'] as $g) @endforeach

{{ $t('panel.pie_gas.' . $inicial['gas']) }}

{{-- ══ LA CURVA — es el mando: el perfil se define por dónde se corta ══ --}}

{{ $t('curva.titulo') }}

{{ $t('curva.ayuda') }}

{{ $t('curva.f1') }} {{ $t('curva.botella') }} {{ $t('curva.suelo') }}
{{-- La capa de ajuste: SOBREESCRITURA sobre lo que el perfil decidió (Lexico §6). Se inicializa desde la propuesta, lo tocado se cuenta, y cambiar de perfil lo descarta todo. --}}
{{ $t('panel.ajustar') }}
{{ $t('panel.estado') }}
{{-- ══════════ LA PROPUESTA — servida, el orden no es negociable ══════════ --}}

{{ $t('resultado.necesitas') }}

@foreach($r['cantidades'] as $c)
{{ $c['cantidad'] }}{{ $c['unidad'] === 'unit' ? 'uds' : $c['unidad'] }} {{ $c['nombre'] }}
@endforeach

{{ $t('resultado.cuando') }}

@foreach($r['calendario'] as $tramo)
{{ $tramo['marca'] }}@if($tramo['h'] > 0) · {{ $tramo['h'] }} h @endif
{{-- Horas relativas en el HTML servido; el JS añade la fecha local. --}}
{{ $tramo['h'] === 0 ? '—' : $t('resultado.en_horas', ['h' => $tramo['h']]) }}
{{ $tramo['nota'] }}
@endforeach
@foreach($r['trueques'] as $mensaje)
{{ $t('resultado.del_mentor') }}

{{ $mensaje }}

@endforeach
@foreach($r['avisos_duros'] as $mensaje)
{{ $mensaje }}
@endforeach
{{ $t('resultado.ver_numeros') }} @foreach($r['numeros'] as $fila) @endforeach
{{ $fila['etiqueta'] }} {{ $fila['valor'] }}@if($fila['glosa']){{ $fila['glosa'] }}@endif
    @foreach($r['avisos_blandos'] as $mensaje)
  • {{ $mensaje }}
  • @endforeach
{{-- Hueco previsto: consejos de nivel fermento SIN síntoma (la cuarta ventana de Consejos_Admin_Pantalla §2). La decisión §7a/§7b sigue abierta y hoy no hay filas que pintar; cuando se cierre, el renderizador entra aquí sin rehacer la página (briefing §1 bis). --}} {{-- ══════════ EL CIERRE — anclado en lo que la herramienta no puede hacer ══════════ --}}

{{ $t('cierre.texto', ['temp' => $inicial['temp'], 'horas' => $totalHoras]) }}

{{-- Los pies de eje de los estados no seleccionados, para el widget. Copy de la web (lang de página), no voz del motor. --}} @php $pies = [ 'perfil' => ['dulce' => $t('panel.pie_perfil.dulce'), 'equilibrado' => $t('panel.pie_perfil.equilibrado'), 'seco' => $t('panel.pie_perfil.seco')], 'gas' => ['poco' => $t('panel.pie_gas.poco'), 'normal' => $t('panel.pie_gas.normal'), 'mucho' => $t('panel.pie_gas.mucho')], ]; @endphp {{-- Enlaces cruzados: DEBAJO del CTA, no encima (§8). Guía primero — es el par que más pesa; el triángulo con kombucha y el estante, después. --}}

{!! $t('enlaces.guia', ['url' => ruta('fermentos.show', 'kefir-agua')]) !!}

{!! $t('enlaces.kombucha', ['url' => ruta('afinador')]) !!}

{!! $t('enlaces.estante', ['url' => ruta('herramientas')]) !!}

{{-- ══════════ LA PROSA — es lo que posiciona (texto cerrado, no reescribir) ══════════ --}}

{{ $t('prosa.azucar_t') }}

{{ $t('prosa.azucar_p1') }}

{!! $t('prosa.azucar_p2') !!}

{{ $t('prosa.azucar_p3') }}

  • {!! $t('prosa.azucar_l1') !!}
  • {!! $t('prosa.azucar_l2') !!}

{!! $t('prosa.azucar_p4') !!}

{!! $t('prosa.azucar_p5') !!}

{{ $t('prosa.tiempo_t') }}

{!! $t('prosa.tiempo_p1') !!}

{{ $t('prosa.tiempo_p2') }}

{{ $t('prosa.tiempo_cita') }}

{{ $t('prosa.tiempo_p3') }}

{{ $t('prosa.tiempo_p4') }}

{!! $t('prosa.tiempo_p5') !!}

{{ $t('prosa.gas_t') }}

{!! $t('prosa.gas_p1') !!}

{!! $t('prosa.gas_p2') !!}

{{ $t('prosa.gas_p3') }}

  1. {!! $t('prosa.gas_l1') !!}
  2. {!! $t('prosa.gas_l2') !!}
  3. {!! $t('prosa.gas_l3') !!}

{!! $t('prosa.gas_p4') !!}

{{ $t('prosa.gas_p5') }}

{{ $t('prosa.ingredientes_t') }}

{{ $t('prosa.ingredientes_p1') }}

{!! $t('prosa.ingredientes_agua') !!}

{!! $t('prosa.ingredientes_fruta') !!}

{!! $t('prosa.ingredientes_limon') !!}

{!! $t('prosa.ingredientes_granulos') !!}

{{ $t('prosa.listo_t') }}

{{ $t('prosa.listo_p1') }}

{!! $t('prosa.listo_p2') !!}

{!! $t('prosa.listo_p3') !!}

{!! $t('prosa.listo_p4') !!}

{{ $t('prosa.listo_p5') }}

{{ $t('prosa.alcohol_t') }}

{{ $t('prosa.alcohol_p1') }}

{!! $t('prosa.alcohol_p2') !!}

{{ $t('prosa.nosabe_t') }}

{{ $t('prosa.nosabe_p1') }}

{{ $t('prosa.nosabe_p2') }}

{!! $t('prosa.nosabe_p3') !!}

@endsection @push('scripts') @endpush