/* Witny reacts to real interface states; his W silhouette stays intact. */
.witny-arm{transform-origin:32px 82px}
.witny-thoughts,.witny-confirmation{opacity:0}
.witny-thinking .witny-body{animation:witny-ponder 2.2s ease-in-out infinite}
.witny-thinking .witny-face{animation:witny-consider 4.4s ease-in-out infinite}
.witny-thinking .witny-arm{animation:witny-tap 2.2s ease-in-out infinite}
.witny-thinking .witny-eyes{animation:witny-blink 4.4s infinite}
.witny-thinking .witny-thoughts{opacity:1}
.witny-thoughts circle{transform-box:fill-box;transform-origin:center}
.witny-thinking .witny-thoughts circle{animation:witny-thought 1.4s ease-in-out infinite}
.witny-thinking .witny-thoughts circle:nth-child(2){animation-delay:.2s}
.witny-thinking .witny-thoughts circle:nth-child(3){animation-delay:.4s}
.witny-confirming .witny-body{animation:witny-yes 1s ease-in-out 1}
.witny-confirming .witny-arm{animation:witny-wave .8s ease-in-out 2}
.witny-confirming .witny-confirmation{opacity:1;transform-origin:101px 23px;animation:witny-check .6s cubic-bezier(.2,.8,.2,1) both}
.witny-confirming .witny-sparks{animation:witny-spark .8s ease-in-out 2}
.celebrating .witny-body{animation:witny-celebrate 1s ease-in-out 2}
.celebrating .witny-arm{animation:witny-wave .5s ease-in-out 4}
.celebrating .witny-sparks{animation:witny-spark 1s ease-in-out 2}
.toast .witny-mark{width:42px;height:46px;margin:-3px 0;flex:none}
.toast{gap:10px}
@keyframes witny-ponder{0%,100%{transform:rotate(-5deg) translateY(0)}45%{transform:rotate(5deg) translateY(-3px)}70%{transform:rotate(2deg) translateY(-1px)}}
@keyframes witny-consider{0%,100%{transform:translate(-3px,-1px) rotate(-3deg)}40%,55%{transform:translate(3px,-3px) rotate(3deg)}80%{transform:translate(0,0)}}
@keyframes witny-tap{0%,100%{transform:rotate(0)}30%,55%{transform:rotate(20deg)}42%{transform:rotate(10deg)}}
@keyframes witny-thought{0%,80%,100%{opacity:.25;transform:translateY(0) scale(.8)}40%{opacity:1;transform:translateY(-3px) scale(1)}}
@keyframes witny-yes{0%,100%{transform:translateY(0) scale(1)}22%{transform:translateY(3px) scale(1.04,.95)}48%{transform:translateY(-8px) rotate(-4deg)}70%{transform:translateY(1px) rotate(3deg)}}
@keyframes witny-wave{0%,100%{transform:rotate(0)}35%{transform:rotate(32deg)}65%{transform:rotate(-10deg)}}
@keyframes witny-check{0%{opacity:0;transform:scale(.3)}65%{opacity:1;transform:scale(1.18)}100%{opacity:1;transform:scale(1)}}
@keyframes witny-celebrate{0%,100%{transform:translateY(0) scale(1)}16%{transform:scale(1.08,.9)}42%{transform:translateY(-13px) rotate(-9deg) scale(.97,1.03)}68%{transform:translateY(-6px) rotate(7deg)}85%{transform:translateY(1px) scale(1.04,.95)}}
/* The larger touch target is restricted to the handle, not the scrolling form. */
.sheet>.handle,.memory-confirm-sheet>.handle{display:flex;align-items:center;justify-content:center;width:76px;height:32px;min-height:32px;margin:-6px auto 8px;padding:0;border:0;border-radius:16px;background:transparent;color:#a8b3a5;touch-action:none;cursor:grab;flex:none;position:sticky;top:-10px;z-index:3}
.handle>span{display:block;width:40px;height:5px;background:currentColor;border-radius:9px;pointer-events:none}
.sheet-dragging{animation:none!important;transition:none!important;user-select:none;will-change:transform}
.sheet-dragging .handle{cursor:grabbing;color:#597563}
.sheet-closing{pointer-events:none;animation:none!important}
.memory-confirm-sheet>.handle{position:relative;top:auto;margin-top:-15px;margin-bottom:8px}
.tab-symbol{position:relative;display:block;width:29px;height:29px;flex:none}
.tab-symbol .nav-badge{position:absolute;top:-4px;right:-10px;min-width:18px;height:18px;padding:0 4px;display:grid;place-items:center;border:2px solid #fff;border-radius:12px;background:#b93c22;color:#fff;font:750 9px/1 -apple-system,BlinkMacSystemFont,sans-serif;white-space:nowrap;pointer-events:none}
.tab-symbol .nav-badge:empty{display:none}
.vote-proposal-preview{display:block;margin:14px 0 18px;border:1px solid var(--line);border-radius:18px;overflow:hidden;text-decoration:none;background:var(--white);color:var(--ink)}
.vote-proposal-photo{display:grid;place-items:center;position:relative;aspect-ratio:16/9;overflow:hidden;background:var(--soft)}
.vote-proposal-photo img{display:block;width:100%;height:100%;position:absolute;inset:0;object-fit:cover}
.vote-proposal-photo .photo-placeholder{position:static;font-size:13px;padding:20px;text-align:center}
.vote-proposal-info{display:flex;flex-wrap:wrap;align-items:center;gap:7px 12px;padding:13px 14px;font-size:12px;line-height:1.5}
.vote-proposal-provider{font-weight:750}.vote-proposal-details{color:#5e6e54}
.vote-proposal-link{display:block;flex-basis:100%;font-weight:650;color:#285342}
.vote-proposal-preview:focus-visible{outline:3px solid var(--coral);outline-offset:3px}
.vote-option-row{min-width:0}.vote-option-row>.vote-option{width:100%}
.vote-option-row:has(.vote-proposal-preview){border:1px solid var(--line);border-radius:18px;overflow:hidden;background:var(--white)}
.vote-option-row>.vote-proposal-preview{border:0;border-radius:0;margin:0}
.vote-option-row:has(.vote-proposal-preview)>.vote-option{border-radius:0;margin:0;border-width:1px 0 0}
@media(prefers-reduced-motion:reduce){
 .witny-mark *{animation:none!important;transition:none!important}
 .witny-thinking .witny-thoughts,.witny-confirming .witny-confirmation{opacity:1}
 .witny-thinking .witny-thoughts circle{opacity:.8}
 .sheet,.memory-confirm-sheet{transition:none!important}
}

/* Reservation progress is visible without opening listing links. */
.reservation-control{margin:16px 0;padding:15px;border:1px solid #dce4d8;border-radius:16px;background:#f3f6f0}
.reservation-control.is-confirmed{background:#eaf3ec;border-color:#c4d9c9}
.reservation-state{display:flex;align-items:flex-start;gap:10px;text-align:left}
.reservation-state>svg{width:21px;height:21px;flex:none;margin-top:1px;color:#285342}
.reservation-state strong{display:block;font-size:14px;line-height:1.4;color:#254333}
.reservation-state small{display:block;margin-top:4px;font-size:12px;line-height:1.55;color:#566b5b;overflow-wrap:anywhere}
.reservation-control>.btn{margin-top:13px;white-space:normal;line-height:1.45;padding:12px;font-size:13px;min-height:48px}
.reservation-date,.reservation-undo{display:block;border:0;background:transparent;text-align:left;min-height:44px;padding:10px 0;font-size:12px;line-height:1.5}
.reservation-date{font-weight:650;color:#285342;margin-top:6px}
.reservation-undo{color:#66736b;text-decoration:underline;text-underline-offset:3px}
.reservation-control>button:last-child{margin-bottom:-5px}
@media print{.reservation-control>button{display:none!important}.reservation-control{-webkit-print-color-adjust:exact;print-color-adjust:exact}}
/* iOS date/time controls otherwise add native padding outside their grid column. */
.grid-2{grid-template-columns:repeat(2,minmax(0,1fr))}
.grid-2>.field,.field{min-width:0}
.field input,.field select,.field textarea{box-sizing:border-box;display:block;max-width:100%;min-width:0;font-family:inherit}
.field input,.field select{height:48px;min-height:48px;line-height:1.4}
.field input[type="date"],.field input[type="time"]{appearance:none;-webkit-appearance:none;width:100%;min-inline-size:0;max-inline-size:100%;text-align:left}
.field input::-webkit-date-and-time-value{text-align:left;min-height:1.4em;margin:0}
.field input::-webkit-datetime-edit{padding:0}
.sheet h2[tabindex="-1"]:focus{outline:none}
@media(max-width:360px){.sheet .grid-2{gap:12px}.sheet .field label{letter-spacing:0}}
/* Anchor close buttons to their own sheet after its opening animation ends. */
.sheet{position:relative}

/* Make shared finances recognizable before the first expense is recorded. */
.top-actions .budget-access{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:44px;padding:0 12px;border-radius:22px;background:var(--soft);color:var(--ink);font-size:13px;font-weight:700;white-space:nowrap}
.budget-access svg{width:18px;height:18px;flex-shrink:0}
.top-actions .budget-access.active{background:var(--ink);color:var(--paper)}
.home-budget{display:block;width:100%;padding:16px;margin:0 0 18px;border:1px solid #cbd9cf;border-radius:22px;background:#edf3ee;color:var(--ink);text-align:left}
.home-budget-heading{display:flex;align-items:center;gap:11px}
.home-budget-icon{width:40px;height:40px;border-radius:13px;background:#fff;display:grid;place-items:center;flex-shrink:0}
.home-budget-icon svg{width:21px;height:21px}
.home-budget-heading strong{display:block;font-size:17px;line-height:1.25;letter-spacing:-.3px}
.home-budget-heading small{display:block;margin-top:4px;font-size:12px;line-height:1.4;color:#536b5c}
.home-budget-heading>.grow{flex:1}
.home-budget-heading>svg{width:18px;height:18px;flex-shrink:0}
.home-budget-summary{display:flex;justify-content:space-between;flex-wrap:wrap;gap:5px 14px;margin-top:13px;padding-top:11px;border-top:1px solid #d1dfd5;font-size:11px;line-height:1.5;color:#536b5c}
.home-budget-summary b{font-size:14px;color:var(--ink)}
.home-shortcuts{grid-template-columns:repeat(2,minmax(0,1fr))}
.context-token.context-budget{display:inline-flex;align-items:center;gap:5px;background:#dfece3;font-weight:750;min-height:36px}
.context-budget svg{width:13px;height:13px;flex-shrink:0}
@media(max-width:380px){.topbar .brand-button{font-size:22px;gap:3px}.topbar .witny-wordmark{width:25px}.topbar .members-label{display:none}.top-actions .budget-access{padding:0 10px;font-size:12px}.home-budget{padding:14px}.home-budget-heading{gap:9px}.home-budget-heading strong{font-size:16px}.home-budget-heading small{font-size:11px}}
