{"id":10,"date":"2026-10-13T10:59:34","date_gmt":"2026-10-13T10:59:34","guid":{"rendered":"https:\/\/adrianherranz.com\/?page_id=10"},"modified":"2026-10-13T11:27:23","modified_gmt":"2026-10-13T11:27:23","slug":"inicio","status":"publish","type":"page","link":"https:\/\/adrianherranz.com\/","title":{"rendered":"Inicio"},"content":{"rendered":"\n<link rel=\"stylesheet\" href=\"https:\/\/fonts.googleapis.com\/css2?family=Gloock&#038;family=Hanken+Grotesk:wght@400;500;600&#038;family=IBM+Plex+Mono:wght@400;500&#038;display=swap\">\n<style>\n\/* Layout: una sola columna editorial, sin men\u00fa; vapor de taza en la portada, el resto se lee como una ficha de lote *\/\n.ahp {\n  --bg: #17110d;\n  --surface: #211913;\n  --fg: #efe6dc;\n  --muted: #a8968a;\n  --line: #3a2d24;\n  --accent: #d98b4a;\n  --accent-2: #8fae8a;\n  --display: \"Gloock\", \"Georgia\", \"Times New Roman\", serif;\n  --body: \"Hanken Grotesk\", \"Helvetica Neue\", Arial, sans-serif;\n  --mono: \"IBM Plex Mono\", ui-monospace, \"SFMono-Regular\", Menlo, monospace;\n  --ease: cubic-bezier(.2,.7,.2,1);\n  --cup: #efe6dc;\n  --cup-shade: #c9b8a8;\n  --bean: #8a5530;\n  --steam: #f3e3d1;\n  color-scheme: dark;\n}\n@media (prefers-color-scheme: light) {\n  .ahp { --bg: #e7e2db; --surface: #f1ede7; --fg: #22180f; --muted: #6b5a4c; --line: #cfc5b9; --accent: #a8561c; --accent-2: #4f7049; --cup: #fbf8f4; --cup-shade: #d9cec2; --bean: #6e3f1f; --steam: #8a6a52; color-scheme: light; }\n  body:has(.ahp) { background: #e7e2db; }\n}\nbody:has(.ahp) { background: #17110d; }\n\n.ahp, .ahp * { box-sizing: border-box; }\n.ahp {\n  background: var(--bg); color: var(--fg);\n  font: 400 1.0625rem\/1.65 var(--body);\n  padding-inline: clamp(16px, 5vw, 56px);\n  -webkit-font-smoothing: antialiased;\n  overflow-x: clip;\n}\n.ahp a { color: inherit; }\n.ahp h1, .ahp h2, .ahp h3 { color: var(--fg); }\n.ahp a:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; border-radius: 2px; }\n.ahp .wrap { max-width: 1080px; margin-inline: auto; }\n\n\/* Hero *\/\n.ahp .hero { position: relative; padding-block: clamp(40px, 7vw, 88px) 48px; }\n.ahp .hero-fx {\n  position: absolute; top: 0; bottom: 0; left: calc(-1 * clamp(16px, 5vw, 56px)); right: calc(-1 * clamp(16px, 5vw, 56px));\n  width: calc(100% + 2 * clamp(16px, 5vw, 56px)); height: 100%; pointer-events: none; z-index: 0;\n}\n.ahp .hero-inner { position: relative; z-index: 1; display: grid; grid-template-columns: 1.35fr 1fr; gap: clamp(24px, 4vw, 56px); align-items: end; }\n.ahp .hero-inner > * { min-width: 0; }\n.ahp .cup-art { position: relative; display: flex; justify-content: center; padding-top: clamp(60px, 9vw, 110px); }\n.ahp .cup-art svg { width: 100%; max-width: 330px; height: auto; overflow: visible; }\n.ahp .cup-art .glow { position: absolute; left: 50%; bottom: 8%; width: 70%; aspect-ratio: 2.4; transform: translateX(-50%); border-radius: 50%; background: radial-gradient(closest-side, color-mix(in srgb, var(--accent) 30%, transparent), transparent); z-index: -1; }\n.ahp .eyebrow { font: 500 .75rem\/1 var(--mono); text-transform: uppercase; letter-spacing: .14em; color: var(--accent); }\n.ahp h1 {\n  font-family: var(--display); font-weight: 400;\n  font-size: clamp(3.4rem, 12vw, 9rem); line-height: .92; letter-spacing: -.02em;\n  margin: 18px 0 0;\n}\n.ahp h1 em { font-style: normal; color: var(--accent); display: inline-block; }\n.ahp h1 .ch { display: inline-block; }\n.ahp .lede { max-width: 34ch; font-size: clamp(1.15rem, 2.2vw, 1.4rem); line-height: 1.5; color: var(--fg); margin: 26px 0 0; }\n.ahp .lede small { display: block; margin-top: 10px; font-size: .95rem; color: var(--muted); }\n.ahp .ctas { display: flex; gap: 12px; flex-wrap: wrap; margin-top: 32px; }\n\n\/* Buttons: relleno que barre al pasar el rat\u00f3n *\/\n.ahp .btn {\n  position: relative; overflow: hidden; isolation: isolate;\n  display: inline-flex; align-items: center; gap: 10px;\n  padding: 13px 22px; border-radius: 999px; text-decoration: none;\n  font-weight: 600; font-size: .95rem; border: 1px solid var(--line); color: var(--fg);\n  transition: transform .3s var(--ease), border-color .3s, color .3s;\n}\n.ahp .btn::before {\n  content: \"\"; position: absolute; inset: 0; z-index: -1; border-radius: inherit;\n  background: var(--accent); transform: scaleX(0); transform-origin: left;\n  transition: transform .45s var(--ease);\n}\n.ahp .btn:hover { transform: translateY(-2px); border-color: var(--accent); color: var(--bg); }\n.ahp .btn:hover::before { transform: scaleX(1); }\n.ahp .btn.primary { background: var(--accent); color: var(--bg); border-color: var(--accent); }\n.ahp .btn.primary::before { background: var(--fg); }\n.ahp .btn .arr { transition: transform .3s var(--ease); }\n.ahp .btn:hover .arr { transform: translateX(4px); }\n\n\/* Cinta de procesos *\/\n.ahp .ticker { border-block: 1px solid var(--line); overflow: hidden; margin-inline: calc(-1 * clamp(16px, 5vw, 56px)); padding-block: 16px; }\n.ahp .ticker-track { display: flex; width: max-content; gap: 0; }\n.ahp .ticker span {\n  font-family: var(--display); font-size: clamp(1.4rem, 3vw, 2rem); color: var(--muted);\n  padding-inline: 22px; white-space: nowrap; display: inline-flex; align-items: center; gap: 44px;\n}\n.ahp .ticker span::after { content: \"\u25cf\"; font-size: .45em; color: var(--accent); }\n\n\/* Specialty facts *\/\n.ahp .facts { display: grid; grid-template-columns: repeat(4, 1fr); margin-top: 40px; border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); }\n.ahp .fact { padding: 28px 22px 28px 0; min-width: 0; position: relative; }\n.ahp .fact + .fact { padding-left: 22px; border-left: 1px solid var(--line); }\n.ahp .fact::after {\n  content: \"\"; position: absolute; left: 0; right: 0; bottom: -1px; height: 2px; background: var(--accent);\n  transform: scaleX(0); transform-origin: left; transition: transform .5s var(--ease);\n}\n.ahp .fact:hover::after { transform: scaleX(1); }\n.ahp .fact-num { font-family: var(--display); font-size: clamp(2.6rem, 5vw, 3.6rem); line-height: 1; color: var(--accent); font-variant-numeric: tabular-nums; }\n.ahp .fact-num small { font-size: .4em; color: var(--muted); margin-left: 2px; }\n.ahp .fact strong { display: block; margin-top: 14px; font-weight: 600; }\n.ahp .fact p { margin: 6px 0 0; color: var(--muted); font-size: .95rem; }\n@media (max-width: 900px) {\n  .ahp .facts { grid-template-columns: 1fr 1fr; }\n  .ahp .fact:nth-child(3) { padding-left: 0; border-left: 0; }\n  .ahp .fact:nth-child(n+3) { border-top: 1px solid var(--line); }\n}\n@media (max-width: 520px) {\n  .ahp .facts { grid-template-columns: 1fr; }\n  .ahp .fact, .ahp .fact + .fact { padding: 22px 0; border-left: 0; }\n  .ahp .fact + .fact { border-top: 1px solid var(--line); }\n}\n\n\/* Sections *\/\n.ahp section.block { padding-block: clamp(56px, 9vw, 96px); }\n.ahp section.block + section.block { border-top: 1px solid var(--line); }\n.ahp .sec-label { font: 500 .75rem\/1 var(--mono); text-transform: uppercase; letter-spacing: .14em; color: var(--muted); }\n.ahp h2 { font-family: var(--display); font-weight: 400; font-size: clamp(2.2rem, 6vw, 4rem); line-height: 1; letter-spacing: -.01em; margin: 14px 0 0; text-wrap: balance; }\n.ahp .prose { max-width: 62ch; }\n.ahp .prose p { margin: 18px 0 0; }\n\n\/* Project *\/\n.ahp .project { display: grid; grid-template-columns: 1.1fr 1fr; gap: clamp(28px, 5vw, 64px); align-items: start; }\n.ahp .project > * { min-width: 0; }\n.ahp .lot { border-top: 1px solid var(--line); margin: 0; }\n.ahp .lot-row {\n  display: grid; grid-template-columns: 7.5rem 1fr; gap: 16px; padding: 18px 0; border-bottom: 1px solid var(--line);\n  transition: padding-left .4s var(--ease), background-color .4s;\n}\n.ahp .lot-row:hover { padding-left: 12px; background: color-mix(in srgb, var(--surface) 70%, transparent); }\n.ahp .lot-row dt { font: 400 .72rem\/1.6 var(--mono); text-transform: uppercase; letter-spacing: .1em; color: var(--accent-2); padding-top: 3px; }\n.ahp .lot-row dd { margin: 0; }\n.ahp .lot-row dd strong { display: block; font-weight: 600; }\n.ahp .lot-row dd span { color: var(--muted); font-size: .97rem; }\n.ahp .links { display: flex; gap: 10px; flex-wrap: wrap; margin-top: 26px; }\n\n\/* Podcast strip con ecualizador *\/\n.ahp .cup {\n  margin-top: 8px; display: flex; align-items: center; justify-content: space-between; gap: 20px; flex-wrap: wrap;\n  padding: 26px 28px; border-radius: 14px; background: var(--surface); border: 1px solid var(--line);\n}\n.ahp .cup-l { display: flex; align-items: center; gap: 22px; min-width: 0; }\n.ahp .eq { display: flex; align-items: flex-end; gap: 4px; height: 40px; flex: none; }\n.ahp .eq i { display: block; width: 5px; height: 40%; border-radius: 3px; background: var(--accent); transform-origin: bottom; }\n.ahp .cup h3 { font-family: var(--display); font-weight: 400; font-size: clamp(1.5rem, 3.4vw, 2.1rem); margin: 6px 0 0; }\n\n.ahp footer { margin-top: clamp(48px, 8vw, 80px); border-top: 1px solid var(--line); padding-block: 36px 48px; color: var(--muted); font-size: .9rem; }\n\n@media (max-width: 760px) {\n  .ahp .project { grid-template-columns: 1fr; }\n  .ahp .lot-row { grid-template-columns: 1fr; gap: 4px; }\n  .ahp .hero-inner { grid-template-columns: 1fr; }\n  .ahp .cup-art { padding-top: 70px; }\n  .ahp .cup-art svg { max-width: 200px; }\n}\n\n\/* Movimiento: solo si el visitante no ha pedido reducirlo *\/\n@media (prefers-reduced-motion: no-preference) {\n  .ahp .rise { animation: ahp-rise .9s var(--ease) both; }\n  .ahp .rise.d1 { animation-delay: .1s; } .ahp .rise.d2 { animation-delay: .7s; } .ahp .rise.d3 { animation-delay: .85s; }\n  .ahp h1 .ch { animation: ahp-letter .8s var(--ease) both; animation-delay: calc(.15s + var(--i) * .045s); }\n  .ahp h1 em { animation: ahp-drop .7s cubic-bezier(.3,1.6,.5,1) both; animation-delay: .65s; }\n  .ahp .cup-art .wave { animation: ahp-wave 3.2s linear infinite; }\n  .ahp .cup-art .brew { animation: ahp-fill 14s ease-in-out infinite alternate; }\n  .ahp .cup-art .drop { animation: ahp-drip 1.5s cubic-bezier(.5,0,1,1) infinite; opacity: 0; }\n  .ahp .cup-art .drop:nth-child(2) { animation-delay: .5s; } .ahp .cup-art .drop:nth-child(3) { animation-delay: 1s; }\n  .ahp .cup-art .ripple { transform-box: fill-box; transform-origin: center; animation: ahp-ripple 1.5s ease-out infinite; animation-delay: .62s; }\n  .ahp .cup-art .bloom circle { transform-box: fill-box; transform-origin: center; animation: ahp-bloom 2.6s ease-in-out infinite; }\n  .ahp .cup-art .bloom circle:nth-child(2n) { animation-delay: -1.3s; } .ahp .cup-art .bloom circle:nth-child(3n) { animation-delay: -.7s; }\n  @keyframes ahp-wave { to { transform: translateX(-40px); } }\n  @keyframes ahp-fill { from { transform: translateY(10px); } to { transform: translateY(-14px); } }\n  @keyframes ahp-drip { 0% { transform: translateY(0) scaleY(.6); opacity: 0; } 12% { opacity: 1; } 85% { opacity: 1; } 100% { transform: translateY(76px) scaleY(1.2); opacity: 0; } }\n  @keyframes ahp-ripple { 0% { transform: scale(.3); opacity: .9; } 100% { transform: scale(2.6); opacity: 0; } }\n  @keyframes ahp-bloom { 0%, 100% { transform: scale(.6); opacity: .4; } 50% { transform: scale(1.15); opacity: 1; } }\n  .ahp .ticker-track { animation: ahp-scroll 38s linear infinite; }\n  .ahp .ticker:hover .ticker-track { animation-play-state: paused; }\n  .ahp .eq i { animation: ahp-eq 1.1s ease-in-out infinite alternate; }\n  .ahp .eq i:nth-child(2) { animation-duration: .8s; animation-delay: -.3s; }\n  .ahp .eq i:nth-child(3) { animation-duration: 1.3s; animation-delay: -.6s; }\n  .ahp .eq i:nth-child(4) { animation-duration: .9s; animation-delay: -.2s; }\n  .ahp .eq i:nth-child(5) { animation-duration: 1.2s; animation-delay: -.9s; }\n  .ahp.js .reveal { opacity: .2; transform: translateY(26px); transition: opacity .9s var(--ease), transform .9s var(--ease); transition-delay: var(--d, 0s); }\n  .ahp.js .reveal.in { opacity: 1; transform: none; }\n  @keyframes ahp-rise { from { transform: translateY(14px); opacity: .3; } to { transform: none; opacity: 1; } }\n  @keyframes ahp-letter { from { transform: translateY(.35em) rotate(4deg); opacity: 0; filter: blur(6px); } to { transform: none; opacity: 1; filter: none; } }\n  @keyframes ahp-drop { from { transform: translateY(-1.2em); opacity: 0; } to { transform: none; opacity: 1; } }\n  @keyframes ahp-scroll { to { transform: translateX(-50%); } }\n  @keyframes ahp-eq { from { transform: scaleY(.25); } to { transform: scaleY(1); } }\n}\n<\/style>\n<div class=\"ahp\">\n<main class=\"wrap\">\n  <section class=\"hero\">\n    <canvas class=\"hero-fx\" aria-hidden=\"true\"><\/canvas>\n    <div class=\"hero-inner\">\n     <div>\n      <div class=\"eyebrow rise\">Caf\u00e9 de especialidad \u00b7 Emprendimiento<\/div>\n      <h1 class=\"split\" aria-label=\"Bienvenido.\">Bienvenido<em>.<\/em><\/h1>\n      <p class=\"lede rise d2\">\n        Me llamo Adri\u00e1n y soy multipotencial. Hoy estoy enfocado en el caf\u00e9 de especialidad, aprendiendo por mi cuenta todo lo que puedo.\n        <small>Aunque definirme as\u00ed se queda corto.<\/small>\n      <\/p>\n      <div class=\"ctas rise d3\">\n        <a class=\"btn primary\" href=\"https:\/\/guadarrama.coffee\" target=\"_blank\" rel=\"noopener\">Descubre Guadarrama Coffee <span class=\"arr\" aria-hidden=\"true\">\u2192<\/span><\/a>\n        <a class=\"btn\" href=\"https:\/\/www.youtube.com\/playlist?list=PLByP159rUdyy2E5G3Qr010dnvxuvn7X1p\" target=\"_blank\" rel=\"noopener\">Escucha el podcast<\/a>\n      <\/div>\n     <\/div>\n     <div class=\"cup-art rise d2\" aria-hidden=\"true\">\n      <div class=\"glow\"><\/div>\n      <svg viewBox=\"0 0 320 380\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n        <defs>\n          <linearGradient id=\"ahpCer\" x1=\"0\" x2=\"1\" y1=\"0\" y2=\"0\">\n            <stop offset=\"0\" stop-color=\"var(--cup-shade)\"\/>\n            <stop offset=\".38\" stop-color=\"var(--cup)\"\/>\n            <stop offset=\".62\" stop-color=\"var(--cup)\"\/>\n            <stop offset=\"1\" stop-color=\"var(--cup-shade)\"\/>\n          <\/linearGradient>\n          <linearGradient id=\"ahpBrew\" x1=\"0\" x2=\"0\" y1=\"0\" y2=\"1\">\n            <stop offset=\"0\" stop-color=\"#b56a32\"\/>\n            <stop offset=\".25\" stop-color=\"#7a3f1c\"\/>\n            <stop offset=\"1\" stop-color=\"#2e170a\"\/>\n          <\/linearGradient>\n          <radialGradient id=\"ahpBed\" cx=\".5\" cy=\".5\" r=\".5\">\n            <stop offset=\"0\" stop-color=\"#c58a55\"\/>\n            <stop offset=\".6\" stop-color=\"#6b3c1e\"\/>\n            <stop offset=\"1\" stop-color=\"#2a170b\"\/>\n          <\/radialGradient>\n          <clipPath id=\"ahpGlass\">\n            <path d=\"M120 190 L120 206 C 120 224, 64 240, 64 292 C 64 336, 98 354, 160 354 C 222 354, 256 336, 256 292 C 256 240, 200 224, 200 206 L200 190 Z\"\/>\n          <\/clipPath>\n          <filter id=\"ahpSoft\" x=\"-50%\" y=\"-50%\" width=\"200%\" height=\"200%\"><feGaussianBlur stdDeviation=\"6\"\/><\/filter>\n        <\/defs>\n        <ellipse cx=\"160\" cy=\"362\" rx=\"112\" ry=\"9\" fill=\"#000\" opacity=\".35\" filter=\"url(#ahpSoft)\"\/>\n\n        <!-- jarra de cristal -->\n        <g clip-path=\"url(#ahpGlass)\">\n          <rect x=\"40\" y=\"180\" width=\"240\" height=\"200\" fill=\"var(--fg)\" opacity=\".05\"\/>\n          <g class=\"brew\">\n            <path class=\"wave\" d=\"M-80 266 q20 -5 40 0 t40 0 t40 0 t40 0 t40 0 t40 0 t40 0 t40 0 t40 0 t40 0 t40 0 L360 380 L-80 380 Z\" fill=\"url(#ahpBrew)\"\/>\n          <\/g>\n          <ellipse class=\"ripple\" cx=\"160\" cy=\"266\" rx=\"10\" ry=\"2.5\" fill=\"none\" stroke=\"#e2b07c\" stroke-width=\"1.2\"\/>\n        <\/g>\n        <path d=\"M120 190 L120 206 C 120 224, 64 240, 64 292 C 64 336, 98 354, 160 354 C 222 354, 256 336, 256 292 C 256 240, 200 224, 200 206 L200 190\" fill=\"none\" stroke=\"var(--fg)\" stroke-opacity=\".55\" stroke-width=\"2\"\/>\n        <path d=\"M80 300 C 78 270, 92 250, 112 238\" fill=\"none\" stroke=\"#fff\" stroke-opacity=\".22\" stroke-width=\"5\" stroke-linecap=\"round\"\/>\n        <g stroke=\"var(--fg)\" stroke-opacity=\".45\" stroke-width=\"1.5\">\n          <line x1=\"232\" y1=\"262\" x2=\"244\" y2=\"262\"\/><line x1=\"236\" y1=\"286\" x2=\"248\" y2=\"286\"\/><line x1=\"236\" y1=\"310\" x2=\"248\" y2=\"310\"\/>\n        <\/g>\n\n        <!-- gotas -->\n        <g class=\"drops\" fill=\"#9a5a2c\">\n          <ellipse class=\"drop\" cx=\"160\" cy=\"188\" rx=\"2.4\" ry=\"3.6\"\/>\n          <ellipse class=\"drop\" cx=\"160\" cy=\"188\" rx=\"2.4\" ry=\"3.6\"\/>\n          <ellipse class=\"drop\" cx=\"160\" cy=\"188\" rx=\"2.4\" ry=\"3.6\"\/>\n        <\/g>\n\n        <!-- base del gotero -->\n        <ellipse cx=\"160\" cy=\"180\" rx=\"78\" ry=\"11\" fill=\"var(--cup-shade)\"\/>\n        <ellipse cx=\"160\" cy=\"176\" rx=\"78\" ry=\"11\" fill=\"url(#ahpCer)\"\/>\n\n        <!-- asa -->\n        <path d=\"M244 64 C 296 66, 296 122, 228 124\" fill=\"none\" stroke=\"var(--cup-shade)\" stroke-width=\"13\" stroke-linecap=\"round\"\/>\n        <path d=\"M244 64 C 288 67, 288 118, 228 120\" fill=\"none\" stroke=\"var(--cup)\" stroke-width=\"7\" stroke-linecap=\"round\"\/>\n\n        <!-- cono -->\n        <path d=\"M58 54 L144 170 L176 170 L262 54 Z\" fill=\"url(#ahpCer)\"\/>\n        <g stroke=\"var(--cup-shade)\" stroke-width=\"1.4\" opacity=\".7\">\n          <line x1=\"92\" y1=\"74\" x2=\"148\" y2=\"160\"\/><line x1=\"120\" y1=\"68\" x2=\"153\" y2=\"162\"\/><line x1=\"200\" y1=\"68\" x2=\"167\" y2=\"162\"\/><line x1=\"228\" y1=\"74\" x2=\"172\" y2=\"160\"\/>\n        <\/g>\n        <!-- boca, filtro de papel y lecho de caf\u00e9 -->\n        <ellipse cx=\"160\" cy=\"54\" rx=\"102\" ry=\"16\" fill=\"var(--cup-shade)\"\/>\n        <ellipse cx=\"160\" cy=\"53\" rx=\"94\" ry=\"13\" fill=\"#f6efe6\"\/>\n        <ellipse cx=\"160\" cy=\"56\" rx=\"84\" ry=\"10\" fill=\"url(#ahpBed)\"\/>\n        <g class=\"bloom\" fill=\"#e9c08f\">\n          <circle cx=\"132\" cy=\"55\" r=\"2.2\"\/><circle cx=\"176\" cy=\"58\" r=\"1.8\"\/><circle cx=\"150\" cy=\"60\" r=\"1.5\"\/><circle cx=\"192\" cy=\"54\" r=\"2\"\/><circle cx=\"118\" cy=\"58\" r=\"1.4\"\/><circle cx=\"163\" cy=\"52\" r=\"1.6\"\/>\n        <\/g>\n      <\/svg>\n     <\/div>\n    <\/div>\n  <\/section>\n\n  <div class=\"ticker\" aria-hidden=\"true\">\n    <div class=\"ticker-track\">\n      <span>Tueste propio<\/span><span>Lavado<\/span><span>Natural<\/span><span>Honey<\/span><span>Origen trazable<\/span><span>Molido al momento<\/span>\n      <span>Tueste propio<\/span><span>Lavado<\/span><span>Natural<\/span><span>Honey<\/span><span>Origen trazable<\/span><span>Molido al momento<\/span>\n    <\/div>\n  <\/div>\n\n  <section class=\"block\" id=\"especialidad\">\n    <div class=\"sec-label reveal\">Qu\u00e9 es el caf\u00e9 de especialidad<\/div>\n    <h2 class=\"reveal\" style=\"--d:.08s\">Un caf\u00e9 que se mide antes de llegar a tu taza<\/h2>\n    <div class=\"prose reveal\" style=\"--d:.16s\">\n      <p>No es una etiqueta de marketing. El caf\u00e9 de especialidad tiene que pasar una evaluaci\u00f3n profesional y poder contar de d\u00f3nde viene. Estas son las claves que lo separan del caf\u00e9 comercial.<\/p>\n    <\/div>\n    <div class=\"facts\">\n      <div class=\"fact reveal\">\n        <div class=\"fact-num\"><span class=\"count\" data-to=\"80\">80<\/span><small>\/100<\/small><\/div>\n        <strong>Puntuaci\u00f3n m\u00ednima<\/strong>\n        <p>Catadores certificados lo eval\u00faan en una cata con el protocolo de la SCA. Solo a partir de 80 puntos se considera de especialidad.<\/p>\n      <\/div>\n      <div class=\"fact reveal\" style=\"--d:.1s\">\n        <div class=\"fact-num\"><span class=\"count\" data-to=\"0\" data-from=\"25\">0<\/span><\/div>\n        <strong>Defectos primarios<\/strong>\n        <p>El grano verde se revisa antes de tostarlo. Granos negros, agrios o con hongos lo descartan.<\/p>\n      <\/div>\n      <div class=\"fact reveal\" style=\"--d:.2s\">\n        <div class=\"fact-num\"><span class=\"count\" data-to=\"1\">1<\/span><\/div>\n        <strong>Origen trazable<\/strong>\n        <p>Se sabe el pa\u00eds, la regi\u00f3n y muchas veces la finca, el productor, la variedad y el proceso: lavado, natural o honey.<\/p>\n      <\/div>\n      <div class=\"fact reveal\" style=\"--d:.3s\">\n        <div class=\"fact-num\"><span class=\"count\" data-to=\"100\">100<\/span><small>%<\/small><\/div>\n        <strong>Ar\u00e1bica y tueste natural<\/strong>\n        <p>Nada de torrefacto con az\u00facar. El tueste busca resaltar los sabores propios de cada origen, de fruta a chocolate.<\/p>\n      <\/div>\n    <\/div>\n    <div class=\"prose reveal\">\n      <p>Un consejo pr\u00e1ctico: compra caf\u00e9 en grano y mu\u00e9lelo justo antes de prepararlo. El caf\u00e9 molido pierde aroma en muy poco tiempo.<\/p>\n    <\/div>\n  <\/section>\n\n  <section class=\"block\" id=\"proyecto\">\n    <div class=\"project\">\n      <div>\n        <div class=\"sec-label reveal\">Mi proyecto actual<\/div>\n        <h2 class=\"reveal\" style=\"--d:.08s\">Guadarrama Coffee Roasters<\/h2>\n        <div class=\"prose reveal\" style=\"--d:.16s\">\n          <p>Hoy toda mi energ\u00eda est\u00e1 en Guadarrama Coffee Roasters, mi tostadora de caf\u00e9 de especialidad. Ah\u00ed se junta lo que he aprendido emprendiendo con mi pasi\u00f3n por el buen caf\u00e9.<\/p>\n        <\/div>\n        <div class=\"links reveal\" style=\"--d:.24s\">\n          <a class=\"btn primary\" href=\"https:\/\/guadarrama.coffee\" target=\"_blank\" rel=\"noopener\">Visita la tienda <span class=\"arr\" aria-hidden=\"true\">\u2192<\/span><\/a>\n        <\/div>\n      <\/div>\n      <dl class=\"lot\">\n        <div class=\"lot-row reveal\">\n          <dt>Grano<\/dt>\n          <dd><strong>Caf\u00e9 de especialidad<\/strong><span>Granos seleccionados por su calidad y su origen.<\/span><\/dd>\n        <\/div>\n        <div class=\"lot-row reveal\" style=\"--d:.12s\">\n          <dt>Tueste<\/dt>\n          <dd><strong>Tueste propio<\/strong><span>Tuesto yo mismo cada lote para sacar lo mejor de cada caf\u00e9.<\/span><\/dd>\n        <\/div>\n        <div class=\"lot-row reveal\" style=\"--d:.24s\">\n          <dt>Taza<\/dt>\n          <dd><strong>De la tienda a tu taza<\/strong><span>Lo pides online y lo preparas en casa como m\u00e1s te guste.<\/span><\/dd>\n        <\/div>\n      <\/dl>\n    <\/div>\n  <\/section>\n\n  <div class=\"cup reveal\">\n    <div class=\"cup-l\">\n      <div class=\"eq\" aria-hidden=\"true\"><i><\/i><i><\/i><i><\/i><i><\/i><i><\/i><\/div>\n      <div>\n        <div class=\"eyebrow\">Podcast<\/div>\n        <h3>\u00abUn caf\u00e9 con Adri\u00e1n\u00bb<\/h3>\n      <\/div>\n    <\/div>\n    <a class=\"btn primary\" href=\"https:\/\/www.youtube.com\/playlist?list=PLByP159rUdyy2E5G3Qr010dnvxuvn7X1p\" target=\"_blank\" rel=\"noopener\">Escuchar episodios <span class=\"arr\" aria-hidden=\"true\">\u2192<\/span><\/a>\n  <\/div>\n<\/main>\n\n<footer>\n  <div class=\"wrap\">\n    <span>\u00a9 Adri\u00e1n Herranz<\/span>\n  <\/div>\n<\/footer>\n<\/div>\n<script>\n(function () {\n  var root = document.querySelector('.ahp');\n  if (!root) return;\n  var reduce = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n\n  \/\/ T\u00edtulo letra a letra\n  var h1 = root.querySelector('h1.split');\n  if (h1 ? !reduce : false) {\n    var em = h1.querySelector('em');\n    var text = h1.firstChild.nodeValue;\n    var frag = document.createElement('span'); frag.style.whiteSpace = 'nowrap';\n    text.split('').forEach(function (c, i) {\n      var s = document.createElement('span');\n      s.className = 'ch'; s.setAttribute('aria-hidden', 'true');\n      s.style.setProperty('--i', i); s.textContent = c;\n      frag.appendChild(s);\n    });\n    h1.replaceChild(frag, h1.firstChild);\n    if (em) { em.setAttribute('aria-hidden', 'true'); frag.appendChild(em); }\n  }\n\n  if (reduce) return;\n  root.classList.add('js');\n\n  \/\/ Aparici\u00f3n al hacer scroll y contadores\n  function count(el) {\n    var to = +el.dataset.to, from = el.dataset.from != null ? +el.dataset.from : 0, t0 = null, dur = 1400;\n    function step(ts) {\n      if (t0 === null) t0 = ts;\n      var k = Math.min(1, (ts - t0) \/ dur), e = 1 - Math.pow(1 - k, 3);\n      el.textContent = Math.round(from + (to - from) * e);\n      if (k < 1) requestAnimationFrame(step);\n    }\n    requestAnimationFrame(step);\n  }\n  var items = root.querySelectorAll('.reveal');\n  if ('IntersectionObserver' in window) {\n    var io = new IntersectionObserver(function (entries) {\n      entries.forEach(function (en) {\n        if (!en.isIntersecting) return;\n        en.target.classList.add('in');\n        en.target.querySelectorAll('.count').forEach(count);\n        io.unobserve(en.target);\n      });\n    }, { threshold: 0.15, rootMargin: '0px 0px -8% 0px' });\n    items.forEach(function (el) { io.observe(el); });\n  } else {\n    items.forEach(function (el) { el.classList.add('in'); });\n  }\n\n})();\n\n\/\/ Portada: granos flotando y vapor saliendo de la taza\n(function () {\n  var root = document.querySelector('.ahp');\n  var cv = root ? root.querySelector('.hero-fx') : null;\n  var cupSvg = root ? root.querySelector('.cup-art svg') : null;\n  if (!cv || !cv.getContext || !cupSvg) return;\n  var reduce = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n  var ctx = cv.getContext('2d'), W = 0, H = 0, dpr = 1, running = true;\n  var mx = 0, my = 0, tmx = 0, tmy = 0;\n  var cols = {};\n  function readCols() {\n    var cs = getComputedStyle(root);\n    cols.bean = cs.getPropertyValue('--bean').trim() || '#8a5530';\n    cols.steam = cs.getPropertyValue('--steam').trim() || '#f3e3d1';\n  }\n  var src = { x: 0, y: 0, w: 0 };\n  function size() {\n    dpr = Math.min(window.devicePixelRatio || 1, 2);\n    var r = cv.getBoundingClientRect(); W = r.width; H = r.height;\n    cv.width = W * dpr; cv.height = H * dpr; ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n    var c = cupSvg.getBoundingClientRect();\n    \/\/ lecho de caf\u00e9 del gotero: centro en x=160\/320, y=54\/380 del dibujo\n    src.x = c.left - r.left + c.width * (160 \/ 320);\n    src.y = c.top - r.top + c.height * (54 \/ 380);\n    src.w = c.width * (168 \/ 320);\n  }\n\n  \/\/ Granos: tres capas de profundidad\n  var beans = [];\n  var n = window.innerWidth < 700 ? 10 : 18;\n  for (var i = 0; i < n; i++) {\n    var z = Math.random();\n    beans.push({\n      x: Math.random(), y: Math.random(), z: z,\n      s: 7 + z * 13, rot: Math.random() * 6.28, vr: (Math.random() - .5) * .0006,\n      vy: .000012 + z * .00003, ph: Math.random() * 6.28\n    });\n  }\n  beans.sort(function (a, b) { return a.z - b.z; });\n\n  function drawBean(b, t) {\n    var px = b.x * W + mx * (8 + b.z * 30) + Math.sin(t * .0004 + b.ph) * 10;\n    var py = ((b.y - t * b.vy) % 1.1 + 1.1) % 1.1 * H - H * .05 + my * (6 + b.z * 22);\n    ctx.save();\n    ctx.translate(px, py);\n    ctx.rotate(b.rot + t * b.vr);\n    ctx.globalAlpha = .14 + b.z * .42;\n    ctx.filter = b.z < .35 ? 'blur(2px)' : 'none';\n    ctx.fillStyle = cols.bean;\n    ctx.beginPath(); ctx.ellipse(0, 0, b.s * .72, b.s, 0, 0, Math.PI * 2); ctx.fill();\n    \/\/ brillo\n    ctx.globalAlpha *= .35;\n    ctx.fillStyle = '#ffffff';\n    ctx.beginPath(); ctx.ellipse(-b.s * .3, -b.s * .35, b.s * .18, b.s * .32, -.4, 0, Math.PI * 2); ctx.fill();\n    \/\/ surco central\n    ctx.globalAlpha = .55 + b.z * .3;\n    ctx.strokeStyle = 'rgba(20,10,5,.75)'; ctx.lineWidth = Math.max(1.2, b.s * .13); ctx.lineCap = 'round';\n    ctx.beginPath();\n    ctx.moveTo(0, -b.s * .82);\n    ctx.bezierCurveTo(b.s * .32, -b.s * .3, -b.s * .32, b.s * .3, 0, b.s * .82);\n    ctx.stroke();\n    ctx.restore();\n  }\n\n  var wisps = [];\n  for (var k = 0; k < 4; k++) wisps.push({ off: (k - 1.5) \/ 1.5, ph: Math.random() * 6.28, sp: .0006 + Math.random() * .0004, amp: 14 + Math.random() * 16, lw: 12 + Math.random() * 14 });\n\n  function drawSteam(t) {\n    var top = Math.max(0, src.y - Math.min(260, src.y + 40));\n    var len = src.y - top;\n    ctx.save();\n    ctx.lineCap = 'round';\n    wisps.forEach(function (w, i) {\n      var tt = t * w.sp + w.ph;\n      ctx.beginPath();\n      for (var s = 0; s <= 1.0001; s += .04) {\n        var y = src.y - 6 - s * len;\n        var x = src.x + w.off * src.w * .22 * (1 - s * .4)\n          + Math.sin(s * 6 - tt * 2.2 + i) * w.amp * (.3 + s * 1.1)\n          + Math.sin(s * 13 + tt * 1.3) * 4 + mx * 12 * s;\n        s === 0 ? ctx.moveTo(x, y) : ctx.lineTo(x, y);\n      }\n      var g = ctx.createLinearGradient(0, src.y, 0, top);\n      g.addColorStop(0, 'transparent');\n      g.addColorStop(.18, cols.steam);\n      g.addColorStop(.65, cols.steam);\n      g.addColorStop(1, 'transparent');\n      ctx.strokeStyle = g;\n      ctx.globalAlpha = .16 + .08 * Math.sin(tt * 3 + i);\n      ctx.lineWidth = w.lw;\n      ctx.filter = 'blur(9px)';\n      ctx.stroke();\n    });\n    ctx.restore();\n  }\n\n  function frame(ts) {\n    mx += (tmx - mx) * .05; my += (tmy - my) * .05;\n    ctx.clearRect(0, 0, W, H);\n    beans.forEach(function (b) { drawBean(b, ts); });\n    ctx.filter = 'none'; ctx.globalAlpha = 1;\n    drawSteam(ts);\n    if (running) { if (!reduce) requestAnimationFrame(frame); }\n  }\n\n  readCols(); size();\n  if (reduce) { frame(0); }\n  else requestAnimationFrame(frame);\n  window.addEventListener('resize', function () { size(); if (reduce) frame(0); });\n  if (document.fonts) { if (document.fonts.ready) document.fonts.ready.then(size); }\n  setTimeout(size, 1200);\n  window.matchMedia('(prefers-color-scheme: light)').addEventListener('change', function () { readCols(); if (reduce) frame(0); });\n  if (!reduce) {\n    window.addEventListener('pointermove', function (e) {\n      tmx = (e.clientX \/ window.innerWidth - .5) * 2;\n      tmy = (e.clientY \/ window.innerHeight - .5) * 2;\n    }, { passive: true });\n    if ('IntersectionObserver' in window) {\n      new IntersectionObserver(function (e) {\n        var vis = e[0].isIntersecting;\n        if (vis ? !running : false) { running = true; requestAnimationFrame(frame); }\n        else running = vis;\n      }).observe(cv);\n    }\n  }\n})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Caf\u00e9 de especialidad \u00b7 Emprendimiento Bienvenido. Me llamo Adri\u00e1n y soy multipotencial. Hoy estoy enfocado en el caf\u00e9 de especialidad, aprendiendo por mi cuenta todo lo que puedo. Aunque definirme as\u00ed se queda corto. Descubre Guadarrama Coffee \u2192 Escucha el podcast Tueste propioLavadoNaturalHoneyOrigen trazableMolido al momento Tueste propioLavadoNaturalHoneyOrigen trazableMolido al momento Qu\u00e9 es el caf\u00e9 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-10","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/adrianherranz.com\/index.php?rest_route=\/wp\/v2\/pages\/10","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/adrianherranz.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/adrianherranz.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/adrianherranz.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/adrianherranz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=10"}],"version-history":[{"count":6,"href":"https:\/\/adrianherranz.com\/index.php?rest_route=\/wp\/v2\/pages\/10\/revisions"}],"predecessor-version":[{"id":17,"href":"https:\/\/adrianherranz.com\/index.php?rest_route=\/wp\/v2\/pages\/10\/revisions\/17"}],"wp:attachment":[{"href":"https:\/\/adrianherranz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=10"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}