{"id":325,"date":"2026-05-28T15:21:06","date_gmt":"2026-05-28T15:21:06","guid":{"rendered":"https:\/\/www.cottini1925.cybeartest.it\/contacts\/"},"modified":"2026-08-27T14:23:19","modified_gmt":"2026-08-27T14:23:19","slug":"contacts","status":"publish","type":"page","link":"https:\/\/www.cottini1925.cybeartest.it\/en\/contacts\/","title":{"rendered":"Contacts"},"content":{"rendered":"\n<style id=\"cot-hello-reset\">\nbody.elementor-template-canvas { padding:0 !important; margin:0 !important; }\nheader.site-header { max-width:none !important; width:100% !important; }\nfooter.site-footer { max-width:none !important; width:100% !important; }\nmain { max-width:none !important; width:100% !important; padding:0 !important; margin:0 !important; }\nhtml, body { margin:0 !important; padding:0 !important; }\nhtml { margin-top:0 !important; }\n\n\/* Button hover overrides (Claude design fidelity) *\/\n.btn-trade, a.btn-trade {\n  font-family:'Epilogue','Helvetica Neue',Arial,sans-serif !important;\n  font-size:11px !important; letter-spacing:.28em !important; text-transform:uppercase !important;\n  background:#BF863C !important; color:#F1E6DD !important;\n  padding:11px 22px !important; border:1px solid #BF863C !important; border-radius:999px !important;\n  transition: background .85s cubic-bezier(.22,1,.36,1), border-color .85s cubic-bezier(.22,1,.36,1), color .85s cubic-bezier(.22,1,.36,1), transform .85s cubic-bezier(.22,1,.36,1), box-shadow .85s cubic-bezier(.22,1,.36,1) !important;\n  text-decoration: none !important;\n  display: inline-block !important;\n}\n.btn-trade:hover, a.btn-trade:hover {\n  background:#A06E32 !important; border-color:#A06E32 !important;\n  color:#F1E6DD !important;\n  transform: translateY(-1px) !important;\n  box-shadow: 0 8px 18px -8px rgba(67,44,32,.4) !important;\n  text-decoration: none !important;\n}\n\n.btn-pill, a.btn-pill {\n  display:inline-flex !important; align-items:center !important; gap:14px !important;\n  font-family:'Epilogue','Helvetica Neue',Arial,sans-serif !important;\n  font-size:11.5px !important; letter-spacing:.3em !important; text-transform:uppercase !important;\n  background:#BF863C !important; color:#F1E6DD !important;\n  padding:14px 30px !important; border:none !important; border-radius:999px !important;\n  transition: background 1s cubic-bezier(.22,1,.36,1), transform 1s cubic-bezier(.22,1,.36,1), box-shadow 1s cubic-bezier(.22,1,.36,1) !important;\n  text-decoration: none !important;\n}\n.btn-pill:hover, a.btn-pill:hover {\n  background:#A06E32 !important;\n  color:#F1E6DD !important;\n  transform: translateY(-1px) !important;\n  box-shadow: 0 10px 22px -10px rgba(67,44,32,.45) !important;\n  text-decoration: none !important;\n}\n.btn-pill svg, a.btn-pill svg {\n  transition: transform 1.4s cubic-bezier(.6,.04,.2,1) !important;\n}\n.btn-pill:hover svg, a.btn-pill:hover svg {\n  transform: translateX(10px) !important;\n}\n\n\/* Disable any Hello Elementor button styling that interferes *\/\na.btn-trade:focus, a.btn-pill:focus {\n  outline: 2px solid #BF863C !important;\n  outline-offset: 3px !important;\n}\n\n.hero-h1 .w { margin-right: .28em !important; }\n.hero-h1 .w:last-child { margin-right: 0 !important; }\nh1.hero-h1 { max-width: 20ch !important; }\n<\/style>\n<style id=\"cot-cf7-adapter\">\n\/* === Contact Form 7 styling adapter for contatti-form design === *\/\n.contatti-form .wpcf7,\n.contatti-form .wpcf7-form { display:block; margin:0; padding:0; }\n.contatti-form .wpcf7-form-control-wrap { display:block; width:100%; }\n\/* Acceptance checkbox: hide CF7 wrapper paragraphs around label *\/\n.contatti-form .wpcf7-acceptance { display:inline-flex; align-items:center; gap:10px; }\n.contatti-form .wpcf7-list-item { margin:0; }\n.contatti-form .wpcf7-list-item-label { font-size:14px; }\n\/* Submit: CF7 renders <input type=\"submit\">, restyle as btn-pill *\/\n.contatti-form .form-foot { margin-top:20px; }\n.contatti-form input[type=\"submit\"].btn-pill {\n  display:inline-flex !important; align-items:center !important; gap:14px !important;\n  font-family:'Epilogue','Helvetica Neue',Arial,sans-serif !important;\n  font-size:11.5px !important; letter-spacing:.18em !important; text-transform:uppercase !important;\n  font-weight:600 !important;\n  background:#BF863C !important; color:#F1E6DD !important;\n  border:none !important; border-radius:999px !important;\n  padding:14px 56px 14px 28px !important;\n  cursor:pointer !important;\n  transition:transform .2s ease, background-color .2s ease, box-shadow .2s ease !important;\n  background-image:url(\"data:image\/svg+xml;utf8,<svg xmlns='http:\/\/www.w3.org\/2000\/svg' width='22' height='11' viewBox='0 0 22 11' fill='none' stroke='%23F1E6DD' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'><path d='M0 5.5h20m-6-5l6 5-6 5'\/><\/svg>\") !important;\n  background-repeat:no-repeat !important;\n  background-position:right 24px center !important;\n  background-color:#BF863C !important;\n}\n.contatti-form input[type=\"submit\"].btn-pill:hover {\n  background-color:#A06E32 !important;\n  transform:translateY(-1px) !important;\n  box-shadow:0 8px 18px -8px rgba(67,44,32,.4) !important;\n}\n.contatti-form input[type=\"submit\"].btn-pill:disabled { opacity:.6; cursor:wait; }\n\/* CF7 response messages *\/\n.contatti-form .wpcf7-response-output {\n  margin:18px 0 0 !important; padding:14px 18px !important;\n  border:1px solid currentColor !important; border-radius:8px !important;\n  font-family:'Epilogue',sans-serif !important; font-size:13.5px !important;\n}\n.contatti-form .wpcf7 form.sent .wpcf7-response-output { border-color:#6B8E5A; color:#3F5A35; background:rgba(107,142,90,.08); }\n.contatti-form .wpcf7 form.failed .wpcf7-response-output,\n.contatti-form .wpcf7 form.aborted .wpcf7-response-output,\n.contatti-form .wpcf7 form.invalid .wpcf7-response-output { border-color:#B5563F; color:#7A2D1F; background:rgba(181,86,63,.06); }\n.contatti-form .wpcf7-not-valid-tip { color:#B5563F !important; font-size:12px !important; margin-top:4px !important; }\n.contatti-form input.wpcf7-not-valid,\n.contatti-form select.wpcf7-not-valid,\n.contatti-form textarea.wpcf7-not-valid { border-color:#B5563F !important; }\n\/* Strip CF7's <p> wrappers visual *\/\n.contatti-form .wpcf7-form > p { margin:0; padding:0; }\n\n\/* === wpautop fix: CF7 wraps content in <p> tags. Make those <p> transparent to grid layout === *\/\n.contatti-form .wpcf7-form > p,\n.contatti-form .form-head > p,\n.contatti-form .form-grid > p,\n.contatti-form .form-foot > p { display: contents; }\n.contatti-form .form-head p.form-title,\n.contatti-form .form-head p.form-sub { display: block; }\n.contatti-form .wpcf7-form br { display: none; }\n\/* Restore privacy label normal flow *\/\n.contatti-form .field-check { display: flex; align-items: center; gap: 10px; }\n.contatti-form .field-check .wpcf7-acceptance { margin: 0; }\n.contatti-form .field-check .wpcf7-list-item { margin: 0; display: inline-flex; align-items: center; gap: 8px; }\n.contatti-form .field-check label { display: inline-flex; align-items: center; gap: 6px; }\n<\/style>\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Source+Serif+4:ital,opsz,wght@0,8..60,400;0,8..60,500;0,8..60,600;1,8..60,400;1,8..60,500&#038;family=Epilogue:wght@400;500;600&#038;display=swap\" rel=\"stylesheet\">\n<link rel=\"stylesheet\" href=\"https:\/\/unpkg.com\/leaflet@1.9.4\/dist\/leaflet.css\" integrity=\"sha256-p4NxAoJBhIIN+hmNHrzRCf9tD\/miZyoHS5obTRR9BMY=\" crossorigin=\"\"\/>\n<style>\n\/* ---------------- TOKENS ---------------- *\/\n:root{\n  --cream:#F1E6DD;\n  --cream-2:#FAF4EC;\n  --cream-3:#E9DCCF;\n  --gold:#BF863C;\n  --gold-dark:#A06E32;\n  --gold-light:#D9A862;\n  --logo-gold:#654916;\n  --brand:#654916;\n  --bordeaux:#521419;\n  --brown:#432C20;\n  --brown-deep:#2E1E15;\n  --ink:#1A1209;\n  --ink-2:#3A2A1F;\n\n  --serif:\"Source Serif 4\",\"Minion Pro\",\"EB Garamond\",Georgia,serif;\n  --sans:\"Epilogue\",\"Helvetica Neue\",Arial,sans-serif;\n\n  --ease:cubic-bezier(.165,.84,.44,1);\n  --ease-soft:cubic-bezier(.22,1,.36,1); \/* expo-out: more languid for hovers *\/\n  --ease-graceful:cubic-bezier(.6,.04,.2,1); \/* soft S-curve, slow start + soft landing *\/\n}\n*{box-sizing:border-box}\nhtml{scroll-behavior:auto;scroll-padding-top:90px} \/* JS handles smooth scroll *\/\nhtml,body{margin:0;padding:0;background:var(--cream);color:var(--ink);font-family:var(--serif);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}\nbody{overflow-x:hidden}\nimg{max-width:100%;display:block}\na{color:inherit;text-decoration:none}\nbutton{font:inherit;cursor:pointer}\n\n\/* selection *\/\n::selection{background:var(--gold);color:var(--cream)}\n\n\/* ---------------- BRAND LOGO (real artwork via CSS mask) ---------------- *\/\n.brand-logo{\n  display:block;flex:none;\n  background-color:var(--brand);\n  -webkit-mask-image:url(\"https:\/\/www.cottini1925.cybeartest.it\/wp-content\/uploads\/2026\/05\/logo-cottini.svg\");\n          mask-image:url(\"https:\/\/www.cottini1925.cybeartest.it\/wp-content\/uploads\/2026\/05\/logo-cottini.svg\");\n  -webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;\n  -webkit-mask-position:center;mask-position:center;\n  -webkit-mask-size:contain;mask-size:contain;\n  transition:background-color .9s var(--ease-soft);\n}\n.brand-logo--mark{\n  -webkit-mask-image:url(\"https:\/\/www.cottini1925.cybeartest.it\/wp-content\/uploads\/2026\/05\/logo-cottini-mark.svg\");\n          mask-image:url(\"https:\/\/www.cottini1925.cybeartest.it\/wp-content\/uploads\/2026\/05\/logo-cottini-mark.svg\");\n}\n.brand-logo--light{background-color:var(--cream)}\n.brand-logo--gold{background-color:var(--gold)}\n.brand-logo--brand{background-color:var(--brand)}\n\n\/* sizes \u2014 preserve 190:155 aspect of the full logo *\/\n.brand-logo--xs{width:30px;height:30px}                 \/* mark *\/\n.brand-logo--sm{width:34px;height:34px}                 \/* mark in scroll disc *\/\n.brand-logo--md{width:69px;height:56px}                 \/* header full *\/\n.brand-logo--md.brand-logo--mark{width:42px;height:42px}\n.brand-logo--lg{width:122px;height:100px}               \/* footer full *\/\n\n\/* ---------------- LOGO (placeholder wordmark) ---------------- *\/\n.logo{display:inline-flex;align-items:center;gap:14px;color:var(--logo-gold)}\n.logo .quad{width:34px;height:34px;color:currentColor;flex:none}\n.logo .wm{font-family:var(--serif);font-style:italic;font-weight:500;line-height:1;letter-spacing:.02em}\n.logo .wm-top{font-size:22px;display:block}\n.logo .wm-bot{font-family:var(--sans);font-style:normal;font-weight:500;font-size:10px;letter-spacing:.42em;display:block;margin-top:4px;color:inherit}\n.logo--light{color:var(--cream)}\n.logo--footer{color:var(--cream)}\n.logo--footer .quad{width:42px;height:42px}\n.logo--footer .wm-top{font-size:26px}\n\n\/* ---------------- HEADER ---------------- *\/\n.site-header{\n  position:fixed;inset:0 0 auto 0;z-index:50;\n  display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:32px;\n  padding:18px 40px;\n  transition:background .6s var(--ease-soft), backdrop-filter .6s var(--ease-soft), border-color .6s var(--ease-soft), padding .6s var(--ease-soft);\n  border-bottom:1px solid transparent;\n}\n.site-header.scrolled{\n  background:rgba(241,230,221,.82);\n  backdrop-filter:blur(14px);\n  -webkit-backdrop-filter:blur(14px);\n  border-bottom-color:rgba(140,119,81,.18);\n  padding:12px 40px;\n}\n.site-header .logo--light{transition:opacity .3s var(--ease);}\n.site-header.scrolled .logo--light{opacity:0;pointer-events:none;position:absolute;left:40px;top:14px}\n.site-header .logo--dark{opacity:0;pointer-events:none;position:absolute;left:40px;top:14px;transition:opacity .3s var(--ease)}\n.site-header.scrolled .logo--dark{opacity:1;pointer-events:auto;position:static}\n\n.site-nav{justify-self:center;display:flex;gap:32px}\n.site-nav a{\n  font-family:var(--serif);font-size:15.5px;color:var(--cream);\n  position:relative;padding:6px 2px;letter-spacing:.005em;\n  transition:color .75s var(--ease-soft);\n}\n.site-nav a::after{content:\"\";position:absolute;left:0;right:0;bottom:0;height:1px;background:currentColor;transform:scaleX(0);transform-origin:left;transition:transform .85s var(--ease-soft);opacity:.6}\n.site-nav a:hover::after{transform:scaleX(1)}\n.site-header.scrolled .site-nav a{color:var(--ink)}\n\n.header-right{justify-self:end;display:flex;align-items:center;gap:22px}\n.lang{font-family:var(--sans);font-size:11px;letter-spacing:.32em;color:var(--cream);display:flex;gap:8px;align-items:center;transition:color .3s var(--ease)}\n.lang .sep{opacity:.45}\n.lang .active{font-weight:600;border-bottom:1px solid currentColor;padding-bottom:2px}\n.site-header.scrolled .lang{color:var(--ink)}\n\n.btn-trade{\n  font-family:var(--sans);font-size:11px;letter-spacing:.28em;text-transform:uppercase;\n  background:var(--gold);color:var(--cream);\n  padding:11px 22px;border:1px solid var(--gold);border-radius:999px;\n  transition:background .85s var(--ease-soft), border-color .85s var(--ease-soft), color .85s var(--ease-soft), transform .85s var(--ease-soft), box-shadow .85s var(--ease-soft);\n}\n.btn-trade:hover{background:var(--gold-dark);border-color:var(--gold-dark);transform:translateY(-1px);box-shadow:0 8px 18px -8px rgba(67,44,32,.4)}\n\n\/* ---------------- HERO ---------------- *\/\n.hero{\n  position:relative;min-height:100vh;background:var(--cream);\n  overflow:visible;\n}\n.hero-photo{position:absolute;inset:0;overflow:hidden;z-index:1}\n.hero-photo img{width:100%;height:120%;object-fit:cover;transform:translate3d(0,0,0) scale(1.08);will-change:transform}\n\/* veil top-left for legibility + dedicated top veil so the header always reads *\/\n.hero-photo::before{\n  content:\"\";position:absolute;inset:0;\n  background:\n    linear-gradient(180deg, rgba(20,12,7,.58) 0%, rgba(20,12,7,.34) 16%, rgba(20,12,7,0) 34%),\n    linear-gradient(135deg, rgba(20,12,7,.62) 0%, rgba(20,12,7,.28) 38%, rgba(20,12,7,0) 64%);\n  z-index:2;\n}\n\/* cream crescent bottom *\/\n.hero-photo::after{\n  content:\"\";position:absolute;\n  left:-32%;right:-32%;bottom:-72%;\n  height:94%;width:164%;\n  background:var(--cream);\n  border-radius:50%;\n  filter:drop-shadow(0 -22px 36px rgba(46,30,21,.75)) drop-shadow(0 -6px 12px rgba(46,30,21,.4));\n  z-index:3;\n}\n\n.hero-text{\n  position:absolute;top:172px;left:5vw;right:5vw;max-width:880px;z-index:4;color:var(--cream);\n}\n.eyebrow{\n  font-family:var(--sans);font-size:11px;letter-spacing:.42em;text-transform:uppercase;\n  color:var(--gold-light);display:inline-flex;align-items:center;gap:14px;\n}\n.rule{display:inline-block;width:48px;height:1px;background:var(--gold-light);vertical-align:middle}\n.rule-h{display:block;width:48px;height:1px;background:var(--gold);margin-bottom:18px}\n\nh1.hero-h1{\n  font-family:var(--serif);font-style:italic;font-weight:500;\n  font-size:clamp(40px,4.6vw,72px);line-height:1.06;letter-spacing:-.008em;\n  text-wrap:balance;color:var(--cream);\n  margin:18px 0 22px;max-width:14ch;\n}\nh1.hero-h1 .w{display:inline-block;opacity:0;transform:translateY(28px);animation:rise 1.1s var(--ease) forwards}\n@keyframes rise{to{opacity:1;transform:translateY(0)}}\n\n.hero-sub{\n  font-family:var(--serif);font-size:18px;line-height:1.55;max-width:46ch;\n  color:rgba(241,230,221,.86);font-weight:400;margin:0 0 32px;\n}\n.hero-cta{\n  position:relative;\n  display:inline-flex;align-items:center;gap:14px;\n  font-family:var(--sans);font-size:12px;letter-spacing:.32em;text-transform:uppercase;\n  color:var(--cream);padding:14px 0;\n  transition:color 1s var(--ease-soft);\n}\n.hero-cta::after{\n  content:\"\";position:absolute;left:0;right:0;bottom:0;height:1px;\n  background:var(--gold-light);transform-origin:left center;transform:scaleX(1);\n  transition:transform 1.4s var(--ease-graceful), background-color 1s var(--ease-soft);\n}\n.hero-cta:hover{color:var(--gold-light)}\n.hero-cta:hover::after{transform:scaleX(1.14)}\n.hero-cta svg{transition:transform 1.4s var(--ease-graceful)}\n.hero-cta:hover svg{transform:translateX(14px)}\n\n\/* ---------------- SCORRI DISC ---------------- *\/\n.scroll-disc{\n  position:absolute;left:50%;bottom:calc(22% - 60px);transform:translateX(-50%);\n  width:120px;height:120px;border-radius:50%;background:var(--cream);\n  z-index:6;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;\n  box-shadow:\n    0 28px 50px -14px rgba(67,44,32,.45),\n    0 6px 14px rgba(67,44,32,.18),\n    inset 0 0 0 1px rgba(140,119,81,.45);\n  color:var(--logo-gold);\n  transition:transform .85s var(--ease-soft), box-shadow .85s var(--ease-soft);\n  cursor:pointer;\n}\n.scroll-disc:hover{transform:translate(-50%,3px);box-shadow:0 18px 32px -12px rgba(67,44,32,.4),0 4px 10px rgba(67,44,32,.16),inset 0 0 0 1px rgba(140,119,81,.45)}\n.scroll-disc .quad{width:36px;height:36px;animation:bounce 2.4s var(--ease) infinite}\n.scroll-disc .label{font-family:var(--sans);font-size:12px;letter-spacing:.38em;color:var(--brand);font-weight:500;padding-left:.38em}\n.scroll-disc-mark{animation:bounce 2.4s var(--ease) infinite}\n@keyframes bounce{0%,100%{transform:translateY(0)}50%{transform:translateY(5px)}}\n\n\/* ---------------- SECTION: VALORI ---------------- *\/\n.valori{padding:0 56px 30px;background:var(--cream);position:relative}\n.valori-inner{display:grid;grid-template-columns:38% 1fr;gap:80px;align-items:start;max-width:1320px;margin:0 auto;padding-top:40px}\n.valori-text h2{\n  font-family:var(--serif);font-style:italic;font-weight:500;\n  font-size:clamp(34px,3.2vw,52px);line-height:1.08;letter-spacing:-.008em;\n  color:var(--ink);margin:18px 0 22px;text-wrap:balance;max-width:14ch;\n}\n.valori-text p{font-size:17px;line-height:1.7;color:var(--ink-2);max-width:38ch;margin:0 0 28px}\n.valori-text .link-cta{\n  position:relative;\n  font-family:var(--sans);font-size:11.5px;letter-spacing:.32em;text-transform:uppercase;\n  color:var(--gold-dark);padding-bottom:6px;\n  display:inline-flex;align-items:center;gap:10px;\n  transition:color 1s var(--ease-soft)\n}\n.valori-text .link-cta::after{\n  content:\"\";position:absolute;left:0;right:0;bottom:0;height:1px;\n  background:currentColor;transform-origin:left center;transform:scaleX(1);\n  transition:transform 1.4s var(--ease-graceful);\n}\n.valori-text .link-cta:hover{color:var(--gold)}\n.valori-text .link-cta:hover::after{transform:scaleX(1.18)}\n.valori-text .link-cta svg{transition:transform 1.4s var(--ease-graceful)}\n.valori-text .link-cta:hover svg{transform:translateX(14px)}\n\n.cards{display:grid;grid-template-columns:1fr 1fr;gap:48px 56px}\n.card{display:flex;flex-direction:column;align-items:flex-start;gap:18px}\n.card-icon{\n  position:relative;width:86px;height:86px;display:grid;place-items:center;\n  border-radius:50%;\n  transition:transform .9s var(--ease-soft);\n}\n.card-icon::before{\n  content:\"\";position:absolute;inset:0;border-radius:50%;\n  border:1px solid rgba(140,119,81,.4);\n  transition:transform .9s var(--ease-soft), border-color .9s var(--ease-soft);\n}\n.card-icon .ring{\n  position:absolute;inset:7px;border-radius:50%;\n  border:1px solid var(--gold);\n  display:grid;place-items:center;\n  background:var(--cream-2);\n  transition:transform .9s var(--ease-soft), background-color .9s var(--ease-soft);\n}\n.card-icon svg{width:32px;height:32px;color:var(--gold);transition:transform .9s var(--ease-soft)}\n.card:hover .card-icon::before{transform:scale(1.08)}\n.card:hover .card-icon .ring{transform:scale(1.04)}\n.card h3{font-family:var(--serif);font-style:italic;font-weight:500;font-size:24px;letter-spacing:-.005em;margin:0;color:var(--ink)}\n.card p{font-family:var(--serif);font-style:italic;font-weight:400;font-size:15.5px;line-height:1.55;color:var(--ink-2);margin:0;max-width:28ch}\n\n.valori-divider{\n  display:flex;align-items:center;justify-content:center;gap:18px;\n  margin:32px auto 0;max-width:520px;color:var(--gold);\n}\n.valori-divider .line{flex:1;height:1px;background:currentColor;opacity:.45}\n.valori-divider .quad{width:22px;height:22px}\n\n\/* ---------------- SECTION: NUMERI ---------------- *\/\n.numeri{\n  position:relative;padding:160px 56px 180px;\n  background:var(--brown-deep);color:var(--cream);overflow:hidden;\n}\n.numeri .bg{position:absolute;inset:0;overflow:hidden;z-index:0}\n.numeri .bg img{width:100%;height:120%;object-fit:cover;opacity:.55;will-change:transform}\n.numeri .veil{\n  position:absolute;inset:0;z-index:1;\n  background:linear-gradient(180deg, rgba(46,30,21,.55) 0%, rgba(46,30,21,.78) 50%, rgba(46,30,21,.55) 100%);\n}\n.numeri::before, .numeri::after{\n  content:\"\";position:absolute;left:-32%;right:-32%;width:164%;\n  background:var(--cream);border-radius:50%;\n  z-index:3;height:60%;\n  filter:drop-shadow(0 -22px 36px rgba(46,30,21,.6)) drop-shadow(0 -6px 12px rgba(46,30,21,.35));\n}\n.numeri::before{top:-46%}\n.numeri::after{bottom:-46%;filter:drop-shadow(0 22px 36px rgba(46,30,21,.6)) drop-shadow(0 6px 12px rgba(46,30,21,.35))}\n\n.numeri-inner{position:relative;z-index:4;max-width:1180px;margin:0 auto;text-align:center}\n.numeri .eyebrow{color:var(--gold-light)}\n.numeri h2{\n  font-family:var(--serif);font-style:italic;font-weight:500;\n  font-size:clamp(34px,3.4vw,54px);line-height:1.1;letter-spacing:-.008em;\n  margin:20px auto 12px;max-width:18ch;text-wrap:balance;color:var(--cream);\n}\n.numeri .lede{font-size:17px;line-height:1.65;max-width:54ch;margin:0 auto 80px;color:rgba(241,230,221,.78)}\n.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:48px}\n.stat{display:flex;flex-direction:column;align-items:center;gap:14px}\n.stat .num{\n  font-family:var(--serif);font-style:italic;font-weight:500;\n  font-size:clamp(48px,5.4vw,88px);line-height:1;letter-spacing:-.012em;\n  color:var(--cream);\n}\n.stat .div{width:32px;height:1px;background:var(--gold-light)}\n.stat .lab{font-family:var(--serif);font-style:italic;font-weight:400;font-size:14.5px;letter-spacing:.02em;color:rgba(241,230,221,.78);max-width:14ch;text-align:center;line-height:1.4}\n\n\/* ---------------- SECTION: CTA FINALE ---------------- *\/\n.cta-final{padding:60px 56px 0;background:var(--cream);position:relative;text-align:center}\n.cta-final .rule-h{margin:18px auto 28px}\n.cta-final h2{\n  font-family:var(--serif);font-style:italic;font-weight:500;\n  font-size:clamp(34px,3.4vw,56px);line-height:1.08;letter-spacing:-.008em;\n  color:var(--ink);margin:0 auto 22px;max-width:18ch;text-wrap:balance;\n}\n.cta-final p{font-size:17px;line-height:1.65;max-width:56ch;margin:0 auto 36px;color:var(--ink-2)}\n.btn-pill{\n  display:inline-flex;align-items:center;gap:14px;\n  font-family:var(--sans);font-size:11.5px;letter-spacing:.3em;text-transform:uppercase;\n  background:var(--gold);color:var(--cream);padding:14px 30px;border:none;border-radius:999px;\n  transition:background 1s var(--ease-soft), transform 1s var(--ease-soft), box-shadow 1s var(--ease-soft);\n}\n.btn-pill:hover{background:var(--gold-dark);transform:translateY(-1px);box-shadow:0 10px 22px -10px rgba(67,44,32,.45)}\n.btn-pill svg{transition:transform 1.4s var(--ease-graceful)}\n.btn-pill:hover svg{transform:translateX(10px)}\n\n.family-crescent{\n  position:relative;width:min(960px,92vw);aspect-ratio:2\/1;margin:80px auto -1px;\n  background:var(--gold);\n  clip-path:ellipse(50% 100% at 50% 100%);\n  filter:drop-shadow(0 -8px 26px rgba(46,30,21,.4)) drop-shadow(0 -2px 8px rgba(46,30,21,.25));\n}\n.family-crescent::before{\n  content:\"\";position:absolute;inset:5px;background:var(--cream);\n  clip-path:ellipse(50% 100% at 50% 100%);\n}\n.family-crescent img{\n  position:absolute;inset:18px;width:calc(100% - 36px);height:calc(100% - 18px);object-fit:cover;\n  clip-path:ellipse(50% 100% at 50% 100%);\n}\n\n\/* ---------------- FOOTER ---------------- *\/\n.site-footer{background:var(--brown);color:var(--cream);padding:80px 56px 0;position:relative;z-index:2}\n.foot-grid{\n  display:grid;grid-template-columns:1.2fr 1fr 1fr 1fr;gap:56px;\n  max-width:1320px;margin:0 auto;padding-bottom:60px;\n  border-bottom:1px solid rgba(217,168,98,.22);\n}\n.foot-grid h4{\n  font-family:var(--sans);font-size:11px;letter-spacing:.32em;text-transform:uppercase;\n  color:var(--gold-light);font-weight:500;margin:0 0 22px;\n}\n.foot-grid ul{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:12px}\n.foot-grid li a, .foot-grid p, .foot-grid address{font-family:var(--serif);font-size:16px;color:var(--cream);line-height:1.55;font-style:normal}\n.foot-grid li a{position:relative;display:inline-block}\n.foot-grid li a{transition:color .75s var(--ease-soft)}\n.foot-grid li a:hover{color:var(--gold-light)}\n.foot-grid li a::after{content:\"\";position:absolute;left:0;bottom:-3px;height:1px;width:0;background:var(--gold-light);transition:width .85s var(--ease-soft)}\n.foot-grid li a:hover::after{width:100%}\n.foot-grid address{font-style:normal}\n.foot-grid .col-logo{display:flex;flex-direction:column;gap:20px}\n.foot-grid .col-logo p{font-style:italic;color:rgba(241,230,221,.75);font-size:15px;max-width:30ch;margin:0}\n\n.foot-bottom{\n  max-width:1320px;margin:0 auto;padding:24px 0 28px;\n  display:flex;justify-content:space-between;align-items:center;gap:24px;\n  font-family:var(--sans);font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:rgba(241,230,221,.55);\n}\n.foot-bottom a{transition:color .75s var(--ease-soft)}\n.foot-bottom a:hover{color:var(--gold-light)}\n.foot-bottom .links{display:flex;gap:24px}\n\n\/* ---------------- SCROLL PROGRESS ---------------- *\/\n.scroll-prog{\n  position:fixed;left:0;top:0;bottom:0;width:3px;z-index:90;pointer-events:none;\n  background:rgba(140,119,81,.08);\n}\n.scroll-prog::before{\n  content:\"\";position:absolute;left:0;top:0;width:100%;height:var(--p, 0%);\n  background:linear-gradient(180deg, var(--gold-light), var(--gold));\n  transition:height .2s linear;\n}\n\n\/* ---------------- HERO SCROLL TRANSFORM ---------------- *\/\n.hero-text{will-change:transform,opacity}\n.hero-photo img{will-change:transform}\n\n\/* ---------------- CARD HORIZONTAL ENTRY ---------------- *\/\n[data-card]{will-change:transform,opacity}\n\n\/* ---------------- CHI SIAMO \u2014 HERO (editorial composition v2) ---------------- *\/\n.hero-about{\n  background:var(--cream);\n  padding:160px 56px 110px;\n  position:relative;\n  overflow:hidden;\n}\n.hero-about-inner{\n  max-width:1320px;margin:0 auto;\n  display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,0.95fr);\n  gap:80px;align-items:center;\n  position:relative;\n}\n\n\/* ---- text column ---- *\/\n.hero-about-text{padding-top:0;max-width:560px;position:relative;z-index:3}\n.hero-about-eyebrow{\n  display:inline-flex;align-items:center;gap:14px;\n  font-family:var(--sans);font-size:11px;letter-spacing:.42em;text-transform:uppercase;\n  color:var(--gold-dark);margin:0 0 24px;\n}\n.hero-about-eyebrow::before{\n  content:\"\";display:block;width:40px;height:1px;background:currentColor;\n}\n.hero-about-h1{\n  font-family:var(--serif);font-style:italic;font-weight:500;\n  font-size:clamp(48px,5.6vw,84px);line-height:1.02;letter-spacing:-.015em;\n  color:var(--brand);\n  margin:0 0 30px;\n}\n.hero-about-h1 .w{display:inline-block;opacity:0;transform:translateY(28px);animation:rise 1.1s var(--ease) forwards;margin-right:.22em}\n.hero-about-lede{\n  font-family:var(--serif);font-style:italic;font-weight:500;\n  font-size:clamp(20px,1.6vw,26px);line-height:1.3;color:var(--ink);\n  margin:0 0 24px;text-wrap:balance;max-width:24ch;\n}\n.hero-about-body{\n  font-family:var(--serif);font-size:16px;line-height:1.7;color:var(--ink-2);\n  margin:0;max-width:44ch;text-wrap:pretty;\n}\n\n\/* ---- photo column \u2014 height matches text, no excess ---- *\/\n.hero-about-photo{\n  position:relative;width:100%;\n  aspect-ratio:4\/5;\n  max-height:520px;\n  justify-self:end;\n  align-self:center;\n}\n\n\/* Soft gold square offset behind photo \u2014 peeks above and to the lower-left only *\/\n.hero-deco-square{\n  position:absolute;\n  inset:-8% 0 -6% -6%;\n  background:linear-gradient(135deg, rgba(217,168,98,.18), rgba(191,134,60,.10));\n  border:1px solid rgba(140,119,81,.32);\n  z-index:0;\n  pointer-events:none;\n  animation:hero-deco-drift 14s ease-in-out infinite;\n}\n@keyframes hero-deco-drift{\n  0%,100%{transform:translate(0,0)}\n  50%{transform:translate(-4px,-4px)}\n}\n\n\/* Brand mark (small) upper-right \u2014 peeks out from behind the photo *\/\n.hero-deco-ring{\n  position:absolute;\n  top:-14%;right:-16%;\n  width:34%;aspect-ratio:1;\n  z-index:0;pointer-events:none;\n  animation:hero-deco-spin 42s linear infinite;\n  opacity:.55;\n}\n.hero-deco-ring .brand-logo{\n  width:100%;height:100%;\n  -webkit-mask-image:url(\"https:\/\/www.cottini1925.cybeartest.it\/wp-content\/uploads\/2026\/05\/logo-cottini-mark.svg\");\n          mask-image:url(\"https:\/\/www.cottini1925.cybeartest.it\/wp-content\/uploads\/2026\/05\/logo-cottini-mark.svg\");\n  background-color:var(--gold);\n  -webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;\n  -webkit-mask-position:center;mask-position:center;\n  -webkit-mask-size:contain;mask-size:contain;\n}\n\n\/* Brand mark (large) lower-left counter-rotating \u2014 sits in the open space below the text *\/\n.hero-deco-ring-2{\n  position:absolute;\n  bottom:-22%;left:-22%;\n  width:58%;aspect-ratio:1;\n  z-index:0;pointer-events:none;\n  animation:hero-deco-spin-rev 56s linear infinite;\n  opacity:.32;\n}\n.hero-deco-ring-2 .brand-logo{\n  width:100%;height:100%;\n  -webkit-mask-image:url(\"https:\/\/www.cottini1925.cybeartest.it\/wp-content\/uploads\/2026\/05\/logo-cottini-mark.svg\");\n          mask-image:url(\"https:\/\/www.cottini1925.cybeartest.it\/wp-content\/uploads\/2026\/05\/logo-cottini-mark.svg\");\n  background-color:var(--gold-dark);\n  -webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;\n  -webkit-mask-position:center;mask-position:center;\n  -webkit-mask-size:contain;mask-size:contain;\n}\n\n\/* Solid gold quarter-arc that sweeps across the upper edge *\/\n.hero-deco-arc{\n  position:absolute;\n  top:-4%;left:-8%;\n  width:120%;aspect-ratio:2.4\/1;\n  z-index:0;pointer-events:none;\n}\n.hero-deco-arc svg{width:100%;height:100%;overflow:visible}\n.hero-deco-arc path{\n  fill:none;stroke:var(--gold);\n  stroke-width:.6;opacity:.45;\n  stroke-dasharray:240;stroke-dashoffset:240;\n  animation:hero-arc-draw 6s var(--ease-soft) 1s forwards, hero-arc-float 9s ease-in-out 7s infinite;\n}\n@keyframes hero-arc-draw{\n  to{stroke-dashoffset:0}\n}\n@keyframes hero-arc-float{\n  0%,100%{transform:translate(0,0)}\n  50%{transform:translate(0,-4px)}\n}\n\n\/* Floating gold sparkles *\/\n.hero-deco-sparkle{\n  position:absolute;\n  width:6px;height:6px;border-radius:50%;\n  background:var(--gold);\n  z-index:0;pointer-events:none;\n  box-shadow:0 0 0 4px rgba(191,134,60,.12);\n}\n.hero-deco-sparkle--1{top:18%;left:-4%;animation:sparkle-float-1 8s ease-in-out infinite}\n.hero-deco-sparkle--2{top:62%;right:-3%;animation:sparkle-float-2 11s ease-in-out infinite}\n.hero-deco-sparkle--3{bottom:24%;left:8%;width:4px;height:4px;background:var(--gold-light);animation:sparkle-float-3 9s ease-in-out infinite}\n@keyframes sparkle-float-1{\n  0%,100%{transform:translate(0,0);opacity:.7}\n  50%{transform:translate(8px,-12px);opacity:1}\n}\n@keyframes sparkle-float-2{\n  0%,100%{transform:translate(0,0);opacity:.6}\n  50%{transform:translate(-10px,8px);opacity:1}\n}\n@keyframes sparkle-float-3{\n  0%,100%{transform:translate(0,0);opacity:.5}\n  50%{transform:translate(6px,-8px);opacity:.9}\n}\n\n@keyframes hero-deco-spin{\n  to{transform:rotate(360deg)}\n}\n@keyframes hero-deco-spin-rev{\n  to{transform:rotate(-360deg)}\n}\n\n\/* Photo card *\/\n.hero-photo-card{\n  position:absolute;\n  inset:0;\n  border-radius:3px;\n  overflow:hidden;\n  z-index:1;\n}\n.hero-photo-card img{\n  position:absolute;inset:0;width:100%;height:100%;\n  object-fit:cover;object-position:50% 22%;\n  will-change:transform;\n}\n\n\/* Year stamp \u2014 small, integrated *\/\n.hero-photo-year{\n  position:absolute;\n  bottom:-18px;right:8%;\n  display:inline-flex;align-items:center;gap:12px;\n  background:var(--brand);color:var(--cream);\n  padding:10px 18px;\n  z-index:3;\n  box-shadow:0 14px 28px -14px rgba(46,30,21,.4);\n}\n.hero-photo-year .year-dot{\n  width:6px;height:6px;border-radius:50%;\n  background:var(--gold-light);\n  flex:none;\n  animation:year-pulse 3.2s ease-in-out infinite;\n}\n@keyframes year-pulse{\n  0%,100%{opacity:1;transform:scale(1)}\n  50%{opacity:.6;transform:scale(1.3)}\n}\n.hero-photo-year .year-text{\n  font-family:var(--sans);font-size:10.5px;letter-spacing:.36em;text-transform:uppercase;\n  line-height:1;color:var(--cream);\n}\n.hero-photo-year .year-text em{font-style:normal;font-weight:600;color:var(--gold-light);letter-spacing:.04em}\n.hero-about-photo img{\n  position:absolute;inset:-6%;width:112%;height:112%;object-fit:cover;\n  will-change:transform;\n}\n\n\/* ---------------- THREE PILLARS \u2014 Vision \/ Mission \/ Storia ---------------- *\/\n.pillars{\n  background:var(--cream);\n  padding:80px 56px 60px;\n  position:relative;\n}\n.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}\n.pillars-grid{\n  max-width:1320px;margin:0 auto;\n  display:grid;\n  grid-template-columns:1fr 1px 1fr 1px 1fr;\n  gap:48px 56px;align-items:start;\n}\n.pillar{display:flex;flex-direction:column;gap:18px;min-width:0}\n.pillar-kicker{\n  font-family:var(--serif);font-style:italic;font-weight:500;\n  font-size:14.5px;color:var(--gold-dark);letter-spacing:.01em;\n}\n.pillar-h{\n  font-family:var(--serif);font-style:italic;font-weight:500;\n  font-size:clamp(24px,2vw,30px);line-height:1.15;letter-spacing:-.005em;\n  color:var(--brand);margin:0 0 4px;text-wrap:balance;\n}\n.pillar-body{display:flex;flex-direction:column;gap:18px}\n.pillar-body p{\n  font-family:var(--serif);font-size:16px;line-height:1.6;color:var(--ink-2);\n  margin:0;max-width:36ch;\n}\n.pillar-body em{font-style:italic;color:var(--brand);font-weight:500}\n.drop{\n  font-family:var(--serif);font-style:italic;font-weight:500;\n  color:var(--brand);\n}\n\n\/* Vision pillar \u2014 decorative element filling the empty column space *\/\n.pillar-deco{\n  position:relative;\n  margin-top:48px;\n  min-height:240px;\n  display:flex;flex-direction:column;align-items:flex-start;gap:0;\n}\n.pillar-deco-mark{\n  display:block;width:96px;height:96px;\n  background-color:var(--gold);\n  -webkit-mask-image:url(\"https:\/\/www.cottini1925.cybeartest.it\/wp-content\/uploads\/2026\/05\/logo-cottini-mark.svg\");\n          mask-image:url(\"https:\/\/www.cottini1925.cybeartest.it\/wp-content\/uploads\/2026\/05\/logo-cottini-mark.svg\");\n  -webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;\n  -webkit-mask-position:center;mask-position:center;\n  -webkit-mask-size:contain;mask-size:contain;\n  opacity:.22;\n  animation:pillar-deco-spin 36s linear infinite;\n}\n.pillar-deco-rule{\n  display:block;width:1px;height:40px;\n  background:linear-gradient(180deg, var(--gold), transparent);\n  margin:18px 0 16px 48px;\n  opacity:.6;\n}\n.pillar-deco-line{\n  display:block;width:48px;height:1px;background:var(--gold);\n  opacity:.65;margin-bottom:18px;\n}\n.pillar-deco-quote{\n  font-family:var(--serif);font-style:italic;font-weight:500;\n  font-size:18px;line-height:1.55;color:var(--brand);\n  opacity:.78;letter-spacing:-.005em;\n}\n.pillar-deco-quote em{font-style:italic}\n\/* Two small orbiting dots that float in the empty space *\/\n.pillar-deco-orbit{\n  position:absolute;border-radius:50%;\n  background:var(--gold);\n  box-shadow:0 0 0 4px rgba(191,134,60,.14);\n  pointer-events:none;\n}\n.pillar-deco-orbit--1{\n  top:30px;right:0;width:6px;height:6px;\n  animation:pillar-orbit-1 9s ease-in-out infinite;\n}\n.pillar-deco-orbit--2{\n  bottom:6px;right:28%;width:4px;height:4px;background:var(--gold-light);\n  box-shadow:0 0 0 3px rgba(217,168,98,.16);\n  animation:pillar-orbit-2 12s ease-in-out infinite;\n}\n@keyframes pillar-deco-spin{\n  to{transform:rotate(360deg)}\n}\n@keyframes pillar-orbit-1{\n  0%,100%{transform:translate(0,0);opacity:.7}\n  50%{transform:translate(-14px,10px);opacity:1}\n}\n@keyframes pillar-orbit-2{\n  0%,100%{transform:translate(0,0);opacity:.55}\n  50%{transform:translate(10px,-8px);opacity:.95}\n}\n\n\/* Vertical divider with mark in the middle *\/\n.pillar-div{\n  display:flex;flex-direction:column;align-items:center;justify-content:center;\n  gap:18px;width:1px;align-self:stretch;\n  padding-top:48px;\n}\n.pillar-div-line{\n  flex:1;width:1px;background:linear-gradient(180deg, transparent, rgba(140,119,81,.35) 12%, rgba(140,119,81,.35) 88%, transparent);\n  min-height:60px;\n}\n.pillar-div-mark{flex:none;width:22px;height:22px;opacity:.85}\n\n\/* ---------------- BROTHERS PORTRAIT + DECORATIVE CURVE ---------------- *\/\n.brothers-wrap{\n  position:relative;background:var(--cream);\n  padding:0 56px;\n  height:240px;\n  display:flex;align-items:flex-start;justify-content:center;\n  margin-top:-60px;\n}\n.brothers-curve{\n  position:absolute;left:50%;top:80px;transform:translateX(-50%);\n  width:min(1500px,96vw);height:520px;\n  border-radius:50%;\n  background:transparent;\n  border:1px solid rgba(140,119,81,.18);\n  border-bottom:none;\n  pointer-events:none;\n}\n.brothers-portrait{\n  position:relative;margin:0;\n  width:260px;height:260px;border-radius:50%;\n  overflow:hidden;\n  background:var(--brown-deep);\n  box-shadow:\n    0 30px 60px -22px rgba(46,30,21,.55),\n    0 6px 16px -8px rgba(46,30,21,.4),\n    inset 0 0 0 6px var(--cream),\n    inset 0 0 0 7px rgba(140,119,81,.4);\n  z-index:2;\n  transform-origin:center;\n}\n.brothers-portrait img{\n  position:absolute;inset:-4%;width:108%;height:108%;object-fit:cover;\n  will-change:transform;\n}\n\n\/* ---------------- TERRITORI ---------------- *\/\n.territori{\n  background:var(--cream);\n  padding:60px 56px 140px;\n  position:relative;\n}\n.territori-inner{\n  max-width:1320px;margin:0 auto;\n  display:grid;grid-template-columns:0.85fr 1.15fr;gap:64px;align-items:center;\n}\n.territori-text h2{\n  font-family:var(--serif);font-style:italic;font-weight:500;\n  font-size:clamp(30px,3vw,46px);line-height:1.08;letter-spacing:-.005em;\n  color:var(--brand);margin:14px 0 26px;text-wrap:balance;max-width:14ch;\n}\n.territori-text p{\n  font-family:var(--serif);font-size:16.5px;line-height:1.7;color:var(--ink-2);\n  margin:0 0 20px;max-width:40ch;\n}\n.territori-text p em{font-style:italic;font-weight:500;color:var(--brand)}\n.territori-text .link-cta{\n  margin-top:8px;\n  font-family:var(--sans);font-size:11.5px;letter-spacing:.32em;text-transform:uppercase;\n  color:var(--gold-dark);padding-bottom:6px;\n  display:inline-flex;align-items:center;gap:10px;\n  position:relative;\n  transition:color 1s var(--ease-soft);\n}\n.territori-text .link-cta::after{\n  content:\"\";position:absolute;left:0;right:0;bottom:0;height:1px;\n  background:currentColor;transform-origin:left center;transform:scaleX(1);\n  transition:transform 1.4s var(--ease-graceful);\n}\n.territori-text .link-cta:hover{color:var(--gold)}\n.territori-text .link-cta:hover::after{transform:scaleX(1.18)}\n.territori-text .link-cta svg{transition:transform 1.4s var(--ease-graceful)}\n.territori-text .link-cta:hover svg{transform:translateX(14px)}\n\n.territori-map{\n  position:relative;width:100%;\n}\n.territori-map .territori-map-img,\n.territori-map svg.territori-map-svg{\n  display:block;width:100%;height:auto;\n  filter:drop-shadow(0 14px 40px rgba(46,30,21,.12)) drop-shadow(0 4px 12px rgba(46,30,21,.06));\n}\n\n\/* Map animations \u2014 start when parent .territori-map has .in (revealed via scroll) *\/\n\n\/* Pin pop-in: graceful arrival. Pins are visible by default \u2014 entrance is transform-only\n   so a missed\/late animation start never leaves them invisible. *\/\n.territori-map.in .territori-map-svg .map-pins{\n  transform-origin:50% 100%;\n  animation:\n    map-pin-pop 1.6s cubic-bezier(.22,1,.36,1) .3s backwards,\n    map-pin-float 7.5s ease-in-out 2s infinite;\n}\n@keyframes map-pin-pop{\n  0%{opacity:0;transform:translate(0,-18px) scale(.92)}\n  60%{opacity:1;transform:translate(0,3px) scale(1.02)}\n  100%{opacity:1;transform:translate(0,0) scale(1)}\n}\n\/* Combined gentle bob + sway in one keyframe so they don't fight over transform *\/\n@keyframes map-pin-float{\n  0%,100%{transform:translate(0,0) rotate(0)}\n  25%{transform:translate(0,-3px) rotate(.5deg)}\n  50%{transform:translate(0,-5px) rotate(0)}\n  75%{transform:translate(0,-3px) rotate(-.5deg)}\n}\n\n\/* Pin pulse rings \u2014 radiating outward from each dot continuously *\/\n.territori-map.in .territori-map-svg .pin-pulse{\n  transform-origin:center;transform-box:fill-box;\n  animation:map-pin-ring 3.6s ease-out infinite;\n  pointer-events:none;\n}\n.territori-map.in .territori-map-svg .pin-pulse-2{animation-delay:1.2s}\n.territori-map.in .territori-map-svg .pin-pulse-3{animation-delay:2.4s}\n@keyframes map-pin-ring{\n  0%{opacity:.65;stroke-width:1.4;r:4.84}\n  85%{opacity:0;stroke-width:.3;r:26}\n  100%{opacity:0;r:26}\n}\n\n\/* Water (lake + rivers) \u2014 entrance + perpetual subtle shimmer *\/\n.territori-map.in .territori-map-svg [fill=\"#5aacc3\"]{\n  animation:\n    map-water-in 2s cubic-bezier(.22,1,.36,1) .05s backwards,\n    map-water-shimmer 7s ease-in-out 2.2s infinite;\n}\n@keyframes map-water-in{\n  0%{opacity:0;transform:scale(1.015)}\n  100%{opacity:1;transform:scale(1)}\n}\n@keyframes map-water-shimmer{\n  0%,100%{opacity:1}\n  50%{opacity:.88}\n}\n\n\/* Land regions: drift up gently *\/\n.territori-map.in .territori-map-svg [fill=\"#c5b7ac\"],\n.territori-map.in .territori-map-svg [fill=\"#c4b5ab\"],\n.territori-map.in .territori-map-svg [fill=\"#a08e81\"],\n.territori-map.in .territori-map-svg [fill=\"#a18c80\"],\n.territori-map.in .territori-map-svg [fill=\"#a69184\"]{\n  animation:map-land-in 1.8s cubic-bezier(.22,1,.36,1) .15s backwards;\n}\n@keyframes map-land-in{\n  0%{opacity:0;transform:translateY(10px)}\n  100%{opacity:1;transform:translateY(0)}\n}\n\n\/* Highlighted San Pietro region \u2014 perpetual subtle glow *\/\n.territori-map.in .territori-map-svg [fill=\"#a18c80\"]{\n  animation:\n    map-land-in 1.8s cubic-bezier(.22,1,.36,1) .15s backwards,\n    map-region-glow 5.2s ease-in-out 2.5s infinite;\n}\n@keyframes map-region-glow{\n  0%,100%{filter:brightness(1)}\n  50%{filter:brightness(1.06)}\n}\n\n\/* Labels (dark brown text) fade up after land settles *\/\n.territori-map.in .territori-map-svg [fill=\"#63463b\"]{\n  animation:map-label-in 1.4s ease-out .45s backwards;\n}\n@keyframes map-label-in{\n  0%{opacity:0;transform:translateY(4px)}\n  100%{opacity:1;transform:translateY(0)}\n}\n\n\/* Lighter beige background frame *\/\n.territori-map.in .territori-map-svg [fill=\"#dfd6d1\"]{\n  animation:map-frame-in 1.3s ease-out backwards;\n}\n@keyframes map-frame-in{\n  0%{opacity:0}\n  100%{opacity:1}\n}\n\n\/* Hover: gentle lift + slow pause on bob *\/\n.territori-map-svg:hover .map-pins{\n  transform:translate(0,-5px) scale(1.01);\n  transition:transform 1.4s var(--ease-soft);\n  animation-play-state:paused !important;\n}\n\n\/* ---------------- PERCH\u00c9 SCEGLIERCI ---------------- *\/\n.perche{\n  background:var(--cream-2);\n  padding:100px 56px 130px;\n  position:relative;\n  border-top:1px solid rgba(140,119,81,.18);\n}\n.perche-inner{max-width:1320px;margin:0 auto}\n.perche-head{display:flex;flex-direction:column;align-items:center;gap:18px;margin-bottom:64px;text-align:center}\n.perche-head h2{\n  font-family:var(--serif);font-style:italic;font-weight:500;\n  font-size:clamp(32px,3.4vw,52px);line-height:1.08;letter-spacing:-.008em;\n  color:var(--brand);margin:0;\n}\n.perche-grid{\n  display:grid;grid-template-columns:repeat(3,1fr);gap:0;\n  align-items:stretch;\n  border-top:1px solid rgba(140,119,81,.22);\n  padding-top:140px;\n  position:relative;\n}\n\/* Vertical dividers between cards (only between, not on outside) *\/\n.perche-grid::before,\n.perche-grid::after{\n  content:\"\";position:absolute;top:140px;bottom:0;width:1px;\n  background:linear-gradient(180deg,\n    transparent 0%,\n    rgba(140,119,81,.22) 18%,\n    rgba(140,119,81,.22) 82%,\n    transparent 100%);\n}\n.perche-grid::before{left:33.333%}\n.perche-grid::after{left:66.666%}\n\n.perche-card{\n  position:relative;\n  display:flex;flex-direction:column;align-items:center;gap:18px;\n  text-align:center;padding:0 36px 24px;\n  transition:transform 1.1s var(--ease-soft);\n}\n.perche-card:hover{transform:translateY(-6px)}\n\n\/* Large faded italic numeral watermark \u2014 sits fully above the medallion, visible *\/\n.perche-num{\n  position:absolute;top:-104px;left:50%;transform:translateX(-50%);\n  font-family:var(--serif);font-style:italic;font-weight:500;\n  font-size:104px;line-height:1;color:var(--brand);\n  opacity:.32;letter-spacing:-.02em;\n  pointer-events:none;user-select:none;\n  z-index:0;\n  transition:opacity 1.2s var(--ease-soft), transform 1.4s var(--ease-soft);\n}\n.perche-card:hover .perche-num{opacity:.55;transform:translateX(-50%) translateY(-4px)}\n\n\/* Medallion wrapping the icon *\/\n.perche-medallion{\n  position:relative;width:92px;height:92px;display:grid;place-items:center;\n  z-index:1;\n  transition:transform 1.1s var(--ease-soft);\n}\n.perche-medallion::before{\n  content:\"\";position:absolute;inset:0;border-radius:50%;\n  border:1px solid rgba(140,119,81,.35);\n  transition:transform 1.2s var(--ease-soft), border-color 1.2s var(--ease-soft);\n}\n.perche-medallion::after{\n  content:\"\";position:absolute;inset:9px;border-radius:50%;\n  border:1px solid var(--gold);\n  background:var(--cream-2);\n  transition:transform 1.2s var(--ease-soft), background-color 1.2s var(--ease-soft);\n}\n.perche-card:hover .perche-medallion::before{transform:scale(1.08);border-color:var(--gold)}\n.perche-card:hover .perche-medallion::after{transform:scale(1.04)}\n\n\/* Continuously rotating gold \"halo\" \u2014 slow, perpetual *\/\n.perche-halo{\n  position:absolute;inset:-6px;border-radius:50%;pointer-events:none;\n}\n.perche-halo svg{position:absolute;inset:0;width:100%;height:100%;animation:perche-halo-spin 24s linear infinite}\n.perche-halo circle{fill:none;stroke:var(--gold);stroke-width:.6;stroke-dasharray:2 8;opacity:.45}\n@keyframes perche-halo-spin{\n  to{transform:rotate(360deg)}\n}\n\n.perche-icon{\n  position:relative;width:42px;height:42px;display:grid;place-items:center;\n  color:var(--brand);z-index:1;\n  transition:transform 1.2s var(--ease-soft);\n}\n.perche-card:hover .perche-icon{transform:scale(1.06)}\n.perche-icon svg{width:100%;height:100%;overflow:visible}\n\n\/* Icon-specific perpetual micro-animations *\/\n.icon-shield .icon-check{\n  stroke-dasharray:22;stroke-dashoffset:22;\n  animation:icon-check-draw 3.6s ease-in-out 1s infinite;\n}\n@keyframes icon-check-draw{\n  0%,15%{stroke-dashoffset:22}\n  35%,75%{stroke-dashoffset:0}\n  95%,100%{stroke-dashoffset:22}\n}\n\n.icon-truck .truck-body,\n.icon-truck .truck-wheel-1,\n.icon-truck .truck-wheel-2{\n  animation:icon-truck-roll 4.5s ease-in-out infinite;\n  transform-origin:center;\n}\n.icon-truck .truck-wheel-1{transform-origin:13px 33px;animation:icon-wheel-spin 4.5s ease-in-out infinite}\n.icon-truck .truck-wheel-2{transform-origin:35px 33px;animation:icon-wheel-spin 4.5s ease-in-out infinite}\n@keyframes icon-truck-roll{\n  0%,100%{transform:translateX(-1.5px)}\n  50%{transform:translateX(1.5px)}\n}\n@keyframes icon-wheel-spin{\n  0%{transform:rotate(0)}\n  50%{transform:rotate(180deg)}\n  100%{transform:rotate(360deg)}\n}\n\n.icon-house .house-window{\n  transform-origin:24px 18px;\n  animation:icon-house-glow 4.2s ease-in-out infinite;\n}\n@keyframes icon-house-glow{\n  0%,100%{fill:var(--brand);transform:scale(1)}\n  50%{fill:var(--gold);transform:scale(1.5)}\n}\n\n.perche-card h3{\n  font-family:var(--serif);font-style:italic;font-weight:500;\n  font-size:22px;color:var(--brand);margin:8px 0 0;\n  position:relative;z-index:1;\n}\n\/* Slim gold underline that grows on hover *\/\n.perche-card h3::after{\n  content:\"\";display:block;width:28px;height:1px;\n  background:var(--gold);margin:14px auto 0;\n  transform-origin:center;transform:scaleX(.6);\n  transition:transform 1.2s var(--ease-soft), background-color 1.2s var(--ease-soft);\n}\n.perche-card:hover h3::after{transform:scaleX(1.4);background:var(--gold-dark)}\n\n.perche-list{\n  list-style:none;padding:0;margin:8px 0 0;\n  display:flex;flex-direction:column;gap:10px;\n  position:relative;z-index:1;\n}\n.perche-list li{\n  font-family:var(--serif);font-size:15.5px;line-height:1.55;color:var(--ink-2);\n  max-width:30ch;text-wrap:balance;\n}\n.perche-list em{font-style:italic;color:var(--brand);font-weight:500}\n.perche-cta{display:flex;justify-content:center;margin-top:80px}\n\n\/* Reveal stagger \u2014 already triggered by JS via .reveal -> .in *\/\n.perche-card{\n  opacity:0;transform:translateY(36px);\n}\n.perche-card.reveal.in,\n.perche-card.in{\n  opacity:1;transform:translateY(0);\n  transition:opacity 1.2s var(--ease-soft), transform 1.4s var(--ease-soft);\n}\n\/* Numeral and medallion get their own slight stagger on entrance *\/\n.perche-card .perche-num{transform:translateX(-50%) translateY(8px)}\n.perche-card.in .perche-num{\n  transform:translateX(-50%) translateY(0);\n  transition:opacity 1.6s var(--ease-soft) .25s, transform 1.6s var(--ease-soft) .25s;\n}\n.perche-card .perche-medallion{transform:scale(.86) rotate(-6deg)}\n.perche-card.in .perche-medallion{\n  transform:scale(1) rotate(0);\n  transition:transform 1.4s var(--ease-soft) .15s;\n}\n\n\/* ---------------- RESPONSIVE for Chi Siamo ---------------- *\/\n@media (max-width:1100px){\n  .pillars-grid{\n    grid-template-columns:1fr;\n    gap:48px;\n  }\n  .pillar-div{\n    width:100%;height:1px;flex-direction:row;padding-top:0;\n  }\n  .pillar-div-line{width:100%;height:1px;min-height:0;\n    background:linear-gradient(90deg, transparent, rgba(140,119,81,.35) 12%, rgba(140,119,81,.35) 88%, transparent);}\n  .hero-about-inner{grid-template-columns:1fr;gap:48px}\n  .hero-about-text{padding-top:0}\n  .territori-inner{grid-template-columns:1fr;gap:48px}\n}\n@media (max-width:680px){\n  .hero-about{padding:120px 24px 40px}\n  .pillars,.territori,.perche{padding-left:24px;padding-right:24px}\n  .perche-grid{grid-template-columns:1fr;gap:40px;padding-top:48px}\n  .brothers-portrait{width:200px;height:200px}\n  .brothers-wrap{height:200px}\n  .brothers-curve{height:380px;top:60px}\n}\n\n\/* ============================================================\n   SOSTENIBILIT\u00c0 \u2014 unique editorial layout\n   ============================================================ *\/\n\n\/* HERO \u2014 large title block, photo strip below *\/\n.sost-hero{\n  background:var(--cream);\n  padding:160px 56px 0;\n  position:relative;\n  overflow:hidden;\n}\n.sost-hero-inner{\n  max-width:1320px;margin:0 auto 56px;\n  display:grid;grid-template-columns:1.3fr 0.7fr;gap:60px;align-items:end;\n}\n.sost-eyebrow{\n  display:inline-flex;align-items:center;gap:14px;\n  font-family:var(--sans);font-size:11px;letter-spacing:.42em;text-transform:uppercase;\n  color:var(--gold-dark);margin:0 0 28px;\n}\n.sost-eyebrow::before{\n  content:\"\";display:block;width:40px;height:1px;background:currentColor;\n}\n.sost-title{\n  font-family:var(--serif);font-style:italic;font-weight:500;\n  font-size:clamp(56px,8vw,128px);line-height:.98;letter-spacing:-.018em;\n  color:var(--brand);margin:0;text-wrap:balance;\n}\n.sost-title .w{display:inline-block;opacity:0;transform:translateY(28px);animation:rise 1.1s var(--ease) forwards;margin-right:.16em}\n.sost-lede{\n  font-family:var(--serif);font-style:italic;font-weight:500;\n  font-size:clamp(17px,1.45vw,22px);line-height:1.45;color:var(--ink-2);\n  margin:0;max-width:32ch;text-wrap:pretty;padding-bottom:18px;\n}\n\n\/* Wide cinematic photo strip below the title *\/\n.sost-hero-photo{\n  position:relative;width:100%;\n  height:clamp(360px,46vw,620px);\n  overflow:hidden;\n}\n.sost-hero-photo img{\n  position:absolute;inset:0;width:100%;height:108%;\n  object-fit:cover;object-position:50% 60%;\n  will-change:transform;\n}\n\/* gold rule overlay top *\/\n.sost-hero-photo::before{\n  content:\"\";position:absolute;left:56px;right:56px;top:0;height:1px;\n  background:var(--gold);opacity:.5;z-index:2;\n  transform-origin:left;animation:rule-extend 1.6s var(--ease-soft) forwards;\n}\n@keyframes rule-extend{\n  from{transform:scaleX(0)}\n  to{transform:scaleX(1)}\n}\n\/* corner badge *\/\n.sost-hero-badge{\n  position:absolute;bottom:32px;right:32px;\n  display:inline-flex;align-items:center;gap:14px;\n  background:var(--cream);padding:14px 22px;\n  z-index:3;\n  box-shadow:0 16px 32px -14px rgba(46,30,21,.4);\n}\n.sost-hero-badge .brand-logo{\n  width:24px;height:24px;\n  -webkit-mask-image:url(\"https:\/\/www.cottini1925.cybeartest.it\/wp-content\/uploads\/2026\/05\/logo-cottini-mark.svg\");\n          mask-image:url(\"https:\/\/www.cottini1925.cybeartest.it\/wp-content\/uploads\/2026\/05\/logo-cottini-mark.svg\");\n  background-color:var(--brand);\n  -webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;\n  -webkit-mask-position:center;mask-position:center;\n  -webkit-mask-size:contain;mask-size:contain;\n  animation:hero-deco-spin 28s linear infinite;\n}\n.sost-hero-badge-text{\n  font-family:var(--sans);font-size:10.5px;letter-spacing:.4em;text-transform:uppercase;\n  color:var(--brand);font-weight:600;line-height:1;\n}\n\n\/* ============================================================\n   IMPEGNI \u2014 vertical timeline\n   ============================================================ *\/\n.impegni{\n  background:var(--cream);\n  padding:140px 56px 140px;\n  position:relative;\n}\n.impegni-inner{\n  max-width:1080px;margin:0 auto;\n  display:grid;grid-template-columns:280px 1fr;gap:80px;align-items:start;\n}\n.impegni-intro{\n  font-family:var(--serif);font-style:italic;font-weight:500;\n  font-size:clamp(20px,1.7vw,26px);line-height:1.35;color:var(--brand);\n  margin:0;text-wrap:balance;\n  position:sticky;top:130px;\n}\n.impegni-intro::before{\n  content:\"\";display:block;width:48px;height:1px;background:var(--gold);margin-bottom:24px;\n}\n.impegni-list{\n  list-style:none;padding:0;margin:0;\n  position:relative;\n}\n\/* vertical rail *\/\n.impegni-list::before{\n  content:\"\";position:absolute;left:46px;top:6px;bottom:6px;width:1px;\n  background:linear-gradient(180deg,\n    transparent 0%,\n    rgba(140,119,81,.35) 8%,\n    rgba(140,119,81,.35) 92%,\n    transparent 100%);\n}\n.impegno{\n  position:relative;\n  display:grid;grid-template-columns:92px 1fr;gap:32px;align-items:center;\n  padding:36px 0;\n  border-bottom:1px solid rgba(140,119,81,.16);\n}\n.impegno:first-child{padding-top:0}\n.impegno:last-child{border-bottom:none;padding-bottom:0}\n.impegno-marker{\n  position:relative;width:92px;height:92px;\n  display:grid;place-items:center;\n  background:var(--cream);\n  z-index:1;\n}\n.impegno-marker::before{\n  content:\"\";position:absolute;inset:0;border-radius:50%;\n  border:1px solid var(--gold);background:var(--cream-2);\n  transition:transform 1s var(--ease-soft), border-color 1s var(--ease-soft);\n}\n.impegno:hover .impegno-marker::before{transform:scale(1.06);border-color:var(--gold-dark)}\n\/* Number stamp REMOVED \u2014 icons now stand alone *\/\n.impegno-icon{\n  position:relative;z-index:2;width:38px;height:44px;color:var(--brand);overflow:visible;\n}\n.impegno-icon.icon-renewable, .impegno-icon.icon-pv{height:38px}\n.impegno-name{\n  font-family:var(--serif);font-style:italic;font-weight:500;\n  font-size:clamp(24px,2.2vw,34px);line-height:1.12;letter-spacing:-.008em;\n  color:var(--brand);margin:0;text-wrap:balance;\n}\n\n\/* impegno icon perpetual animations *\/\n\n\/* 01 Water: cloud floats, 3 raindrops fall in sequence into the cistern, fill ripples *\/\n.impegno-icon.icon-water .icon-cloud{\n  transform-origin:24px 14px;\n  animation:cloud-drift 6s ease-in-out infinite;\n}\n@keyframes cloud-drift{\n  0%,100%{transform:translateX(-1px)}\n  50%{transform:translateX(1px)}\n}\n.impegno-icon.icon-water .drop{\n  transform-origin:center;\n}\n.impegno-icon.icon-water .drop-1{animation:drop-fall 2.4s ease-in infinite;animation-delay:0s}\n.impegno-icon.icon-water .drop-2{animation:drop-fall 2.4s ease-in infinite;animation-delay:.4s}\n.impegno-icon.icon-water .drop-3{animation:drop-fall 2.4s ease-in infinite;animation-delay:.8s}\n@keyframes drop-fall{\n  0%{transform:translateY(-5px);opacity:0}\n  20%{opacity:1}\n  70%{transform:translateY(8px);opacity:1}\n  85%{transform:translateY(8px);opacity:0}\n  100%{transform:translateY(-5px);opacity:0}\n}\n.impegno-icon.icon-water .icon-fill{\n  animation:water-fill 2.4s ease-in-out infinite;\n}\n@keyframes water-fill{\n  0%,100%{opacity:.18}\n  50%{opacity:.4}\n}\n\n\/* 02 Wind turbine: blades (3 properly spread at 120\u00b0 each) spin around the hub *\/\n.impegno-icon.icon-renewable .icon-blades{\n  transform-origin:24px 22px;\n  animation:blades-spin 4s linear infinite;\n}\n@keyframes blades-spin{\n  to{transform:rotate(360deg)}\n}\n.impegno-icon.icon-renewable .icon-breeze{\n  animation:breeze-flow 3.2s ease-in-out infinite;\n}\n.impegno-icon.icon-renewable .breeze-2{animation-delay:.5s}\n.impegno-icon.icon-renewable .breeze-3{animation-delay:1.2s}\n@keyframes breeze-flow{\n  0%{opacity:0;transform:translateX(-4px)}\n  35%{opacity:.7}\n  65%{opacity:.7}\n  100%{opacity:0;transform:translateX(4px)}\n}\n\n\/* 03 PV + biomass \u2014 richly animated: sun pulses, beam streams down, cells light up\n   in sequence, plant stem draws itself, leaves sway, energy sparks rise from biomass *\/\n.impegno-icon.icon-pv .icon-pv-sun{\n  transform-origin:24px 11px;\n  animation:pv-sun-pulse 3s ease-in-out infinite;\n}\n.impegno-icon.icon-pv .icon-pv-sun-grp line{\n  animation:rays-flicker 2.4s ease-in-out infinite;\n}\n.impegno-icon.icon-pv .icon-pv-sun-grp line:nth-child(2){animation-delay:.3s}\n.impegno-icon.icon-pv .icon-pv-sun-grp line:nth-child(3){animation-delay:.6s}\n@keyframes pv-sun-pulse{\n  0%,100%{transform:scale(1)}\n  50%{transform:scale(1.18)}\n}\n@keyframes rays-flicker{0%,100%{opacity:1}50%{opacity:.45}}\n\n\/* Beam streaming down from sun to panel *\/\n.impegno-icon.icon-pv .icon-pv-beam{\n  stroke-dasharray:2 2;\n  stroke-dashoffset:0;\n  animation:pv-beam-flow 1.6s linear infinite;\n  opacity:.55;\n}\n@keyframes pv-beam-flow{\n  from{stroke-dashoffset:0}\n  to{stroke-dashoffset:-12}\n}\n\n\/* Panel slowly tilts; cells light up one after another in a wave *\/\n.impegno-icon.icon-pv .icon-pv-panel{\n  transform-origin:15px 28px;\n  animation:pv-panel-tilt 5s ease-in-out infinite;\n}\n@keyframes pv-panel-tilt{\n  0%,100%{transform:rotate(-1deg) translateY(0)}\n  50%{transform:rotate(1deg) translateY(-.6px)}\n}\n.impegno-icon.icon-pv .icon-pv-cell{\n  animation:pv-cell-glow 3.2s ease-in-out infinite;\n}\n.impegno-icon.icon-pv .cell-1{animation-delay:0s}\n.impegno-icon.icon-pv .cell-2{animation-delay:.18s}\n.impegno-icon.icon-pv .cell-3{animation-delay:.36s}\n.impegno-icon.icon-pv .cell-4{animation-delay:.54s}\n.impegno-icon.icon-pv .cell-5{animation-delay:.72s}\n.impegno-icon.icon-pv .cell-6{animation-delay:.90s}\n@keyframes pv-cell-glow{\n  0%,80%,100%{opacity:0}\n  20%,40%{opacity:.35}\n}\n\n\/* Biomass plant: stem grows by stroke-dash; leaves alternate; sparks rise & fade *\/\n.impegno-icon.icon-pv .icon-pv-stem{\n  stroke-dasharray:22;stroke-dashoffset:22;\n  animation:pv-stem-grow 4.6s ease-in-out infinite;\n  transform-origin:36px 38px;\n}\n@keyframes pv-stem-grow{\n  0%{stroke-dashoffset:22;transform:rotate(-3deg)}\n  35%,75%{stroke-dashoffset:0;transform:rotate(0)}\n  95%,100%{stroke-dashoffset:22;transform:rotate(3deg)}\n}\n.impegno-icon.icon-pv .icon-pv-leaf--l{\n  transform-origin:36px 30px;\n  animation:pv-leaf-l 3.6s ease-in-out infinite;\n}\n.impegno-icon.icon-pv .icon-pv-leaf--r{\n  transform-origin:36px 24px;\n  animation:pv-leaf-r 4s ease-in-out infinite;\n}\n@keyframes pv-leaf-l{\n  0%,100%{transform:rotate(-8deg) scale(.96)}\n  50%{transform:rotate(8deg) scale(1.04)}\n}\n@keyframes pv-leaf-r{\n  0%,100%{transform:rotate(10deg) scale(.96)}\n  50%{transform:rotate(-10deg) scale(1.04)}\n}\n\n\/* ============================================================\n   CIFRE \u2014 horizontal numbers strip on a textured warm band\n   ============================================================ *\/\n.cifre{\n  background:\n    linear-gradient(180deg, var(--cream-3) 0%, var(--cream-2) 100%);\n  padding:120px 56px;\n  position:relative;\n  border-top:1px solid rgba(140,119,81,.2);\n  border-bottom:1px solid rgba(140,119,81,.2);\n}\n.cifre-inner{\n  max-width:1280px;margin:0 auto;\n  display:grid;grid-template-columns:repeat(3,1fr);gap:0;\n  position:relative;\n}\n.cifre-inner::before,\n.cifre-inner::after{\n  content:\"\";position:absolute;top:10%;bottom:10%;width:1px;\n  background:linear-gradient(180deg, transparent, rgba(140,119,81,.4), transparent);\n}\n.cifre-inner::before{left:33.333%}\n.cifre-inner::after{left:66.666%}\n.cifra{\n  display:flex;flex-direction:column;align-items:center;gap:18px;\n  padding:0 32px;text-align:center;\n}\n.cifra-num{\n  font-family:var(--serif);font-style:italic;font-weight:500;\n  font-size:clamp(54px,6vw,96px);line-height:.95;letter-spacing:-.018em;\n  color:var(--brand);\n}\n.cifra-rule{display:block;width:32px;height:1px;background:var(--gold)}\n.cifra-label{\n  font-family:var(--serif);font-style:italic;font-weight:400;\n  font-size:15px;line-height:1.5;color:var(--ink-2);\n  max-width:18ch;\n}\n\n\/* ============================================================\n   CERTIFICAZIONE \u2014 closing band\n   ============================================================ *\/\n.cert{\n  background:var(--cream);\n  padding:140px 56px 160px;\n  text-align:center;\n  position:relative;\n}\n.cert-inner{\n  max-width:780px;margin:0 auto;\n  display:flex;flex-direction:column;align-items:center;gap:36px;\n}\n.cert-eyebrow{\n  font-family:var(--sans);font-size:11px;letter-spacing:.42em;text-transform:uppercase;\n  color:var(--gold-dark);margin:0;\n}\n.cert-h{\n  font-family:var(--serif);font-style:italic;font-weight:500;\n  font-size:clamp(36px,4vw,60px);line-height:1.08;letter-spacing:-.008em;\n  color:var(--brand);margin:0;text-wrap:balance;\n}\n.cert-h em{font-style:italic;font-weight:600;color:var(--gold-dark);letter-spacing:.02em}\n.cert-body{\n  font-family:var(--serif);font-style:italic;font-size:19px;line-height:1.55;\n  color:var(--ink-2);margin:0;max-width:38ch;text-wrap:balance;\n}\n\/* Equalitas certification mark (linked from official source) *\/\n.cert-equalitas{\n  position:relative;\n  display:inline-grid;place-items:center;\n  width:clamp(220px, 22vw, 280px);\n  aspect-ratio:1\/1;\n  padding:36px;\n  margin-bottom:8px;\n  transition:transform 1.2s var(--ease-soft);\n}\n.cert-equalitas img{\n  display:block;width:100%;height:auto;\n  position:relative;z-index:2;\n  filter:drop-shadow(0 6px 14px rgba(46,30,21,.08));\n  animation:cert-breathe 5.4s ease-in-out infinite;\n  transform-origin:center;\n}\n.cert-equalitas:hover{transform:translateY(-3px)}\n@keyframes cert-breathe{\n  0%,100%{transform:scale(1)}\n  50%{transform:scale(1.025)}\n}\n\n\/* Rotating dashed border around the logo *\/\n.cert-equalitas::before{\n  content:\"\";position:absolute;inset:0;\n  border-radius:50%;\n  border:1px dashed var(--gold);\n  opacity:.7;\n  animation:cert-ring-spin 28s linear infinite;\n}\n\/* Static inner hairline ring *\/\n.cert-equalitas::after{\n  content:\"\";position:absolute;inset:14px;\n  border-radius:50%;\n  border:1px solid rgba(140,119,81,.22);\n  pointer-events:none;\n}\n@keyframes cert-ring-spin{\n  to{transform:rotate(360deg)}\n}\n\n\/* SVG overlay with stroke-dash animation \u2014 adds an animated arc that \"draws\" around *\/\n.cert-equalitas-arc{\n  position:absolute;inset:0;width:100%;height:100%;\n  z-index:1;pointer-events:none;\n}\n.cert-equalitas-arc circle{\n  fill:none;stroke:var(--gold-dark);stroke-width:1.2;\n  stroke-dasharray:60 380;stroke-linecap:round;\n  animation:cert-arc-orbit 6s linear infinite;\n  transform-origin:center;\n}\n@keyframes cert-arc-orbit{\n  0%{stroke-dashoffset:0;opacity:.85}\n  50%{opacity:.4}\n  100%{stroke-dashoffset:-440;opacity:.85}\n}\n\n@media (max-width:900px){\n  .sost-hero{padding:120px 24px 0}\n  .sost-hero-inner{grid-template-columns:1fr;gap:24px}\n  .sost-hero-photo{margin:0 -24px}\n  .sost-hero-photo::before{left:24px;right:24px}\n  .impegni{padding:80px 24px}\n  .impegni-inner{grid-template-columns:1fr;gap:48px}\n  .impegni-intro{position:static}\n  .cifre{padding:80px 24px}\n  .cifre-inner{grid-template-columns:1fr;gap:48px}\n  .cifre-inner::before, .cifre-inner::after{display:none}\n  .cert{padding:80px 24px 100px}\n}\n\n\n\/* ============================================================\n   CONTATTI \u2014 details + form\n   ============================================================ *\/\n.contatti{\n  background:var(--cream);\n  padding:80px 56px 120px;\n  position:relative;\n}\n.contatti-inner{\n  max-width:1280px;margin:0 auto;\n  display:grid;grid-template-columns:0.85fr 1.15fr;gap:88px;align-items:start;\n}\n.contatti-kicker{\n  font-family:var(--sans);font-size:11px;letter-spacing:.42em;text-transform:uppercase;\n  color:var(--gold-dark);display:inline-flex;align-items:center;gap:14px;\n}\n.contatti-kicker::before{\n  content:\"\";display:block;width:36px;height:1px;background:currentColor;\n}\n\n\/* LEFT \u2014 details *\/\n.contatti-details{position:sticky;top:130px;display:flex;flex-direction:column;gap:28px}\n.contatti-name{\n  font-family:var(--serif);font-style:italic;font-weight:500;\n  font-size:clamp(32px,2.8vw,46px);line-height:1.05;letter-spacing:-.01em;\n  color:var(--brand);margin:18px 0 6px;\n}\n.contatti-block{display:flex;flex-direction:column;gap:6px}\n.contatti-label{\n  font-family:var(--sans);font-size:10.5px;letter-spacing:.36em;text-transform:uppercase;\n  color:var(--gold-dark);font-weight:500;\n}\n.contatti-block address, .contatti-block .contatti-link{\n  font-family:var(--serif);font-size:18px;line-height:1.5;color:var(--brand);\n  font-style:normal;\n}\n.contatti-link{\n  position:relative;display:inline-block;\n  border-bottom:1px solid transparent;\n  padding-bottom:2px;\n  transition:color 1s var(--ease-soft), border-color 1s var(--ease-soft);\n}\n.contatti-link:hover{color:var(--gold-dark);border-bottom-color:var(--gold)}\n\n.contatti-social{display:flex;gap:14px;margin-top:14px}\n.contatti-social a{\n  width:40px;height:40px;display:grid;place-items:center;\n  border:1px solid rgba(140,119,81,.4);border-radius:50%;\n  color:var(--brand);\n  transition:background-color 1s var(--ease-soft), color 1s var(--ease-soft), border-color 1s var(--ease-soft), transform 1s var(--ease-soft);\n}\n.contatti-social a:hover{background:var(--brand);color:var(--cream);border-color:var(--brand);transform:translateY(-2px)}\n.contatti-social svg{width:18px;height:18px}\n\n\/* RIGHT \u2014 form *\/\n.contatti-form{\n  background:var(--cream-2);\n  padding:56px 56px 48px;\n  border:1px solid rgba(140,119,81,.18);\n  position:relative;\n}\n.form-head{margin-bottom:36px;display:flex;flex-direction:column;gap:14px}\n.form-head h3{\n  font-family:var(--serif);font-style:italic;font-weight:500;\n  font-size:clamp(26px,2.2vw,36px);line-height:1.15;letter-spacing:-.005em;\n  color:var(--brand);margin:0;\n}\n.form-head p{font-family:var(--serif);font-size:16px;line-height:1.55;color:var(--ink-2);margin:0;max-width:48ch}\n\n.form-grid{\n  display:grid;grid-template-columns:1fr 1fr;gap:28px 28px;\n}\n.field{display:flex;flex-direction:column;gap:8px}\n.field-full{grid-column:1 \/ -1}\n.field-label{\n  font-family:var(--sans);font-size:10.5px;letter-spacing:.32em;text-transform:uppercase;\n  color:var(--brand);font-weight:600;\n}\n.field-opt{font-weight:400;color:var(--ink-2);letter-spacing:.18em;text-transform:none;font-size:10px}\n.field input, .field select, .field textarea{\n  font-family:var(--serif);font-size:17px;color:var(--brand);\n  background:transparent;\n  border:none;border-bottom:1px solid rgba(140,119,81,.4);\n  padding:10px 0;\n  width:100%;\n  transition:border-color .6s var(--ease-soft);\n  outline:none;\n  appearance:none;\n}\n.field input::placeholder, .field textarea::placeholder{color:rgba(58,42,31,.45);font-style:italic}\n.field select{cursor:pointer;color:rgba(58,42,31,.55)}\n.field select:valid{color:var(--brand)}\n.field textarea{resize:vertical;min-height:120px}\n.field input:focus, .field select:focus, .field textarea:focus{\n  border-bottom-color:var(--gold-dark);\n}\n.field input:invalid:not(:placeholder-shown), .field textarea:invalid:not(:placeholder-shown){\n  border-bottom-color:rgba(180,60,40,.55);\n}\n\n.field-check{flex-direction:row;align-items:flex-start;gap:14px}\n.field-check input{\n  width:18px;height:18px;\n  border:1px solid rgba(140,119,81,.5);\n  appearance:none;-webkit-appearance:none;\n  position:relative;cursor:pointer;flex:none;margin-top:2px;\n  transition:background-color .5s var(--ease-soft), border-color .5s var(--ease-soft);\n}\n.field-check input:checked{background:var(--brand);border-color:var(--brand)}\n.field-check input:checked::after{\n  content:\"\";position:absolute;left:5px;top:1px;width:5px;height:10px;\n  border:solid var(--cream);border-width:0 1.5px 1.5px 0;\n  transform:rotate(45deg);\n}\n.field-check span{font-family:var(--serif);font-size:14.5px;color:var(--ink-2);line-height:1.5}\n.field-check a{color:var(--gold-dark);border-bottom:1px solid currentColor}\n\n.form-foot{\n  margin-top:36px;\n  display:flex;align-items:center;justify-content:space-between;gap:24px;flex-wrap:wrap;\n}\n.form-feedback{\n  font-family:var(--serif);font-style:italic;font-size:15px;color:var(--gold-dark);\n}\n.form-feedback.is-error{color:#a83a2b}\n\n\/* ============================================================\n   MAP \u2014 Leaflet with overlay card\n   ============================================================ *\/\n.mappa-sezione{\n  background:var(--cream);\n  padding:0 0 0;\n  position:relative;\n}\n.mappa-head{\n  max-width:1280px;margin:0 auto 48px;padding:0 56px;\n  display:flex;flex-direction:column;gap:16px;\n}\n.mappa-head h2{\n  font-family:var(--serif);font-style:italic;font-weight:500;\n  font-size:clamp(28px,2.6vw,40px);line-height:1.12;letter-spacing:-.005em;\n  color:var(--brand);margin:0;text-wrap:balance;\n}\n.mappa-wrap{\n  position:relative;width:100%;\n  height:clamp(440px, 60vh, 640px);\n  background:var(--cream-3);\n  margin-bottom:0;\n}\n.mappa-leaflet{\n  position:absolute;inset:0;\n  filter:saturate(.65) sepia(.12);\n  z-index:1;\n}\n.mappa-overlay{\n  position:absolute;left:56px;top:50%;transform:translateY(-50%);\n  z-index:2;pointer-events:none;\n}\n.mappa-card{\n  background:var(--cream);\n  padding:24px 28px 26px;\n  display:grid;grid-template-columns:36px 1fr;gap:18px;align-items:start;\n  box-shadow:0 24px 48px -22px rgba(46,30,21,.35), 0 6px 14px -8px rgba(46,30,21,.18);\n  border-left:2px solid var(--gold);\n  max-width:300px;\n  pointer-events:auto;\n}\n.mappa-card-mark{\n  width:36px;height:36px;\n  -webkit-mask-image:url(\"https:\/\/www.cottini1925.cybeartest.it\/wp-content\/uploads\/2026\/05\/logo-cottini-mark.svg\");\n          mask-image:url(\"https:\/\/www.cottini1925.cybeartest.it\/wp-content\/uploads\/2026\/05\/logo-cottini-mark.svg\");\n  background-color:var(--brand);\n  -webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;\n  -webkit-mask-position:center;mask-position:center;\n  -webkit-mask-size:contain;mask-size:contain;\n  animation:hero-deco-spin 28s linear infinite;\n}\n.mappa-card-name{\n  font-family:var(--serif);font-style:italic;font-weight:500;\n  font-size:22px;color:var(--brand);margin:0 0 4px;line-height:1.1;\n}\n.mappa-card-addr{\n  font-family:var(--serif);font-size:14.5px;color:var(--ink-2);\n  margin:0 0 14px;line-height:1.4;\n}\n.mappa-card-link{\n  font-family:var(--sans);font-size:10.5px;letter-spacing:.32em;text-transform:uppercase;\n  color:var(--gold-dark);font-weight:600;\n  display:inline-flex;align-items:center;gap:10px;\n  transition:color 1s var(--ease-soft), gap 1.2s var(--ease-graceful);\n}\n.mappa-card-link:hover{color:var(--brand);gap:18px}\n.mappa-card-link svg{transition:transform 1.2s var(--ease-graceful)}\n.mappa-card-link:hover svg{transform:translateX(6px)}\n\n\/* Custom Leaflet pin *\/\n.cot-pin{\n  position:relative;\n  width:46px;height:60px;\n  transform:translate(-50%,-100%);\n}\n.cot-pin-body{\n  position:absolute;left:0;top:0;width:46px;height:46px;\n  background:var(--brand);\n  border-radius:50% 50% 50% 0;\n  transform:rotate(-45deg);\n  box-shadow:0 10px 22px -10px rgba(46,30,21,.55);\n  border:2px solid var(--cream);\n}\n.cot-pin-mark{\n  position:absolute;left:11px;top:11px;width:24px;height:24px;\n  -webkit-mask-image:url(\"https:\/\/www.cottini1925.cybeartest.it\/wp-content\/uploads\/2026\/05\/logo-cottini-mark.svg\");\n          mask-image:url(\"https:\/\/www.cottini1925.cybeartest.it\/wp-content\/uploads\/2026\/05\/logo-cottini-mark.svg\");\n  background-color:var(--gold-light);\n  -webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;\n  -webkit-mask-position:center;mask-position:center;\n  -webkit-mask-size:contain;mask-size:contain;\n  animation:hero-deco-spin 22s linear infinite reverse;\n}\n.cot-pin-pulse{\n  position:absolute;left:50%;bottom:-2px;\n  width:14px;height:6px;border-radius:50%;\n  background:rgba(46,30,21,.25);\n  transform:translateX(-50%);\n  animation:pin-shadow-pulse 2.6s ease-in-out infinite;\n}\n@keyframes pin-shadow-pulse{\n  0%,100%{transform:translateX(-50%) scale(1);opacity:.35}\n  50%{transform:translateX(-50%) scale(1.25);opacity:.55}\n}\n\/* Bobbing animation *\/\n.cot-pin{animation:pin-bob 3.4s ease-in-out infinite}\n@keyframes pin-bob{\n  0%,100%{transform:translate(-50%,-100%)}\n  50%{transform:translate(-50%,calc(-100% - 4px))}\n}\n\n@media (max-width:900px){\n  .contatti{padding:64px 24px 80px}\n  .contatti-inner{grid-template-columns:1fr;gap:48px}\n  .contatti-details{position:static}\n  .contatti-form{padding:36px 28px}\n  .form-grid{grid-template-columns:1fr}\n  .mappa-head{padding:0 24px}\n  .mappa-overlay{left:24px;right:24px;max-width:none}\n  .mappa-card{max-width:none}\n}\n\n\/* ---------------- GRAIN ---------------- *\/\n.grain{position:fixed;inset:0;z-index:80;pointer-events:none;opacity:.07;mix-blend-mode:multiply;\n  background-image:url(\"data:image\/svg+xml;utf8,<svg xmlns='http:\/\/www.w3.org\/2000\/svg' width='240' height='240'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'\/><feColorMatrix values='0 0 0 0 0.12 0 0 0 0 0.08 0 0 0 0 0.05 0 0 0 1 0'\/><\/filter><rect width='100%' height='100%' filter='url(#n)'\/><\/svg>\");\n}\n\n\/* ---------------- REVEALS ---------------- *\/\n.reveal{opacity:0;transform:translateY(28px);transition:opacity 1.1s var(--ease), transform 1.2s var(--ease)}\n.reveal.in{opacity:1;transform:translateY(0)}\n.anim-fade{opacity:0;transition:opacity 1.2s var(--ease)}\n.anim-fade.in{opacity:1}\n.anim-zoom{opacity:0;transform:scale(1.08);transition:opacity 1.2s var(--ease), transform 1.4s var(--ease)}\n.anim-zoom.in{opacity:1;transform:scale(1)}\n\n\/* focus *\/\na:focus-visible, button:focus-visible{outline:2px solid var(--gold);outline-offset:3px;border-radius:2px}\n\n\/* ---------------- RESPONSIVE ---------------- *\/\n@media (max-width:1180px){\n  .valori-inner{grid-template-columns:1fr;gap:48px}\n  .valori-text p, .valori-text h2{max-width:none}\n  .cards{gap:40px 40px}\n}\n@media (max-width:960px){\n  .site-nav{display:none}\n  .site-header{grid-template-columns:1fr auto;padding:14px 24px}\n  .site-header.scrolled{padding:10px 24px}\n  .hero{min-height:88vh}\n  .hero-text{top:130px;left:24px;right:24px}\n  .scroll-disc{width:96px;height:96px}\n  .scroll-disc .quad{width:30px;height:30px}\n  .scroll-disc .label{font-size:10.5px}\n  .valori,.numeri,.cta-final,.site-footer{padding-left:24px;padding-right:24px}\n  .stats{grid-template-columns:1fr 1fr;gap:48px 32px}\n  .foot-grid{grid-template-columns:1fr;gap:40px}\n}\n@media (max-width:560px){\n  .cards{grid-template-columns:1fr;gap:32px}\n  .hero-photo::after{height:84%;bottom:-66%}\n  .numeri{padding:120px 24px 140px}\n  .numeri::before, .numeri::after{height:50%}\n}\n\n@media (prefers-reduced-motion:reduce){\n  *,*::before,*::after{animation-duration:.01ms !important;animation-iteration-count:1 !important;transition-duration:.01ms !important}\n  h1.hero-h1 .w, h1.hero-about-h1 .w{opacity:1;transform:none}\n}\n<\/style>\n<script src=\"https:\/\/unpkg.com\/leaflet@1.9.4\/dist\/leaflet.js\" integrity=\"sha256-20nQCchB9co0qIjJZRGuk2\/Z9VM+kNiyxNV1lvTlZBo=\" crossorigin=\"\"><\/script>\n\n\n<!-- Quadrifoglio sprite (4-petal knot, stylized) -->\n<svg width=\"0\" height=\"0\" style=\"position:absolute\" aria-hidden=\"true\">\n  <defs>\n    <!-- Crescent (mezzaluna) clip \u2014 bite from the LEFT side (facing the text column).\n         Photo fills the right + top + bottom edges; cream curve dips in from the left. -->\n    <clipPath id=\"petalClip\" clipPathUnits=\"objectBoundingBox\">\n      <path d=\"M 0.02 0, C 0.5 0.22, 0.5 0.78, 0.02 1, L 1 1, L 1 0, Z\"\/>\n    <\/clipPath>\n  <\/defs>\n  <symbol id=\"quad\" viewBox=\"0 0 100 100\" fill=\"currentColor\" fill-rule=\"evenodd\">\n    <!-- four teardrop petals meeting at center, with center void -->\n    <path d=\"M50 6 C 62 6 70 18 70 32 C 70 42 62 46 50 50 C 38 46 30 42 30 32 C 30 18 38 6 50 6 Z\"\/>\n    <path d=\"M94 50 C 94 62 82 70 68 70 C 58 70 54 62 50 50 C 54 38 58 30 68 30 C 82 30 94 38 94 50 Z\"\/>\n    <path d=\"M50 94 C 38 94 30 82 30 68 C 30 58 38 54 50 50 C 62 54 70 58 70 68 C 70 82 62 94 50 94 Z\"\/>\n    <path d=\"M6 50 C 6 38 18 30 32 30 C 42 30 46 38 50 50 C 46 62 42 70 32 70 C 18 70 6 62 6 50 Z\"\/>\n    <circle cx=\"50\" cy=\"50\" r=\"4\" fill=\"var(--cream,#F1E6DD)\"\/>\n  <\/symbol>\n  <symbol id=\"ic-quality\" viewBox=\"0 0 48 48\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n    <path d=\"M16 8 H32 C32 18 29 26 24 26 C 19 26 16 18 16 8 Z\"\/>\n    <line x1=\"24\" y1=\"26\" x2=\"24\" y2=\"40\"\/>\n    <line x1=\"17\" y1=\"41\" x2=\"31\" y2=\"41\"\/>\n  <\/symbol>\n  <symbol id=\"ic-respect\" viewBox=\"0 0 48 48\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n    <path d=\"M24 7 C 27 11 31 10 34 12 C 37 15 37 19 34 21 C 38 24 36 28 32 29 C 31 33 27 35 24 39 C 21 35 17 33 16 29 C 12 28 10 24 14 21 C 11 19 11 15 14 12 C 17 10 21 11 24 7 Z\"\/>\n    <line x1=\"24\" y1=\"22\" x2=\"24\" y2=\"42\"\/>\n    <line x1=\"24\" y1=\"26\" x2=\"18\" y2=\"22\" opacity=\".55\"\/>\n    <line x1=\"24\" y1=\"26\" x2=\"30\" y2=\"22\" opacity=\".55\"\/>\n    <line x1=\"24\" y1=\"33\" x2=\"17\" y2=\"31\" opacity=\".55\"\/>\n    <line x1=\"24\" y1=\"33\" x2=\"31\" y2=\"31\" opacity=\".55\"\/>\n  <\/symbol>\n  <symbol id=\"ic-tradition\" viewBox=\"0 0 48 48\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n    <path d=\"M14 11 C 17 8 21 7 24 7 C 27 7 31 8 34 11 L34 37 C 31 40 27 41 24 41 C 21 41 17 40 14 37 Z\"\/>\n    <path d=\"M14 18 C 17 16 21 15 24 15 C 27 15 31 16 34 18\"\/>\n    <path d=\"M14 30 C 17 32 21 33 24 33 C 27 33 31 32 34 30\"\/>\n    <line x1=\"24\" y1=\"7\" x2=\"24\" y2=\"41\" opacity=\".4\"\/>\n  <\/symbol>\n  <symbol id=\"ic-people\" viewBox=\"0 0 48 48\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n    <circle cx=\"14\" cy=\"18\" r=\"3.6\"\/>\n    <circle cx=\"24\" cy=\"13\" r=\"3.6\"\/>\n    <circle cx=\"34\" cy=\"18\" r=\"3.6\"\/>\n    <path d=\"M7 39 C 7 31 10 27 14 27 C 18 27 21 31 21 39\"\/>\n    <path d=\"M17 39 C 17 29 20 25 24 25 C 28 25 31 29 31 39\"\/>\n    <path d=\"M27 39 C 27 31 30 27 34 27 C 38 27 41 31 41 39\"\/>\n  <\/symbol>\n  <symbol id=\"arrow\" viewBox=\"0 0 24 12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n    <path d=\"M0 6 L22 6 M16 1 L22 6 L16 11\"\/>\n  <\/symbol>\n<\/svg>\n\n<!-- ============ HEADER ============ -->\n<header class=\"site-header\" role=\"banner\">\n    <a href=\"\/en\/\" class=\"logo logo--light\" aria-label=\"Cottini 1925 \u2014 Home\">\n    <span class=\"brand-logo brand-logo--md brand-logo--light\"><\/span>\n  <\/a>\n  <a href=\"\/en\/\" class=\"logo logo--dark\" aria-label=\"Cottini 1925 \u2014 Home\">\n    <span class=\"brand-logo brand-logo--md brand-logo--brand\"><\/span>\n  <\/a>\n\n  <nav class=\"site-nav\" aria-label=\"Main navigation\">\n    <a href=\"\/en\/\">Home<\/a>\n    <a href=\"https:\/\/www.cottini1925.cybeartest.it\/en\/about-us\/\">About us<\/a>\n    <a href=\"https:\/\/www.cottini1925.cybeartest.it\/en\/our-brands\/\">Our brands<\/a>\n    <a href=\"https:\/\/www.cottini1925.cybeartest.it\/en\/sustainability\/\">Sustainability<\/a>\n    <a href=\"https:\/\/www.cottini1925.cybeartest.it\/en\/trade-area\/\">Trade Area<\/a>\n    <a href=\"https:\/\/www.cottini1925.cybeartest.it\/en\/press-area\/\">Press Area<\/a>\n    <a href=\"https:\/\/www.cottini1925.cybeartest.it\/en\/contacts\/\" aria-current=\"page\">Contacts<\/a>\n  <\/nav>\n\n  <div class=\"header-right\">\n    <div class=\"lang\" aria-label=\"Language\">\n      <a href=\"https:\/\/www.cottini1925.cybeartest.it\/en\/contacts\/\" data-it=\"\/contatti\/\">IT<\/a><span class=\"sep\">\u00b7<\/span><a class=\"active\" href=\"https:\/\/www.cottini1925.cybeartest.it\/en\/contacts\/\">EN<\/a>\n    <\/div>\n    <a href=\"https:\/\/www.cottini1925.cybeartest.it\/en\/trade-area\/\" class=\"btn-trade\">Trade Login<\/a>\n  <\/div>\n<\/header>\n\n<style id=\"cot-lang-fix\">\n\/* Selettore di lingua reso funzionante (WPML, 27\/08\/2026): erano <span> inerti. *\/\n.lang a{color:inherit;text-decoration:none;transition:opacity .3s var(--ease)}\n.lang a:not(.active){opacity:.62}\n.lang a:hover{opacity:1}\n<\/style>\n<style id=\"cot-mobile-fix\">\n\/* ============================================================\n   SOLO MOBILE - 27\/08\/2026\n   Ogni regola di questo blocco vive dentro una media query:\n   sopra i 960px il rendering desktop resta identico a prima.\n   ============================================================ *\/\n\n\/* Gli elementi del menu mobile sono creati dal bootstrap JS.\n   Questa guardia garantisce che su desktop non compaiano mai. *\/\n@media (min-width:961px){\n  .cot-burger,.cot-mnav{display:none !important}\n}\n\n@media (max-width:960px){\n\n  \/* --- pulsante hamburger --- *\/\n  .cot-burger{\n    display:inline-flex;align-items:center;justify-content:center;\n    width:44px;height:44px;flex:0 0 44px;margin:0 -10px 0 -2px;\n    background:none;border:0;padding:0;color:inherit;cursor:pointer;\n    -webkit-tap-highlight-color:transparent;\n  }\n  .cot-burger i{display:block;position:relative;width:22px;height:1px;background:currentColor}\n  .cot-burger i::before,.cot-burger i::after{\n    content:\"\";position:absolute;left:0;width:22px;height:1px;background:currentColor;\n  }\n  .cot-burger i::before{top:-7px}\n  .cot-burger i::after{top:7px}\n\n  \/* --- pannello di navigazione --- *\/\n  .cot-mnav{\n    position:fixed;inset:0;z-index:60;background:var(--cream);\n    display:flex;flex-direction:column;padding:18px 24px 34px;\n    opacity:0;visibility:hidden;transform:translateY(-10px);\n    transition:opacity .4s var(--ease-soft),transform .4s var(--ease-soft),visibility .4s;\n    overflow-y:auto;-webkit-overflow-scrolling:touch;\n  }\n  .cot-mnav.is-open{opacity:1;visibility:visible;transform:none}\n  body.cot-menu-open{overflow:hidden}\n\n  .cot-mnav-top{display:flex;align-items:center;justify-content:space-between;min-height:44px}\n  .cot-mnav-top .brand-logo{width:104px;height:38px}\n  .cot-mnav-x{\n    width:44px;height:44px;margin-right:-10px;\n    background:none;border:0;padding:0;color:var(--brand);cursor:pointer;\n    display:grid;place-items:center;-webkit-tap-highlight-color:transparent;\n  }\n  .cot-mnav-x i{display:block;position:relative;width:20px;height:1px;background:transparent}\n  .cot-mnav-x i::before,.cot-mnav-x i::after{\n    content:\"\";position:absolute;left:0;top:0;width:20px;height:1px;background:var(--brand);\n  }\n  .cot-mnav-x i::before{transform:rotate(45deg)}\n  .cot-mnav-x i::after{transform:rotate(-45deg)}\n\n  .cot-mnav-links{display:flex;flex-direction:column;margin:26px 0 0}\n  .cot-mnav-links a{\n    font-family:var(--serif);font-style:italic;font-weight:500;\n    font-size:clamp(24px,7vw,32px);line-height:1.2;color:var(--ink);\n    text-decoration:none;padding:14px 0;\n    border-bottom:1px solid rgba(140,119,81,.18);\n  }\n  .cot-mnav-links a:first-child{border-top:1px solid rgba(140,119,81,.18)}\n  .cot-mnav-links a[aria-current]{color:var(--gold-dark)}\n\n  .cot-mnav-foot{\n    margin-top:auto;padding-top:30px;\n    display:flex;align-items:center;justify-content:space-between;gap:18px;flex-wrap:wrap;\n  }\n  .cot-mnav-foot .lang{color:var(--ink-2)}\n  .cot-mnav-foot .btn-trade{white-space:nowrap}\n\n  \/* --- aree di tocco del selettore lingua ---\n     erano 16x20px: sotto la soglia utilizzabile con il pollice --- *\/\n  .lang{gap:2px}\n  .lang a{padding:12px 8px}\n\n  \/* ---------- 2\u00b0 giro mobile, 27\/08\/2026 ---------- *\/\n\n  \/* Trade Login fuori dall'header: su 390px occupava 114px e andava a capo\n     su due righe. Resta nel menu a tutto schermo, dove ha spazio. *\/\n  \/* il reset del tema impone display:inline-block !important sul bottone:\n     serve la stessa forza per toglierlo dall'header su mobile *\/\n  .site-header .btn-trade{display:none !important}\n\n  \/* Selettore lingua: la voce attiva era piu bassa dell'altra perche il\n     design le toglie padding sotto per fare spazio al filetto. Pareggio\n     le due scatole, cosi le basi del testo coincidono. *\/\n  .lang a{padding:12px 8px}\n  .lang a.active{padding-bottom:11px;border-bottom-width:1px}\n\n  \/* Hamburger: seguiva il colore del testo dell'header, che resta scuro\n     anche sopra le foto. Ora e' chiaro sull'immagine e scuro sul crema,\n     come fanno gia' menu e selettore lingua. Tratti ispessiti a 2px. *\/\n  .cot-burger{color:var(--cream)}\n  .site-header.scrolled .cot-burger{color:var(--ink)}\n  .cot-burger i,.cot-burger i::before,.cot-burger i::after{height:2px;border-radius:2px}\n  .cot-burger i{box-shadow:0 1px 5px rgba(46,30,21,.45)}\n  .cot-burger i::before,.cot-burger i::after{box-shadow:0 1px 5px rgba(46,30,21,.45)}\n  .site-header.scrolled .cot-burger i,\n  .site-header.scrolled .cot-burger i::before,\n  .site-header.scrolled .cot-burger i::after{box-shadow:none}\n\n  \/* Lampo viola al tocco: e' l'evidenziazione predefinita del browser.\n     Sostituita con un oro trasparente della palette. *\/\n  a,button,[role=\"button\"],input[type=\"submit\"],summary{\n    -webkit-tap-highlight-color:rgba(191,134,60,.20);\n  }\n\n  \/* Home, sezione Valori: le quattro schede erano una sotto l'altra.\n     Due colonne. *\/\n  .cards{grid-template-columns:1fr 1fr;gap:34px 16px}\n  .card-icon{width:74px;height:74px}\n  .card-icon svg{width:74px;height:74px}\n  .card h3{font-size:20px}\n\n  \/* Chi siamo, \"Perche scegliere i nostri vini\": i numeri 01\/02\/03 sono\n     posizionati 104px sopra la scheda. In colonna singola con 40px di\n     distanza finivano sopra il testo della scheda precedente, e il primo\n     sconfinava sul filetto della sezione. *\/\n  .perche-grid{gap:132px;padding-top:124px}\n  \/* i due filetti verticali separano le colonne: in colonna singola\n     tagliavano il contenuto a meta *\/\n  .perche-grid::before,.perche-grid::after{display:none}\n\n  \/* Chi siamo, blocco decorativo dei pillar: allineato a sinistra e alto\n     240px fissi, su mobile lasciava un vuoto con marchio, filetto e frase\n     sparpagliati. Composizione centrata e compattata. *\/\n  .pillar-deco{min-height:0;margin-top:34px;align-items:center;text-align:center}\n  .pillar-deco-mark{width:64px;height:64px}\n  .pillar-deco-rule{margin:16px auto 14px}\n  .pillar-deco-line{margin:0 auto 16px}\n\n  \/* ---------- 3o giro, 27\/08\/2026 ----------\n     Il lampo viola al tocco del burger non era la tap-highlight del\n     browser (gia' neutralizzata) ma il reset del tema:\n     button:hover,button:focus{background-color:#c36;color:#fff}\n     con specificita' 0-1-1, superiore a .cot-burger. Neutralizzato qui\n     per il burger e per la X del pannello, gli unici due <button>\n     introdotti dal menu mobile. *\/\n  .cot-burger:hover,.cot-burger:focus,.cot-burger:active{\n    background:none;background-color:transparent;color:var(--cream);\n    text-decoration:none;\n  }\n  .site-header.scrolled .cot-burger:hover,\n  .site-header.scrolled .cot-burger:focus,\n  .site-header.scrolled .cot-burger:active{color:var(--ink)}\n  .cot-mnav-x:hover,.cot-mnav-x:focus,.cot-mnav-x:active{\n    background:none;background-color:transparent;color:var(--brand);\n    text-decoration:none;\n  }\n}\n\n\/* --- schede risorse a colonna singola sui telefoni ---\n   a 390px la griglia 2x2 lasciava colonne da ~150px, con testi\n   spezzati su sette righe --- *\/\n@media (max-width:560px){\n  .pcat-grid{grid-template-columns:1fr}\n  .pcat{border-right:none}\n  .pcat:nth-child(2n){border-right:none}\n}\n<\/style>\n<main id=\"main\">\n\n<!-- ============ HERO (Contatti) ============ -->\n<section class=\"sost-hero\" aria-label=\"Opening\">\n  <div class=\"sost-hero-inner\">\n    <div>\n      <span class=\"sost-eyebrow\">Contacts<\/span>\n      <h1 class=\"sost-title\" data-split>Get\nin touch.<\/h1>\n    <\/div>\n    <p class=\"sost-lede anim-fade\" data-delay=\"500\">\n      Our team is available for business enquiries, partnerships, and winery visits.\n    <\/p>\n  <\/div>\n<\/section>\n\n<!-- ============ DETAILS + FORM ============ -->\n<section class=\"contatti\" aria-labelledby=\"contatti-title\">\n  <h2 id=\"contatti-title\" class=\"visually-hidden\">Details and form<\/h2>\n  <div class=\"contatti-inner\">\n\n    <!-- LEFT: details -->\n    <aside class=\"contatti-details\">\n      <span class=\"contatti-kicker reveal\">Details<\/span>\n      <p class=\"contatti-name reveal\" data-delay=\"120\">Cottini 1925<\/p>\n\n      <div class=\"contatti-block reveal\" data-delay=\"240\">\n        <span class=\"contatti-label\">Address<\/span>\n        <address>San Pietro in Cariano, Verona, Italy<\/address>\n      <\/div>\n\n      <div class=\"contatti-block reveal\" data-delay=\"320\">\n        <span class=\"contatti-label\">Write to us<\/span>\n        <a class=\"contatti-link\" href=\"mailto:info@cottinivini.com\">info@cottinivini.com<\/a>\n      <\/div>\n\n      <div class=\"contatti-block reveal\" data-delay=\"400\">\n        <span class=\"contatti-label\">Phone<\/span>\n        <a class=\"contatti-link\" href=\"tel:+390456280157\">+39 045 6280157<\/a>\n      <\/div>\n    <\/aside>\n\n    <!-- RIGHT: form -->\n    <div class=\"contatti-form contatti-form-wrap\">\n<div class=\"wpcf7 no-js\" id=\"wpcf7-f354-o1\" lang=\"en-US\" dir=\"ltr\" data-wpcf7-id=\"354\">\n<div class=\"screen-reader-response\"><p role=\"status\" aria-live=\"polite\" aria-atomic=\"true\"><\/p> <ul><\/ul><\/div>\n<form action=\"\/en\/wp-json\/wp\/v2\/pages\/325#wpcf7-f354-o1\" method=\"post\" class=\"wpcf7-form init\" aria-label=\"Contact form\" novalidate=\"novalidate\" data-status=\"init\">\n<fieldset class=\"hidden-fields-container\"><input type=\"hidden\" name=\"_wpcf7\" value=\"354\" \/><input type=\"hidden\" name=\"_wpcf7_version\" value=\"6.1.6\" \/><input type=\"hidden\" name=\"_wpcf7_locale\" value=\"en_US\" \/><input type=\"hidden\" name=\"_wpcf7_unit_tag\" value=\"wpcf7-f354-o1\" \/><input type=\"hidden\" name=\"_wpcf7_container_post\" value=\"0\" \/><input type=\"hidden\" name=\"_wpcf7_posted_data_hash\" value=\"\" \/>\n<\/fieldset>\n<header class=\"form-head\">\n\t<p><span class=\"contatti-kicker\">\u2014 REQUEST<\/span>\n\t<\/p>\n\t<p class=\"form-title\">Have a specific request?\n\t<\/p>\n\t<p class=\"form-sub\">Fill out the form and we'll get back to you shortly.\n\t<\/p>\n<\/header>\n<div class=\"form-grid\">\n\t<p><label class=\"field\"><br \/>\n<span class=\"field-label\">FIRST NAME<\/span><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"nome\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Your first name\" value=\"\" type=\"text\" name=\"nome\" \/><\/span><br \/>\n<\/label><br \/>\n<label class=\"field\"><br \/>\n<span class=\"field-label\">LAST NAME<\/span><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"cognome\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Your last name\" value=\"\" type=\"text\" name=\"cognome\" \/><\/span><br \/>\n<\/label><br \/>\n<label class=\"field\"><br \/>\n<span class=\"field-label\">EMAIL<\/span><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"email\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-email wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-email\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"name@email.com\" value=\"\" type=\"email\" name=\"email\" \/><\/span><br \/>\n<\/label><br \/>\n<label class=\"field\"><br \/>\n<span class=\"field-label\">PHONE <span class=\"field-opt\">(optional)<\/span><\/span><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"telefono\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-tel wpcf7-text wpcf7-validates-as-tel\" aria-invalid=\"false\" placeholder=\"+39\" value=\"\" type=\"tel\" name=\"telefono\" \/><\/span><br \/>\n<\/label><br \/>\n<label class=\"field field-full\"><br \/>\n<span class=\"field-label\">SUBJECT<\/span><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"oggetto\"><select class=\"wpcf7-form-control wpcf7-select wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" name=\"oggetto\"><option value=\"Select a topic\">Select a topic<\/option><option value=\"Business enquiries\">Business enquiries<\/option><option value=\"Partnership\">Partnership<\/option><option value=\"Winery visits\">Winery visits<\/option><option value=\"Press &amp; Media\">Press &amp; Media<\/option><option value=\"Other\">Other<\/option><\/select><\/span><br \/>\n<\/label><br \/>\n<label class=\"field field-full\"><br \/>\n<span class=\"field-label\">MESSAGE<\/span><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"messaggio\"><textarea cols=\"40\" rows=\"10\" maxlength=\"2000\" class=\"wpcf7-form-control wpcf7-textarea wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Tell us what you need...\" name=\"messaggio\"><\/textarea><\/span><br \/>\n<\/label><br \/>\n<label class=\"field field-full field-check\"><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"privacy\"><span class=\"wpcf7-form-control wpcf7-acceptance\"><span class=\"wpcf7-list-item\"><label><input type=\"checkbox\" name=\"privacy\" value=\"1\" aria-invalid=\"false\" \/><span class=\"wpcf7-list-item-label\">I have read and accept the <a href=\"\/en\/privacy-policy\/\">privacy policy<\/a>.<\/span><\/label><\/span><\/span><\/span><br \/>\n<\/label>\n\t<\/p>\n<\/div>\n<div class=\"form-foot\">\n\t<p><input class=\"wpcf7-form-control wpcf7-submit has-spinner btn-pill contatti-submit\" type=\"submit\" value=\"SEND REQUEST\" \/>\n\t<\/p>\n<\/div><div class=\"wpcf7-response-output\" aria-hidden=\"true\"><\/div>\n<\/form>\n<\/div>\n<\/div>\n\n  <\/div>\n<\/section>\n\n<!-- ============ MAP ============ -->\n<section class=\"mappa-sezione\" aria-labelledby=\"mappa-title\">\n  <header class=\"mappa-head\">\n    <span class=\"contatti-kicker reveal\">Where we are<\/span>\n    <h2 id=\"mappa-title\" class=\"reveal\" data-delay=\"120\">San Pietro in Cariano,<br>the heart of Valpolicella.<\/h2>\n  <\/header>\n  <div class=\"mappa-wrap reveal\" data-delay=\"240\">\n    <div id=\"contatti-map\" class=\"mappa-leaflet\" aria-label=\"Map of the Cottini 1925 headquarters\"><\/div>\n    <div class=\"mappa-overlay\" aria-hidden=\"true\">\n      <div class=\"mappa-card\">\n        <span class=\"brand-logo mappa-card-mark\"><\/span>\n        <div>\n          <p class=\"mappa-card-name\">Cottini 1925<\/p>\n          <p class=\"mappa-card-addr\">San Pietro in Cariano \u00b7 Verona<\/p>\n          <a class=\"mappa-card-link\" href=\"https:\/\/www.openstreetmap.org\/?mlat=45.5167&#038;mlon=10.8500#map=14\/45.5167\/10.8500\" target=\"_blank\" rel=\"noopener\">Open in maps <svg width=\"22\" height=\"11\" aria-hidden=\"true\"><use href=\"#arrow\"\/><\/svg><\/a>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>\n\n<\/main>\n\n\n<!-- ============ FOOTER ============ -->\n<footer class=\"site-footer\" role=\"contentinfo\">\n  <div class=\"foot-grid\">\n    <div class=\"col-logo\">\n      <a href=\"\/en\/\" class=\"logo logo--footer\" aria-label=\"Cottini 1925\">\n        <span class=\"brand-logo brand-logo--lg brand-logo--light\"><\/span>\n      <\/a>\n      \n    <\/div>\n    <div>\n      <h4>Private areas<\/h4>\n      <ul>\n        <li><a href=\"https:\/\/www.cottini1925.cybeartest.it\/en\/trade-area\/\">Trade Area<\/a><\/li>\n        <li><a href=\"https:\/\/www.cottini1925.cybeartest.it\/en\/press-area\/\">Press Area<\/a><\/li>\n      <\/ul>\n    <\/div>\n    <div>\n      <h4>Where we are<\/h4>\n      <address>San Pietro in Cariano, Verona, Italy<\/address>\n      \n    <\/div>\n    <div>\n      <h4>Get in touch<\/h4>\n      <ul>\n        <li><a href=\"mailto:info@cottinivini.com\">info@cottinivini.com<\/a><\/li>\n        <li><a href=\"tel:+390456280157\">+39 045 6280157<\/a><\/li>\n      <\/ul>\n    <\/div>\n  <\/div>\n  <div class=\"foot-bottom\">\n    <span>\u00a9 1925\u20132026 COTTINI S.P.A. \u00b7 P.IVA 02790400234<\/span>\n    <div class=\"links\">\n      <a href=\"https:\/\/www.cottini1925.cybeartest.it\/?page_id=3\">Privacy<\/a>\n      <a href=\"#\">Cookies<\/a>\n      <a href=\"#\">Credits<\/a>\n    <\/div>\n  <\/div>\n<\/footer>\n\n<div class=\"grain\" aria-hidden=\"true\"><\/div>\n<div class=\"scroll-prog\" aria-hidden=\"true\"><\/div>\n\n\n\n\n\n\n\n<script>(function(){var b=\"CihmdW5jdGlvbigpewogIGNvbnN0IHJlZHVjZWQgPSBtYXRjaE1lZGlhKCcocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKScpLm1hdGNoZXM7CgogIC8qIDEpIEhlYWRlciBzY3JvbGxlZCBzdGF0ZSDigJQgcGFnZXMgd2l0aG91dCBhIGRhcmsgZnVsbC1ibGVlZCBoZXJvIGFsd2F5cyB1c2UgdGhlIGRhcmsgaGVhZGVyICovCiAgY29uc3QgaGRyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnNpdGUtaGVhZGVyJyk7CiAgY29uc3QgaGFzRGFya0hlcm8gPSAhIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5oZXJvIC5oZXJvLXBob3RvJyk7CiAgY29uc3Qgc2V0U2Nyb2xsZWQgPSAoKSA9PiBoZHIuY2xhc3NMaXN0LnRvZ2dsZSgnc2Nyb2xsZWQnLCBoYXNEYXJrSGVybyA\/IHdpbmRvdy5zY3JvbGxZID4gNDAgOiB0cnVlKTsKICBzZXRTY3JvbGxlZCgpOwogIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBzZXRTY3JvbGxlZCwge3Bhc3NpdmU6dHJ1ZX0pOwoKICAvKiAyKSBTcGxpdCBIMSBpbnRvIDxzcGFuIGNsYXNzPSJ3Ij4gKi8KICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1zcGxpdF0nKS5mb3JFYWNoKGVsPT57CiAgICBjb25zdCByYXcgPSBlbC50ZXh0Q29udGVudDsKICAgIGVsLnRleHRDb250ZW50PScnOwogICAgbGV0IGk9MDsKICAgIHJhdy5zcGxpdCgnXG4nKS5mb3JFYWNoKChsaW5lLGxpLGFycik9PnsKICAgICAgbGluZS50cmltKCkuc3BsaXQoL1xzKy8pLmZvckVhY2god29yZD0+ewogICAgICAgIGNvbnN0IHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwogICAgICAgIHMuY2xhc3NOYW1lPSd3JzsKICAgICAgICBzLnRleHRDb250ZW50PXdvcmQrJyAnOwogICAgICAgIHMuc3R5bGUuYW5pbWF0aW9uRGVsYXk9KDgwICsgaSoxMTApKydtcyc7CiAgICAgICAgaWYocmVkdWNlZCl7cy5zdHlsZS5hbmltYXRpb249J25vbmUnO3Muc3R5bGUub3BhY2l0eT0xO3Muc3R5bGUudHJhbnNmb3JtPSdub25lJ30KICAgICAgICBlbC5hcHBlbmRDaGlsZChzKTsKICAgICAgICBpKys7CiAgICAgIH0pOwogICAgICBpZihsaTxhcnIubGVuZ3RoLTEpIGVsLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2JyJykpOwogICAgfSk7CiAgfSk7CgogIC8qIDMpIFJldmVhbCDigJQgSU8gd2l0aCBzY3JvbGwgZmFsbGJhY2sgKi8KICBjb25zdCByZXZlYWxFbHMgPSBbLi4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnJldmVhbCwgLmFuaW0tZmFkZSwgLmFuaW0tem9vbScpXTsKICBjb25zdCBjYXJkRWxzID0gWy4uLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLWNhcmRdJyldOwogIGNhcmRFbHMuZm9yRWFjaChlbD0+eyBlbC5zdHlsZS5vcGFjaXR5PScwJzsgZWwuc3R5bGUudHJhbnNmb3JtPSd0cmFuc2xhdGVZKDI4cHgpJzsKICAgIGVsLnN0eWxlLnRyYW5zaXRpb249J29wYWNpdHkgMS4xcyB2YXIoLS1lYXNlKSwgdHJhbnNmb3JtIDEuMnMgdmFyKC0tZWFzZSknOyB9KTsKCiAgY29uc3QgdHJpZ2dlclJldmVhbCA9IChlbCk9PnsKICAgIGlmKGVsLmRhdGFzZXQucmV2ZWFsZWQpIHJldHVybjsKICAgIGVsLmRhdGFzZXQucmV2ZWFsZWQgPSAnMSc7CiAgICBjb25zdCBkID0gcGFyc2VJbnQoZWwuZGF0YXNldC5kZWxheXx8JzAnLDEwKTsKICAgIHNldFRpbWVvdXQoKCk9PnsKICAgICAgaWYoZWwuaGFzQXR0cmlidXRlKCdkYXRhLWNhcmQnKSl7CiAgICAgICAgZWwuc3R5bGUub3BhY2l0eT0nMSc7IGVsLnN0eWxlLnRyYW5zZm9ybT0ndHJhbnNsYXRlWSgwKSc7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZWwuY2xhc3NMaXN0LmFkZCgnaW4nKTsKICAgICAgfQogICAgfSwgcmVkdWNlZD8wOmQpOwogIH07CgogIGNvbnN0IGlzVmlzaWJsZSA9IChlbCwgbWFyZ2luQm90dG9tPTAuMDgpPT57CiAgICBjb25zdCByID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICBjb25zdCB2aCA9IHdpbmRvdy5pbm5lckhlaWdodDsKICAgIGlmKHIuYm90dG9tIDwgMCB8fCByLnRvcCA+IHZoKSByZXR1cm4gZmFsc2U7CiAgICBjb25zdCB2aXNpYmxlID0gTWF0aC5taW4oci5ib3R0b20sIHZoKSAtIE1hdGgubWF4KHIudG9wLCAwKTsKICAgIHJldHVybiB2aXNpYmxlIC8gTWF0aC5taW4oci5oZWlnaHQsIHZoKSA+PSAwLjE1ICYmIHIudG9wIDwgdmggKiAoMSAtIG1hcmdpbkJvdHRvbSk7CiAgfTsKCiAgY29uc3QgY2hlY2tBbGwgPSAoKT0+ewogICAgWy4uLnJldmVhbEVscywgLi4uY2FyZEVsc10uZm9yRWFjaChlbD0+eyBpZihpc1Zpc2libGUoZWwpKSB0cmlnZ2VyUmV2ZWFsKGVsKTsgfSk7CiAgfTsKCiAgdHJ5ewogICAgY29uc3QgaW8gPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKGVudHJpZXMpPT57CiAgICAgIGVudHJpZXMuZm9yRWFjaChlPT57IGlmKGUuaXNJbnRlcnNlY3RpbmcpIHRyaWdnZXJSZXZlYWwoZS50YXJnZXQpOyB9KTsKICAgIH0se3RocmVzaG9sZDowLjE1LHJvb3RNYXJnaW46JzBweCAwcHggLTglIDBweCd9KTsKICAgIFsuLi5yZXZlYWxFbHMsIC4uLmNhcmRFbHNdLmZvckVhY2goZWw9PmlvLm9ic2VydmUoZWwpKTsKICB9Y2F0Y2goZSl7fQoKICAvLyBTY3JvbGwvbG9hZCBmYWxsYmFjayBlbnN1cmVzIGNvbnRlbnQgcmV2ZWFscyBldmVuIGlmIElPIG1pc2ZpcmVzCiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGNoZWNrQWxsLCB7cGFzc2l2ZTp0cnVlfSk7CiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBjaGVja0FsbCk7CiAgc2V0VGltZW91dChjaGVja0FsbCwgMjAwKTsKICBzZXRUaW1lb3V0KGNoZWNrQWxsLCAxMjAwKTsKCiAgLyogM2IpIE1hcCDigJQgZmV0Y2ggU1ZHIGFuZCBpbmxpbmUgaXQgQVNBUCBzbyBhbmltYXRpb25zIGFyZSByZWFkeSB3aGVuIHNjcm9sbGVkIGludG8gdmlldy4gKi8KICBjb25zdCBtYXBDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcudGVycml0b3JpLW1hcCcpOwogIGlmKG1hcENvbnRhaW5lcil7CiAgICBjb25zdCBtYXBJbWcgPSBtYXBDb250YWluZXIucXVlcnlTZWxlY3RvcignLnRlcnJpdG9yaS1tYXAtaW1nJyk7CiAgICBpZihtYXBJbWcpewogICAgICBjb25zdCBpbmxpbmVOb3cgPSBhc3luYyAoKT0+ewogICAgICAgIGlmKG1hcENvbnRhaW5lci5kYXRhc2V0LnN2Z0lubGluZWQpIHJldHVybjsKICAgICAgICBtYXBDb250YWluZXIuZGF0YXNldC5zdmdJbmxpbmVkID0gJzEnOwogICAgICAgIHRyeXsKICAgICAgICAgIGNvbnN0IHIgPSBhd2FpdCBmZXRjaChtYXBJbWcuc3JjKTsKICAgICAgICAgIGNvbnN0IHRleHQgPSBhd2FpdCByLnRleHQoKTsKICAgICAgICAgIG1hcENvbnRhaW5lci5pbm5lckhUTUwgPSB0ZXh0OwogICAgICAgICAgY29uc3Qgc3ZnRWwgPSBtYXBDb250YWluZXIucXVlcnlTZWxlY3Rvcignc3ZnJyk7CiAgICAgICAgICBpZighc3ZnRWwpIHJldHVybjsKICAgICAgICAgIHN2Z0VsLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCd0ZXJyaXRvcmktbWFwLXN2ZycpOwogICAgICAgICAgLy8gSW5qZWN0IHBlcnBldHVhbCBwdWxzZSByaW5ncyBJTlNJREUgZWFjaCBkb3QncyBvd24gZ3JvdXAgc28gdGhleSBzaGFyZQogICAgICAgICAgLy8gZXhhY3RseSB0aGUgc2FtZSBwYXJlbnQgdHJhbnNmb3JtcyAodHJhbnNsYXRlICsgWS1mbGlwIG1hdHJpeCkg4oCUIG5vCiAgICAgICAgICAvLyBmbG9hdGluZy1wb2ludCBkcmlmdCwgbm8gYXNwZWN0LXJhdGlvIG1pc21hdGNoLgogICAgICAgICAgY29uc3QgbnMgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnOwogICAgICAgICAgY29uc3QgYnVyZ3VuZHlFbHMgPSBzdmdFbC5xdWVyeVNlbGVjdG9yQWxsKCdbZmlsbD0iIzRhMGYxZCJdJyk7CiAgICAgICAgICBsZXQgZG90SWR4ID0gMDsKICAgICAgICAgIGJ1cmd1bmR5RWxzLmZvckVhY2goZWw9PnsKICAgICAgICAgICAgY29uc3QgYmIgPSBlbC5nZXRCQm94KCk7CiAgICAgICAgICAgIC8vIERvdHMgaGF2ZSBhIHNtYWxsIGJib3ggKH4xMHgxMCk7IGZsYWdzIGFyZSBtdWNoIGxhcmdlcgogICAgICAgICAgICBpZihiYi53aWR0aCA+IDIwIHx8IGJiLmhlaWdodCA+IDIwKSByZXR1cm47CiAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IGVsLnBhcmVudE5vZGU7CiAgICAgICAgICAgIGlmKCFwYXJlbnQpIHJldHVybjsKICAgICAgICAgICAgZG90SWR4Kys7CiAgICAgICAgICAgIGNvbnN0IHJpbmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobnMsJ2NpcmNsZScpOwogICAgICAgICAgICAvLyBMb2NhbCBjaXJjbGUgY2VudGVyIG1hdGNoZXMgdGhlIGRvdCdzIHBhdGg6IHN0YXJ0cyBhdCAoMCwwKSwgY3VydmVzIHRvCiAgICAgICAgICAgIC8vICgtOS42ODUsIDApIGFuZCBiYWNrLCBzbyB0aGUgdmlzdWFsIGNlbnRlciBpcyBhdCAoLTQuODQzLCAwKS4KICAgICAgICAgICAgcmluZy5zZXRBdHRyaWJ1dGUoJ2N4JywnLTQuODQzJyk7CiAgICAgICAgICAgIHJpbmcuc2V0QXR0cmlidXRlKCdjeScsJzAnKTsKICAgICAgICAgICAgcmluZy5zZXRBdHRyaWJ1dGUoJ3InLCc0Ljg0Jyk7CiAgICAgICAgICAgIHJpbmcuc2V0QXR0cmlidXRlKCdmaWxsJywnbm9uZScpOwogICAgICAgICAgICByaW5nLnNldEF0dHJpYnV0ZSgnc3Ryb2tlJywnIzRhMGYxZCcpOwogICAgICAgICAgICByaW5nLnNldEF0dHJpYnV0ZSgnc3Ryb2tlLXdpZHRoJywnMS40Jyk7CiAgICAgICAgICAgIHJpbmcuc2V0QXR0cmlidXRlKCdjbGFzcycsJ3Bpbi1wdWxzZSBwaW4tcHVsc2UtJyArIGRvdElkeCk7CiAgICAgICAgICAgIHBhcmVudC5hcHBlbmRDaGlsZChyaW5nKTsKICAgICAgICAgIH0pOwogICAgICAgIH1jYXRjaChlKXsgLyoga2VlcCA8aW1nPiBmYWxsYmFjayAqLyB9CiAgICAgIH07CiAgICAgIC8vIElubGluZSBhcyBzb29uIGFzIHBvc3NpYmxlCiAgICAgIGlmKCdyZXF1ZXN0SWRsZUNhbGxiYWNrJyBpbiB3aW5kb3cpewogICAgICAgIHJlcXVlc3RJZGxlQ2FsbGJhY2soaW5saW5lTm93LCB7dGltZW91dDoxNTAwfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc2V0VGltZW91dChpbmxpbmVOb3csIDIwMCk7CiAgICAgIH0KICAgICAgLy8gQmFja3VwOiBpZiBub3QgaW5saW5lZCB3aXRoaW4gMi41cywgZm9yY2UgaXQKICAgICAgc2V0VGltZW91dChpbmxpbmVOb3csIDI1MDApOwogICAgfQogIH0KCiAgLy8gRmluYWwgc2FmZXR5OiBhbnl0aGluZyBzdGlsbCBoaWRkZW4gNHMgYWZ0ZXIgbG9hZCBnZXRzIGhhcmQtc2hvd24uCiAgLy8gKEJlbHQtYW5kLWJyYWNlcyBhZ2FpbnN0IGVudmlyb25tZW50cyB3aGVyZSB0cmFuc2l0aW9ucyBzaWxlbnRseSBzdGFsbC4pCiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCAoKT0+ewogICAgc2V0VGltZW91dCgoKT0+ewogICAgICBbLi4ucmV2ZWFsRWxzLCAuLi5jYXJkRWxzXS5mb3JFYWNoKGVsPT57CiAgICAgICAgY29uc3Qgb3AgPSBwYXJzZUZsb2F0KGdldENvbXB1dGVkU3R5bGUoZWwpLm9wYWNpdHkpOwogICAgICAgIGlmKG9wIDwgMC45OSl7CiAgICAgICAgICBlbC5zdHlsZS50cmFuc2l0aW9uID0gJ25vbmUnOwogICAgICAgICAgZWwuc3R5bGUub3BhY2l0eSA9ICcxJzsKICAgICAgICAgIGVsLnN0eWxlLnRyYW5zZm9ybSA9ICdub25lJzsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSwgNDAwMCk7CiAgfSk7CgogIC8qIDUpIENvdW50ZXIgYW5pbWF0aW9uIOKAlCBJTyArIHNjcm9sbCBmYWxsYmFjayAqLwogIGNvbnN0IGZtdCA9ICh2YWwsIHR5cGUpPT57CiAgICBpZih0eXBlPT09J20nKSByZXR1cm4gdmFsLnRvRml4ZWQoMSkucmVwbGFjZSgnLicsJywnKSsnTSc7CiAgICBpZih0eXBlPT09J3BsdXMnKSByZXR1cm4gTWF0aC5yb3VuZCh2YWwpKycrJzsKICAgIGlmKHR5cGU9PT0ndGhvdXNhbmRzJykgcmV0dXJuIE1hdGgucm91bmQodmFsKS50b0xvY2FsZVN0cmluZygnaXQtSVQnKTsKICAgIGlmKHR5cGU9PT0ncGVyY2VudCcpIHJldHVybiBNYXRoLnJvdW5kKHZhbCkrJyUnOwogICAgcmV0dXJuIFN0cmluZyhNYXRoLnJvdW5kKHZhbCkpOwogIH07CiAgY29uc3QgY291bnRlckVscyA9IFsuLi5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1jb3VudGVyXScpXTsKICBjb25zdCBydW5Db3VudGVyID0gKGVsKT0+ewogICAgaWYoZWwuZGF0YXNldC5jb3VudGVkKSByZXR1cm47CiAgICBlbC5kYXRhc2V0LmNvdW50ZWQgPSAnMSc7CiAgICBjb25zdCB0YXJnZXQgPSBwYXJzZUZsb2F0KGVsLmRhdGFzZXQudGFyZ2V0KTsKICAgIGNvbnN0IGZyb20gPSBwYXJzZUZsb2F0KGVsLmRhdGFzZXQuZnJvbXx8JzAnKTsKICAgIGNvbnN0IHN0ZXAgPSBwYXJzZUZsb2F0KGVsLmRhdGFzZXQuc3RlcHx8JzEnKTsKICAgIGNvbnN0IGludGVydmFsID0gcGFyc2VJbnQoZWwuZGF0YXNldC5pbnRlcnZhbHx8JzMwJywxMCk7CiAgICBjb25zdCB0eXBlID0gZWwuZGF0YXNldC5mb3JtYXR8fCdpbnQnOwogICAgaWYocmVkdWNlZCl7IGVsLnRleHRDb250ZW50ID0gZm10KHRhcmdldCx0eXBlKTsgcmV0dXJuOyB9CiAgICBsZXQgdiA9IGZyb207IGVsLnRleHRDb250ZW50ID0gZm10KHYsdHlwZSk7CiAgICBjb25zdCB0ID0gc2V0SW50ZXJ2YWwoKCk9PnsKICAgICAgdiArPSBzdGVwOwogICAgICBpZigoc3RlcD4wICYmIHY+PXRhcmdldCkgfHwgKHN0ZXA8MCAmJiB2PD10YXJnZXQpKXsKICAgICAgICB2ID0gdGFyZ2V0OyBlbC50ZXh0Q29udGVudCA9IGZtdCh2LHR5cGUpOyBjbGVhckludGVydmFsKHQpOwogICAgICB9IGVsc2UgewogICAgICAgIGVsLnRleHRDb250ZW50ID0gZm10KHYsdHlwZSk7CiAgICAgIH0KICAgIH0sIGludGVydmFsKTsKICB9OwogIGNvbnN0IGNvdW50ZXJWaXNpYmxlID0gKGVsKT0+ewogICAgY29uc3QgciA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgY29uc3QgdmggPSB3aW5kb3cuaW5uZXJIZWlnaHQ7CiAgICBpZihyLmJvdHRvbSA8IDAgfHwgci50b3AgPiB2aCkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHIudG9wIDwgdmggKiAwLjY1OwogIH07CiAgY29uc3QgY2hlY2tDb3VudGVycyA9ICgpPT57IGNvdW50ZXJFbHMuZm9yRWFjaChlbD0+eyBpZihjb3VudGVyVmlzaWJsZShlbCkpIHJ1bkNvdW50ZXIoZWwpOyB9KTsgfTsKICB0cnl7CiAgICBjb25zdCBjb3VudElPID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKChlbnRyaWVzKT0+ewogICAgICBlbnRyaWVzLmZvckVhY2goZT0+eyBpZihlLmlzSW50ZXJzZWN0aW5nKSBydW5Db3VudGVyKGUudGFyZ2V0KTsgfSk7CiAgICB9LHt0aHJlc2hvbGQ6MC4zNX0pOwogICAgY291bnRlckVscy5mb3JFYWNoKGVsPT5jb3VudElPLm9ic2VydmUoZWwpKTsKICB9Y2F0Y2goZSl7fQogIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBjaGVja0NvdW50ZXJzLCB7cGFzc2l2ZTp0cnVlfSk7CiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBjaGVja0NvdW50ZXJzKTsKICBzZXRUaW1lb3V0KGNoZWNrQ291bnRlcnMsIDQwMCk7CgogIC8qIDYpIFBhcmFsbGF4ICsgc2Nyb2xsLWRyaXZlbiBzZWN0aW9uICJkZXB0aCIgKyBoZXJvIGZhZGUgKyBwcm9ncmVzcyBiYXIgKi8KICBjb25zdCBwcm9nQmFyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnNjcm9sbC1wcm9nJyk7CiAgY29uc3QgaGVyb1RleHQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuaGVyby10ZXh0Jyk7CiAgY29uc3QgaGVyb1NlYyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5oZXJvJyk7CiAgaWYoIXJlZHVjZWQpewogICAgY29uc3QgcGFyYWxsYXhOb2RlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLXBhcmFsbGF4XScpOwogICAgLy8gSW5uZXIgY29udGVudCBibG9ja3MgdGhhdCBzaG91bGQgc3VidGx5IGxpZnQgb24gdmlld3BvcnQgY2VudGVyIHBhc3MKICAgIGNvbnN0IGxpZnRFbHMgPSBbCiAgICAgIC4uLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy52YWxvcmktaW5uZXIsIC5udW1lcmktaW5uZXInKQogICAgXTsKICAgIGxpZnRFbHMuZm9yRWFjaChlbCA9PiB7IGVsLnN0eWxlLndpbGxDaGFuZ2UgPSAndHJhbnNmb3JtJzsgfSk7CiAgICBsZXQgdGlja2luZyA9IGZhbHNlOwogICAgbGV0IGxhc3RTY3JvbGwgPSB3aW5kb3cuc2Nyb2xsWTsKICAgIGxldCB2ZWxvY2l0eSA9IDA7CiAgICBjb25zdCBtYXAgPSAodmFsLCBpbk1pbiwgaW5NYXgsIG91dE1pbiwgb3V0TWF4KSA9PgogICAgICBvdXRNaW4gKyAoKHZhbCAtIGluTWluKSAqIChvdXRNYXggLSBvdXRNaW4pKSAvIChpbk1heCAtIGluTWluKTsKICAgIGNvbnN0IHVwZGF0ZSA9ICgpPT57CiAgICAgIGNvbnN0IHZoID0gd2luZG93LmlubmVySGVpZ2h0OwogICAgICBjb25zdCBzeSA9IHdpbmRvdy5zY3JvbGxZOwogICAgICB2ZWxvY2l0eSA9IHZlbG9jaXR5ICogMC44NSArIChzeSAtIGxhc3RTY3JvbGwpICogMC4xNTsKICAgICAgbGFzdFNjcm9sbCA9IHN5OwogICAgICBjb25zdCB2ZWxCb29zdCA9IE1hdGgubWluKDEsIE1hdGguYWJzKHZlbG9jaXR5KSAvIDYwKTsKCiAgICAgIC8vIFByb2dyZXNzIGJhcgogICAgICBjb25zdCBkb2NIID0gTWF0aC5tYXgoMSwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbEhlaWdodCAtIHZoKTsKICAgICAgY29uc3QgcCA9IE1hdGgubWluKDEsIE1hdGgubWF4KDAsIHN5IC8gZG9jSCkpOwogICAgICBpZihwcm9nQmFyKSBwcm9nQmFyLnN0eWxlLnNldFByb3BlcnR5KCctLXAnLCAocCoxMDApLnRvRml4ZWQoMikrJyUnKTsKCiAgICAgIC8vIEhlcm8gdGV4dCBmYWRlICsgbGlmdCBhcyB5b3Ugc2Nyb2xsIGludG8gVmFsb3JpCiAgICAgIGlmKGhlcm9UZXh0ICYmIGhlcm9TZWMpewogICAgICAgIGNvbnN0IGhlcm9IID0gaGVyb1NlYy5vZmZzZXRIZWlnaHQ7CiAgICAgICAgY29uc3QgdCA9IE1hdGgubWluKDEsIE1hdGgubWF4KDAsIHN5IC8gKGhlcm9IICogMC43KSkpOwogICAgICAgIGNvbnN0IGVhc2VkID0gdCAqIHQ7CiAgICAgICAgaGVyb1RleHQuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZTNkKDAsICR7LXN5KjAuMzJ9cHgsIDApIHNjYWxlKCR7MSAtIGVhc2VkKjAuMDZ9KWA7CiAgICAgICAgaGVyb1RleHQuc3R5bGUub3BhY2l0eSA9ICgxIC0gZWFzZWQgKiAxLjE1KS50b0ZpeGVkKDMpOwogICAgICB9CgogICAgICBwYXJhbGxheE5vZGVzLmZvckVhY2gobm9kZT0+ewogICAgICAgIGNvbnN0IGtpbmQgPSBub2RlLmRhdGFzZXQucGFyYWxsYXg7CiAgICAgICAgaWYoa2luZD09PSdoZXJvJyl7CiAgICAgICAgICBjb25zdCB5ID0gc3kgKiAwLjI4OwogICAgICAgICAgbm9kZS5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlM2QoMCwgJHt5fXB4LCAwKSBzY2FsZSgkezEuMDggKyBNYXRoLm1pbiguMDYsIHN5LzgwMDApfSlgOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zdCByZWN0ID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICAgIGlmKHJlY3QuYm90dG9tIDwgLTIwMCB8fCByZWN0LnRvcCA+IHZoKzIwMCkgcmV0dXJuOwogICAgICAgICAgY29uc3QgcHAgPSAxIC0gKHJlY3QudG9wIC8gdmgpOwogICAgICAgICAgY29uc3QgcmFuZ2UgPSBraW5kPT09J251bWVyaScgPyBbLTUwLDQ1XSA6IFstMzAsMjhdOwogICAgICAgICAgY29uc3QgeSA9IG1hcChNYXRoLm1heCgwLE1hdGgubWluKDEuNSxwcCkpLCAwLCAxLjUsIHJhbmdlWzBdLCByYW5nZVsxXSk7CiAgICAgICAgICBub2RlLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUzZCgwLCAke3l9cHgsIDApYDsKICAgICAgICB9CiAgICAgIH0pOwoKICAgICAgLy8gU2VjdGlvbiBkZXB0aCBsaWZ0IOKAlCBpbm5lciBjb250ZW50IHJpc2VzIGFzIGl0IHBhc3NlcyB2aWV3cG9ydCBjZW50ZXIKICAgICAgbGlmdEVscy5mb3JFYWNoKGVsPT57CiAgICAgICAgY29uc3QgcmVjdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgIGlmKHJlY3QuYm90dG9tIDwgLTIwMCB8fCByZWN0LnRvcCA+IHZoKzIwMCkgcmV0dXJuOwogICAgICAgIGNvbnN0IGNlbnRlciA9IHJlY3QudG9wICsgcmVjdC5oZWlnaHQvMjsKICAgICAgICBjb25zdCBkaXN0ID0gKGNlbnRlciAtIHZoLzIpIC8gdmg7CiAgICAgICAgY29uc3QgY2xhbXBlZCA9IE1hdGgubWF4KC0xLCBNYXRoLm1pbigxLCBkaXN0KSk7CiAgICAgICAgY29uc3QgbGlmdCA9IGNsYW1wZWQgKiAtMjggKiAoMSArIHZlbEJvb3N0KjAuNik7CiAgICAgICAgZWwuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZTNkKDAsICR7bGlmdH1weCwgMClgOwogICAgICB9KTsKCiAgICAgIC8vIENhcmQgaG9yaXpvbnRhbC1zdGFnZ2VyIGVudHJ5IChhbHRlcm5hdGluZyBsZWZ0L3JpZ2h0KQogICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1jYXJkXScpLmZvckVhY2goKGNhcmQsIGkpPT57CiAgICAgICAgY29uc3QgcmVjdCA9IGNhcmQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgY29uc3QgZW50ZXIgPSAxIC0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgKHJlY3QudG9wIC0gdmgqMC4yKSAvICh2aCowLjY1KSkpOwogICAgICAgIGlmKGNhcmQuZGF0YXNldC5yZXZlYWxlZCAhPT0gJzEnICYmIGVudGVyID4gMC4wNSl7CiAgICAgICAgICAvLyBpbml0aWFsIGRyYW1hdGljIG9mZnNldCAob25seSBiZWZvcmUgcmV2ZWFsKQogICAgICAgICAgY29uc3QgZGlyID0gKGkgJSAyID09PSAwKSA\/IC0xIDogMTsKICAgICAgICAgIGNvbnN0IGsgPSAxIC0gZW50ZXI7CiAgICAgICAgICBjYXJkLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUzZCgke2RpciAqIGsgKiAzNn1weCwgJHtrKjQwfXB4LCAwKWA7CiAgICAgICAgICBjYXJkLnN0eWxlLm9wYWNpdHkgPSBlbnRlci50b0ZpeGVkKDMpOwogICAgICAgIH0KICAgICAgfSk7CgogICAgICB0aWNraW5nID0gZmFsc2U7CiAgICB9OwogICAgY29uc3QgcmVxdWVzdFVwZGF0ZSA9ICgpPT57IGlmKCF0aWNraW5nKXsgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHVwZGF0ZSk7IHRpY2tpbmcgPSB0cnVlOyB9IH07CiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgcmVxdWVzdFVwZGF0ZSwge3Bhc3NpdmU6dHJ1ZX0pOwogICAgdXBkYXRlKCk7CgogICAgLyogNmIpIExFTklTLUxJS0UgSU5FUlRJQUwgU01PT1RIIFNDUk9MTAogICAgICAgTGlzdGVuIHRvIHdoZWVsICsgdG91Y2gsIGFkdmFuY2UgdGhlIGFjdHVhbCB3aW5kb3cuc2Nyb2xsWSB0b3dhcmQgYSB0YXJnZXQgd2l0aCBlYXNpbmcuICovCiAgICBsZXQgdGFyZ2V0ID0gd2luZG93LnNjcm9sbFk7CiAgICBsZXQgY3VycmVudCA9IHdpbmRvdy5zY3JvbGxZOwogICAgbGV0IHJhZklkID0gbnVsbDsKICAgIGNvbnN0IGVhc2UgPSAwLjA4NTsKICAgIGNvbnN0IG1pbkRlbHRhID0gMC41OwogICAgY29uc3QgaXNGb3JtRmllbGQgPSAoZWwpPT57CiAgICAgIGlmKCFlbCkgcmV0dXJuIGZhbHNlOwogICAgICBjb25zdCB0ID0gZWwudGFnTmFtZTsKICAgICAgcmV0dXJuIHQ9PT0nSU5QVVQnIHx8IHQ9PT0nVEVYVEFSRUEnIHx8IHQ9PT0nU0VMRUNUJyB8fCBlbC5pc0NvbnRlbnRFZGl0YWJsZTsKICAgIH07CiAgICBjb25zdCBsb29wID0gKCk9PnsKICAgICAgY29uc3QgZCA9IHRhcmdldCAtIGN1cnJlbnQ7CiAgICAgIGlmKE1hdGguYWJzKGQpIDwgbWluRGVsdGEpewogICAgICAgIGN1cnJlbnQgPSB0YXJnZXQ7CiAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsIGN1cnJlbnQpOwogICAgICAgIHJhZklkID0gbnVsbDsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY3VycmVudCArPSBkICogZWFzZTsKICAgICAgd2luZG93LnNjcm9sbFRvKDAsIGN1cnJlbnQpOwogICAgICByYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShsb29wKTsKICAgIH07CiAgICBjb25zdCBraWNrID0gKCk9PnsgaWYocmFmSWQgPT09IG51bGwpIHJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGxvb3ApOyB9OwogICAgY29uc3QgbWF4U2Nyb2xsID0gKCk9PiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsSGVpZ2h0IC0gd2luZG93LmlubmVySGVpZ2h0OwogICAgbGV0IHVzZXJJbnRlcnJ1cHRpbmcgPSBmYWxzZTsKICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd3aGVlbCcsIChlKT0+ewogICAgICBpZihpc0Zvcm1GaWVsZChlLnRhcmdldCkpIHJldHVybjsKICAgICAgLy8gaG9ub3IgbW9kaWZpZXJzICh6b29tLCBob3Jpem9udGFsKQogICAgICBpZihlLmN0cmxLZXkgfHwgZS5tZXRhS2V5KSByZXR1cm47CiAgICAgIC8vIHByZXZlbnQgdGhlIG5hdGl2ZSBpbnN0YW50IGp1bXAKICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAvLyBzeW5jIGN1cnJlbnQgaWYgdXNlciBqdXN0IHNjcm9sbGVkIHdpdGggYXJyb3cga2V5cyAvIHNjcm9sbGJhcgogICAgICBpZihNYXRoLmFicyh3aW5kb3cuc2Nyb2xsWSAtIGN1cnJlbnQpID4gNCl7IGN1cnJlbnQgPSB3aW5kb3cuc2Nyb2xsWTsgdGFyZ2V0ID0gY3VycmVudDsgfQogICAgICAvLyBhY2NlbGVyYXRlIHBlciBkZWx0YTsgbGluZS1tb2RlIGRlbHRhcyAoZS5kZWx0YU1vZGU9PT0xKSBuZWVkIHNjYWxpbmcKICAgICAgY29uc3Qgc2NhbGUgPSBlLmRlbHRhTW9kZSA9PT0gMSA\/IDE4IDogKGUuZGVsdGFNb2RlID09PSAyID8gd2luZG93LmlubmVySGVpZ2h0IDogMSk7CiAgICAgIHRhcmdldCArPSBlLmRlbHRhWSAqIHNjYWxlICogMC45OwogICAgICB0YXJnZXQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihtYXhTY3JvbGwoKSwgdGFyZ2V0KSk7CiAgICAgIGtpY2soKTsKICAgIH0sIHtwYXNzaXZlOmZhbHNlfSk7CiAgICAvLyBUb3VjaCDigJQga2VlcCBuYXRpdmUgbW9tZW50dW0gKG1vYmlsZSkKICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgKCk9PnsgdXNlckludGVycnVwdGluZyA9IHRydWU7IHRhcmdldCA9IHdpbmRvdy5zY3JvbGxZOyBjdXJyZW50ID0gd2luZG93LnNjcm9sbFk7IH0sIHtwYXNzaXZlOnRydWV9KTsKICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsICAgKCk9PnsgdXNlckludGVycnVwdGluZyA9IGZhbHNlOyB9KTsKICAgIC8vIEtleWJvYXJkIChzcGFjZSwgcGFnZSB1cC9kb3duLCBhcnJvd3MsIGhvbWUvZW5kKQogICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZSk9PnsKICAgICAgaWYoaXNGb3JtRmllbGQoZS50YXJnZXQpKSByZXR1cm47CiAgICAgIGNvbnN0IHZoID0gd2luZG93LmlubmVySGVpZ2h0OwogICAgICBsZXQgZGVsdGEgPSAwOwogICAgICBzd2l0Y2goZS5rZXkpewogICAgICAgIGNhc2UgJ0Fycm93RG93bic6IGRlbHRhID0gODA7IGJyZWFrOwogICAgICAgIGNhc2UgJ0Fycm93VXAnOiAgIGRlbHRhID0gLTgwOyBicmVhazsKICAgICAgICBjYXNlICdQYWdlRG93bic6ICBkZWx0YSA9IHZoICogMC44NTsgYnJlYWs7CiAgICAgICAgY2FzZSAnUGFnZVVwJzogICAgZGVsdGEgPSAtdmggKiAwLjg1OyBicmVhazsKICAgICAgICBjYXNlICcgJzogICAgICAgICBkZWx0YSA9IGUuc2hpZnRLZXkgPyAtdmgqMC44NSA6IHZoKjAuODU7IGJyZWFrOwogICAgICAgIGNhc2UgJ0hvbWUnOiAgICAgIHRhcmdldCA9IDA7IGN1cnJlbnQgPSB3aW5kb3cuc2Nyb2xsWTsga2ljaygpOyBlLnByZXZlbnREZWZhdWx0KCk7IHJldHVybjsKICAgICAgICBjYXNlICdFbmQnOiAgICAgICB0YXJnZXQgPSBtYXhTY3JvbGwoKTsgY3VycmVudCA9IHdpbmRvdy5zY3JvbGxZOyBraWNrKCk7IGUucHJldmVudERlZmF1bHQoKTsgcmV0dXJuOwogICAgICAgIGRlZmF1bHQ6IHJldHVybjsKICAgICAgfQogICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGlmKE1hdGguYWJzKHdpbmRvdy5zY3JvbGxZIC0gY3VycmVudCkgPiA0KXsgY3VycmVudCA9IHdpbmRvdy5zY3JvbGxZOyB0YXJnZXQgPSBjdXJyZW50OyB9CiAgICAgIHRhcmdldCA9IE1hdGgubWF4KDAsIE1hdGgubWluKG1heFNjcm9sbCgpLCB0YXJnZXQgKyBkZWx0YSkpOwogICAgICBraWNrKCk7CiAgICB9KTsKICB9CgogIC8qIDcpIEN1c3RvbSBzbW9vdGgtc2Nyb2xsIGZvciBpbi1wYWdlIGFuY2hvcnMgKHNsb3dlciwgZ3JhY2VmdWwpICovCiAgY29uc3QgZWFzZU91dFF1aW50ID0gdCA9PiAxIC0gTWF0aC5wb3coMSAtIHQsIDUpOwogIGNvbnN0IHNtb290aFNjcm9sbFRvID0gKHRhcmdldFksIGR1cmF0aW9uPTEzMDApPT57CiAgICBjb25zdCBzdGFydFkgPSB3aW5kb3cuc2Nyb2xsWTsKICAgIGNvbnN0IGRpc3QgPSB0YXJnZXRZIC0gc3RhcnRZOwogICAgaWYoTWF0aC5hYnMoZGlzdCkgPCA0KSByZXR1cm47CiAgICBjb25zdCB0MCA9IHBlcmZvcm1hbmNlLm5vdygpOwogICAgY29uc3Qgc3RlcCA9IChub3cpPT57CiAgICAgIGNvbnN0IHAgPSBNYXRoLm1pbigxLCAobm93IC0gdDApIC8gZHVyYXRpb24pOwogICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgc3RhcnRZICsgZGlzdCAqIGVhc2VPdXRRdWludChwKSk7CiAgICAgIGlmKHAgPCAxKSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcCk7CiAgICB9OwogICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApOwogIH07CiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnYVtocmVmXj0iIyJdJykuZm9yRWFjaChhPT57CiAgICBhLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpPT57CiAgICAgIGNvbnN0IGhyZWYgPSBhLmdldEF0dHJpYnV0ZSgnaHJlZicpOwogICAgICBpZighaHJlZiB8fCBocmVmID09PSAnIycpIHJldHVybjsKICAgICAgY29uc3QgdGFyZ2V0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihocmVmKTsKICAgICAgaWYoIXRhcmdldCkgcmV0dXJuOwogICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGNvbnN0IGhlYWRlck9mZnNldCA9IDcwOwogICAgICBjb25zdCB5ID0gdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCArIHdpbmRvdy5zY3JvbGxZIC0gaGVhZGVyT2Zmc2V0OwogICAgICBpZihyZWR1Y2VkKSB3aW5kb3cuc2Nyb2xsVG8oMCwgeSk7CiAgICAgIGVsc2Ugc21vb3RoU2Nyb2xsVG8oeSwgMTQwMCk7CiAgICB9KTsKICB9KTsKfSkoKTsKCjsKCihmdW5jdGlvbigpewogIGlmKHR5cGVvZiBMID09PSAndW5kZWZpbmVkJykgcmV0dXJuOwogIGNvbnN0IG1hcEVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRhdHRpLW1hcCcpOwogIGlmKCFtYXBFbCkgcmV0dXJuOwogIC8vIFNhbiBQaWV0cm8gaW4gQ2FyaWFubyAoYXBwcm94IGNlbnRyZSkKICBjb25zdCBMQVQgPSA0NS41MjIzLCBMTkcgPSAxMC44NTgwOwogIGNvbnN0IG1hcCA9IEwubWFwKG1hcEVsLCB7CiAgICBjZW50ZXI6W0xBVCwgTE5HXSwKICAgIHpvb206MTQsCiAgICBzY3JvbGxXaGVlbFpvb206ZmFsc2UsCiAgICB6b29tQ29udHJvbDp0cnVlLAogICAgYXR0cmlidXRpb25Db250cm9sOnRydWUsCiAgfSk7CiAgTC50aWxlTGF5ZXIoJ2h0dHBzOi8vdGlsZS5vcGVuc3RyZWV0bWFwLm9yZy97en0ve3h9L3t5fS5wbmcnLCB7CiAgICBtYXhab29tOjE5LAogICAgYXR0cmlidXRpb246JyZjb3B5OyA8YSBocmVmPSJodHRwczovL3d3dy5vcGVuc3RyZWV0bWFwLm9yZy9jb3B5cmlnaHQiPk9wZW5TdHJlZXRNYXA8L2E+JwogIH0pLmFkZFRvKG1hcCk7CiAgY29uc3QgcGluSHRtbCA9ICc8ZGl2IGNsYXNzPSJjb3QtcGluIj4nKwogICAgJzxkaXYgY2xhc3M9ImNvdC1waW4tYm9keSI+PC9kaXY+JysKICAgICc8ZGl2IGNsYXNzPSJjb3QtcGluLW1hcmsiPjwvZGl2PicrCiAgICAnPGRpdiBjbGFzcz0iY290LXBpbi1wdWxzZSI+PC9kaXY+JysKICAgICc8L2Rpdj4nOwogIGNvbnN0IGNvdEljb24gPSBMLmRpdkljb24oe2NsYXNzTmFtZTonY290LXBpbi13cmFwJywgaHRtbDpwaW5IdG1sLCBpY29uU2l6ZTpbNDYsNjBdLCBpY29uQW5jaG9yOlsyMyw2MF19KTsKICBMLm1hcmtlcihbTEFULExOR10sIHtpY29uOmNvdEljb259KS5hZGRUbyhtYXApCiAgICAuYmluZFBvcHVwKCc8c3Ryb25nPkNvdHRpbmkgMTkyNTwvc3Ryb25nPjxicj5TYW4gUGlldHJvIGluIENhcmlhbm8gwrcgVmVyb25hJyk7CiAgLy8gRW5hYmxlIHpvb20gb24gY2xpY2sgKFVYIG5pY2V0eSkKICBtYXAub24oJ2NsaWNrJywgKCk9PnsgbWFwLnNjcm9sbFdoZWVsWm9vbS5lbmFibGUoKTsgfSk7Cn0pKCk7Cgo7CgooZnVuY3Rpb24oKXsKICBjb25zdCBmb3JtID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmNvbnRhdHRpLWZvcm0nKTsKICBpZighZm9ybSkgcmV0dXJuOwogIGNvbnN0IGZlZWRiYWNrID0gZm9ybS5xdWVyeVNlbGVjdG9yKCcuZm9ybS1mZWVkYmFjaycpOwogIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcignc3VibWl0JywgKGUpPT57CiAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICBpZighZm9ybS5jaGVja1ZhbGlkaXR5KCkpewogICAgICBmZWVkYmFjay50ZXh0Q29udGVudCA9ICdQZXIgZmF2b3JlIGNvbXBsZXRhIGkgY2FtcGkgb2JibGlnYXRvcmkuJzsKICAgICAgZmVlZGJhY2suY2xhc3NMaXN0LmFkZCgnaXMtZXJyb3InKTsKICAgICAgZm9ybS5yZXBvcnRWYWxpZGl0eSgpOwogICAgICByZXR1cm47CiAgICB9CiAgICBmZWVkYmFjay5jbGFzc0xpc3QucmVtb3ZlKCdpcy1lcnJvcicpOwogICAgZmVlZGJhY2sudGV4dENvbnRlbnQgPSAnVGhhbmsgeW91LiBXZSB3aWxsIGdldCBiYWNrIHRvIHlvdSBzaG9ydGx5Lic7CiAgICBmb3JtLnJlc2V0KCk7CiAgfSk7Cn0pKCk7CgovKiBJbCBsaW5rIElUIGRlbCBzZWxldHRvcmUgdmEgcmlzY3JpdHRvIGxhdG8gY2xpZW50OiBXUE1MIHJpc2NyaXZlIGdsaSBocmVmIGludGVybmkKICAgaW4gZmFzZSBkaSBzYWx2YXRhZ2dpbyBlIGxvIHJpbWFwcGVyZWJiZSBzdWxsYSB2ZXJzaW9uZSBpbmdsZXNlLiAqLwooZnVuY3Rpb24oKXt2YXIgbD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubGFuZyBhW2RhdGEtaXRdJyk7aWYobCl7bC5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBsLmdldEF0dHJpYnV0ZSgnZGF0YS1pdCcpKTt9fSkoKTsKCi8qIC0tLS0gTWVudSBtb2JpbGUgKDI3LzA4LzIwMjYpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIENvc3RydWl0byBpbnRlcmFtZW50ZSBxdWksIGEgcnVudGltZTogaWwgbWFya3VwIGRlbGxlIHBhZ2luZSBub24gY2FtYmlhLAogICBlIGlsIENTUyBsbyBtb3N0cmEgc29sbyBzb3R0byBpIDk2MHB4LiBJbCBkZXNrdG9wIHJlc3RhIGludG9jY2F0by4gICAgICAgKi8KKGZ1bmN0aW9uKCl7CiAgaWYoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmNvdC1idXJnZXInKSkgcmV0dXJuOwogIHZhciBoZWFkZXI9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnNpdGUtaGVhZGVyJyk7IGlmKCFoZWFkZXIpIHJldHVybjsKICB2YXIgcmlnaHQ9aGVhZGVyLnF1ZXJ5U2VsZWN0b3IoJy5oZWFkZXItcmlnaHQnKTsKICB2YXIgbmF2PWhlYWRlci5xdWVyeVNlbGVjdG9yKCcuc2l0ZS1uYXYnKTsKICBpZighcmlnaHR8fCFuYXYpIHJldHVybjsKICB2YXIgRU49KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2xhbmcnKXx8JycpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignZW4nKT09PTA7CiAgdmFyIEw9e2Fwcmk6RU4\/J09wZW4gbWVudSc6J0FwcmkgaWwgbWVudScsIGNoaXVkaTpFTj8nQ2xvc2UgbWVudSc6J0NoaXVkaSBpbCBtZW51J307CgogIHZhciBidG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7CiAgYnRuLnR5cGU9J2J1dHRvbic7IGJ0bi5jbGFzc05hbWU9J2NvdC1idXJnZXInOwogIGJ0bi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLEwuYXByaSk7CiAgYnRuLnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsJ2ZhbHNlJyk7CiAgYnRuLnNldEF0dHJpYnV0ZSgnYXJpYS1jb250cm9scycsJ2NvdC1tbmF2Jyk7CiAgYnRuLmlubmVySFRNTD0nPGk+PC9pPic7CiAgcmlnaHQuYXBwZW5kQ2hpbGQoYnRuKTsKCiAgdmFyIHBhbmVsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ25hdicpOwogIHBhbmVsLmNsYXNzTmFtZT0nY290LW1uYXYnOyBwYW5lbC5pZD0nY290LW1uYXYnOwogIHBhbmVsLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIG5hdi5nZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnKXx8JycpOwoKICB2YXIgdG9wPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOyB0b3AuY2xhc3NOYW1lPSdjb3QtbW5hdi10b3AnOwogIHZhciBkYXJrPWhlYWRlci5xdWVyeVNlbGVjdG9yKCcubG9nby0tZGFyaycpOwogIGlmKGRhcmspIHRvcC5hcHBlbmRDaGlsZChkYXJrLmNsb25lTm9kZSh0cnVlKSk7CiAgdmFyIHg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7CiAgeC50eXBlPSdidXR0b24nOyB4LmNsYXNzTmFtZT0nY290LW1uYXYteCc7IHguc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJyxMLmNoaXVkaSk7CiAgeC5pbm5lckhUTUw9JzxpPjwvaT4nOwogIHRvcC5hcHBlbmRDaGlsZCh4KTsKICBwYW5lbC5hcHBlbmRDaGlsZCh0b3ApOwoKICB2YXIgbGlua3M9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7IGxpbmtzLmNsYXNzTmFtZT0nY290LW1uYXYtbGlua3MnOwogIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwobmF2LnF1ZXJ5U2VsZWN0b3JBbGwoJ2EnKSwgZnVuY3Rpb24oYSl7IGxpbmtzLmFwcGVuZENoaWxkKGEuY2xvbmVOb2RlKHRydWUpKTsgfSk7CiAgcGFuZWwuYXBwZW5kQ2hpbGQobGlua3MpOwoKICB2YXIgZm9vdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsgZm9vdC5jbGFzc05hbWU9J2NvdC1tbmF2LWZvb3QnOwogIHZhciBsYW5nPWhlYWRlci5xdWVyeVNlbGVjdG9yKCcubGFuZycpOyBpZihsYW5nKSBmb290LmFwcGVuZENoaWxkKGxhbmcuY2xvbmVOb2RlKHRydWUpKTsKICB2YXIgdHJhZGU9aGVhZGVyLnF1ZXJ5U2VsZWN0b3IoJy5idG4tdHJhZGUnKTsgaWYodHJhZGUpIGZvb3QuYXBwZW5kQ2hpbGQodHJhZGUuY2xvbmVOb2RlKHRydWUpKTsKICBwYW5lbC5hcHBlbmRDaGlsZChmb290KTsKICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHBhbmVsKTsKCiAgZnVuY3Rpb24gYXByaSgpewogICAgcGFuZWwuY2xhc3NMaXN0LmFkZCgnaXMtb3BlbicpOyBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ2NvdC1tZW51LW9wZW4nKTsKICAgIGJ0bi5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCd0cnVlJyk7IGJ0bi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLEwuY2hpdWRpKTsKICB9CiAgZnVuY3Rpb24gY2hpdWRpKCl7CiAgICBwYW5lbC5jbGFzc0xpc3QucmVtb3ZlKCdpcy1vcGVuJyk7IGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnY290LW1lbnUtb3BlbicpOwogICAgYnRuLnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsJ2ZhbHNlJyk7IGJ0bi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLEwuYXByaSk7CiAgfQogIGJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7IHBhbmVsLmNsYXNzTGlzdC5jb250YWlucygnaXMtb3BlbicpP2NoaXVkaSgpOmFwcmkoKTsgfSk7CiAgeC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGNoaXVkaSk7CiAgcGFuZWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKXsgaWYoZS50YXJnZXQuY2xvc2VzdCAmJiBlLnRhcmdldC5jbG9zZXN0KCdhJykpIGNoaXVkaSgpOyB9KTsKICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZnVuY3Rpb24oZSl7IGlmKGUua2V5PT09J0VzY2FwZScpIGNoaXVkaSgpOyB9KTsKICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgZnVuY3Rpb24oKXsgaWYod2luZG93LmlubmVyV2lkdGg+OTYwKSBjaGl1ZGkoKTsgfSk7Cn0pKCk7Cg==\";var d=atob(b);var u=new Uint8Array(d.length);for(var i=0;i<d.length;i++)u[i]=d.charCodeAt(i);var t=new TextDecoder(\"utf-8\").decode(u);var s=document.createElement(\"script\");s.text=t;document.body.appendChild(s);})();<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Home About us Our brands Sustainability Trade Area Press Area Contacts IT\u00b7EN Trade Login Contacts Get in touch. Our team is available for business enquiries, partnerships, and winery visits. Details and form Details Cottini 1925 Address San Pietro in Cariano, Verona, Italy Write to us info@cottinivini.com Phone +39 045 6280157 Where we are San Pietro [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-325","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.cottini1925.cybeartest.it\/en\/wp-json\/wp\/v2\/pages\/325","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.cottini1925.cybeartest.it\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.cottini1925.cybeartest.it\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.cottini1925.cybeartest.it\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.cottini1925.cybeartest.it\/en\/wp-json\/wp\/v2\/comments?post=325"}],"version-history":[{"count":10,"href":"https:\/\/www.cottini1925.cybeartest.it\/en\/wp-json\/wp\/v2\/pages\/325\/revisions"}],"predecessor-version":[{"id":446,"href":"https:\/\/www.cottini1925.cybeartest.it\/en\/wp-json\/wp\/v2\/pages\/325\/revisions\/446"}],"wp:attachment":[{"href":"https:\/\/www.cottini1925.cybeartest.it\/en\/wp-json\/wp\/v2\/media?parent=325"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}