@keyframes fadeInUp{from{opacity:0;transform:translateY(5px)}to{opacity:1;transform:translateY(0)}}@keyframes slideDown{from{opacity:0;transform:translateY(-6px) scale(.988)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes slideUp{from{opacity:1;transform:translateY(0) scale(1)}to{opacity:0;transform:translateY(-5px) scale(.994)}}@keyframes overlayIn{from{opacity:0;backdrop-filter:blur(0);-webkit-backdrop-filter:blur(0)}to{opacity:1;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}}@keyframes overlayOut{from{opacity:var(--drag-ov,1)}to{opacity:0;backdrop-filter:blur(0);-webkit-backdrop-filter:blur(0)}}@keyframes modalIn{from{opacity:0;transform:scale(.95) translateY(18px)}60%{opacity:1;transform:scale(1.006) translateY(-3px)}80%{transform:scale(.999) translateY(1px)}to{opacity:1;transform:scale(1) translateY(0)}}@keyframes modalOut{from{opacity:1;transform:scale(1) translateY(0)}to{opacity:0;transform:scale(.96) translateY(14px);filter:blur(1px)}}@keyframes sheetUp{from{transform:translateY(100%)}65%{transform:translateY(-7px)}82%{transform:translateY(3px)}to{transform:translateY(0)}}@keyframes sheetDown{from{transform:translateY(0)}30%{transform:translateY(8px)}to{transform:translateY(105%)}}@keyframes sheetSwipeOut{from{transform:translateY(var(--drag-y,0))}to{transform:translateY(105%)}}@keyframes toastSlide{from{opacity:0;transform:translateY(10px) scale(.93)}70%{transform:translateY(-2px) scale(1.008)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes toastSlideOut{from{opacity:1;transform:translateY(0) scale(1)}to{opacity:0;transform:translateY(8px) scale(.95)}}@keyframes pop{0%{transform:scale(1)}40%{transform:scale(1.18)}70%{transform:scale(.95)}100%{transform:scale(1)}}@keyframes contentSwapIn{from{opacity:0;transform:translateY(6px) scale(.997)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes sectionReveal{from{opacity:0;transform:translateY(6px) scale(.997)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes notificationSectionIn{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@keyframes notificationSectionOut{from{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-3px)}}@keyframes tabSwitchNext{from{opacity:.55;transform:translateX(10px) scale(.994);filter:blur(.8px)}to{opacity:1;transform:translateX(0) scale(1);filter:blur(0)}}@keyframes tabSwitchPrev{from{opacity:.55;transform:translateX(-10px) scale(.994);filter:blur(.8px)}to{opacity:1;transform:translateX(0) scale(1);filter:blur(0)}}@keyframes sheetContentIn{from{opacity:0;transform:translateY(6px) scale(.997)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes viewFadeOld{from{opacity:1;transform:translateY(0) scale(1);filter:blur(0)}to{opacity:0;transform:translateY(3px) scale(.998);filter:blur(1.5px)}}@keyframes viewFadeNew{from{opacity:0;transform:translateY(5px) scale(.997);filter:blur(1.5px)}to{opacity:1;transform:translateY(0) scale(1);filter:blur(0)}}.stats-edit-entries{display:flex;flex-direction:column;gap:.4rem;flex:1;min-width:0}.stats-edit-entry{display:flex;align-items:center;gap:var(--space-xs)}.stats-edit-select{flex:1;min-width:0;background:var(--surface2);border:1px solid var(--border-strong);border-radius:var(--radius-sm);color:var(--text);padding:0 1.8rem 0 .6rem;font-size:var(--text-xs);font-weight:600;font-family:inherit;outline:0;cursor:pointer;appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath fill='none' stroke='%23555' stroke-width='1.5' d='M1 1l4 4 4-4'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .6rem center;transition:border-color var(--motion-fast) ease,box-shadow var(--motion-fast) ease;height:40px}.stats-edit-select:focus{border-color:var(--accent);box-shadow:var(--shadow-focus-ring)}.stats-edit-select option{background:var(--surface2)}.stats-edit-custom{flex:1;min-width:0;background:var(--surface2);border:1px solid var(--border-strong);border-radius:var(--radius-sm);color:var(--text);padding:0 .5rem;font-size:var(--text-xs);font-family:inherit;outline:0;transition:border-color var(--motion-fast) ease,box-shadow var(--motion-fast) ease;height:36px}.stats-edit-custom:focus{border-color:var(--act-custom);box-shadow:0 0 0 3px rgba(155,89,182,.12)}.stats-edit-kcal{width:56px;flex-shrink:0;background:var(--surface2);border:1px solid var(--border-strong);border-radius:var(--radius-sm);color:var(--text);padding:0 .4rem;font-size:var(--text-xs);font-weight:600;font-family:inherit;outline:0;text-align:center;transition:border-color var(--motion-fast) ease,box-shadow var(--motion-fast) ease;-moz-appearance:textfield;height:40px}.stats-edit-kcal::-webkit-inner-spin-button,.stats-edit-kcal::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.stats-edit-kcal:focus{border-color:var(--accent);box-shadow:var(--shadow-focus-ring)}.stats-edit-del{flex-shrink:0;background:0 0;border:1px solid rgba(231,76,60,.2);border-radius:var(--radius-xs);color:var(--color-danger-text);font-size:var(--text-sm);font-weight:700;font-family:inherit;padding:0;cursor:pointer;touch-action:manipulation;opacity:.5;transition:opacity var(--motion-fast) ease,border-color var(--motion-fast) ease,transform var(--motion-fast) var(--ease-smooth);min-height:44px;min-width:44px;display:inline-flex;align-items:center;justify-content:center}.stats-edit-del:hover{opacity:1;border-color:var(--color-danger);transform:translateY(-1px)}.stats-edit-del:active{opacity:1;border-color:var(--color-danger);transform:scale(.93)}.stats-edit-add{display:inline-flex;align-items:center;justify-content:center;background:0 0;border:1px dashed rgba(46,204,113,.25);border-radius:var(--radius-xs);color:var(--color-success);font-size:var(--text-xs);font-weight:700;font-family:inherit;padding:.2rem .6rem;cursor:pointer;touch-action:manipulation;opacity:.5;align-self:flex-start;transition:opacity var(--motion-fast) ease,border-color var(--motion-fast) ease;min-height:44px}.stats-edit-add:active,.stats-edit-add:hover{opacity:1;border-color:var(--color-success)}body.guest #btn-change-pw,body.guest .activity-select,body.guest .custom-name-input,body.guest .kcal-input,body.guest .note-btn,body.guest .reaction-add-btn,body.guest .reaction-btn{display:none}@media (min-width:901px){main{padding:1.75rem 1.5rem 3rem}}@media (max-width:900px){.reaction-tip::after{left:auto;right:0;transform:none}}.feed-filter-bar{position:sticky;top:calc(var(--header-total-height) + var(--banner-h));z-index:99;display:flex;justify-content:center;padding:.6rem 1rem;background:rgba(15,15,15,.9);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-bottom:1px solid var(--border);overflow-x:auto;scrollbar-width:none}.feed-filter-bar::-webkit-scrollbar{display:none}.feed-filter-chips{display:flex;gap:.45rem;flex-shrink:0}.feed-filter-chip{background:var(--surface2);border:1px solid var(--border-strong);color:var(--text-3);border-radius:var(--radius-sm);padding:.3rem .85rem;min-height:44px;font-size:var(--text-sm);font-weight:600;font-family:inherit;cursor:pointer;touch-action:manipulation;white-space:nowrap;transition:background var(--motion-tab) var(--ease-smooth),color var(--motion-tab) ease,border-color var(--motion-tab) ease,transform var(--motion-tab) var(--ease-smooth),box-shadow var(--motion-tab) ease}.feed-filter-chip:not(.active):hover{transform:translateY(-1px);background:var(--surface3)}.feed-filter-chip:not(.active):active{transform:scale(.93);background:var(--surface3)}.feed-filter-chip.active{background:var(--accent-strong);border-color:var(--accent);color:#fff;box-shadow:0 8px 18px rgba(255,107,53,.18)}.feed-page-header{position:sticky;top:var(--banner-h);z-index:100;background-color:#121212;background:rgba(15,15,15,.9);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-bottom:0;box-shadow:0 1px 0 var(--border)}.feed-page-header .header-inner{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:0;max-width:min(560px,100% - 2rem);margin:0 auto;width:100%}.feed-page-header .header-inner::before{display:none}.feed-page-header .header-title{text-align:center;justify-self:center;grid-column:2}.feed-page-header .header-right{justify-self:end;grid-column:3}.feed-back-btn{justify-self:start;grid-column:1;background:0 0;border:none;color:var(--accent);font-size:var(--text-md);font-weight:600;cursor:pointer;touch-action:manipulation;padding:.4rem .5rem;border-radius:var(--radius-xs);transition:background var(--motion-fast) ease,transform var(--motion-fast) var(--ease-smooth);white-space:nowrap}.feed-back-btn:hover{background:var(--accent-soft);transform:translateY(-1px)}.feed-back-btn:active{background:var(--accent-soft);transform:scale(.93)}.btn-ghost.feed-upload-header-btn{white-space:nowrap;font-size:var(--text-sm)}.feed-page-content{max-width:min(560px,100% - 2rem);margin:0 auto;padding:0 0 4rem;min-height:calc(100vh - 60px);min-height:calc(100dvh - 60px);position:relative}.feed-content{padding:0}.feed-skeleton-post{background:var(--surface2);border:1px solid var(--border-strong);border-radius:var(--radius-lg);overflow:hidden;margin-bottom:.75rem}.feed-skeleton-header{display:flex;align-items:center;gap:.65rem;padding:var(--space-md) var(--space-lg)}.feed-skeleton-avatar{width:36px;height:36px;border-radius:var(--radius-round);flex-shrink:0}.feed-skeleton-meta{display:flex;flex-direction:column;gap:.4rem;flex:1}.feed-skeleton-image{width:100%;aspect-ratio:4/3;max-height:min(520px,60dvh);border-radius:0}.feed-skeleton-actions{height:2.2rem;margin:.4rem 1rem;border-radius:var(--radius-sm);width:40%}.feed-loading{display:flex;justify-content:center;align-items:center;padding:3rem 1rem}.feed-loading::after{content:'';width:28px;height:28px;border:3px solid var(--border-strong);border-top-color:var(--accent);border-radius:var(--radius-round);animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.feed-empty{text-align:center;padding:4rem 1.5rem}.feed-empty-icon{font-size:3.5rem;display:block;margin-bottom:var(--space-lg);opacity:.6}.feed-empty p{color:var(--text-2);font-size:var(--text-base)}.feed-empty .feed-empty-sub{font-size:var(--text-sm);margin-top:.25rem;color:var(--text-3)}.feed-post{background:var(--surface2);border:1px solid var(--border-strong);border-radius:var(--radius-lg);overflow:hidden;margin-bottom:.75rem;transform-origin:center top;transition:background var(--motion-fast) ease,transform var(--motion-fast) var(--ease-smooth),box-shadow var(--motion-fast) ease,border-color var(--motion-fast) ease}.feed-content.feed-enter .feed-post{animation:feedIn var(--motion-sheet) var(--ease-smooth) backwards;animation-delay:calc(var(--feed-index,0) * 28ms)}.feed-post:hover{background:color-mix(in srgb,var(--overlay-white-faint) 50%,var(--surface2));border-color:color-mix(in srgb,var(--border-strong) 60%,var(--accent) 6%)}.feed-post:last-child{margin-bottom:0}.feed-post-targeted{background:color-mix(in srgb,var(--accent) 7%,var(--surface2));border-color:rgba(255,107,53,.42);box-shadow:0 0 0 2px rgba(255,107,53,.14);animation:feedTargetPulse 1.4s var(--ease-smooth)}.feed-post-header{display:flex;align-items:center;gap:.65rem;padding:var(--space-md) var(--space-lg);min-width:0}.feed-avatar{width:36px;height:36px;border-radius:var(--radius-round);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:var(--text-sm);color:#fff;flex-shrink:0;text-transform:uppercase}.feed-avatar-jeremy{background:linear-gradient(135deg,#b83a08,var(--accent-strong))}.feed-avatar-kevin{background:linear-gradient(135deg,#6366f1,#818cf8)}.feed-avatar-tom{background:linear-gradient(135deg,#10b981,#34d399)}.feed-post-meta{display:flex;flex-direction:column;flex:1;min-width:0}.feed-post-user{display:flex;align-items:center;gap:.45rem;min-width:0;flex-wrap:wrap;font-weight:600;font-size:var(--text-md);color:var(--text)}.feed-post-time{font-size:var(--text-xs);color:var(--text-2)}.feed-post-delete{margin-left:auto;display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;flex:0 0 36px;background:0 0;border:1px solid transparent;color:var(--text-2);font-size:var(--text-base);line-height:1;cursor:pointer;padding:0;letter-spacing:0;border-radius:var(--radius-pill);transition:background var(--motion-fast) ease,transform var(--motion-fast) var(--ease-smooth),color var(--motion-fast) ease,border-color var(--motion-fast) ease}.feed-post-delete:hover{background:var(--surface2);border-color:var(--border);transform:translateY(-1px);color:var(--text)}.feed-post-delete:active{background:var(--surface3);transform:scale(.96)}.feed-post-image-wrap{position:relative;width:100%;background:var(--surface);overflow:hidden;isolation:isolate}.feed-post-image-wrap::after{content:'';position:absolute;inset:0;background:linear-gradient(180deg,transparent 30%,rgba(0,0,0,.1));opacity:0;transition:opacity var(--motion-base) ease;pointer-events:none}.feed-post-image{display:block;width:100%;max-height:520px;max-height:min(520px,60dvh);object-fit:cover;cursor:pointer;transition:transform var(--motion-base) var(--ease-smooth),filter var(--motion-base) var(--ease-smooth)}.feed-post-image:active{transform:scale(.992)}.feed-post-image-wrap:hover::after{opacity:1}.feed-post-actions{display:flex;align-items:center;gap:var(--space-sm);padding:.6rem 1rem}.feed-like-btn{background:0 0;border:none;cursor:pointer;font-size:var(--text-2xl);padding:.2rem;line-height:1;transition:transform var(--motion-fast) var(--ease-smooth),filter var(--motion-fast) ease}.feed-like-btn:hover{transform:scale(1.08);filter:brightness(1.05)}.feed-like-btn.like-animate,.feed-like-btn:active{transform:scale(1.35)}.feed-like-btn.disabled{cursor:default;opacity:.6}.feed-like-btn.liked .like-heart{animation:likePopIn 360ms var(--ease-smooth)}.like-heart{display:inline-flex;color:var(--text-2)}.double-tap-heart,.feed-like-btn.liked .like-heart{color:#ff6b6b}.feed-like-count{background:0 0;border:none;padding:0;font:inherit;font-size:var(--text-sm);font-weight:600;color:var(--text);cursor:pointer;user-select:none;position:relative;appearance:none;-webkit-appearance:none;text-decoration:underline;text-decoration-color:transparent;text-underline-offset:2px;transition:color var(--motion-fast) ease,text-decoration-color var(--motion-fast) ease}.feed-like-count:hover{color:var(--accent);text-decoration-color:var(--accent)}.liked-by-popup{position:absolute;bottom:calc(100% + 6px);left:0;background:var(--surface3);border:1px solid var(--border-strong);border-radius:var(--radius-xs);padding:.4rem .65rem;white-space:nowrap;z-index:50;box-shadow:0 4px 16px var(--overlay-black-medium);display:flex;flex-direction:column;gap:.15rem;animation:fadeIn .12s ease backwards}@keyframes fadeIn{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.liked-by-name{font-size:var(--text-sm);color:var(--text);font-weight:500}.feed-post-caption{padding:0 1rem .75rem;font-size:var(--text-md);color:var(--text);line-height:1.45;border-bottom:1px solid var(--border);transition:background var(--motion-fast) ease,border-color var(--motion-fast) ease,transform var(--motion-fast) var(--ease-smooth)}.feed-post-caption-editing{padding-top:.75rem;background:linear-gradient(180deg,rgba(255,107,53,.08),var(--overlay-white-faint)),var(--overlay-white-faint);border-color:rgba(255,107,53,.18);animation:captionEditorIn 260ms var(--ease-smooth) backwards}.feed-post-caption strong{font-weight:600;margin-right:.3em}.feed-activities{display:flex;flex-wrap:wrap;gap:.4rem;padding:0 1rem .5rem}.feed-activity-badge{display:inline-flex;align-items:center;padding:.25rem .65rem;border-radius:var(--radius);font-size:var(--text-xs);font-weight:600;letter-spacing:.01em;transition:transform var(--motion-fast) var(--ease-smooth),filter var(--motion-fast) ease}.feed-activity-badge:hover{transform:translateY(-1px);filter:saturate(1.08)}.feed-activity-badge.act-Gym{background:color-mix(in srgb,var(--act-gym) 15%,transparent);color:color-mix(in srgb,var(--act-gym) 90%,#fff)}.feed-activity-badge.act-Swim{background:color-mix(in srgb,var(--act-swim) 15%,transparent);color:color-mix(in srgb,var(--act-swim) 90%,#fff)}.feed-activity-badge.act-Laufen-Indoor{background:color-mix(in srgb,var(--act-laufen-in)15%,transparent);color:color-mix(in srgb,var(--act-laufen-in) 90%,#fff)}.feed-activity-badge.act-Laufen-Outdoor{background:color-mix(in srgb,var(--act-laufen)15%,transparent);color:color-mix(in srgb,var(--act-laufen) 90%,#fff)}.feed-activity-badge.act-Fahrrad{background:color-mix(in srgb,var(--act-fahr) 15%,transparent);color:color-mix(in srgb,var(--act-fahr) 90%,#fff)}.feed-activity-badge.act-Spazieren{background:color-mix(in srgb,var(--act-spaz) 15%,transparent);color:color-mix(in srgb,var(--act-spaz) 90%,#fff)}.feed-activity-badge.rest{background:color-mix(in srgb,var(--act-spaz) 15%,transparent);color:color-mix(in srgb,var(--act-spaz) 90%,#fff)}.feed-activity-badge.act-Krank{background:color-mix(in srgb,var(--act-krank) 15%,transparent);color:color-mix(in srgb,var(--act-krank) 90%,#fff)}.feed-activity-badge.act-Gesellschaftliche-Verpflichtungen{background:color-mix(in srgb,var(--act-ges) 15%,transparent);color:color-mix(in srgb,var(--act-ges) 90%,#fff)}.feed-activity-badge:not(.act-Gym):not(.act-Swim):not(.act-Laufen):not(.act-Fahrrad):not(.act-Spazieren):not(.rest):not(.act-Krank):not(.act-Gesellschaftliche-Verpflichtungen){background:color-mix(in srgb,var(--act-custom) 15%,transparent);color:var(--act-custom)}.photo-upload-card{width:100%;isolation:isolate}#photo-upload-modal.crop-active .photo-upload-card::after{content:'';position:absolute;inset:0;background:var(--overlay-black-medium);border-radius:inherit;pointer-events:none;z-index:4}#photo-upload-modal.crop-active .photo-crop-actions,#photo-upload-modal.crop-active .photo-crop-container{position:relative;z-index:5}#photo-upload-modal.crop-active .modal-sticky-header{z-index:6;background:color-mix(in srgb,#000 30%,color-mix(in srgb,#fff 4%,var(--surface)))}#photo-upload-modal.crop-active .modal-drag-handle{background:color-mix(in srgb,#000 30%,color-mix(in srgb,#fff 4%,var(--surface)))}.photo-stage{display:flex;flex-direction:column;height:clamp(300px,56dvh,440px);margin-bottom:var(--space-lg)}.photo-stage>.photo-preview-container{flex:1 1 0;min-height:120px;margin-bottom:0;display:flex;flex-direction:column;justify-content:center}.photo-stage>.photo-image-strip{flex:0 0 auto;margin-bottom:0}.photo-stage>.photo-crop-actions{flex:0 0 auto;margin-bottom:0}#photo-upload-modal.crop-active .photo-stage>.photo-image-strip{display:none}.photo-preview-container{margin-bottom:var(--space-lg)}.photo-stage .photo-drop-zone{height:100%;box-sizing:border-box}.photo-stage .photo-preview{height:100%;max-height:none}.photo-drop-zone{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.6rem;padding:2.5rem 1rem;border:2px dashed var(--border-strong);border-radius:var(--radius-sm);background:var(--surface);cursor:pointer;transition:border-color var(--motion-fast) ease,background var(--motion-fast) ease,color var(--motion-fast) ease,transform var(--motion-fast) var(--ease-smooth),box-shadow var(--motion-fast) ease;color:var(--text-2);font-size:var(--text-md)}.photo-drop-zone.drag-over,.photo-drop-zone:hover{border-color:var(--accent);background:var(--accent-soft);color:var(--accent);transform:translateY(-2px)}.drop-icon{font-size:2.5rem}.hidden-file-input{position:absolute;width:0;height:0;opacity:0;overflow:hidden}.photo-preview{display:block;width:100%;max-height:350px;object-fit:contain;border-radius:var(--radius-sm);background:var(--surface)}.photo-crop-container{position:relative;width:fit-content;max-width:100%;margin:0 auto;overflow:visible;background:#000;border-radius:var(--radius-sm);user-select:none}.photo-crop-canvas{display:block;max-width:100%;border-radius:var(--radius-sm)}.crop-box{position:absolute;border:2px solid rgba(255,107,53,.9);box-shadow:0 0 0 9999px rgba(0,0,0,.52);cursor:move;touch-action:none}.crop-handle{position:absolute;width:20px;height:20px;background:#fff;border-radius:3px;border:2px solid var(--accent);box-shadow:0 1px 6px var(--overlay-black-strong)}.crop-handle-nw{top:-10px;left:-10px;cursor:nw-resize}.crop-handle-ne{top:-10px;right:-10px;cursor:ne-resize}.crop-handle-sw{bottom:-10px;left:-10px;cursor:sw-resize}.crop-handle-se{bottom:-10px;right:-10px;cursor:se-resize}.photo-crop-actions{display:flex;gap:var(--space-sm);margin-top:.625rem;margin-bottom:var(--space-md);justify-content:flex-end}.photo-crop-actions button{height:40px;min-height:0;width:auto;padding:0 1.1rem;font-size:var(--text-sm);margin-top:0}#photo-crop-apply-btn,#photo-crop-cancel-btn{flex:1;min-height:40px;margin-top:0}#photo-crop-apply-btn{color:#fff}#photo-crop-cancel-btn{color:var(--text);border-color:var(--border-strong)}.photo-day-picker{display:flex;gap:var(--space-xs);margin-bottom:.875rem}.photo-day-chip{flex:1;min-height:40px;font-size:var(--text-xs);font-weight:600;letter-spacing:.01em;padding:0;border:1px solid var(--border-strong);border-radius:var(--radius-xs);background:var(--surface);color:var(--text-2);cursor:pointer;transition:background var(--motion-fast) ease,color var(--motion-fast) ease,border-color var(--motion-fast) ease}.photo-day-chip.active{background:var(--accent-strong);border-color:var(--accent);color:#fff}.photo-day-chip:disabled{opacity:.28;cursor:not-allowed}.photo-caption-input{width:100%;padding:.65rem .85rem;background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--radius-xs);color:var(--text);font-size:var(--text-md);outline:0;transition:border-color var(--motion-fast) ease}.photo-caption-input:focus{border-color:var(--accent)}.photo-caption-input::placeholder{color:var(--text-3)}.upload-progress{height:3px;background:var(--bg-elevated,#2a2a2a);border-radius:2px;overflow:hidden;margin-bottom:12px}#photo-upload-progress.hidden{display:block!important;visibility:hidden}.upload-progress-bar{height:100%;background:var(--accent,#6c63ff);width:30%;border-radius:2px;animation:upload-indeterminate 1.4s ease-in-out infinite}@keyframes upload-indeterminate{0%{transform:translateX(-100%)}100%{transform:translateX(400%)}}.photo-lightbox{--lightbox-desktop-width:min(820px, calc(100vw - 8rem));--lightbox-side-offset:max(1rem, calc((100vw - var(--lightbox-desktop-width)) / 2 - 2.75rem));position:fixed;inset:0;z-index:9999;background:rgba(0,0,0,.92);display:flex;align-items:center;justify-content:center;padding:max(4.75rem,calc(env(safe-area-inset-top) + 3.75rem)) 1rem max(1rem,env(safe-area-inset-bottom)) 1rem;animation:fadeInPlain var(--motion-tab) var(--ease-smooth);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.lightbox-stage{position:relative;display:inline-flex;flex-direction:column;align-items:center;justify-content:center;max-width:calc(100vw - 2rem);max-height:calc(100dvh - max(5.75rem,calc(env(safe-area-inset-top) + 4.5rem)) - max(1rem,env(safe-area-inset-bottom)));gap:.85rem}.lightbox-img{display:block;max-width:100%;max-height:calc(100dvh - max(5.75rem,calc(env(safe-area-inset-top) + 4.5rem)) - max(1rem,env(safe-area-inset-bottom)));border-radius:var(--radius-sm);box-shadow:var(--shadow-lg);object-fit:contain;animation:modalIn var(--motion-base) var(--ease-smooth) backwards;will-change:transform,opacity,filter}.lightbox-img{touch-action:none}.lightbox-img.is-zoomed{cursor:grab}.lightbox-img.lightbox-step-next{animation:lightboxStepNext 260ms var(--ease-smooth) both}.lightbox-img.lightbox-step-prev{animation:lightboxStepPrev 260ms var(--ease-smooth) both}.photo-lightbox.lightbox-static .lightbox-img{max-width:min(100%,820px);max-height:min(calc(100dvh - max(7.5rem,calc(env(safe-area-inset-top) + 6rem)) - max(1rem,env(safe-area-inset-bottom))),660px);border-radius:calc(var(--radius-sm) + 2px);background:rgba(24,24,24,.96);box-shadow:0 0 0 1px var(--overlay-white-soft),var(--shadow-lg)}.lightbox-static-actions{display:flex;justify-content:center;width:100%}.lightbox-feed-btn{width:auto;min-height:40px;padding:0 1rem;margin-top:0;font-size:var(--text-sm);font-weight:700;color:var(--text);background:rgba(18,18,18,.72);border-color:var(--overlay-white-strong);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);box-shadow:0 14px 34px rgba(0,0,0,.24)}.lightbox-close{position:fixed;top:max(1rem,env(safe-area-inset-top));right:1rem;background:rgba(18,18,18,.52);border:1px solid var(--overlay-white-medium);color:#fff;font-size:var(--text-xl);width:44px;height:44px;border-radius:var(--radius-round);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background var(--motion-fast) ease,transform var(--motion-fast) var(--ease-smooth),border-color var(--motion-fast) ease,box-shadow var(--motion-fast) ease;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);box-shadow:0 12px 28px rgba(0,0,0,.28)}.lightbox-close:hover{background:var(--overlay-white-strong);border-color:rgba(255,255,255,.2);transform:rotate(90deg) scale(1.04)}@media (min-width:601px){.lightbox-close{right:var(--lightbox-side-offset)}}.lightbox-nav{position:fixed;top:50%;transform:translateY(-50%);background:linear-gradient(180deg,var(--overlay-white-medium),var(--overlay-white-subtle)),rgba(16,16,16,.58);border:1px solid var(--overlay-white-strong);color:#fff;font-size:2.2rem;line-height:1;width:54px;height:68px;border-radius:18px;cursor:pointer;display:flex;align-items:center;justify-content:center;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);box-shadow:0 18px 42px var(--overlay-black-soft);user-select:none;-webkit-user-select:none;touch-action:manipulation}.lightbox-nav span{display:block;transform:translateY(-2px)}.lightbox-nav:hover:not(:disabled){background:linear-gradient(180deg,rgba(255,255,255,.18),var(--overlay-white-soft)),rgba(22,22,22,.72);border-color:var(--overlay-white-prominent);transform:translateY(-50%)}.lightbox-nav:active:not(:disabled){background:linear-gradient(180deg,var(--overlay-white-strong),var(--overlay-white-subtle)),rgba(22,22,22,.68);transform:translateY(-50%)}.lightbox-nav:focus-visible{outline:0;border-color:var(--overlay-white-prominent);box-shadow:0 0 0 3px var(--overlay-white-medium),0 18px 42px var(--overlay-black-soft)}.lightbox-nav:disabled{opacity:.34;cursor:default;box-shadow:none;pointer-events:none}.lightbox-nav.hidden{opacity:0;pointer-events:none}.lightbox-prev{left:1rem}.lightbox-next{right:1rem}@media (min-width:601px){.lightbox-prev{left:var(--lightbox-side-offset)}.lightbox-next{right:var(--lightbox-side-offset)}}@media (max-width:600px){.lightbox-nav{display:none}}.double-tap-heart{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%) scale(0);font-size:5.5rem;pointer-events:none;animation:doubleTapHeart .72s ease forwards;z-index:10;filter:drop-shadow(0 4px 16px rgba(0,0,0,.5));will-change:transform,opacity}.double-tap-heart.unlike{font-size:4rem;animation:doubleTapUnlike .6s ease forwards}@keyframes feedIn{from{opacity:0;transform:translateY(6px) scale(.997)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes feedTargetPulse{0%{background:var(--accent-tint);box-shadow:inset 0 0 0 1px var(--accent-border),0 0 0 rgba(255,107,53,0)}45%{background:rgba(255,107,53,.09);box-shadow:inset 0 0 0 1px rgba(255,107,53,.24),0 0 20px var(--accent-tint)}100%{background:rgba(255,107,53,.07);box-shadow:inset 0 0 0 1px rgba(255,107,53,.22),0 0 0 rgba(255,107,53,0)}}@keyframes captionEditorIn{from{opacity:0;transform:translateY(5px) scale(.997)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes captionControlsIn{from{opacity:0;transform:translateY(5px)}to{opacity:1;transform:translateY(0)}}@keyframes likePopIn{0%{transform:scale(.92)}55%{transform:scale(1.18)}100%{transform:scale(1)}}@keyframes doubleTapHeart{0%{transform:translate(-50%,-50%) scale(0);opacity:0}12%{transform:translate(-50%,-50%) scale(1.28);opacity:1}22%{transform:translate(-50%,-50%) scale(.96);opacity:1}32%{transform:translate(-50%,-50%) scale(1.08);opacity:1}55%{transform:translate(-50%,-50%) scale(1.04);opacity:1}100%{transform:translate(-50%,-50%) scale(1.1);opacity:0}}@keyframes doubleTapUnlike{0%{transform:translate(-50%,-50%) scale(.8);opacity:1}40%{transform:translate(-50%,-50%) scale(1.1);opacity:.7}100%{transform:translate(-50%,-50%) scale(.7);opacity:0}}@keyframes fadeInPlain{from{opacity:0}to{opacity:1}}@keyframes lightboxStepNext{from{opacity:0;transform:translateX(16px) scale(.988);filter:blur(2px)}to{opacity:1;transform:translateX(0) scale(1);filter:blur(0)}}@keyframes lightboxStepPrev{from{opacity:0;transform:translateX(-16px) scale(.988);filter:blur(2px)}to{opacity:1;transform:translateX(0) scale(1);filter:blur(0)}}.feed-badge{display:inline-flex;align-items:center;justify-content:center;background:var(--accent-strong);color:#fff;font-size:var(--text-2xs);font-weight:700;min-width:16px;height:16px;padding:0 4px;border-radius:var(--radius-xs);margin-left:5px;vertical-align:middle;line-height:1}.ptr-indicator{position:fixed;top:0;left:50%;transform:translateX(-50%) translateY(-72px);display:flex;align-items:center;justify-content:center;gap:.45rem;padding:0 .85rem;min-width:9.5rem;height:36px;background:var(--surface3);border:1.5px solid var(--border-strong);border-radius:var(--radius-pill);color:var(--text-2);font-size:var(--text-xs);font-weight:600;letter-spacing:.01em;white-space:nowrap;pointer-events:none;z-index:9999;box-shadow:0 4px 16px var(--overlay-black-medium),0 1px 4px var(--overlay-black-soft);transition:color .18s ease,background .18s ease,border-color .18s ease,box-shadow .18s ease;overflow:hidden}.ptr-indicator::after{content:'';position:absolute;bottom:0;left:0;height:2px;width:calc(var(--ptr-progress,0) * 100%);background:var(--accent);border-radius:0 999px 999px 0;transition:width 50ms linear,opacity var(--motion-fast) ease;opacity:var(--ptr-progress,0)}.ptr-indicator.ptr-error::after,.ptr-indicator.ptr-ready::after,.ptr-indicator.ptr-refreshing::after,.ptr-indicator.ptr-success::after{display:none}.ptr-icon{font-size:var(--text-base);display:flex;align-items:center}.ptr-icon svg{width:1rem;height:1rem;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.ptr-label{line-height:1}.ptr-indicator.ptr-ready{color:#fff;background:var(--accent-strong);border-color:var(--accent);box-shadow:0 4px 20px rgba(255,107,53,.45),0 1px 4px var(--overlay-black-soft)}.ptr-indicator.ptr-cooldown{color:var(--text-3);border-style:dashed}.ptr-indicator.ptr-snap{animation:ptrSnap 260ms var(--ease-spring)}.ptr-indicator.ptr-success{color:#fff;background:#22c55e;border-color:#22c55e;box-shadow:0 4px 20px rgba(34,197,94,.4),0 1px 4px var(--overlay-black-soft)}.ptr-indicator.ptr-error{color:#fff;background:#ef4444;border-color:#ef4444}@keyframes ptrIconSpin{to{transform:rotate(360deg)}}@keyframes ptrSnap{0%{transform:translateX(-50%) translateY(var(--ptr-y,0)) scale(1)}48%{transform:translateX(-50%) translateY(var(--ptr-y,0)) scale(1.1)}100%{transform:translateX(-50%) translateY(var(--ptr-y,0)) scale(1)}}.ptr-indicator.ptr-refreshing{color:#fff;background:var(--accent-strong);border-color:var(--accent)}.ptr-indicator.ptr-refreshing .ptr-icon{animation:ptrIconSpin .8s linear infinite;transform-origin:center}.kcal-reminder{margin:0 .75rem .75rem;display:flex;flex-direction:column;gap:var(--space-sm);font-size:var(--text-sm)}.kcal-reminder.hidden{display:none}.kcal-reminder-block{padding:.65rem .75rem;background:rgba(245,158,11,.07);border:1px solid rgba(245,158,11,.2);border-left:3px solid rgba(245,158,11,.7);border-radius:10px;display:flex;flex-direction:column;gap:.55rem}.kcal-reminder-header{display:flex;align-items:flex-start;gap:.4rem}.kcal-reminder-header-text{display:flex;flex-direction:column}.kcal-reminder-icon{font-size:var(--text-sm);color:rgba(245,158,11,.9);flex-shrink:0;font-style:normal}.kcal-reminder-title{font-weight:600;color:var(--text-primary);font-size:var(--text-sm)}.kcal-reminder-subtitle{font-size:var(--text-xs);color:var(--text-2);margin-top:.05rem}.kcal-reminder-sections{display:flex;flex-direction:column;gap:.45rem}.kcal-reminder-section{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-sm)}.kcal-reminder-section-head{display:flex;flex-direction:column;gap:.2rem;flex:1;min-width:0}.kcal-reminder-label{font-size:var(--text-xs);color:var(--text-2);text-transform:uppercase;letter-spacing:.04em}.kcal-reminder-days{display:flex;flex-wrap:wrap;gap:.2rem}.kcal-reminder-item{background:rgba(245,158,11,.1);border:1px solid rgba(245,158,11,.2);border-radius:5px;padding:.1rem .38rem;color:var(--text-primary);white-space:nowrap;font-size:var(--text-xs)}.kcal-reminder-btn{flex-shrink:0;background:rgba(245,158,11,.12);border:1px solid rgba(245,158,11,.28);color:var(--text-primary);border-radius:7px;padding:.28rem .6rem;font-size:var(--text-xs);font-weight:500;cursor:pointer;touch-action:manipulation;white-space:nowrap;align-self:center;transition:background var(--motion-fast) ease,transform var(--motion-fast) var(--ease-smooth)}.kcal-reminder-btn:hover{background:rgba(245,158,11,.18);transform:translateY(-1px)}.kcal-reminder-btn:active{background:rgba(245,158,11,.24);transform:scale(.93)}.feed-load-more{padding:var(--space-xl) var(--space-lg);display:flex;justify-content:center}.feed-load-more-btn{background:var(--surface2);border:1px solid var(--border-strong);color:var(--text-2);border-radius:var(--radius-sm);padding:.6rem 1.5rem;font-size:var(--text-md);font-weight:600;cursor:pointer;touch-action:manipulation;transition:background var(--motion-fast) ease,color var(--motion-fast) ease,transform var(--motion-fast) var(--ease-smooth)}.feed-load-more-btn:hover{background:var(--surface3);color:var(--text);transform:translateY(-1px)}.feed-load-more-btn:active{background:var(--surface3);transform:scale(.93)}.feed-scroll-sentinel{height:1px}.feed-bottom-loading{display:flex;justify-content:center;padding:1.25rem}.feed-bottom-loading::after{content:'';width:22px;height:22px;border:2px solid var(--border-strong);border-top-color:var(--accent);border-radius:var(--radius-round);animation:spin .7s linear infinite}.feed-comments{padding:.5rem 1rem .75rem;background:var(--surface2)}.feed-comment{display:flex;align-items:baseline;gap:.3em;font-size:var(--text-md);padding:.2rem 0;color:var(--text)}.feed-comment-author{font-weight:600;flex-shrink:0}.feed-comment-text{flex:1;word-break:break-word;line-height:1.4}.feed-comment-time{font-size:var(--text-xs);color:var(--text-3);flex-shrink:0}.feed-comment-meta{display:inline-flex;align-items:center;gap:.35rem;margin-left:auto;flex-shrink:0}.feed-comment-body{row-gap:.15rem}.feed-comment-edit-btn{background:0 0;border:none;color:var(--text-3);font-size:var(--text-xs);cursor:pointer;padding:6px 8px;min-width:32px;min-height:32px;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--radius-sm,6px);opacity:0;transition:opacity var(--motion-fast) ease,background-color 120ms ease;flex-shrink:0;-webkit-tap-highlight-color:transparent}.feed-comment-edit-btn:active{background-color:rgba(255,255,255,.06)}.feed-comment:focus-within .feed-comment-edit-btn,.feed-comment:hover .feed-comment-edit-btn{opacity:1}@media (hover:none){.feed-comment-edit-btn{opacity:.7}}.feed-comment-del{background:0 0;border:none;color:var(--text-3);font-size:var(--text-xs);cursor:pointer;padding:6px 8px;min-width:32px;min-height:32px;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--radius-sm,6px);opacity:0;transition:opacity var(--motion-fast) ease,background-color 120ms ease;flex-shrink:0;-webkit-tap-highlight-color:transparent}.feed-comment-del:active{background-color:rgba(239,68,68,.1)}.feed-comment:focus-within .feed-comment-del,.feed-comment:hover .feed-comment-del{opacity:1}@media (hover:none){.feed-comment-del{opacity:.7}.caption-edit-btn{opacity:.7}}.feed-comment-composer{margin-top:var(--space-sm)}.feed-comment-form{display:flex;flex-direction:column;gap:.3rem}.feed-comment-context{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);padding:.3rem .3rem .3rem .65rem;background:color-mix(in srgb,var(--accent) 8%,var(--surface2));border:1px solid color-mix(in srgb,var(--accent) 24%,transparent);border-radius:var(--radius-sm);font-size:var(--text-xs);color:var(--text-2)}.feed-comment-context-label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.feed-comment-context-label strong{color:var(--text);font-weight:600}.feed-comment-context-cancel{flex-shrink:0;min-height:36px;padding:0 .7rem;background:0 0;border:0;border-radius:var(--radius-xs);color:var(--accent);font:inherit;font-weight:600;cursor:pointer;touch-action:manipulation}.feed-comment-context-cancel:hover{background:var(--accent-soft)}.feed-comment-field{display:flex;align-items:flex-end;gap:var(--space-sm)}.feed-comment-input{flex:1;min-width:0;min-height:44px;max-height:8rem;resize:none;overflow-y:auto;background:var(--surface2);border:1px solid var(--border-strong);border-radius:var(--radius-sm);color:var(--text);font:inherit;font-size:max(16px,var(--text-sm));line-height:1.35;padding:.65rem .8rem;outline:0;transition:border-color var(--motion-fast) ease,box-shadow var(--motion-fast) ease}.feed-comment-input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.feed-comment-input[readonly]{opacity:.7}.feed-comment-form.has-error .feed-comment-input{border-color:var(--color-danger)}.feed-comment-foot{display:flex;justify-content:space-between;gap:var(--space-sm);min-height:0}.feed-comment-foot:not(:has(.feed-comment-error:not(:empty),.feed-comment-counter:not([hidden]))){display:none}.feed-comment-error{color:var(--color-danger-text);font-size:var(--text-xs)}.feed-comment-error:empty{display:none}.feed-comment-counter{margin-left:auto;font-size:var(--text-xs);color:var(--text-3);flex-shrink:0;white-space:nowrap;font-variant-numeric:tabular-nums}.feed-comment-counter.is-limit{color:var(--color-danger-text);font-weight:600}.feed-comment-send{position:relative;background:var(--accent-strong);border:0;border-radius:var(--radius-sm);color:#fff;width:44px;height:44px;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:var(--text-base);touch-action:manipulation;transition:opacity var(--motion-fast) ease,transform var(--motion-fast) var(--ease-smooth);flex-shrink:0}.feed-comment-send:hover:not(:disabled){opacity:.92}.feed-comment-send:active:not(:disabled){transform:scale(.94)}.feed-comment-send:disabled{background:var(--surface3);color:var(--text-3);cursor:default}.feed-comment-send.is-busy{cursor:wait}.feed-comment-send.is-busy .ui-icon{opacity:0}.feed-comment-send.is-busy::after{content:'';position:absolute;top:50%;left:50%;width:18px;height:18px;margin:-9px 0 0 -9px;border-radius:var(--radius-round);border:2px solid rgba(255,255,255,.35);border-top-color:#fff;animation:spin .7s linear infinite}.feed-comment.is-editing>.feed-comment-body{background:var(--accent-soft);box-shadow:-3px 0 0 var(--accent);border-radius:var(--radius-xs);padding:.2rem .4rem;margin-left:3px}.feed-comment.is-pending>.feed-comment-body{opacity:.6}@media (prefers-reduced-motion:reduce){.feed-comment-input,.feed-comment-send{transition:none}.feed-comment-send.is-busy::after{animation-duration:2s}}.caption-edit-btn{background:0 0;border:none;cursor:pointer;font-size:var(--text-sm);padding:0 .2rem;opacity:0;transition:opacity var(--motion-fast) ease;vertical-align:middle}.feed-post-caption:hover .caption-edit-btn{opacity:.6}.feed-post-caption:hover .caption-edit-btn:hover{opacity:1}.caption-add-btn{opacity:.4!important;font-size:var(--text-sm);color:var(--text-2);font-weight:500}.caption-add-btn:hover{opacity:.8!important}.caption-edit-form{display:flex;flex-direction:column;gap:var(--space-sm);animation:captionControlsIn 220ms var(--ease-smooth) backwards}.caption-edit-input{width:100%;background:var(--surface2);border:1px solid var(--accent-border);border-radius:var(--radius-xs);color:var(--text);font-size:var(--text-md);padding:var(--space-sm) var(--space-md);resize:none;outline:0;min-height:60px;font-family:inherit}.caption-edit-footer{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}.caption-edit-chars{font-size:var(--text-xs);color:var(--text-3);flex-shrink:0}.caption-edit-btns{display:flex;align-items:center;gap:var(--space-sm);justify-content:flex-end}.caption-edit-btns .btn-logout{min-height:44px;height:auto;padding:.4rem .75rem;font-size:var(--text-sm)}.caption-edit-btns .btn-primary{width:auto;height:auto;min-height:44px;margin-top:0;padding:.4rem 1rem;font-size:var(--text-sm)}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,::after,::before{animation-duration:1ms!important;animation-iteration-count:1!important;transition-duration:1ms!important}}