:root{--bg: #f6f7f9;--panel: #ffffff;--line: #e4e7ec;--line-soft: #eef0f4;--text: #1a1d23;--muted: #6b7280;--faint: #9aa1ad;--blue: #2563eb;--blue-soft: #eff5ff;--blue-line: #bfd6fe;--green: #059669;--amber: #d97706;--radius: 10px;--shadow-sm: 0 1px 2px rgba(16, 24, 40, .06);--shadow-md: 0 8px 24px rgba(16, 24, 40, .1);--shadow-lg: 0 24px 60px rgba(16, 24, 40, .22)}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Inter,Roboto,Helvetica,Arial,sans-serif;font-size:14px;-webkit-font-smoothing:antialiased}button{font:inherit;color:inherit;cursor:pointer}input,select,textarea{font:inherit;color:inherit}.app{display:grid;grid-template-columns:320px 1fr;height:100vh;overflow:hidden}.sidebar{background:var(--panel);border-right:1px solid var(--line);display:flex;flex-direction:column;min-height:0}.sidebar-head{padding:18px 16px 14px;border-bottom:1px solid var(--line)}.sidebar-head h1{margin:0;font-size:15px;font-weight:650;letter-spacing:-.01em}.sidebar-head p{margin:5px 0 0;font-size:12px;color:var(--faint);line-height:1.4}.sidebar-scroll{flex:1;overflow-y:auto;padding:8px 0 24px;min-height:0}.project{border-bottom:1px solid var(--line-soft)}.project-head{display:flex;align-items:center;gap:8px;width:100%;padding:10px 14px;background:none;border:0;text-align:left}.chevron{width:12px;color:var(--faint);flex:0 0 auto;transition:transform .15s ease;font-size:10px}.chevron.open{transform:rotate(90deg)}.dot{width:8px;height:8px;border-radius:999px;flex:0 0 auto}.project-name{font-weight:600;font-size:13px;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.project-count{font-size:11px;color:var(--faint);font-variant-numeric:tabular-nums}.task-list{padding:0 8px 10px 14px}.task-row{display:flex;align-items:center;gap:8px;padding:7px 8px 7px 10px;margin:3px 0;border-radius:8px;border:1px solid transparent;background:#fafbfc;cursor:grab;-webkit-user-select:none;user-select:none}.task-row:hover{background:#f2f4f7}.task-row:active{cursor:grabbing}.task-row.dragging{opacity:.4}.task-row.scheduled{background:var(--blue-soft);border-color:var(--blue-line)}.task-row.scheduled:hover{background:#e4eefe}.grip{color:#c4c9d2;font-size:12px;line-height:1;letter-spacing:1px;flex:0 0 auto}.task-row.scheduled .grip{color:#9dbcf5}.task-body{flex:1;min-width:0}.task-title{font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.task-row.scheduled .task-title{color:#1447c4;font-weight:550}.task-meta{font-size:11px;color:var(--faint);margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.task-row.scheduled .task-meta{color:#4a7fdd}.task-row.done .task-title{text-decoration:line-through;color:var(--faint)}.add-task{display:block;width:calc(100% - 4px);text-align:left;padding:6px 10px;margin:4px 0 2px;border:0;background:none;color:var(--faint);font-size:12px;border-radius:8px}.add-task:hover{background:#f2f4f7;color:var(--muted)}.inline-input{width:100%;padding:7px 10px;margin:4px 0;border:1px solid var(--blue-line);border-radius:8px;outline:none;font-size:13px;background:#fff}.inline-input:focus{border-color:var(--blue);box-shadow:0 0 0 3px #2563eb1f}.sidebar-foot{border-top:1px solid var(--line);padding:10px 12px;display:flex;gap:8px}.btn{border:1px solid var(--line);background:#fff;border-radius:8px;padding:7px 12px;font-size:13px;box-shadow:var(--shadow-sm)}.btn:hover{background:#f9fafb}.btn.primary{background:var(--blue);border-color:var(--blue);color:#fff}.btn.primary:hover{background:#1d4ed8}.btn.ghost{border-color:transparent;box-shadow:none;background:none;color:var(--muted)}.btn.ghost:hover{background:#f2f4f7}.btn.danger{color:#b42318;border-color:#fbd3ce;background:#fff}.btn.danger:hover{background:#fef3f2}.btn.sm{padding:5px 9px;font-size:12px}.btn.wide{flex:1}.calendar{display:flex;flex-direction:column;min-width:0;min-height:0;padding:16px 18px 18px}.cal-head{display:flex;align-items:center;gap:10px;padding-bottom:14px}.cal-title{font-size:20px;font-weight:650;letter-spacing:-.02em;min-width:220px}.cal-title .year{color:var(--faint);font-weight:500}.nav-group{display:flex;gap:4px}.icon-btn{width:30px;height:30px;display:grid;place-items:center;border:1px solid var(--line);background:#fff;border-radius:8px;box-shadow:var(--shadow-sm);font-size:13px;color:var(--muted)}.icon-btn:hover{background:#f9fafb;color:var(--text)}.spacer{flex:1}.legend{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--faint)}.legend .swatch{width:10px;height:10px;border-radius:3px;background:var(--blue-soft);border:1px solid var(--blue-line)}.grid-wrap{flex:1;min-height:0;background:var(--panel);border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow-sm);display:flex;flex-direction:column;overflow:hidden}.dow-row{display:grid;grid-template-columns:repeat(7,1fr);border-bottom:1px solid var(--line);background:#fbfcfd}.dow{padding:9px 10px;font-size:11px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--faint)}.weeks{flex:1;display:grid;min-height:0}.week{display:grid;grid-template-columns:repeat(7,1fr);border-bottom:1px solid var(--line-soft);min-height:0}.week:last-child{border-bottom:0}.day{border-right:1px solid var(--line-soft);padding:6px 6px 8px;display:flex;flex-direction:column;gap:3px;min-width:0;min-height:0;overflow:hidden;transition:background .12s ease}.day:last-child{border-right:0}.day.outside{background:#fbfcfd}.day.outside .day-num{color:#c4c9d2}.day.drop-target{background:var(--blue-soft);box-shadow:inset 0 0 0 2px var(--blue)}.day-num{font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums;padding:1px 2px 2px;font-weight:500}.day.today .day-num{background:var(--blue);color:#fff;border-radius:999px;width:22px;height:22px;display:grid;place-items:center;font-weight:650}.day-scroll{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:3px}.chip{display:flex;flex-direction:column;align-items:stretch;flex:0 0 auto;gap:0;padding:3px 6px 4px;border-radius:6px;background:var(--blue-soft);border:1px solid var(--blue-line);border-left:3px solid var(--blue);font-size:11.5px;line-height:1.2;cursor:grab;text-align:left;width:100%;overflow:hidden}.chip-project{font-size:9.5px;font-weight:700;letter-spacing:.02em;line-height:1.15;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;opacity:.85}.chip-main{display:flex;align-items:center;gap:5px;min-width:0}.chip:hover{background:#e4eefe}.chip.dragging{opacity:.4}.chip.done{opacity:.6}.chip.done .chip-title{text-decoration:line-through}.chip.done .chip-project{text-decoration:none}.chip-time{color:var(--blue);font-weight:650;font-variant-numeric:tabular-nums;flex:0 0 auto}.chip-title{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#17325f}.avatar{flex:0 0 auto;width:16px;height:16px;border-radius:999px;display:grid;place-items:center;font-size:8.5px;font-weight:700;color:#fff;letter-spacing:-.02em}.empty-hint{color:var(--faint);font-size:12px;padding:2px}.overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#10182866;display:grid;place-items:center;padding:24px;z-index:50;animation:fade .12s ease}@keyframes fade{0%{opacity:0}to{opacity:1}}.modal{width:460px;max-width:100%;max-height:100%;overflow-y:auto;background:var(--panel);border-radius:14px;box-shadow:var(--shadow-lg);animation:pop .14s ease}@keyframes pop{0%{opacity:0;transform:translateY(6px) scale(.99)}to{opacity:1;transform:none}}.modal-head{padding:16px 18px 14px;border-bottom:1px solid var(--line)}.modal-eyebrow{display:flex;align-items:center;gap:6px;font-size:11px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--faint);margin-bottom:8px}.modal-head input.title{width:100%;border:0;outline:none;font-size:17px;font-weight:600;letter-spacing:-.01em;padding:0}.modal-body{padding:16px 18px;display:grid;grid-template-columns:minmax(0,1fr);gap:14px}.field{display:grid;gap:6px;min-width:0}.row2{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:12px}.row2>*{min-width:0}label.lbl{font-size:11.5px;font-weight:600;color:var(--muted);letter-spacing:.01em}.control{width:100%;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:#fff;outline:none}.control:focus{border-color:var(--blue);box-shadow:0 0 0 3px #2563eb1f}textarea.control{resize:vertical;min-height:64px}.assignees{display:flex;flex-wrap:wrap;gap:6px}.pill{display:flex;align-items:center;gap:6px;padding:5px 10px 5px 5px;border:1px solid var(--line);border-radius:999px;background:#fff;font-size:12.5px}.pill:hover{background:#f9fafb}.pill.on{border-color:var(--blue);background:var(--blue-soft);color:#1447c4;font-weight:550}.pill.none{padding-left:10px}.status-seg{display:flex;border:1px solid var(--line);border-radius:8px;overflow:hidden}.status-seg button{flex:1;padding:7px 8px;border:0;background:#fff;font-size:12.5px;color:var(--muted);border-right:1px solid var(--line)}.status-seg button:last-child{border-right:0}.status-seg button.on{background:var(--blue-soft);color:#1447c4;font-weight:600}.modal-foot{padding:12px 18px 16px;border-top:1px solid var(--line);display:flex;gap:8px;align-items:center}.err{color:#b42318;font-size:12px}::-webkit-scrollbar{width:9px;height:9px}::-webkit-scrollbar-thumb{background:#d8dce3;border-radius:999px;border:2px solid transparent;background-clip:content-box}::-webkit-scrollbar-thumb:hover{background:#c1c7d0;background-clip:content-box}.project-head{display:flex;align-items:center;gap:6px;padding:0 12px 0 0}.project-head:hover{background:#fafbfc}.head-main{display:flex;align-items:center;gap:8px;flex:1;min-width:0;padding:10px 4px 10px 14px;background:none;border:0;text-align:left}.info-btn{flex:0 0 auto;width:18px;height:18px;border-radius:999px;border:1.5px solid #c4c9d2;background:transparent;color:var(--faint);font-size:11px;font-weight:700;font-family:Georgia,Times New Roman,serif;line-height:1;display:grid;place-items:center;padding:0;transition:all .12s ease}.info-btn:hover{border-color:var(--blue);background:var(--blue);color:#fff}.project.is-archived .project-name{color:var(--muted)}.project.is-archived .dot{opacity:.55}.archive-shelf{border-top:1px solid var(--line);background:#fbfcfd;display:flex;flex-direction:column;min-height:0}.archive-shelf.open{max-height:48%}.archive-tab{display:flex;align-items:center;gap:8px;width:100%;padding:11px 14px;background:none;border:0;text-align:left;flex:0 0 auto}.archive-tab:hover{background:#f2f4f7}.archive-label{flex:1;font-size:12px;font-weight:600;letter-spacing:.03em;text-transform:uppercase;color:var(--muted)}.archive-body{overflow-y:auto;min-height:0;border-top:1px solid var(--line-soft);background:var(--panel)}.tag{font-size:10px;font-weight:700;letter-spacing:.04em;padding:2px 6px;border-radius:4px;text-transform:uppercase}.archived-tag{background:#f2f4f7;color:var(--muted)}.toggle{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--muted);cursor:pointer;-webkit-user-select:none;user-select:none;padding:4px 8px;border-radius:7px}.toggle:hover{background:#eef0f4}.toggle input{accent-color:var(--blue);margin:0;cursor:pointer}.chip.archived{background:#f6f7f9;border-color:#dfe3ea;border-left-style:dashed}.chip.archived .chip-title{color:var(--muted)}.chip.archived .chip-project{color:var(--faint)!important}.chip.archived .chip-time{color:var(--faint)}.modal.wide{width:860px}.modal-body.cols{grid-template-columns:1fr 1fr;gap:24px;align-items:start}.modal-body.cols .col{display:grid;grid-template-columns:minmax(0,1fr);gap:14px;align-content:start;min-width:0}.section{border-top:1px solid var(--line-soft);padding-top:14px;display:grid;gap:10px}.modal-body.cols .col>.section:first-child{border-top:0;padding-top:0}.section-title{font-size:11.5px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--faint)}.row3{display:grid;grid-template-columns:minmax(0,1fr) 72px 110px;gap:10px}.row3>*{min-width:0}textarea.control.tall{min-height:132px}.update-compose{display:grid;gap:8px;justify-items:end}.update-compose textarea{min-height:58px}.btn:disabled{opacity:.45;cursor:not-allowed}.update-log{display:grid;gap:8px;max-height:240px;overflow-y:auto;padding-right:2px}.update{border:1px solid var(--line);border-left:3px solid var(--blue-line);border-radius:8px;padding:8px 10px;background:#fbfcfd}.update-head{display:flex;align-items:center;gap:8px;margin-bottom:4px}.update-stamp{flex:1;font-size:11px;font-weight:600;color:var(--faint);letter-spacing:.01em}.update-text{font-size:13px;line-height:1.45;white-space:pre-wrap}.confirm-overlay{z-index:60;background:#1018287a}.modal.confirm{width:420px}.confirm-body{padding:20px 20px 16px}.confirm-title{font-size:15.5px;font-weight:650;letter-spacing:-.01em;margin-bottom:7px}.confirm-detail{font-size:13px;line-height:1.5;color:var(--muted)}.btn.danger-solid{background:#d92d20;border-color:#d92d20;color:#fff}.btn.danger-solid:hover{background:#b42318;border-color:#b42318}.btn.danger-solid:focus-visible{outline:2px solid #fda29b;outline-offset:2px}.app.mobile{grid-template-columns:1fr;grid-template-rows:auto 1fr;height:100dvh}.mtabs{display:flex;gap:6px;padding:10px 12px;padding-top:max(10px,env(safe-area-inset-top));background:var(--panel);border-bottom:1px solid var(--line)}.mtabs button{flex:1;display:flex;align-items:center;justify-content:center;gap:6px;padding:10px 12px;border:1px solid var(--line);border-radius:9px;background:#fff;font-size:14px;font-weight:550;color:var(--muted)}.mtabs button.on{background:var(--blue);border-color:var(--blue);color:#fff}.tab-count{font-size:11px;font-weight:700;padding:1px 6px;border-radius:999px;background:#eef0f4;color:var(--muted);font-variant-numeric:tabular-nums}.mtabs button.on .tab-count{background:#ffffff3d;color:#fff}.mpane{min-height:0;display:flex;flex-direction:column}.mpane>*{flex:1;min-height:0}.app.mobile .sidebar{border-right:0}.app.mobile .task-row{padding:11px 10px;margin:5px 0}.app.mobile .task-title{font-size:14px;white-space:normal}.app.mobile .task-meta{font-size:12px}.app.mobile .head-main{padding:14px 4px 14px 14px}.app.mobile .info-btn{width:26px;height:26px;font-size:13px}.app.mobile .add-task{padding:10px;font-size:13px}.app.mobile .project-head{padding-right:10px}.calendar.compact{padding:12px 12px 0;overflow-y:auto}.calendar.compact .cal-head{flex-wrap:wrap;gap:8px;padding-bottom:10px}.calendar.compact .cal-title{font-size:18px;min-width:0;flex:1}.calendar.compact .icon-btn{width:36px;height:36px}.calendar.compact .btn.sm{padding:8px 12px}.calendar.compact .toggle{width:100%;justify-content:flex-start;padding:2px 0}.calendar.compact .grid-wrap{flex:0 0 auto}.calendar.compact .dow{padding:7px 0;text-align:center;font-size:10px}.calendar.compact .weeks{grid-template-rows:none!important}.calendar.compact .week{min-height:0}.calendar.compact .day{min-height:52px;padding:5px 2px 4px;align-items:center;gap:4px;background:none;border-top:0;border-bottom:0;border-left:0;font:inherit;color:inherit;cursor:pointer}.calendar.compact .day-num{font-size:13px;padding:0;width:26px;height:26px;display:grid;place-items:center;border-radius:999px}.calendar.compact .day.selected .day-num{background:#17325f;color:#fff;font-weight:650}.calendar.compact .day.today.selected .day-num{background:#17325f}.dots{display:flex;align-items:center;gap:3px;height:8px}.day-dot{width:6px;height:6px;border-radius:999px;display:block}.day-more{font-size:9px;font-weight:700;color:var(--faint);line-height:1}.day-detail{padding:16px 2px calc(24px + env(safe-area-inset-bottom))}.day-detail-head{font-size:12px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--faint);padding-bottom:8px}.day-row{display:flex;align-items:center;gap:10px;width:100%;text-align:left;padding:11px 12px;margin-bottom:8px;background:var(--panel);border:1px solid var(--line);border-left:3px solid var(--blue);border-radius:10px;box-shadow:var(--shadow-sm)}.day-row:active{background:#f2f4f7}.day-row-body{flex:1;min-width:0}.day-row-project{font-size:10px;font-weight:700;letter-spacing:.02em;margin-bottom:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.day-row-title{font-size:14px;font-weight:550;line-height:1.3}.day-row.done .day-row-title{text-decoration:line-through;color:var(--faint)}.day-row-meta{font-size:12px;color:var(--muted);margin-top:3px}@media (max-width: 820px){.overlay{padding:0;align-items:stretch}.modal,.modal.wide{width:100%;max-height:100dvh;border-radius:0;display:flex;flex-direction:column}.modal.confirm{width:calc(100% - 32px);margin:auto;border-radius:14px;max-height:none}.overlay.confirm-overlay{padding:16px;align-items:center}.modal-head{padding-top:max(16px,env(safe-area-inset-top))}.modal-body{flex:1;overflow-y:auto}.modal-body.cols{grid-template-columns:minmax(0,1fr);gap:18px}.modal-body.cols .col>.section:first-child{border-top:1px solid var(--line-soft);padding-top:14px}.modal-body.cols .col:first-child>.section:first-child{border-top:0;padding-top:0}.modal-foot{flex-wrap:wrap;padding-bottom:max(16px,env(safe-area-inset-bottom));position:sticky;bottom:0;background:var(--panel)}.modal-foot .btn{flex:1;min-width:96px}.modal-foot .spacer{display:none}.control,.inline-input,.modal-head input.title{font-size:16px}.row3{grid-template-columns:1fr 64px 92px}.pill{padding:8px 12px 8px 6px}.status-seg button{padding:10px 8px}.update-log{max-height:none}}.field-pop{position:relative;min-width:0}.picker-field{display:flex;align-items:center;gap:8px;width:100%;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:#fff;text-align:left;cursor:pointer;transition:border-color .12s ease,box-shadow .12s ease}.picker-field:hover{border-color:#cdd3dc}.picker-field.open,.picker-field:focus-within{border-color:var(--blue);box-shadow:0 0 0 3px #2563eb1f}.picker-value{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.picker-field.empty .picker-value{color:var(--faint)}.picker-input{flex:1;min-width:0;border:0;outline:none;background:none;padding:0;font:inherit;color:inherit}.picker-input::placeholder{color:var(--faint)}.picker-icon{flex:0 0 auto;color:var(--faint);display:grid;place-items:center}.picker-field.open .picker-icon{color:var(--blue)}.popover{position:fixed;z-index:70;max-width:calc(100vw - 24px);overflow-y:auto;background:var(--panel);border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow-md);padding:10px;animation:pop .12s ease}.quick-row{display:flex;align-items:center;gap:5px;flex-wrap:wrap;padding-bottom:9px;margin-bottom:9px;border-bottom:1px solid var(--line-soft)}.quick-label{font-size:10.5px;font-weight:700;letter-spacing:.03em;text-transform:uppercase;color:var(--faint);margin-right:2px}.quick{padding:5px 10px;border:1px solid var(--line);border-radius:999px;background:#fff;font-size:12px;font-weight:550;color:var(--muted);white-space:nowrap}.quick:hover{border-color:var(--blue);background:var(--blue-soft);color:#1447c4}.pop-foot{border-top:1px solid var(--line-soft);margin-top:9px;padding-top:8px;display:flex}.cal-pop{width:268px}.mini-head{display:flex;align-items:center;gap:4px;margin-bottom:6px}.mini-title{flex:1;text-align:center;font-size:13px;font-weight:650;letter-spacing:-.01em}.mini-nav{width:26px;height:26px;display:grid;place-items:center;border:0;background:none;border-radius:7px;color:var(--muted);font-size:14px}.mini-nav:hover{background:#f2f4f7;color:var(--text)}.mini-dow,.mini-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}.mini-dow span{text-align:center;font-size:10px;font-weight:700;color:var(--faint);padding-bottom:3px}.mini-day{aspect-ratio:1;display:grid;place-items:center;border:0;background:none;border-radius:7px;font-size:12.5px;color:var(--text);font-variant-numeric:tabular-nums}.mini-day:hover{background:#eef0f4}.mini-day.outside{color:#c4c9d2}.mini-day.today{box-shadow:inset 0 0 0 1.5px var(--blue-line);font-weight:650}.mini-day.selected{background:var(--blue);color:#fff;font-weight:650;box-shadow:none}.mini-day.selected:hover{background:#1d4ed8}.time-pop{min-width:170px}.slot-list{max-height:208px;overflow-y:auto;display:flex;flex-direction:column;gap:1px;scroll-behavior:auto}.slot{flex:0 0 auto;text-align:left;padding:7px 10px;border:0;background:none;border-radius:7px;font-size:13px;font-variant-numeric:tabular-nums;color:var(--text)}.slot:hover{background:#f2f4f7}.slot.selected{background:var(--blue-soft);color:#1447c4;font-weight:650}@media (max-width: 820px){.picker-field{padding:11px 12px;font-size:16px}.cal-pop{width:min(300px,calc(100vw - 40px))}.mini-day{font-size:14px;border-radius:9px}.slot-list{max-height:44dvh}.slot{padding:11px 12px;font-size:15px}.quick{padding:7px 12px;font-size:13px}}.photo-field{display:grid;gap:7px;min-width:0}.photo-head{display:flex;align-items:baseline;gap:7px;min-width:0}.photo-label{font-size:11.5px;font-weight:600;color:var(--muted);letter-spacing:.01em}.photo-count{font-size:10.5px;font-weight:700;color:var(--muted);background:#f2f4f7;border-radius:999px;padding:1px 6px}.photo-hint{font-size:11.5px;color:var(--faint);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.photo-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(74px,1fr));gap:8px;padding:8px;border:1px dashed var(--line);border-radius:10px;background:#fcfcfd}.photo-grid.over{border-color:var(--blue);background:var(--blue-soft)}.photo-cell{position:relative}.photo-thumb{display:block;width:100%;aspect-ratio:1;padding:0;border:1px solid var(--line);border-radius:8px;overflow:hidden;background:#fff}.photo-thumb img{width:100%;height:100%;object-fit:cover;display:block}.photo-thumb:hover{border-color:var(--blue-line)}.photo-skel,.photo-thumb.busy{display:block;width:100%;height:100%;background:linear-gradient(100deg,#eef0f4 30%,#f7f8fa,#eef0f4 70%) 0 0 / 300% 100%;animation:shimmer 1.1s linear infinite}.photo-thumb.busy{border:1px solid var(--line);border-radius:8px;aspect-ratio:1}@keyframes shimmer{0%{background-position:100% 0}to{background-position:-100% 0}}.photo-x{position:absolute;top:-6px;right:-6px;width:20px;height:20px;line-height:1;font-size:15px;border:1px solid var(--line);border-radius:999px;background:#fff;color:var(--muted);box-shadow:var(--shadow-sm);display:grid;place-items:center;padding:0}.photo-x:hover{color:#b42318;border-color:#fbd3ce}.photo-add{display:grid;place-items:center;align-content:center;gap:2px;aspect-ratio:1;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--muted);font-size:11px;padding:0;box-shadow:var(--shadow-sm)}.photo-add:hover{color:var(--blue);border-color:var(--blue-line);background:var(--blue-soft)}.photo-err{font-size:11.5px;color:#b42318}.lightbox{position:fixed;top:0;right:0;bottom:0;left:0;z-index:80;background:#090c12e0;display:flex;flex-direction:column;animation:fade .12s ease}.lb-bar{display:flex;align-items:center;gap:8px;padding:12px 14px;color:#e7eaf0;flex:0 0 auto}.lb-title{font-size:12px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lb-btn{border:1px solid rgba(255,255,255,.22);background:#ffffff0f;color:#e7eaf0;border-radius:8px;padding:5px 11px;font-size:12px}.lb-btn:hover{background:#ffffff24}.lb-stage{flex:1 1 auto;min-height:0;display:flex;align-items:center;justify-content:center;padding:0 8px 8px;position:relative}.lb-img{max-width:100%;max-height:100%;object-fit:contain;border-radius:6px}.lb-loading{color:#9aa1ad;font-size:13px}.lb-nav{position:absolute;top:50%;transform:translateY(-50%);width:42px;height:42px;border-radius:999px;border:1px solid rgba(255,255,255,.22);background:#090c128c;color:#e7eaf0;font-size:24px;line-height:1;display:grid;place-items:center;padding:0 0 3px}.lb-nav.prev{left:10px}.lb-nav.next{right:10px}.lb-nav:hover{background:#090c12d9}.lb-count{flex:0 0 auto;text-align:center;color:#9aa1ad;font-size:12px;padding:0 0 14px}@media (max-width: 820px){.photo-grid{grid-template-columns:repeat(auto-fill,minmax(84px,1fr));gap:10px}.photo-x{width:24px;height:24px;font-size:17px;top:-7px;right:-7px}.photo-add{font-size:12px}.lb-nav{width:48px;height:48px}}.photo-grid.empty{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.photo-grid.empty .photo-add{aspect-ratio:auto;display:flex;align-items:center;gap:7px;padding:9px 14px}.photo-drop-hint{font-size:11.5px;color:var(--faint)}.gate{min-height:100dvh;display:grid;place-items:center;padding:24px;background:var(--bg)}.gate-card{width:100%;max-width:380px;background:var(--panel);border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow-md);padding:26px 24px 24px;display:grid;gap:12px}.gate-card.quiet{max-width:260px;text-align:center;color:var(--muted);box-shadow:var(--shadow-sm);padding:18px}.gate-mark{font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--blue)}.gate-card h1{margin:0;font-size:19px;font-weight:650;letter-spacing:-.01em}.gate-card p{margin:0;color:var(--muted);line-height:1.5}.gate-card code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12.5px;background:#f2f4f7;border-radius:4px;padding:1px 5px}.gate-btn{display:flex;align-items:center;justify-content:center;gap:9px;padding:11px 14px;margin-top:4px}.gate-err{margin-top:2px}.banner{position:fixed;top:12px;left:50%;transform:translate(-50%);z-index:60;display:flex;align-items:center;gap:8px;max-width:calc(100vw - 24px);padding:8px 8px 8px 14px;background:#fffbeb;border:1px solid #fde68a;border-radius:10px;box-shadow:var(--shadow-md);font-size:12.5px;color:#92400e}.banner span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sidebar-foot{display:flex;align-items:center;gap:8px}.whoami{display:flex;align-items:center;gap:7px;min-width:0;flex:1}.whoami-name{font-size:12.5px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.section-note{margin-left:7px;font-size:10.5px;font-weight:600;letter-spacing:0;text-transform:none;color:var(--faint)}.gate-btn{background:#fff;border-color:var(--line);color:var(--text);font-weight:550}.gate-btn:hover:not(:disabled){background:#f9fafb;border-color:#d5d9e0}.gate-btn:disabled{color:var(--faint);cursor:default}
