:root{--accent: #6366f1;--warn: #f59e0b;font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;--row-h: 40px;--row-pad: 10px;--cell-font: 14px}:root[data-theme=dark],:root:not([data-theme]){--bg: #0b1020;--panel: #111827;--panel-2: #0d1426;--field: #0b1224;--line: #1f2937;--text: #e5e7eb;--muted: #9ca3af;--row-hover: #131c30;--row-alt: #0e1626;--chip: #1f2937}:root[data-theme=light]{--bg: #f6f7fb;--panel: #ffffff;--panel-2: #f1f3f9;--field: #ffffff;--line: #e2e6ef;--text: #1f2430;--muted: #6b7280;--row-hover: #eaeef6;--row-alt: #eef1f8;--chip: #eef1f7}:root[data-density=cozy]{--row-h: 48px;--row-pad: 14px;--cell-font: 15px}:root[data-density=comfortable]{--row-h: 40px;--row-pad: 10px;--cell-font: 14px}:root[data-density=compact]{--row-h: 30px;--row-pad: 6px;--cell-font: 13px}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--text)}.centered{height:100%;display:grid;place-items:center}.card{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:24px;width:min(360px,90vw);display:flex;flex-direction:column;gap:12px}.card h1{margin:0;font-size:20px}.card input,.card button{padding:10px 12px;border-radius:8px;font-size:15px}.card input{background:var(--field);border:1px solid var(--line);color:var(--text)}.card button{background:var(--accent);color:#fff;border:none;cursor:pointer}.card button:disabled{opacity:.5;cursor:default}.card .devlink{background:transparent;color:var(--muted);border:none;text-decoration:underline;padding:4px;font-size:13px}.card .devlink:hover{color:var(--text)}.error{color:#f87171;font-size:13px}.app{display:flex;flex-direction:column;height:100%}.topbar{display:flex;align-items:center;gap:10px;padding:8px 14px;border-bottom:1px solid var(--line);background:var(--panel);flex:none}.topbar .grow{flex:1}.topbar .brand{font-size:15px}.topbar .count{color:var(--muted);font-size:13px}.topbar button,.topbar select{background:var(--chip);color:var(--text);border:1px solid var(--line);border-radius:8px;padding:6px 10px;cursor:pointer;font-size:13px}.topbar .icon{width:34px;padding:6px 0}.settings-menu{position:relative}.settings-popover{position:absolute;top:110%;right:0;z-index:60;width:280px;background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:14px;box-shadow:0 8px 24px #0000004d;display:flex;flex-direction:column;gap:10px}.settings-popover h3{margin:0 0 2px;font-size:14px}.settings-popover .set-row{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--muted)}.settings-popover .set-row>span{width:70px;flex:none}.settings-popover .set-row>span.set-note{width:auto;flex:1}.settings-popover .set-row select{flex:1;min-width:0;max-width:100%;background:var(--field);color:var(--text);border:1px solid var(--line);border-radius:8px;padding:6px 8px;font-size:13px}.toggle{margin-left:auto;flex:none;box-sizing:border-box;width:40px;height:22px;padding:0;border:none;border-radius:999px;background:var(--line);position:relative;cursor:pointer;transition:background .15s;vertical-align:middle}.toggle.on{background:var(--accent)}.toggle:disabled{opacity:.5;cursor:default}.toggle .toggle-knob{position:absolute;top:50%;left:2px;transform:translateY(-50%);width:18px;height:18px;border-radius:50%;background:#fff;box-shadow:0 1px 2px #0000004d;transition:left .15s}.toggle.on .toggle-knob{left:calc(100% - 20px)}.settings-popover .seg{flex:1;display:inline-flex;align-items:center;justify-content:center;gap:6px;background:var(--chip);color:var(--text);border:1px solid var(--line);border-radius:8px;padding:6px 10px;cursor:pointer}.settings-popover .set-hint{margin:0;color:var(--muted);font-size:11px}.settings-popover .set-note{flex:1;color:var(--muted);font-size:12px;text-align:right}.settings-popover .set-row input[type=number]{flex:1;width:0;min-width:0;background:var(--field);color:var(--text);border:1px solid var(--line);border-radius:8px;padding:6px 8px;font-size:13px}.settings-popover .set-row .set-unit{width:auto;flex:none;color:var(--muted);font-size:12px}.nav.menu{display:flex;gap:2px}.nav.menu button{display:inline-grid;background:transparent;border:none;color:var(--muted);padding:6px 10px;border-radius:6px;cursor:pointer;font-size:14px}.nav.menu button:before{content:attr(data-label);font-weight:600;height:0;visibility:hidden;overflow:hidden}.nav.menu button{grid-template-rows:0 1fr;place-items:center}.nav.menu button:hover{background:var(--chip);color:var(--text)}.nav.menu button.on{color:var(--text);font-weight:600;box-shadow:inset 0 -2px 0 var(--accent);border-radius:0}.badge{background:var(--warn);color:#1a1300;border:none;border-radius:999px;padding:4px 10px;font-size:12px;font-weight:600;cursor:pointer}.tt-grid{display:grid;grid-template-columns:var(--tt-cols, 96px 96px 92px 140px 140px 320px 140px 46px 84px minmax(0, 1fr));align-items:center;width:100%;min-width:max-content}.tt-grid .cell{padding:0 10px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--cell-font)}.tt-grid .cell.spacer{padding:0}.tt-grid.head{border-bottom:1px solid var(--line);background:var(--panel-2);position:sticky;top:0;z-index:2}.tt-grid.head .cell{position:relative;overflow:visible;color:var(--muted);font-size:12px;text-transform:uppercase;letter-spacing:.04em;height:34px;line-height:34px}.tt-grid.head .resizer{position:absolute;top:0;right:-4px;width:9px;height:100%;cursor:col-resize;z-index:5}.tt-grid.head .resizer:hover{background:var(--accent);opacity:.5}.tt-grid.row{border-bottom:1px solid var(--line)}.tt-grid.row.odd{background:var(--row-alt)}.tt-grid.row:hover{background:var(--row-hover)}.tt-grid.row.overlap{box-shadow:inset 3px 0 #f87171}.tt-grid .start,.tt-grid .end,.tt-grid .dur{color:var(--muted);font-variant-numeric:tabular-nums}.tt-grid .dur{text-align:right}.tt-grid .task{color:var(--text)}.tt-grid .end{display:flex;align-items:center;gap:3px}.tt-grid .end .tzicon{color:var(--accent);flex:none;display:inline-flex;align-items:center}.future-warn{color:#f59e0b;flex:none;display:inline-flex;align-items:center}.entry-input input[aria-invalid=true]{color:#f59e0b}.tt-grid .actions{display:flex;justify-content:center;gap:4px}.tt-grid .ticks-cell{display:flex;align-items:center}.gap-row{display:flex;align-items:center;justify-content:center;gap:12px;height:var(--row-h);color:var(--muted);font-size:12px;background:repeating-linear-gradient(45deg,transparent,transparent 6px,var(--panel-2) 6px,var(--panel-2) 12px);border-bottom:1px solid var(--line)}.gap-row span{font-style:italic}.linkbtn{background:none;border:none;color:var(--accent);cursor:pointer;font-size:12px;padding:0;text-decoration:underline}.linkbtn:hover{opacity:.8}.date-row{height:var(--row-h);display:flex;align-items:center;padding:0 14px;font-size:12px;font-weight:600;color:var(--text);background:var(--panel-2);border-bottom:1px solid var(--line);position:sticky}.nextday{color:var(--accent);font-size:9px;margin-left:2px}.modal.confirm{width:min(380px,92vw)}.modal.confirm p{margin:0 0 4px}.iconbtn{background:transparent;border:none;color:var(--muted);cursor:pointer;padding:4px;border-radius:6px;display:inline-flex}.iconbtn:hover{color:var(--text)}.iconbtn.danger:hover{color:#f87171}.timeline-wrap{display:flex;flex-direction:column;flex:1;min-height:0;overflow-x:auto}.timeline{flex:1;overflow-y:auto;min-height:0}.tt-grid.row.empty{pointer-events:none}.tt-grid.row.empty:hover{background:inherit}.tt-grid.row{height:var(--row-h)}.entry-input{background:#6366f11f;height:var(--row-h)}.entry-input .cell{padding:0}.entry-input .cell.dur{padding:0 10px}.entry-input input,.entry-input .ac input{width:100%;height:calc(var(--row-h) - 6px);box-sizing:border-box;background:transparent;border:none;border-radius:0;color:var(--text);padding:0 10px;font-size:var(--cell-font)}.entry-input input::placeholder{color:var(--muted);opacity:.55}.entry-input input:focus,.entry-input .ac input:focus{outline:none}.entry-input .derived{color:var(--muted);display:flex;align-items:center;gap:4px}.iconbtn.add-icon,.iconbtn.add-icon:hover{color:var(--accent)}.iconbtn.add-icon:disabled{color:var(--muted);opacity:.5;cursor:default}.mini{background:transparent;border:none;color:var(--muted);cursor:pointer;font-size:13px;padding:2px 4px}.mini:hover{color:var(--text)}.ticks{display:inline-flex;align-items:center}.tick{color:var(--line);margin-left:-4px}.tick.done{color:var(--accent)}.entry-input .endcell{display:flex;gap:4px;align-items:center}.entry-input .endcell input[type=text]{flex:none;width:70px;order:1}.entry-input .endcell .datefield{order:2}.entry-input .endcell .future-warn{order:3}.entry-input .cell.start{padding:0 10px}.entry-input .cell.start input{padding:0;font-variant-numeric:tabular-nums}.entry-input .start .starttime{background:transparent;border:none;color:var(--muted);cursor:pointer;font-size:var(--cell-font);font-variant-numeric:tabular-nums;padding:0;border-radius:6px}.entry-input .start .starttime:hover{color:var(--text);text-decoration:underline}.datefield{position:relative;display:inline-flex;align-items:center;gap:6px}.datefield .native-date{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none;border:0;padding:0}.datebtn{display:inline-flex;align-items:center;gap:1px;background:var(--chip);border:1px solid var(--line);color:var(--muted);border-radius:6px;padding:5px 7px;cursor:pointer}.datebtn:hover{color:var(--text)}.datebtn.rolled{background:#6366f12e;color:var(--accent);border-color:var(--accent)}.datebtn .nextday{color:inherit}.datebtn .badgeslot{display:inline-block;width:12px;text-align:left}.datebtn.icononly{background:transparent;border:none;padding:2px;gap:0;position:relative}.datebtn.icononly .badgeslot{position:absolute;top:-5px;right:-7px;width:auto;font-size:9px;line-height:1;color:var(--accent)}.datebtn.icononly .badgeslot:empty{display:none}.datefield .datetext{font-size:13px;color:var(--text)}.datetimefield{display:inline-flex;align-items:center;gap:8px;flex-wrap:wrap}.datetimefield .timeinput{width:84px;background:var(--field);border:1px solid var(--line);color:var(--text);border-radius:6px;padding:6px 8px;font-size:14px}.syncstatus{position:relative}.topbar .syncstatus .icon.ok{color:var(--accent)}.topbar .syncstatus .icon.off{color:var(--muted)}.topbar .syncstatus .icon.err{color:#f87171}.sync-popover{position:absolute;top:110%;right:0;z-index:60;width:240px;background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:12px;box-shadow:0 8px 24px #0000004d;font-size:13px;display:flex;flex-direction:column;gap:6px}.sync-popover .sp-row{display:flex;align-items:center;gap:8px}.sync-popover .sp-row .grow{flex:1}.sync-popover .sp-row .ghost{background:var(--chip);border:1px solid var(--line);color:var(--text);border-radius:6px;padding:4px 8px;cursor:pointer;display:inline-flex;align-items:center;gap:4px}.sync-popover .sp-line{color:var(--muted)}.sync-popover .sp-error{color:#f87171;word-break:break-word}.cards{flex:1;overflow:auto;padding:10px 12px 96px;display:flex;flex-direction:column;gap:8px}.card-day{position:sticky;top:0;z-index:1;margin:10px 0 2px;padding:4px 2px;font-size:13px;font-weight:600;color:var(--muted);background:var(--bg);border-bottom:1px solid var(--line)}.card-day:first-child{margin-top:0}.entry-card{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:12px 14px;overflow:hidden}.entry-card.overlap{border-left:3px solid #f87171}.entry-card .ec-head{display:flex;justify-content:space-between;align-items:baseline;gap:10px}.entry-card .ec-time{font-size:14px;color:var(--text);font-variant-numeric:tabular-nums}.entry-card .ec-time .nextday{color:var(--muted);font-size:10px;margin-left:2px}.entry-card .ec-dur{flex:none;font-size:13px;font-weight:600;color:var(--accent);font-variant-numeric:tabular-nums}.entry-card .ec-task{font-size:16px;line-height:1.35;margin:6px 0 0;overflow-wrap:anywhere}.entry-card .ec-tags{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}.entry-card .ec-tags em{display:inline-flex;align-items:center;gap:4px;font-style:normal;font-size:12px;background:var(--chip);color:var(--text);border-radius:999px;padding:3px 10px;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.entry-card .ec-tags em svg{flex:none;opacity:.8}.entry-card .ec-tags em.cat{background:#6366f12e;color:var(--accent)}.entry-card.density-compact{padding:8px 12px}.entry-card.density-compact .ec-task{font-size:14px;margin-top:3px}.entry-card.density-cozy{padding:16px}.entry-card.density-cozy .ec-task{font-size:17px;margin-top:8px}.fab{position:fixed;right:18px;bottom:18px;width:56px;height:56px;border-radius:50%;background:var(--accent);color:#fff;border:none;box-shadow:0 6px 20px #00000059;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:40}.gap-card{display:block;width:100%;text-align:center;color:var(--muted);font-size:12px;font-style:italic;padding:4px;background:none;border:none;border-radius:8px;cursor:pointer}.gap-card:active{background:var(--chip)}.mobile-menu{display:inline-flex}.drawer-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:80;background:#00000080;display:flex;justify-content:flex-end;animation:fade-in .12s ease}.drawer{width:min(86vw,340px);height:100%;overflow-y:auto;background:var(--panel);border-left:1px solid var(--line);box-shadow:-8px 0 24px #0006;display:flex;flex-direction:column;gap:14px;padding:14px;animation:slide-in .16s ease}.drawer-head{display:flex;align-items:center;justify-content:space-between}.drawer-head strong{font-size:16px}.drawer-head .icon{width:34px;height:34px;background:none;border:none;color:var(--text);cursor:pointer}.drawer-nav{display:flex;flex-direction:column;gap:2px}.drawer-nav button{display:flex;align-items:center;gap:12px;width:100%;text-align:left;background:none;border:none;color:var(--text);font-size:15px;padding:12px 10px;border-radius:10px;cursor:pointer}.drawer-nav button:hover{background:var(--chip)}.drawer-nav button.on{background:var(--chip);color:var(--accent);font-weight:600;box-shadow:inset 3px 0 0 var(--accent)}.drawer-section{border-top:1px solid var(--line);padding-top:12px;display:flex;flex-direction:column;gap:10px}.drawer-sync-head{display:flex;align-items:center;gap:8px;font-size:14px}.drawer-sync-head .grow{flex:1}.drawer-sync-head .muted{color:var(--muted);font-size:12px}.drawer-sync-head svg.on{color:var(--accent)}.drawer-sync-head svg.off{color:var(--muted)}.drawer-sync-err{color:#f87171;font-size:12px}.drawer-actions{display:flex;gap:8px}.drawer-actions button,.drawer-foot button{flex:1;display:inline-flex;align-items:center;justify-content:center;gap:6px;background:var(--chip);color:var(--text);border:1px solid var(--line);border-radius:8px;padding:10px;font-size:13px;cursor:pointer}.drawer-foot button.danger{color:#f87171}.settings-inline{display:flex;flex-direction:column;gap:10px;border-top:1px solid var(--line);padding-top:12px}.settings-inline h3{margin:0 0 2px;font-size:14px}.settings-inline .set-row{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--muted)}.settings-inline .set-row>span{width:84px;flex:none}.settings-inline .set-row>span.set-note{width:auto;flex:1}.settings-inline .set-row select{flex:1;min-width:0;max-width:100%;background:var(--field);color:var(--text);border:1px solid var(--line);border-radius:8px;padding:8px;font-size:13px}.settings-inline .set-row input[type=number]{flex:1;width:0;min-width:0;background:var(--field);color:var(--text);border:1px solid var(--line);border-radius:8px;padding:8px;font-size:13px}.settings-inline .set-row .set-unit{width:auto;flex:none;color:var(--muted);font-size:12px}.settings-inline .set-hint{margin:0;color:var(--muted);font-size:11px}.settings-inline .set-note{color:var(--muted);font-size:12px;text-align:right}.enc-section{display:flex;flex-direction:column;gap:8px;border-top:1px solid var(--line);padding-top:12px}.enc-state{display:inline-flex;align-items:center;gap:4px;font-size:12px;font-weight:600;margin-left:auto}.enc-state svg{flex:none}.enc-state.on{color:#34c759}.enc-state.locked{color:#ff9f0a}.enc-state.off{color:var(--muted)}.enc-form{display:flex;flex-direction:column;gap:8px}.enc-form input[type=password]{background:var(--field);color:var(--text);border:1px solid var(--line);border-radius:8px;padding:8px;font-size:13px}.enc-form-actions,.enc-actions{display:flex;gap:8px;flex-wrap:wrap}.enc-btn{background:var(--field);color:var(--text);border:1px solid var(--line);border-radius:8px;padding:8px 12px;font-size:13px;cursor:pointer}.enc-btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}.enc-btn:disabled{opacity:.6;cursor:default}.enc-msg{margin:0;font-size:12px;color:var(--muted)}.locked-banner{display:flex;align-items:center;flex-wrap:wrap;gap:8px;padding:8px 12px;background:#ff9f0a22;border-bottom:1px solid #ff9f0a55;font-size:13px;color:var(--text)}.locked-text{display:inline-flex;align-items:center;gap:6px}.locked-text svg{flex:none;color:#ff9f0a}.locked-banner button{background:var(--accent);color:#fff;border:none;border-radius:8px;padding:6px 12px;font-size:13px;cursor:pointer}.locked-form{display:inline-flex;gap:6px}.locked-form input{background:var(--field);color:var(--text);border:1px solid var(--line);border-radius:8px;padding:6px 8px;font-size:13px}.locked-err{color:#ff453a;font-size:12px}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes slide-in{0%{transform:translate(100%)}to{transform:translate(0)}}@media(max-width:760px){.desktop-only{display:none!important}.topbar .count{display:none}.topbar{flex-wrap:wrap;gap:6px 8px;padding:8px 10px}.topbar button,.topbar select{padding:6px 8px}.topbar .icon{width:30px}.topbar .brand{font-size:14px}.topbar .nav.menu{order:10;flex-basis:100%;justify-content:space-around;gap:2px}.topbar .nav.menu button{flex:1}.devices{display:block;overflow-x:auto;-webkit-overflow-scrolling:touch}.devices th,.devices td{white-space:nowrap}}@media(min-width:761px){.mobile-only{display:none!important}}.ac{display:block}.ac-list{z-index:200;margin:2px 0;padding:4px;list-style:none;max-height:280px;overflow:auto;background:var(--panel);border:1px solid var(--line);border-radius:8px;box-shadow:0 8px 24px #0006}.ac-list li{padding:6px 8px;border-radius:6px;cursor:pointer;font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ac-list li.hi{background:var(--accent);color:#fff}.loader{flex:1;display:flex;flex-direction:column;gap:14px;align-items:center;justify-content:center;color:var(--muted)}.spinner{width:36px;height:36px;border:3px solid var(--line);border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite}.backfill-bar{flex:none;display:flex;align-items:center;gap:8px;padding:5px 14px;font-size:12px;color:var(--muted);background:var(--panel-2);border-bottom:1px solid var(--line)}.spinner.sm{width:13px;height:13px;border-width:2px}.loadbar{width:min(320px,70vw);height:8px;background:var(--line);border-radius:999px;overflow:hidden}.loadbar-fill{height:100%;background:var(--accent);border-radius:999px;transition:width .2s ease}.loadpct{margin:0;font-size:13px;color:var(--accent);font-variant-numeric:tabular-nums}.loadhint{margin:0;font-size:12px;color:var(--muted);max-width:320px;text-align:center}@keyframes spin{to{transform:rotate(360deg)}}.page{flex:1;overflow:auto;padding:20px 24px}.page-head{display:flex;align-items:center;gap:8px;margin-bottom:16px}.page-head h1{margin:0;font-size:20px}.page-head .grow{flex:1}.page-head button{background:var(--chip);color:var(--text);border:1px solid var(--line);border-radius:8px;padding:6px 12px;cursor:pointer}.page-head button.on{background:var(--accent);color:#fff}.page section{margin-bottom:24px;max-width:760px}.page h2{font-size:15px;color:var(--muted)}.shortcuts td{padding:6px 12px 6px 0;font-size:14px}kbd{background:var(--chip);border:1px solid var(--line);border-radius:6px;padding:2px 8px;font-family:ui-monospace,monospace;font-size:13px}.devices{width:100%;max-width:760px;border-collapse:separate;border-spacing:0}.devices th{text-align:left;color:var(--muted);font-size:12px;padding:8px;border-bottom:1px solid var(--line)}.devices td{height:44px;padding:6px 8px;border-bottom:1px solid var(--line);font-size:14px}.devices .this{color:var(--accent);font-size:12px}.devices .row-actions{display:flex;gap:8px}.devices button.ghost{background:var(--chip);color:var(--text);border:1px solid var(--line);border-radius:6px;padding:4px 10px;cursor:pointer}.devices button.danger{color:#f87171}.forgotten-note{color:var(--muted);font-size:13px}.sync-offline-banner{display:flex;align-items:center;gap:16px;flex-wrap:wrap;max-width:760px;margin-top:20px;padding:16px;background:var(--panel-2);border:1px solid var(--line);border-radius:12px}.sync-offline-banner .sob-text{display:flex;flex-direction:column;gap:4px;flex:1;min-width:220px}.sync-offline-banner .sob-text strong{font-size:14px}.sync-offline-banner .sob-text span{color:var(--muted);font-size:13px;line-height:1.45}.sync-offline-banner button.primary{flex:none;display:inline-flex;align-items:center;gap:6px;background:var(--accent);color:#fff;border:none;border-radius:8px;padding:9px 14px;cursor:pointer;font-size:14px}.qr-target{display:flex;align-items:center;gap:8px;flex-wrap:wrap;width:100%}.qr-target select{background:var(--field);color:var(--text);border:1px solid var(--line);border-radius:8px;padding:6px 8px}.qr-missing{color:var(--muted);font-size:13px}.devices .dev-name{display:inline-flex;align-items:center;gap:6px}.devices .server-row,.devices .self-row{background:var(--panel-2)}.devices .muted{color:var(--muted);font-size:13px;display:inline-flex;align-items:center;gap:4px}.pending-pill{display:inline-flex;align-items:center;gap:4px;white-space:nowrap;border-radius:999px;padding:3px 9px;font-size:12px;font-weight:600;background:#f59e0b2e;color:var(--warn);border:1px solid rgba(245,158,11,.4)}.pending-pill.ok,.pending-pill.muted{background:transparent;color:var(--muted);border-color:var(--line);font-weight:500}.modal .field{display:grid;grid-template-columns:90px 1fr;align-items:center;gap:10px}.modal .field .flabel{color:var(--muted);font-size:13px}.modal .field .finput,.modal .field .finput input{width:100%}.modal .field .loser{grid-column:2;color:var(--warn);font-size:12px}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;display:grid;place-items:center;z-index:50}.modal{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:20px;width:min(440px,92vw);display:flex;flex-direction:column;gap:10px}.modal h2{margin:0 0 4px;font-size:18px}.modal label{display:flex;align-items:center;gap:10px;font-size:13px;color:var(--muted)}.modal label>input,.modal label>*{color:var(--text)}.modal input{background:var(--field);border:1px solid var(--line);color:var(--text);border-radius:8px;padding:8px 10px;flex:1}.modal .ac input{background:var(--field);color:var(--text)}.modal select{background:var(--field);color:var(--text);border:1px solid var(--line);border-radius:8px;padding:8px 10px;width:100%;font-size:14px}.modal .field .finput select{width:100%}.modal .loser{color:var(--warn);font-size:12px}.conflict-note{color:var(--warn);font-size:13px;margin:0}.modal-actions{display:flex;align-items:center;gap:8px;margin-top:8px}.modal-actions .grow{flex:1}.modal-actions button{background:var(--accent);color:#fff;border:none;border-radius:8px;padding:8px 14px;cursor:pointer}.modal-actions button.ghost{background:var(--chip);color:var(--text)}.modal-actions button.danger{color:#fca5a5}.drawer{position:fixed;top:0;right:0;height:100%;width:min(420px,92vw);z-index:40;background:var(--panel);border-left:1px solid var(--line);padding:16px;overflow:auto}.drawer header{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.drawer .empty{color:var(--muted)}.drawer button.ghost{background:transparent;color:var(--muted);border:none;cursor:pointer;font-size:16px}.conflict-item{border:1px solid var(--line);border-radius:10px;padding:12px;margin-bottom:10px;display:flex;gap:10px;align-items:center}.conflict-fields{flex:1;display:flex;flex-direction:column;gap:4px}.conflict-field{display:flex;gap:8px;font-size:13px;align-items:baseline}.conflict-field .fname{color:var(--muted);width:64px}.conflict-field .kept{color:var(--text)}.conflict-field .vs{color:var(--muted);font-size:11px}.conflict-field .other{color:var(--warn)}.conflict-item button{background:var(--accent);color:#fff;border:none;border-radius:8px;padding:6px 12px;cursor:pointer}.modal.qr{width:min(380px,94vw);align-items:stretch}.qr-head{display:flex;align-items:center;gap:8px}.qr-head .grow{flex:1}.qr-head button.ghost{background:transparent;border:none;color:var(--muted);cursor:pointer;display:inline-flex;padding:2px}.qr-head button.ghost:hover{color:var(--text)}.qr-pane{display:flex;flex-direction:column;gap:12px;align-items:center}.qr-pane h3{margin:4px 0;font-size:15px;color:var(--muted)}.qr-pane canvas{background:#fff;border-radius:8px}.qr-video{width:260px;height:200px;background:#000;border-radius:8px;object-fit:cover}.qr-video.big{width:100%;max-width:340px;height:300px}.qr-pane textarea{width:100%;min-height:56px;background:var(--field);border:1px solid var(--line);color:var(--text);border-radius:8px;padding:8px;font-size:11px;font-family:ui-monospace,monospace}.qr-pane details{width:100%}.qr-pane summary{cursor:pointer;color:var(--muted);font-size:13px}.qr-actions{display:flex;gap:8px}.qr-actions button,.qr-pane details>button{background:var(--accent);color:#fff;border:none;border-radius:8px;padding:8px 14px;cursor:pointer;display:inline-flex;align-items:center;gap:6px}.qr-progress{color:var(--muted);font-size:13px}.qr-status{color:var(--accent);font-size:13px;text-align:center}.qr-status.err{color:#f87171}.hint{color:var(--muted);font-size:12px;text-align:center}.qr-lead{font-size:14px;text-align:center;margin:0}.qr-choice{display:flex;flex-direction:column;gap:8px;width:100%}.qr-choice button{background:var(--chip);color:var(--text);border:1px solid var(--line);border-radius:10px;padding:11px 14px;cursor:pointer;font-size:14px;display:inline-flex;align-items:center;justify-content:center;gap:8px}.qr-choice button.primary{background:var(--accent);color:#fff;border-color:var(--accent)}.qr-choice button:disabled{opacity:.4;cursor:default}.qr-steps{margin:0;padding-left:20px;font-size:13px;color:var(--muted);display:flex;flex-direction:column;gap:6px}.qr-steps strong{color:var(--text)}.qr-anim-wrap{display:flex;flex-direction:column;gap:6px;align-items:center}.qr-confirm{display:flex;align-items:flex-end;gap:8px;width:100%}.qr-confirm label{display:flex;flex-direction:column;gap:4px;font-size:13px;color:var(--muted);flex:1;min-width:0}.qr-confirm input{width:100%;min-width:0;box-sizing:border-box;background:var(--field);border:1px solid var(--line);color:var(--text);border-radius:8px;padding:8px 6px;font-size:18px;letter-spacing:2px;text-align:center;font-family:ui-monospace,monospace}.qr-confirm button{flex:none;background:var(--accent);color:#fff;border:none;border-radius:8px;padding:9px 12px;cursor:pointer;display:inline-flex;align-items:center;gap:6px}.qr-confirm button:disabled{opacity:.4;cursor:default}.qr-anim-meta{color:var(--muted);font-size:13px}.qr-controls{display:flex;gap:6px;align-items:center}.qr-controls button{background:var(--chip);color:var(--text);border:1px solid var(--line);border-radius:8px;padding:7px 10px;cursor:pointer;display:inline-flex}.qr-controls button.primary{background:var(--accent);color:#fff;border-color:var(--accent)}.qr-controls button:disabled{opacity:.4;cursor:default}.qr-frag{width:100%;display:flex;flex-direction:column;gap:6px;align-items:center}.qr-frag-cells{display:flex;flex-wrap:nowrap;gap:2px;width:100%}.qr-frag-cell{flex:1 1 0;min-width:0;height:10px;border-radius:2px;background:var(--chip);border:1px solid var(--line);transition:background .1s}.qr-frag-cell.got{background:#22c55e;border-color:#22c55e}.qr-done{display:inline-flex;align-items:center;gap:8px;color:var(--accent);font-size:15px;text-align:center}.qr-code-show{display:flex;flex-direction:column;align-items:center;gap:4px;padding:12px;background:var(--panel-2);border:1px solid var(--line);border-radius:10px;width:100%}.qr-code-show span{font-size:13px;color:var(--muted)}.qr-code-show strong{font-size:32px;letter-spacing:8px;font-family:ui-monospace,monospace;color:var(--text)}.modal.reports{width:min(720px,95vw)}.reports-head{display:flex;align-items:center;gap:8px}.reports-head h2{margin:0}.reports-head .grow{flex:1}.reports-head button{background:#1f2937;color:var(--text);border:1px solid var(--line);border-radius:8px;padding:6px 10px;cursor:pointer}.reports-head button.on{background:var(--accent);color:#fff}.reports-total{color:var(--muted)}.reports-cols{display:grid;grid-template-columns:1fr 1fr 1fr;gap:16px}.reports-col h3{margin:0 0 8px;font-size:13px;color:var(--muted);text-transform:capitalize}.reports-row{display:flex;justify-content:space-between;gap:8px;font-size:13px;padding:3px 0;border-bottom:1px solid var(--line)}.reports-row .rname{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.reports-row .rval{color:var(--accent);font-variant-numeric:tabular-nums;flex:none}
