:root{--primary: #ff7a45;--primary-dark: #f0622c;--bg: #f7f8fa;--card: #ffffff;--text: #303133;--text-sub: #909399;--border: #ebeef5;--danger: #f56c6c;--radius: 12px}*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent}html,body{height:100%}body{font-family:-apple-system,BlinkMacSystemFont,PingFang SC,Microsoft YaHei,Helvetica Neue,Arial,sans-serif;background:var(--bg);color:var(--text);font-size:15px;line-height:1.5;-webkit-font-smoothing:antialiased}button{font-family:inherit;border:none;background:none;cursor:pointer;color:inherit}input{font-family:inherit;outline:none}img{display:block}#app,.app{height:100%}.app{max-width:720px;margin:0 auto}.page{padding:0 14px calc(76px + env(safe-area-inset-bottom))}.page-header{position:sticky;top:0;z-index:10;display:flex;align-items:center;justify-content:space-between;padding:14px 2px 10px;background:linear-gradient(var(--bg),var(--bg) 85%,rgba(247,248,250,0))}.page-header h1{font-size:20px}.add-btn{background:var(--primary);color:#fff;font-size:14px;padding:8px 14px;border-radius:999px;box-shadow:0 2px 8px #ff7a4559}.add-btn:active{background:var(--primary-dark)}.header-btns{display:flex;align-items:center;gap:8px}.backup-btn{background:var(--card);border:1px solid var(--border);color:var(--text);font-size:14px;padding:7px 13px;border-radius:999px}.backup-tip{font-size:13px;color:var(--text-sub);line-height:1.7;margin-bottom:14px}.import-btn{display:flex;align-items:center;justify-content:center;width:100%;margin-top:10px}.backup-note{font-size:12px;color:var(--text-sub);text-align:center;margin-top:10px}.backup-divider{height:1px;background:var(--border);margin:16px 0}.logout-btn{color:var(--danger, #e5484d);border-color:var(--danger, #e5484d)}.auth-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px}.auth-card{width:100%;max-width:360px;background:var(--card);border-radius:16px;padding:28px 22px;box-shadow:0 4px 24px #0000000f}.auth-title{font-size:22px;text-align:center;color:var(--text)}.auth-sub{text-align:center;color:var(--text-sub);font-size:13px;margin:6px 0 18px}.auth-error{color:var(--danger, #e5484d);font-size:13px;margin-bottom:10px}.auth-switch{display:block;width:100%;text-align:center;margin-top:14px;color:var(--primary);font-size:14px}.auth-tip{text-align:center;color:var(--text-sub);font-size:12px;margin-top:18px}.empty{text-align:center;color:var(--text-sub);padding:80px 0 40px}.empty .big{font-size:40px;margin-bottom:10px}.sub{font-size:13px;color:var(--text-sub)}.dish-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}@media (min-width: 560px){.dish-grid{grid-template-columns:repeat(3,1fr)}}.dish-card{background:var(--card);border-radius:var(--radius);overflow:hidden;box-shadow:0 1px 4px #0000000d}.dish-card:active{opacity:.85}.dish-img{aspect-ratio:4 / 3;min-height:110px;background:#f2f3f5;position:relative}.dish-img img{width:100%;height:100%;object-fit:cover}.placeholder{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;font-size:34px;font-weight:600;color:#c0c4cc}.dish-name{padding:8px 10px;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;background:#00000073;display:flex;overflow-y:auto;animation:fadeIn .2s ease;padding:0}.mask.center{align-items:center;justify-content:center;padding:24px}.sheet{margin-top:auto;width:100%;max-width:720px;background:var(--card);border-radius:16px 16px 0 0;padding:16px 16px calc(16px + env(safe-area-inset-bottom));animation:slideUp .25s ease;max-height:88vh;overflow-y:auto}.dialog{background:var(--card);border-radius:14px;padding:22px 18px 14px;width:100%;max-width:320px;animation:pop .2s ease}.dialog p{font-size:15px}.dialog .sub{margin-top:6px}.dialog-btns{display:flex;gap:10px;margin-top:18px}.dialog-btns button{flex:1;padding:10px;border-radius:10px;font-size:15px;background:#f2f3f5}.dialog-btns .danger{background:var(--danger);color:#fff}.sheet-bar{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px}.sheet-bar h2{font-size:17px}.close{color:var(--text-sub);font-size:14px;padding:4px 8px}@keyframes fadeIn{0%{opacity:0}}@keyframes slideUp{0%{transform:translateY(40%);opacity:.6}}@keyframes pop{0%{transform:scale(.9);opacity:.5}}.field{display:block;margin-bottom:14px}.label{display:block;font-size:13px;color:var(--text-sub);margin-bottom:6px}.label i{color:var(--danger);font-style:normal}.field input{width:100%;border:1px solid var(--border);border-radius:10px;padding:11px 12px;font-size:15px;background:#fafafa}.field input:focus{border-color:var(--primary);background:#fff}.img-upload{display:flex;align-items:center;justify-content:center;height:120px;border:1px dashed #cdd0d6;border-radius:10px;color:var(--text-sub);font-size:14px;background:#fafafa}.img-preview{position:relative;width:120px}.img-preview img{width:120px;height:120px;object-fit:cover;border-radius:10px}.img-remove{position:absolute;top:6px;right:6px;background:#0000008c;color:#fff;font-size:12px;padding:3px 8px;border-radius:999px}.btn-primary{display:block;width:100%;background:var(--primary);color:#fff;font-size:16px;padding:12px;border-radius:12px;margin-top:6px}.btn-primary:active{background:var(--primary-dark)}.btn-primary:disabled{opacity:.6}.btn-ghost,.btn-danger{flex:1;padding:11px;border-radius:10px;font-size:15px}.btn-ghost{background:#f2f3f5}.btn-danger{background:#f56c6c1a;color:var(--danger)}.error{color:var(--danger);font-size:13px;margin:-6px 0 10px}.row{display:flex;gap:10px;margin-top:10px}.detail-img{aspect-ratio:16 / 10;min-height:150px;border-radius:12px;overflow:hidden;background:#f2f3f5;position:relative}.detail-img img{width:100%;height:100%;object-fit:cover}.placeholder.big{font-size:52px}.detail-name{font-size:19px;margin:14px 2px 4px}.detail-actions{margin-top:14px}.detail-actions .btn-primary{margin-top:0}.no-link{text-align:center;padding:8px 0 2px}.cat-tabs{display:flex;gap:8px;overflow-x:auto;padding:2px 2px 12px;-webkit-overflow-scrolling:touch}.lib-layout{height:100vh;height:100dvh;display:flex;flex-direction:column;overflow:hidden}.lib-layout .page-header{padding:14px 2px 10px}.lib-body{flex:1;min-height:0;display:flex;margin:0 -14px}.cat-side{width:76px;flex-shrink:0;background:#f0f1f4;overflow-y:auto;padding:10px 6px calc(96px + env(safe-area-inset-bottom));display:flex;flex-direction:column;gap:2px}.cat-side-btn{padding:12px 4px;border-radius:10px;font-size:13px;color:var(--text-sub);background:transparent;text-align:center}.cat-side-btn.on{background:var(--card);color:var(--primary);font-weight:600}.lib-content{flex:1;min-width:0;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:12px 14px calc(96px + env(safe-area-inset-bottom)) 12px}.cat-tab{flex-shrink:0;padding:6px 14px;border-radius:999px;background:var(--card);font-size:13px;color:var(--text-sub);box-shadow:0 1px 3px #0000000d}.cat-tab.on{background:var(--primary);color:#fff;font-weight:600}.form-cats{flex-wrap:wrap;overflow-x:visible;padding-bottom:0}.detail-cat{margin:0 2px}.small-empty{padding:30px 0}.cal-head{display:flex;align-items:center;justify-content:space-between;padding:2px 2px 10px}.cal-head .month{font-size:17px;font-weight:600}.cal-nav{width:36px;height:36px;border-radius:50%;background:var(--card);box-shadow:0 1px 4px #0000000f;font-size:16px;color:var(--text)}.cal-week{display:grid;grid-template-columns:repeat(7,1fr);text-align:center;font-size:12px;color:var(--text-sub);margin-bottom:6px}.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px 2px}.cal-cell{aspect-ratio:1;border-radius:10px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;font-size:15px;position:relative}.cal-cell:active{background:#f2f3f5}.cal-cell.today .day{background:var(--primary);color:#fff}.cal-cell.selected{background:#ff7a451f}.cal-cell.selected .day{color:var(--primary);font-weight:700}.cal-cell .day{width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center}.cal-dots{display:flex;gap:4px;height:6px}.cal-dots i{width:6px;height:6px;border-radius:50%}.cal-dots .breakfast{background:#2aa864}.cal-dots .lunch{background:var(--primary)}.cal-dots .dinner{background:#6c7bff}.cal-legend{display:flex;gap:16px;justify-content:center;padding:12px 0 2px;font-size:12px;color:var(--text-sub)}.cal-legend i{display:inline-block;width:7px;height:7px;border-radius:50%;margin-right:4px}.meal-block{margin-bottom:16px}.meal-head{display:flex;align-items:baseline;gap:8px;margin-bottom:8px}.meal-head .name{font-size:15px;font-weight:600}.meal-head .count{font-size:12px;color:var(--text-sub)}.meal-dishes{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.chip{display:flex;align-items:center;gap:6px;background:#f5f6f8;border-radius:999px;padding:4px 10px 4px 4px;font-size:13px}.chip img{width:26px;height:26px;border-radius:50%;object-fit:cover;background:#e8eaed}.chip .mini-ph{width:26px;height:26px;border-radius:50%;background:var(--primary);color:#fff;font-size:12px;display:flex;align-items:center;justify-content:center}.chip .x{color:var(--text-sub);font-size:14px;padding:2px 4px}.chip-add{border:1px dashed #cdd0d6;border-radius:999px;padding:6px 14px;font-size:13px;color:var(--primary);background:#fff}.chip-tutorial{flex-shrink:0;font-size:12px;color:var(--primary);border:1px solid var(--primary);border-radius:999px;padding:2px 8px;background:#fff}.meal-empty{font-size:13px;color:var(--text-sub);width:100%;padding:4px 2px}.pick-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}@media (max-width: 380px){.pick-grid{grid-template-columns:repeat(2,1fr)}}.pick-card{position:relative;border-radius:10px;overflow:hidden;border:2px solid transparent;background:#f2f3f5}.pick-card.on{border-color:var(--primary)}.pick-card .ph{aspect-ratio:1;min-height:90px;display:flex;align-items:center;justify-content:center;font-size:26px;color:#c0c4cc;font-weight:600}.pick-card img{width:100%;aspect-ratio:1;min-height:90px;object-fit:cover}.pick-card .pick-name{font-size:12px;padding:5px 6px;background:var(--card);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pick-card .tick{position:absolute;top:5px;right:5px;width:22px;height:22px;border-radius:50%;background:#00000059;color:transparent;font-size:13px;display:flex;align-items:center;justify-content:center}.pick-card.on .tick{background:var(--primary);color:#fff}.tabbar{position:fixed;bottom:0;left:0;right:0;z-index:50;display:flex;background:var(--card);padding-bottom:env(safe-area-inset-bottom);box-shadow:0 -1px 6px #0000000d}.tabbar button{flex:1;padding:12px 0 10px;font-size:14px;color:var(--text-sub);position:relative}.tabbar button.active{color:var(--primary);font-weight:600}.tabbar button.active:before{content:"";position:absolute;top:0;left:50%;transform:translate(-50%);width:28px;height:3px;border-radius:3px;background:var(--primary)}.toast{position:fixed;left:50%;bottom:calc(96px + env(safe-area-inset-bottom));transform:translate(-50%);background:#000000bf;color:#fff;font-size:14px;padding:9px 18px;border-radius:999px;z-index:200;animation:fadeIn .2s ease;white-space:nowrap}
