:root{--app-font: Inter, "Segoe UI", system-ui, -apple-system, sans-serif;--app-primary: #1676f3;--app-primary-dark: #0e5cd6;--app-surface: #ffffff;--app-surface-alt: #f7f8fc;--app-border: rgba(0,0,0,.07);--app-shadow-xs: 0 1px 3px rgba(0,0,0,.06), 0 1px 2px rgba(0,0,0,.04);--app-shadow-s: 0 4px 12px rgba(0,0,0,.08), 0 1px 3px rgba(0,0,0,.05);--app-shadow-m: 0 8px 24px rgba(0,0,0,.1), 0 2px 6px rgba(0,0,0,.06);--app-radius-card: 14px;--app-nav-width: 240px;--app-header-h: 56px;--app-transition: .16s cubic-bezier(.4, 0, .2, 1);--app-header-bg: #ffffff;--app-header-border: rgba(0,0,0,.07);--app-space-s: .5rem;--app-space-m: 1rem;--app-primary-color:#1676f3;--app-button-size: 2.5rem}:root[theme~=dark]{--app-surface: #1c1f26;--app-surface-alt: #242830;--app-border: rgba(255,255,255,.08);--app-shadow-xs: 0 1px 3px rgba(0,0,0,.3);--app-shadow-s: 0 4px 12px rgba(0,0,0,.35);--app-shadow-m: 0 8px 24px rgba(0,0,0,.4);--app-header-bg: var(--lumo-base-color);--app-header-border: rgba(255,255,255,.07)}html,body{font-family:var(--app-font)}@keyframes page-enter{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}vaadin-app-layout::part(content)>*{animation:page-enter .22s var(--app-transition) both}vaadin-connection-indicator{--vaadin-connection-indicator-primary-color: var(--app-primary)}vaadin-connection-indicator::part(loader){height:2px;top:0;border-radius:0;opacity:1}vaadin-app-layout::part(navbar){height:var(--app-header-h);background:color-mix(in srgb,var(--app-surface) 92%,transparent);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-bottom:1px solid var(--app-border);box-shadow:var(--app-shadow-xs)}vaadin-app-layout::part(drawer){background:var(--app-surface);border-right:1px solid var(--app-border);box-shadow:var(--app-shadow-xs)}vaadin-side-nav{padding:.5rem;width:100%}vaadin-side-nav-item::part(item){border-radius:8px;padding:.55rem .75rem;font-size:.9rem;font-weight:500;color:var(--lumo-secondary-text-color);transition:background var(--app-transition),color var(--app-transition);gap:.6rem}vaadin-side-nav-item::part(item):hover{background:var(--lumo-contrast-5pct);color:var(--lumo-body-text-color)}vaadin-side-nav-item[active]::part(item){background:color-mix(in srgb,var(--app-primary) 12%,transparent);color:var(--app-primary);font-weight:600}vaadin-side-nav-item::part(prefix){font-size:1.05rem;color:inherit}vaadin-button::part(button){transition:box-shadow var(--app-transition),transform var(--app-transition)}vaadin-button:not([disabled]):hover::part(button){box-shadow:var(--app-shadow-xs);transform:translateY(-1px)}vaadin-button:not([disabled]):active::part(button){transform:translateY(0)}h1,h2,h3,h4{letter-spacing:-.015em;font-weight:700}h1{font-size:clamp(1.4rem,2.5vw,1.9rem)}.app-brand{gap:var(--app-space-s);padding-inline:var(--app-space-m)}.brand-icon{color:var(--app-primary-color)}.app-header-right{margin-left:auto;padding-inline:var(--app-space-m);gap:var(--app-space-s)}.greeting{font-weight:500}.toolbar,.btn-row{gap:var(--app-space-s);padding:var(--app-space-s) 0;flex-wrap:wrap}.toolbar-info{flex-basis:100%;font-size:var(--lumo-font-size-s);color:var(--lumo-secondary-text-color);padding-block:.1rem}.action-btn{--lumo-button-size: var(--app-button-size)}@media(max-width:640px){.app-header-right{padding-inline:var(--app-space-s);gap:.25rem}.app-brand{padding-inline:var(--app-space-s);min-width:0;overflow:hidden}.app-brand h1{font-size:var(--lumo-font-size-m);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:40vw}.greeting{display:none}.toolbar vaadin-button,.btn-row vaadin-button{flex:1 0 auto;min-width:7rem}vaadin-grid{font-size:var(--lumo-font-size-s)}h1{font-size:var(--lumo-font-size-xl);margin-block:var(--app-space-s)}}vaadin-dialog-overlay::part(header){font-weight:600}html,body{background:var(--app-surface-alt);overflow-x:hidden}*,*:before,*:after{box-sizing:border-box}vaadin-app-layout [slot=""],vaadin-app-layout::part(content){overflow-x:hidden;max-width:100vw}vaadin-vertical-layout,vaadin-horizontal-layout{max-width:100%}.shopping-list-view{min-height:100%}.dash-card,.shopping-card,.shopping-hero,.calendar-card{border-radius:var(--app-radius-card)!important;box-shadow:var(--app-shadow-s)!important;border:1px solid var(--app-border)!important;background:var(--app-surface)!important}.shopping-hero{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(18rem,1fr);gap:1rem;width:100%;padding:var(--lumo-space-l);border-radius:var(--app-radius-card);background:var(--app-surface);border:1px solid var(--app-border);box-shadow:var(--app-shadow-s)}.shopping-hero__intro{min-width:0}.shopping-hero__eyebrow{display:inline-flex;margin-bottom:.6rem;letter-spacing:.08em;text-transform:uppercase;font-size:.72rem;font-weight:700;color:var(--lumo-primary-text-color)}.shopping-hero__title{margin:0;font-size:clamp(1.8rem,4vw,2.5rem);line-height:1.05}.shopping-hero__copy{margin:.9rem 0 1rem;max-width:40rem;color:var(--lumo-secondary-text-color);font-size:1rem}.shopping-hero__viewer{font-weight:600}.shopping-stats{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.8rem}.shopping-stat{display:flex;flex-direction:column;justify-content:center;gap:.18rem;min-height:6.5rem;padding:1rem;border-radius:var(--lumo-border-radius-m);background:var(--lumo-contrast-5pct);border:1px solid var(--lumo-contrast-10pct)}.shopping-stat--viewer{align-items:flex-start;gap:.55rem}.shopping-stat__value{font-size:clamp(1.7rem,3vw,2.3rem);font-weight:700;line-height:1;color:var(--lumo-primary-text-color)}.shopping-stat__label{font-size:.95rem;font-weight:600}.shopping-stat__hint{font-size:.78rem;color:var(--lumo-secondary-text-color)}.shopping-card{position:relative;width:100%;padding:var(--lumo-space-l);border-radius:var(--lumo-border-radius-l);background:var(--lumo-base-color);border:1px solid var(--lumo-contrast-10pct);box-shadow:var(--lumo-box-shadow-s)}.shopping-card:before{content:"";position:absolute;inset:0 0 auto;height:.25rem;border-radius:var(--lumo-border-radius-l) var(--lumo-border-radius-l) 0 0;background:var(--lumo-primary-color-50pct);pointer-events:none}.shopping-card--compose,.shopping-card--open{background:var(--lumo-base-color)}.shopping-card--open:before{background:#1676f373}.shopping-card--completed{background:var(--lumo-base-color)}.shopping-card--completed:before{background:#12b38066}.shopping-card h3{position:relative}.shopping-card__hint{position:relative;margin:.4rem 0 0;color:var(--lumo-secondary-text-color);font-size:.9rem}.shopping-compose{position:relative;gap:.75rem;margin-top:1rem;flex-wrap:wrap}.shopping-compose vaadin-text-field{flex:1 1 16rem;--vaadin-input-field-background: var(--lumo-contrast-5pct);--vaadin-input-field-border-width: 1px;--vaadin-input-field-border-color: var(--lumo-contrast-10pct)}.shopping-compose__button{min-width:10rem}.shopping-columns{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem;width:100%;align-items:start}.shopping-section__header{position:relative;margin-bottom:.2rem}.shopping-section-badge{color:var(--lumo-body-text-color);background:var(--lumo-contrast-5pct);border-radius:999px;padding-inline:.65rem;font-weight:600;border:1px solid var(--lumo-contrast-10pct)}.shopping-section-badge--open{background:var(--lumo-primary-color-10pct);color:var(--lumo-primary-text-color)}.shopping-section-badge--completed{background:#12b3801f;color:var(--lumo-success-text-color)}.shopping-items{display:flex;flex-direction:column;gap:.8rem;margin-top:1rem}.shopping-item{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:.85rem;align-items:start;padding:.95rem 1rem;border-radius:var(--lumo-border-radius-m);background:var(--lumo-contrast-5pct);border:1px solid var(--lumo-contrast-10pct);box-shadow:var(--lumo-box-shadow-xs)}.shopping-item--completed{background:#12b38014}.shopping-item__content{min-width:0}.shopping-item__title{display:block;font-size:1.02rem;font-weight:700;word-break:break-word}.shopping-item--completed .shopping-item__title{text-decoration:line-through;color:var(--lumo-secondary-text-color)}.shopping-item__details{display:block;margin-top:.3rem;color:var(--lumo-secondary-text-color);word-break:break-word}.shopping-item__meta{gap:.55rem;flex-wrap:wrap;margin-top:.75rem}.shopping-item__author{font-size:.82rem;color:var(--lumo-secondary-text-color)}.shopping-item__timestamp{font-size:.75rem}.shopping-avatar{display:inline-flex;align-items:center;justify-content:center;border-radius:999px;background:var(--lumo-primary-color-10pct);color:var(--lumo-primary-text-color);font-weight:700;box-shadow:inset 0 0 0 1px var(--lumo-primary-color-10pct)}.shopping-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.45rem;padding:2rem 1rem;border-radius:var(--lumo-border-radius-m);border:1px dashed var(--lumo-contrast-20pct);background:var(--lumo-contrast-5pct);text-align:center}.shopping-empty__icon{color:var(--lumo-secondary-text-color)}.shopping-empty__title{font-weight:700}.shopping-empty__hint{max-width:22rem;font-size:.85rem;color:var(--lumo-secondary-text-color)}@media(max-width:900px){.shopping-hero,.shopping-columns{grid-template-columns:minmax(0,1fr)}}@media(max-width:640px){.shopping-list-view{padding:0}.shopping-stats{grid-template-columns:minmax(0,1fr)}.shopping-item{grid-template-columns:auto minmax(0,1fr)}.shopping-item vaadin-button{grid-column:2;justify-self:end}}.calendar-view{width:100%}.calendar-card{width:100%;padding:var(--lumo-space-m);background:var(--lumo-base-color);border-radius:var(--lumo-border-radius-l);box-shadow:var(--lumo-box-shadow-s)}.calendar-card-content{gap:var(--lumo-space-m)}.calendar-header-top,.calendar-nav-row{gap:var(--lumo-space-s);flex-wrap:wrap}.calendar-mode-switch{display:inline-flex;gap:.35rem;padding:.25rem;border-radius:999px;background:var(--lumo-contrast-5pct)}.calendar-range-label{flex:1 1 12rem;min-width:12rem;text-align:center;font-size:var(--lumo-font-size-l);font-weight:600}.calendar-grid-container{width:100%}.calendar-month-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:.4rem;width:100%}.calendar-month-grid__header{text-align:center;font-size:var(--lumo-font-size-xs);font-weight:700;color:var(--lumo-secondary-text-color);padding:.25rem 0}.calendar-month-grid__empty{min-height:7rem}.calendar-day-cell{min-height:7rem;padding:.6rem;border-radius:var(--lumo-border-radius-m);background:var(--lumo-base-color);border:1px solid var(--lumo-contrast-10pct);cursor:pointer;transition:transform .15s ease,box-shadow .15s ease}.calendar-day-cell:hover{transform:translateY(-1px);box-shadow:0 10px 24px #0f172a14}.calendar-day-cell--today{border-color:#1676f366;box-shadow:inset 0 0 0 1px #1676f326}.calendar-day-cell--weekend{background:var(--lumo-contrast-5pct)}.calendar-day-cell__number{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;border-radius:999px;font-weight:700}.calendar-day-cell--today .calendar-day-cell__number{background:var(--lumo-primary-color);color:var(--lumo-primary-contrast-color)}.calendar-day-cell__preview{display:flex;flex-direction:column;gap:.3rem;margin-top:.55rem}.calendar-day-cell__more{font-size:var(--lumo-font-size-xs);color:var(--lumo-secondary-text-color)}.calendar-mini-event{display:flex;align-items:center;gap:.35rem;min-width:0}.calendar-mini-event__dot{width:.45rem;height:.45rem;min-width:.45rem;border-radius:999px}.calendar-mini-event__text{font-size:.75rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.calendar-week-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:.75rem;width:100%}.calendar-week-day{display:flex;flex-direction:column;gap:.65rem;min-width:0;padding:.85rem;border-radius:var(--lumo-border-radius-l);background:var(--lumo-base-color);border:1px solid var(--lumo-contrast-10pct);box-shadow:var(--lumo-box-shadow-xs)}.calendar-week-day--today{border-color:#1676f366;box-shadow:0 0 0 1px #1676f324,0 12px 28px #1676f31f}.calendar-week-day--weekend{background:var(--lumo-contrast-5pct)}.calendar-week-day__name{font-size:var(--lumo-font-size-s);font-weight:700;text-transform:capitalize}.calendar-week-day__date{font-size:var(--lumo-font-size-xs);color:var(--lumo-secondary-text-color)}.calendar-week-day__events{display:flex;flex-direction:column;gap:.5rem;min-width:0}.calendar-week-day__empty{font-size:var(--lumo-font-size-xs);color:var(--lumo-secondary-text-color)}.calendar-week-event{display:flex;flex-direction:column;gap:.2rem;min-width:0;padding:.6rem .7rem;border-radius:var(--lumo-border-radius-m);background:#1676f30d}.calendar-week-event__time{font-size:var(--lumo-font-size-xs);color:var(--lumo-secondary-text-color)}.calendar-week-event__title{font-size:var(--lumo-font-size-s);font-weight:600;overflow:hidden;text-overflow:ellipsis}.calendar-week-event__owner{font-size:.72rem;font-weight:700}.calendar-agenda{width:100%}.calendar-agenda__title{margin:0 0 var(--lumo-space-s) 0}.calendar-agenda__timeline{display:flex;flex-direction:column;gap:var(--lumo-space-m)}.calendar-agenda__group{display:grid;grid-template-columns:minmax(11rem,14rem) minmax(0,1fr);gap:var(--lumo-space-m);align-items:start}.calendar-agenda__day{font-size:var(--lumo-font-size-s);font-weight:700;color:var(--lumo-secondary-text-color);text-transform:capitalize}.calendar-agenda__day--today{color:var(--lumo-primary-color)}.calendar-agenda__items{display:flex;flex-direction:column;gap:.45rem}.calendar-agenda__empty{padding:var(--lumo-space-m);border-radius:var(--lumo-border-radius-l);background:var(--lumo-contrast-5pct);color:var(--lumo-secondary-text-color)}.calendar-event-chip{width:100%;gap:var(--lumo-space-s);padding:.65rem var(--lumo-space-s);border-radius:var(--lumo-border-radius-m);background:var(--lumo-contrast-5pct);align-items:center;overflow:hidden}.calendar-event-chip__bar{width:.3rem;min-width:.3rem;align-self:stretch;border-radius:999px}.calendar-event-chip__info{flex:1;min-width:0;gap:.12rem}.calendar-event-chip__time{font-size:var(--lumo-font-size-xs);color:var(--lumo-secondary-text-color)}.calendar-event-chip__title-row{gap:var(--lumo-space-xs);flex-wrap:wrap;overflow:hidden}.calendar-event-chip__title{font-size:var(--lumo-font-size-s);font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.calendar-event-chip__owner{display:inline-flex;align-items:center;font-size:.7rem;font-weight:700;border:1px solid currentColor;border-radius:999px;padding:.12rem .45rem;white-space:nowrap}.calendar-legend{display:flex;flex-wrap:wrap;gap:var(--lumo-space-m);padding-top:var(--lumo-space-xs)}.calendar-legend__item{gap:var(--lumo-space-xs)}.calendar-legend__dot{width:.65rem;height:.65rem;min-width:.65rem;border-radius:999px}.calendar-legend__name{font-size:var(--lumo-font-size-xs)}@media(max-width:1024px){.calendar-week-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.calendar-agenda__group{grid-template-columns:minmax(0,1fr);gap:.4rem}}@media(max-width:640px){.calendar-card{padding:var(--lumo-space-s)}.calendar-header-top{align-items:stretch}.calendar-header-top h2{margin:0}.calendar-mode-switch,.calendar-nav-row{width:100%}.calendar-mode-switch vaadin-button,.calendar-nav-row vaadin-button{flex:1 1 auto}.calendar-range-label{order:-1;width:100%;min-width:0}.calendar-month-grid{gap:.25rem}.calendar-month-grid__header{font-size:.68rem}.calendar-day-cell{min-height:4.4rem;padding:.35rem}.calendar-day-cell__preview{gap:.16rem}.calendar-mini-event__text,.calendar-day-cell__more{font-size:.62rem}.calendar-week-grid{grid-template-columns:minmax(0,1fr)}.calendar-week-day{padding:.75rem}.calendar-event-chip__title{white-space:normal}}@media(max-width:640px){.dash-grid,.dash-col{gap:var(--lumo-space-s)!important}.dash-card{padding:var(--lumo-space-s)!important}.dash-card__header h3{font-size:var(--lumo-font-size-m);line-height:1.2}.dash-btn-group{gap:4px!important;flex-wrap:wrap}.dash-btn-group vaadin-button{min-width:0;flex-shrink:1}.dash-stats-grid{grid-template-columns:repeat(2,1fr)!important}}vaadin-button{min-height:44px;min-width:44px}vaadin-button:focus-visible,button:focus-visible,[role=button]:focus-visible,a:focus-visible{outline:3px solid var(--lumo-primary-color);outline-offset:3px}vaadin-side-nav-item::part(item){min-height:44px;box-sizing:border-box}.refresh-status{display:block;min-height:1.5em;padding-block:.4rem;font-size:.875rem;color:var(--lumo-secondary-text-color);overflow-wrap:anywhere}.shutters-mobile{display:none}.shutter-card{padding:1rem;border:1px solid var(--app-border);border-radius:var(--app-radius-card);background:var(--app-surface);box-shadow:var(--app-shadow-xs);min-width:0}.shutter-card vaadin-checkbox{min-height:44px;max-width:100%;font-weight:600}.shutter-status{display:block;min-height:1.5em;margin-block:.25rem .75rem;color:var(--lumo-secondary-text-color);overflow-wrap:anywhere}.shutter-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.5rem}.shutter-actions vaadin-button{width:100%;margin:0}.shopping-hero{padding:.25rem 0;background:transparent;box-shadow:none;border:0}.shopping-hero__title{margin:0}.shopping-card--compose{padding:.75rem}.shopping-card--compose .shopping-compose{gap:.5rem}.calendar-explicit-agenda .calendar-grid-container{display:none}.calendar-event-chip__title{overflow-wrap:anywhere;white-space:normal}.calendar-mode-switch{flex-wrap:wrap}@media(max-width:640px){.app-brand{display:none}.app-header-right{padding-inline:2px;gap:2px;flex-wrap:nowrap!important}.app-header-right vaadin-button{flex-shrink:0;margin:0}.app-toggle{min-width:44px;margin:0}.profile-button{font-size:0;width:44px;padding:0!important;gap:0!important}.profile-button::part(prefix){margin:0}.shutters-view{height:auto!important;min-height:100%}.shutters-desktop{display:none}.shutters-mobile{display:grid;gap:.75rem;width:100%}.shopping-list-view{gap:.75rem!important;padding:.75rem}.shopping-list-view .shopping-compose{flex-wrap:wrap}.shopping-list-view .shopping-compose vaadin-combo-box{flex:1 1 100%}.shopping-list-view .shopping-compose vaadin-text-field{flex:1 1 55%;width:auto;min-width:0}.shopping-list-view .shopping-compose__button{flex:1 1 35%}.shopping-card__hint{display:none}.shopping-columns{grid-template-columns:minmax(0,1fr)}.calendar-view:not(.calendar-explicit-grid) .calendar-grid-container{display:none}.calendar-view .calendar-agenda,.calendar-event-chip__title,.calendar-event-chip__time{font-size:1rem}.calendar-nav-row{flex-wrap:wrap;gap:.25rem}.calendar-range-label{order:-1;flex-basis:100%;width:100%;font-size:1rem}.calendar-card{padding:.75rem}.calendar-mini-event__text,.calendar-day-cell__more{font-size:.875rem}.calendar-month-grid{grid-template-columns:repeat(7,minmax(0,1fr))}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}}.shopping-list-view .shopping-hero{grid-template-columns:minmax(0,1fr);background:transparent!important;box-shadow:none!important;border:0!important;border-radius:0!important}@media(max-width:640px){.shopping-item{grid-template-columns:36px minmax(0,1fr) 44px;gap:.35rem;padding:.65rem}.shopping-item vaadin-checkbox{min-height:44px}.shopping-item vaadin-button{grid-column:3;grid-row:1;padding:0}.shopping-item__meta{margin-top:.35rem;gap:.2rem}.shopping-item__meta>:first-child,.shopping-item__timestamp{display:none}.shopping-item__title{font-size:1rem;line-height:1.4}}
