/* Jeff, the Grapevine assistant: chat button and panel (assets/jeff.js) */
.jf-launch{position:fixed;right:24px;bottom:24px;z-index:72;display:flex;align-items:center;gap:12px;transition:opacity .3s,transform .3s}
.jf-fab{width:64px;height:64px;border-radius:50%;border:1px solid rgba(255,255,255,.85);background:rgba(255,255,255,.62);-webkit-backdrop-filter:blur(18px) saturate(1.6);backdrop-filter:blur(18px) saturate(1.6);box-shadow:0 14px 34px -12px rgba(31,42,20,.45),inset 0 1px 0 #fff;display:grid;place-items:center;padding:0;cursor:pointer;transition:transform .2s}
.jf-fab:hover{transform:translateY(-2px) scale(1.04)}
.jf-fab:focus-visible,.jf-dockbtn:focus-visible,.jf-x:focus-visible,.jf-send:focus-visible,.jf-chip:focus-visible,.jf-btn:focus-visible,.jf-card:focus-visible{outline:3px solid #637A0F;outline-offset:2px}
.jf-fab .jf-svg{width:46px;height:50px}
.jf-tip{background:#fff;color:#1F2A14;font-weight:700;font-size:14px;padding:10px 16px;border-radius:999px;box-shadow:0 10px 26px -10px rgba(31,42,20,.4);opacity:0;transform:translateX(8px);transition:opacity .3s,transform .3s;pointer-events:none;white-space:nowrap}
.jf-launch.jf-tipon .jf-tip{opacity:1;transform:none}
html.jf-open .jf-launch .jf-tip{display:none}
.jf-dockbtn{flex:none;width:48px;height:48px;border-radius:50%;border:0;background:#fff;box-shadow:0 6px 16px -6px rgba(70,90,10,.55);display:grid;place-items:center;padding:0;cursor:pointer}
.jf-dockbtn .jf-svg{width:38px;height:41px}

.jf-panel{position:fixed;right:24px;bottom:104px;z-index:90;width:400px;max-width:calc(100vw - 32px);height:min(640px,calc(100vh - 136px));display:flex;flex-direction:column;background:rgba(250,252,244,.9);-webkit-backdrop-filter:blur(26px) saturate(1.9);backdrop-filter:blur(26px) saturate(1.9);border:1px solid rgba(255,255,255,.75);border-radius:24px;box-shadow:inset 0 1px 0 rgba(255,255,255,.9),inset 0 -1px 0 rgba(255,255,255,.25),0 30px 80px -24px rgba(31,42,20,.45);overflow:hidden;color:#1F2A14;font-size:15px;line-height:1.5;animation:jf-in .28s cubic-bezier(.2,.8,.2,1)}
.jf-panel[hidden]{display:none}
/* 1.9.4: dim the page behind the open chat so the site does not show through */
html.jf-open body::after{content:"";position:fixed;inset:0;z-index:89;background:rgba(31,42,20,.18);pointer-events:none;animation:jf-fade .25s ease both}
@keyframes jf-fade{from{opacity:0}to{opacity:1}}
@keyframes jf-in{from{opacity:0;transform:translateY(14px) scale(.98)}to{opacity:1;transform:none}}
.jf-head{display:flex;align-items:center;gap:12px;padding:12px 12px 12px 16px;border-bottom:1px solid rgba(255,255,255,.65);background:rgba(255,255,255,.32)}
.jf-ava{width:42px;height:42px;border-radius:50%;background:rgba(255,255,255,.75);box-shadow:inset 0 1px 0 #fff;display:grid;place-items:center;flex:none}
.jf-ava .jf-svg{width:34px;height:37px}
.jf-who{flex:1;min-width:0;display:flex;flex-direction:column;line-height:1.3}
.jf-who b{font-size:16px}
.jf-who small{font-size:13px;color:#5b6150}
.jf-x{width:44px;height:44px;border:1px solid rgba(255,255,255,.8);border-radius:12px;background:rgba(255,255,255,.55);color:#3b4130;display:grid;place-items:center;cursor:pointer;padding:0}
.jf-x svg{width:20px;height:20px}
.jf-log{flex:1;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;padding:16px;display:flex;flex-direction:column;gap:12px}

.jf-intro{display:flex;flex-direction:column;align-items:center;text-align:center;gap:8px;background:rgba(255,255,255,.62);border:1px solid rgba(255,255,255,.85);border-radius:22px;padding:14px 14px 16px;box-shadow:inset 0 1px 0 #fff}
.jf-hero .jf-svg{width:104px;height:112px}
.jf-intro h2{font-size:21px;font-weight:800;letter-spacing:-.01em;margin:0}
.jf-intro p{margin:0;color:#46523A;font-size:14.5px;max-width:320px}
.jf-intro .jf-note{max-width:none;align-self:stretch;text-align:left;font-size:12.5px;color:#4f5545;background:rgba(241,242,236,.85);border-radius:12px;padding:9px 12px;margin-top:4px}
.jf-note a,.jf-cons a,.jf-jeff a{color:#4d5f0b;font-weight:600}
.jf-jeff a.jf-pill{display:inline-block;vertical-align:baseline;line-height:1.2;margin:2px 0;padding:6px 12px;border-radius:999px;background:#637A0F;color:#fff;text-decoration:none;font-weight:700;font-size:13.5px}
.jf-jeff a.jf-pwa{background:#25D366}
.jf-chips{display:flex;flex-direction:column;gap:8px;align-self:stretch;margin-top:4px}
.jf-chip{font:inherit;font-weight:600;font-size:14.5px;text-align:left;color:#3f4e09;background:rgba(244,248,220,.82);border:1px solid rgba(217,226,180,.9);border-radius:16px;padding:12px 14px;cursor:pointer}
.jf-chip:hover{background:#eaf1c6}

.jf-me{align-self:flex-end;max-width:85%;background:#637A0F;color:#fff;border-radius:18px 18px 6px 18px;padding:10px 14px;white-space:pre-wrap;word-wrap:break-word}
.jf-row{align-self:flex-start;max-width:96%;display:flex;gap:8px;align-items:flex-end}
.jf-rface{flex:none;width:30px;height:33px}.jf-rface .jf-svg{width:30px;height:33px;display:block}
.jf-still *{animation:none!important}
.jf-jeffwrap{min-width:0;max-width:100%;display:flex;flex-direction:column;gap:8px}
.jf-jeff{background:rgba(255,255,255,.9);border:1px solid rgba(255,255,255,.95);box-shadow:0 4px 14px -8px rgba(31,42,20,.25);border-radius:18px 18px 18px 6px;padding:11px 14px;word-wrap:break-word}
.jf-card{display:flex;align-items:center;gap:12px;background:rgba(255,255,255,.88);border:1px solid rgba(217,226,180,.95);border-radius:16px;padding:11px 14px;text-decoration:none;color:#1F2A14}
.jf-card:hover{border-color:#b1c43e;background:#FAFCEF}
.jf-ct{flex:1;display:flex;flex-direction:column;line-height:1.3}
.jf-ct small{font-size:11px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:#56671a}
.jf-ct b{font-size:14.5px}
.jf-chev{color:#637A0F;flex:none}.jf-chev svg{width:18px;height:18px;display:block}

.jf-typing{display:flex;align-items:center;gap:6px}
.jf-typing .jf-svg{width:34px;height:37px}
.jf-dots{display:flex;gap:4px;background:rgba(255,255,255,.88);border:1px solid rgba(255,255,255,.95);border-radius:14px;padding:10px 12px}
.jf-dots i{width:7px;height:7px;border-radius:50%;background:#637A0F;animation:jf-dot 1.2s infinite ease-in-out}
.jf-dots i:nth-child(2){animation-delay:.2s}.jf-dots i:nth-child(3){animation-delay:.4s}
@keyframes jf-dot{0%,100%{opacity:.3;transform:translateY(0)}40%{opacity:1;transform:translateY(-3px)}}

.jf-lead,.jf-done,.jf-off{align-self:stretch;border-radius:20px;padding:16px;display:flex;flex-direction:column;gap:10px}
.jf-lead{background:rgba(255,255,255,.9);border:1px solid rgba(255,255,255,.95);box-shadow:0 8px 24px -14px rgba(31,42,20,.3)}
.jf-lt{margin:0;font-weight:700}
.jf-fl{display:flex;flex-direction:column;gap:5px;font-size:13px;font-weight:600;color:#3b4130}
.jf-fl input{font:inherit;font-size:16px;padding:10px 12px;border:1px solid #d3d7c6;border-radius:12px;background:#fff;color:#1F2A14}
.jf-fl input:focus{outline:2px solid #637A0F;outline-offset:0;border-color:#637A0F}
.jf-hp{position:absolute!important;left:-9999px!important;width:1px;height:1px;opacity:0}
.jf-cons{display:flex;gap:10px;align-items:flex-start;font-size:13px;line-height:1.45;color:#3b4130}
.jf-cons input{width:20px;height:20px;margin:0;flex:none;accent-color:#637A0F}
.jf-err{margin:0;color:#b32d2e;font-size:13.5px;font-weight:600}
.jf-err:empty{display:none}
.jf-done{background:rgba(244,248,220,.9);border:1px solid rgba(255,255,255,.9)}
.jf-off{background:rgba(255,255,255,.9);border:1px solid rgba(255,255,255,.95)}
.jf-done b,.jf-off b{font-size:16px}
.jf-done p,.jf-off p{margin:0;font-size:14.5px;color:#2f3523}
.jf-mini .jf-svg{width:64px;height:69px}
.jf-btn{display:flex;align-items:center;justify-content:center;gap:8px;min-height:46px;border-radius:14px;font:inherit;font-weight:700;font-size:15px;text-decoration:none;border:0;cursor:pointer;padding:0 14px;text-align:center}
.jf-btn svg{width:20px;height:20px;flex:none}
.jf-main{background:#637A0F;color:#fff}.jf-main:hover{background:#56690c;color:#fff}
.jf-main[disabled]{opacity:.7;cursor:wait}
.jf-soft{background:#eef2dc;color:#3f4e09}
.jf-wa{background:#25D366;color:#fff}.jf-wa:hover{background:#1fbd5a;color:#fff}
.jf-line{background:#fff;color:#3f4e09;border:1px solid #d9e2b4}
.jf-chips .jf-wa{justify-content:flex-start;border-radius:16px;padding:12px 14px;font-size:14.5px}

.jf-form{display:flex;gap:8px;align-items:flex-end;padding:10px 12px calc(12px + env(safe-area-inset-bottom));border-top:1px solid rgba(255,255,255,.65);background:rgba(255,255,255,.38)}
.jf-form textarea{flex:1;resize:none;font:inherit;font-size:16px;line-height:1.4;padding:11px 14px;border:1px solid rgba(255,255,255,.95);border-radius:14px;background:rgba(255,255,255,.88);color:#1F2A14;max-height:120px}
.jf-form textarea:focus{outline:2px solid #637A0F;outline-offset:0;border-color:#637A0F}
.jf-send{width:48px;height:46px;flex:none;border:0;border-radius:14px;background:#637A0F;color:#fff;display:grid;place-items:center;cursor:pointer;padding:0}
.jf-send svg{width:20px;height:20px}
.jf-send[disabled]{opacity:.6;cursor:wait}
.jf-sr{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

/* Jeff's moves */
.jf-bob{animation:jf-bob 3s ease-in-out infinite}
@keyframes jf-bob{0%,100%{transform:translateY(0)}50%{transform:translateY(-5px)}}
.jf-fab .jf-bob,.jf-dockbtn .jf-bob,.jf-ava .jf-bob{animation:none}
.jf-eyes{transform-box:fill-box;transform-origin:center;animation:jf-blink 4.5s infinite}
@keyframes jf-blink{0%,92%,100%{transform:scaleY(1)}95%{transform:scaleY(.1)}}
.jf-leaf{transform-box:view-box;transform-origin:60px 30px;animation:jf-sway 3s ease-in-out infinite}
@keyframes jf-sway{0%,100%{transform:rotate(-5deg)}50%{transform:rotate(6deg)}}
.jf-arm{transform-box:view-box;transform-origin:98px 90px;animation:jf-wave 1.1s ease-in-out 3}
@keyframes jf-wave{0%,100%{transform:rotate(0)}50%{transform:rotate(-30deg)}}
.jf-look{animation:jf-look 2.4s ease-in-out infinite}
@keyframes jf-look{0%,100%{transform:translate(0,0)}50%{transform:translate(3px,-3px)}}
.jf-hop{animation:jf-hop 1.2s ease-in-out 4}
@keyframes jf-hop{0%,100%{transform:translateY(0)}30%{transform:translateY(-12px)}55%{transform:translateY(0)}}
.jf-spark{transform-box:fill-box;transform-origin:center;animation:jf-spark 1.4s ease-in-out 4;opacity:0}
.jf-s2{animation-delay:.45s}
@keyframes jf-spark{0%,100%{transform:scale(.3);opacity:0}50%{transform:scale(1);opacity:1}}
.jf-breathe{transform-box:view-box;transform-origin:60px 122px;animation:jf-breathe 4s ease-in-out infinite}
@keyframes jf-breathe{0%,100%{transform:scale(1,1)}50%{transform:scale(1.02,.97)}}
.jf-z{animation:jf-z 3s ease-in infinite;opacity:0;font-family:inherit}.jf-z2{animation-delay:1.2s}
@keyframes jf-z{0%{opacity:0;transform:translate(0,0)}25%{opacity:1}100%{opacity:0;transform:translate(12px,-24px)}}

/* new moods: eyes follow scrolling, eish shake and sweat, wow pop */
.jf-pupils{transition:transform .25s ease}
html.jf-ld .jf-pupils{transform:translateY(3.5px)}
html.jf-lu .jf-pupils{transform:translateY(-3.5px)}
.jf-shake{transform-box:view-box;transform-origin:60px 100px;animation:jf-shake .5s ease-in-out 3}
@keyframes jf-shake{0%,100%{transform:rotate(0)}25%{transform:rotate(-5deg)}75%{transform:rotate(5deg)}}
.jf-drop{animation:jf-drop 1.6s ease-in infinite}
@keyframes jf-drop{0%{transform:translateY(-3px);opacity:0}20%{opacity:1}100%{transform:translateY(10px);opacity:0}}
.jf-pop{transform-box:view-box;transform-origin:60px 76px;animation:jf-pop .6s cubic-bezier(.3,1.6,.5,1) 1}
@keyframes jf-pop{0%{transform:scale(.85)}60%{transform:scale(1.08)}100%{transform:scale(1)}}
.jf-pops{animation:jf-flash 1.2s ease-out 2}
@keyframes jf-flash{0%,100%{opacity:0}30%{opacity:1}}
.jf-dot{transform-box:fill-box;transform-origin:center;animation:jf-dot 1.2s infinite ease-in-out}
.jf-d2{animation-delay:.2s}.jf-d3{animation-delay:.4s}
.jf-s3{animation-delay:.9s}
.jf-shades{animation:jf-slide .45s cubic-bezier(.3,1.4,.5,1) 1}
@keyframes jf-slide{from{transform:translateY(-14px);opacity:0}to{transform:none;opacity:1}}
@supports not ((-webkit-backdrop-filter:blur(1px)) or (backdrop-filter:blur(1px))){.jf-panel{background:rgba(250,252,239,.97)}.jf-fab{background:#fff}}

/* phones: Jeff sits in the bottom bar once it shows; the chat opens as a full-height sheet */
@media(max-width:760px){
  .jf-launch{right:12px;bottom:calc(12px + env(safe-area-inset-bottom))}
  .jf-fab{width:56px;height:56px}
  .jf-fab .jf-svg{width:42px;height:45px}
  .jf-tip{display:none}
  .jf-launch.jf-dockon{opacity:0;pointer-events:none;transform:translateY(20px)}
  html.mob-open .jf-launch{opacity:0;pointer-events:none}
  .jf-panel{left:0;right:0;bottom:0;top:0;width:auto;max-width:none;height:auto;border:0;border-radius:0;padding-top:env(safe-area-inset-top);background:#F7F9EE;-webkit-backdrop-filter:none;backdrop-filter:none;box-shadow:none;animation-name:jf-up}
  .jf-head{background:#fff;border-bottom:1px solid #E4EAD0}
  .jf-form{background:#fff;border-top:1px solid #E4EAD0}
  .jf-form textarea{background:#F7F9EE;border-color:#DCE4C2}
  html.jf-open{overflow:hidden}
  html.jf-open .stq.dock{opacity:0;pointer-events:none}
  html.jf-open .jf-launch{opacity:0;pointer-events:none}
  html.jf-open #prog{opacity:0}
}
@keyframes jf-up{from{transform:translateY(40px);opacity:0}to{transform:none;opacity:1}}
@media(prefers-reduced-motion:reduce){
  .jf-panel,.jf-bob,.jf-eyes,.jf-leaf,.jf-arm,.jf-look,.jf-hop,.jf-spark,.jf-breathe,.jf-z,.jf-dots i,.jf-shake,.jf-drop,.jf-pop,.jf-pops,.jf-dot,.jf-shades{animation:none!important}
  .jf-pupils{transition:none}
  .jf-spark,.jf-z{opacity:1}
  .jf-fab,.jf-tip,.jf-launch{transition:none}
}
@media print{.jf-launch,.jf-panel{display:none!important}}
