:root{--dsg-border-color:#e8ebed;--dsg-selection-border-color:#4580e6;--dsg-selection-border-radius:2px;--dsg-selection-border-width:2px;--dsg-selection-background-color:#4580e60a;--dsg-selection-disabled-border-color:#9da6ab;--dsg-selection-disabled-background-color:#0000000a;--dsg-corner-indicator-width:10px;--dsg-header-text-color:#9da6ab;--dsg-header-active-text-color:black;--dsg-cell-background-color:white;--dsg-cell-disabled-background-color:#fafafa;--dsg-transition-duration:.1s;--dsg-expand-rows-indicator-width:10px;--dsg-scroll-shadow-width:7px;--dsg-scroll-shadow-color:#0003}.dsg-container{border:solid 1px var(--dsg-border-color);cursor:cell;-webkit-user-select:none;user-select:none;box-sizing:border-box;color:#000;will-change:transform;direction:ltr;background:#fff;border-top:none;border-left:none;width:100%;position:relative;overflow:auto}.dsg-corner-indicator{border-bottom:solid var(--dsg-corner-indicator-width) var(--dsg-header-text-color);border-left:solid var(--dsg-corner-indicator-width) transparent;width:0;margin:auto}.dsg-row{background:var(--dsg-cell-background-color);box-shadow:0 1px var(--dsg-border-color) inset;position:absolute;top:0;left:0}.dsg-row-header{z-index:40;position:sticky;top:0}.dsg-cell{box-sizing:border-box;background:var(--dsg-cell-background-color);border:solid 1px var(--dsg-border-color);box-shadow:1px 1px var(--dsg-border-color);border-bottom:none;border-right:none;align-items:center;height:100%;display:flex;position:absolute;top:0}.dsg-hidden-cell{display:none}.dsg-cell-sticky-right{z-index:30;margin-left:auto;position:sticky;right:0;transform:translateY(-100%)}.dsg-cell-disabled{background:var(--dsg-cell-disabled-background-color)}.dsg-cell-header,.dsg-cell-gutter{color:var(--dsg-header-text-color);transition:color var(--dsg-transition-duration);box-shadow:none}.dsg-cell-header-container{padding:0 10px;line-height:15px}.dsg-cell-header.dsg-cell-gutter{box-shadow:1px 0 var(--dsg-border-color), 0 1px var(--dsg-border-color)}.dsg-cell-header.dsg-cell-sticky-right{box-shadow:0 1px var(--dsg-border-color)}.dsg-cell-gutter{z-index:30;justify-content:center;height:100%;padding:0 5px;position:sticky;left:0}.dsg-cell-header-active,.dsg-cell-gutter-active{color:var(--dsg-header-active-text-color)}.dsg-active-cell,.dsg-selection-rect{border:solid var(--dsg-selection-border-width) var(--dsg-selection-border-color);box-sizing:border-box;border-radius:var(--dsg-selection-border-radius);transition:all var(--dsg-transition-duration);pointer-events:none;z-index:20;position:absolute}.dsg-active-cell-focus{box-shadow:0 2px 5px #0000004d}.dsg-active-cell-disabled,.dsg-selection-rect-disabled{border-color:var(--dsg-selection-disabled-border-color)}.dsg-selection-rect{background:var(--dsg-selection-background-color)}.dsg-selection-rect-disabled{background:var(--dsg-selection-disabled-background-color)}.dsg-scrollable-view-container{pointer-events:none;position:absolute;top:0;left:0}.dsg-scrollable-view{z-index:10;box-sizing:border-box;border:solid 1px var(--dsg-border-color);box-shadow:0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset;border-bottom:none;border-right:none;transition:box-shadow .3s;position:sticky}.dsg-scrollable-view-t{box-shadow:0 var(--dsg-scroll-shadow-width) var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset}.dsg-scrollable-view-r{box-shadow:0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, calc(0px - var(--dsg-scroll-shadow-width)) 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset}.dsg-scrollable-view-b{box-shadow:0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset}.dsg-scrollable-view-l{box-shadow:0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, var(--dsg-scroll-shadow-width) 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset}.dsg-scrollable-view-t.dsg-scrollable-view-r{box-shadow:0 var(--dsg-scroll-shadow-width) var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, calc(0px - var(--dsg-scroll-shadow-width)) 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset}.dsg-scrollable-view-r.dsg-scrollable-view-b{box-shadow:0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, calc(0px - var(--dsg-scroll-shadow-width)) 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset}.dsg-scrollable-view-b.dsg-scrollable-view-l{box-shadow:0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, var(--dsg-scroll-shadow-width) 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset}.dsg-scrollable-view-l.dsg-scrollable-view-t{box-shadow:0 var(--dsg-scroll-shadow-width) var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, var(--dsg-scroll-shadow-width) 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset}.dsg-scrollable-view-t.dsg-scrollable-view-b{box-shadow:0 var(--dsg-scroll-shadow-width) var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset}.dsg-scrollable-view-l.dsg-scrollable-view-r{box-shadow:0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, calc(0px - var(--dsg-scroll-shadow-width)) 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, var(--dsg-scroll-shadow-width) 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset}.dsg-scrollable-view-t.dsg-scrollable-view-r.dsg-scrollable-view-b{box-shadow:0 var(--dsg-scroll-shadow-width) var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, calc(0px - var(--dsg-scroll-shadow-width)) 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset}.dsg-scrollable-view-r.dsg-scrollable-view-b.dsg-scrollable-view-l{box-shadow:0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, calc(0px - var(--dsg-scroll-shadow-width)) 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, var(--dsg-scroll-shadow-width) 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset}.dsg-scrollable-view-b.dsg-scrollable-view-l.dsg-scrollable-view-t{box-shadow:0 var(--dsg-scroll-shadow-width) var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, var(--dsg-scroll-shadow-width) 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset}.dsg-scrollable-view-l.dsg-scrollable-view-t.dsg-scrollable-view-r{box-shadow:0 var(--dsg-scroll-shadow-width) var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, calc(0px - var(--dsg-scroll-shadow-width)) 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, var(--dsg-scroll-shadow-width) 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset}.dsg-scrollable-view-t.dsg-scrollable-view-r.dsg-scrollable-view-b.dsg-scrollable-view-l{box-shadow:0 var(--dsg-scroll-shadow-width) var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, calc(0px - var(--dsg-scroll-shadow-width)) 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, var(--dsg-scroll-shadow-width) 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset}.dsg-selection-col-marker-container{position:absolute;top:0}.dsg-selection-col-marker{background:var(--dsg-selection-border-color);width:100%;height:var(--dsg-selection-border-width);position:sticky}.dsg-selection-row-marker-container{position:absolute;left:0}.dsg-selection-row-marker{background:var(--dsg-selection-border-color);height:100%;width:var(--dsg-selection-border-width);position:sticky}.dsg-selection-col-marker-container,.dsg-selection-col-marker,.dsg-selection-row-marker-container,.dsg-selection-row-marker{z-index:20;transition:all var(--dsg-transition-duration);pointer-events:none}.dsg-selection-col-marker-disabled,.dsg-selection-row-marker-disabled{background:var(--dsg-selection-disabled-border-color)}.dsg-add-row{border:1px solid var(--dsg-border-color);color:#000;background:#fafafa;border-top:none;align-items:center;padding:7px 10px;display:flex}.dsg-add-row>*{margin-right:10px}.dsg-add-row-btn,.dsg-add-row-input{background:#fff;border:1px solid #dcdcdc;border-radius:2px;align-items:center;padding:7px 10px;transition:all .2s;display:flex;position:relative}.dsg-add-row-input{width:55px}.dsg-add-row-btn:hover,.dsg-add-row-input:hover{border-color:#c7c7c7}.dsg-add-row-btn:focus,.dsg-add-row-input:focus{border-color:var(--dsg-selection-border-color);outline:none}.dsg-add-row-btn:before{content:"";background:#9da6ab;width:10px;height:2px;margin-right:10px;display:inline-block}.dsg-add-row-btn:after{content:"";background:#9da6ab;width:2px;height:10px;margin-right:10px;display:block;position:absolute;left:14px}.dsg-input{box-sizing:border-box;background:0 0;border:none;outline:none;flex:1;align-self:stretch;min-width:0;padding:0 10px;font-size:1rem;display:block}.dsg-input-suffix{opacity:.5;margin-left:-5px;padding-right:10px}.dsg-input-align-right{text-align:right}.dsg-hide-date-picker[type=date]::-webkit-inner-spin-button{-webkit-appearance:none;display:none}.dsg-hide-date-picker[type=date]::-webkit-calendar-picker-indicator{-webkit-appearance:none;display:none}.dsg-checkbox{margin:auto}.dsg-context-menu{z-index:10000;color:#000;background:#fff;border-radius:4px;padding:5px 0;position:fixed;box-shadow:0 2px 6px 2px #3c404326}.dsg-context-menu-item{cursor:default;padding:3px 20px}.dsg-context-menu-item:hover{background:#fafafa}.dsg-expand-rows-indicator{background:var(--dsg-cell-background-color);border:solid 1px var(--dsg-selection-border-color);box-shadow:0 0 0 1px var(--dsg-cell-background-color);width:var(--dsg-expand-rows-indicator-width);height:var(--dsg-expand-rows-indicator-width);box-sizing:border-box;transition:all var(--dsg-transition-duration);cursor:crosshair;z-index:25;position:absolute}.dsg-expand-rows-indicator-disabled{border:solid 1px var(--dsg-selection-disabled-border-color)}.dsg-expand-rows-rect{box-sizing:border-box;transition:all var(--dsg-transition-duration);pointer-events:none;background:#00000008;position:absolute}:root{--font-ui:"Trebuchet MS", "Segoe UI", system-ui, sans-serif;--font-code:"Courier New", ui-monospace, monospace;--c-bg:#f4f6f8;--c-surface:#fff;--c-border:#d6dce2;--c-border-strong:#b6c0c9;--c-text:#1f2933;--c-text-soft:#5b6773;--c-primary:#1f7a4d;--c-primary-dark:#175f3c;--c-primary-soft:#e4f3ea;--c-danger:#b3261e;--c-danger-soft:#fbe9e8;--c-accent:#2f6fb0;--c-header-bg:#eef1f4;--c-selected:#2f6fb029;--radius:6px;--shadow:0 1px 3px #0000001f, 0 1px 2px #00000014;--shadow-lg:0 10px 30px #0000002e}*{box-sizing:border-box}html,body,#root{height:100%}body{font-family:var(--font-ui);color:var(--c-text);background:var(--c-bg);margin:0;font-size:14px}a{color:var(--c-accent)}button{cursor:pointer;font-family:inherit;font-size:14px}.btn{border:1px solid var(--c-border-strong);border-radius:var(--radius);background:var(--c-surface);color:var(--c-text);align-items:center;gap:6px;padding:7px 14px;line-height:1;display:inline-flex}.btn:hover{background:var(--c-header-bg)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--c-primary);border-color:var(--c-primary-dark);color:#fff}.btn-primary:hover{background:var(--c-primary-dark)}.btn-danger{background:var(--c-danger);border-color:var(--c-danger);color:#fff}.btn-danger:hover{filter:brightness(.92)}.btn-ghost{background:0 0;border-color:#0000}.btn-ghost:hover{background:#0000000f}.btn-sm{padding:4px 9px;font-size:13px}.btn-block{justify-content:center;width:100%}.input,.select{border:1px solid var(--c-border-strong);border-radius:var(--radius);background:var(--c-surface);width:100%;color:var(--c-text);padding:8px 10px;font-family:inherit;font-size:14px}.input:focus,.select:focus{outline:2px solid var(--c-accent);outline-offset:-1px}label.field{margin-bottom:14px;display:block}label.field>span{color:var(--c-text-soft);margin-bottom:5px;font-weight:700;display:block}.form-error{border-radius:var(--radius);background:var(--c-danger-soft);color:var(--c-danger);border:1px solid #eecac7;margin:0 0 14px;padding:9px 12px}.form-note{border-radius:var(--radius);background:var(--c-primary-soft);color:var(--c-primary-dark);border:1px solid #c7e5d3;margin:0 0 14px;padding:9px 12px}.muted{color:var(--c-text-soft)}.code{font-family:var(--font-code);background:var(--c-header-bg);border-radius:4px;padding:1px 5px}.auth-wrap{place-items:center;min-height:100%;padding:40px 16px;display:grid}.auth-card{background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--radius);width:100%;max-width:380px;box-shadow:var(--shadow);padding:28px}.auth-card h1{margin:0 0 4px;font-size:22px}.auth-title{align-items:center;gap:10px;display:flex}.auth-title .brand-logo{width:30px;height:30px}.auth-card .sub{color:var(--c-text-soft);margin:0 0 20px}.auth-switch{text-align:center;margin-top:16px}.shell{flex-direction:column;height:100%;display:flex}.topbar{background:var(--c-surface);border-bottom:1px solid var(--c-border);flex-shrink:0;align-items:center;gap:14px;padding:8px 14px;display:flex}.topbar .brand{color:var(--c-primary);letter-spacing:.5px;align-items:center;gap:8px;font-size:17px;font-weight:700;text-decoration:none;display:flex}.brand-logo{object-fit:contain;width:26px;height:26px;display:block}.topbar .spacer,.spacer{flex:1}.editor-bar .form-error,.bar-error{margin:8px 14px 0}.topbar nav{gap:4px;display:flex}.topbar nav a{border-radius:var(--radius);color:var(--c-text-soft);padding:6px 10px;text-decoration:none}.topbar nav a.active{background:var(--c-primary-soft);color:var(--c-primary-dark)}.usermenu{position:relative}.avatar{border:1px solid var(--c-border-strong);background:var(--c-header-bg);width:34px;height:34px;color:var(--c-text-soft);border-radius:50%;flex-shrink:0;place-items:center;font-weight:700;display:grid;overflow:hidden}.avatar img{object-fit:cover;width:100%;height:100%}.usermenu .avatar{padding:0}.avatar-lg{width:72px;height:72px;font-size:22px}.usermenu .dropdown{background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--radius);box-shadow:var(--shadow-lg);z-index:40;min-width:200px;padding:6px;position:absolute;top:calc(100% + 6px);right:0}.usermenu .dropdown .who{border-bottom:1px solid var(--c-border);margin-bottom:6px;padding:8px 10px}.usermenu .dropdown button,.usermenu .dropdown a{text-align:left;width:100%;color:var(--c-text);background:0 0;border:none;border-radius:4px;padding:8px 10px;text-decoration:none;display:block}.usermenu .dropdown button:hover,.usermenu .dropdown a:hover{background:var(--c-header-bg)}.shell-body{flex-direction:column;flex:1;min-height:0;display:flex}.page{width:100%;max-width:900px;margin:0 auto;padding:28px 20px 60px}.page h1{margin:0 0 18px;font-size:24px}.panel{background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--radius);box-shadow:var(--shadow);margin-bottom:22px;padding:20px}.panel h2{margin:0 0 14px;font-size:17px}.wb-grid{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:14px;display:grid}.wb-card{background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--radius);box-shadow:var(--shadow);flex-direction:column;gap:10px;padding:16px;display:flex}.wb-card h3{margin:0;font-size:16px}.wb-card .meta{color:var(--c-text-soft);font-size:12px}.wb-card .actions{gap:6px;margin-top:auto;display:flex}.wb-card.new{color:var(--c-text-soft);cursor:pointer;min-height:120px;font:inherit;border-style:dashed;justify-content:center;align-items:center;width:100%}.wb-card.new:hover{border-color:var(--c-primary);color:var(--c-primary)}table.data{border-collapse:collapse;width:100%}table.data th,table.data td{text-align:left;border-bottom:1px solid var(--c-border);padding:9px 10px}table.data th{color:var(--c-text-soft);text-transform:uppercase;letter-spacing:.4px;font-size:12px}table.data tbody tr:hover{background:var(--c-header-bg)}.pill{border-radius:999px;padding:2px 8px;font-size:12px;font-weight:700;display:inline-block}.pill.admin{background:var(--c-primary-soft);color:var(--c-primary-dark)}.pill.off{background:var(--c-danger-soft);color:var(--c-danger)}.editor{flex-direction:column;flex:1;min-height:0;display:flex}.editor-bar{background:var(--c-surface);border-bottom:1px solid var(--c-border);flex-wrap:wrap;align-items:center;gap:10px;padding:8px 14px;display:flex}.editor-bar .wb-name{background:0 0;border:1px solid #0000;border-radius:4px;min-width:120px;padding:4px 6px;font-size:15px;font-weight:700}.editor-bar .wb-name:hover,.editor-bar .wb-name:focus{border-color:var(--c-border-strong);outline:none}.editor-bar .save-state{color:var(--c-text-soft);font-size:12px}.editor-bar .save-state.dirty{color:var(--c-danger)}.fmt-toolbar{background:var(--c-surface);border-bottom:1px solid var(--c-border);flex-wrap:wrap;align-items:center;gap:6px;padding:6px 14px;display:flex}.fmt-toolbar .group{border-right:1px solid var(--c-border);align-items:center;gap:4px;padding-right:8px;display:flex}.fmt-toolbar .group:last-child{border-right:none}.fmt-btn{border:1px solid var(--c-border-strong);background:var(--c-surface);border-radius:4px;place-items:center;width:30px;height:30px;font-size:14px;display:grid}.fmt-btn.on{background:var(--c-primary-soft);border-color:var(--c-primary);color:var(--c-primary-dark)}.fmt-btn.wide{width:auto;padding:0 10px;font-size:13px}.fmt-btn.b{font-weight:700}.fmt-btn.i{font-style:italic}.fmt-btn.u{text-decoration:underline}.fmt-toolbar select,.fmt-toolbar input[type=number]{border:1px solid var(--c-border-strong);background:var(--c-surface);height:30px;color:var(--c-text);border-radius:4px;padding:0 6px;font-family:inherit;font-size:13px}.fmt-toolbar input[type=number]{width:56px}.dropdown{display:inline-block;position:relative}.dropdown-button{border:1px solid var(--c-border-strong);background:var(--c-surface);min-width:64px;max-width:200px;height:30px;color:var(--c-text);cursor:pointer;border-radius:4px;align-items:center;gap:6px;padding:0 8px;font-family:inherit;font-size:13px;display:inline-flex}.dropdown-button:disabled{opacity:.55;cursor:default}.dropdown.open .dropdown-button{border-color:var(--c-primary)}.dropdown-value{text-overflow:ellipsis;white-space:nowrap;text-align:left;flex:1;overflow:hidden}.dropdown-caret{color:var(--c-text-soft);font-size:10px}.dropdown-menu{z-index:60;background:var(--c-surface);border:1px solid var(--c-border-strong);border-radius:6px;min-width:100%;max-height:280px;margin:0;padding:4px;list-style:none;position:absolute;top:calc(100% + 2px);left:0;overflow-y:auto;box-shadow:0 8px 24px #0000002e}.dropdown-option{white-space:nowrap;cursor:pointer;border-radius:4px;justify-content:space-between;align-items:baseline;gap:10px;padding:5px 8px;font-size:13px;display:flex}.dropdown-option.active{background:var(--c-primary-soft)}.dropdown-option.selected{font-weight:600}.dropdown-option-hint{color:var(--c-text-soft);font-size:11px}.font-select .dropdown-button,.font-select{min-width:150px}.font-menu .dropdown-option{font-size:15px}.color-field{color:var(--c-text-soft);align-items:center;gap:4px;font-size:12px;display:inline-flex}.color-field input[type=color]{border:1px solid var(--c-border-strong);background:0 0;border-radius:4px;width:30px;height:30px;padding:0}.scope-select{font-size:13px}.formula-bar{border-bottom:1px solid var(--c-border);background:var(--c-surface);align-items:stretch;gap:0;display:flex}.formula-bar .addr{width:84px;font-family:var(--font-code);border-right:1px solid var(--c-border);background:var(--c-header-bg);place-items:center;font-weight:700;display:grid}.formula-bar .fx{width:34px;color:var(--c-text-soft);border-right:1px solid var(--c-border);place-items:center;font-style:italic;display:grid}.formula-bar input{font-family:var(--font-code);background:var(--c-surface);color:var(--c-text);border:none;flex:1;padding:9px 12px;font-size:13px}.formula-bar input:focus{background:#fffef3;outline:none}.grid-area{flex:1;min-height:0;padding:10px 14px;position:relative;overflow:hidden}.xl-resize-guide{z-index:20;background:var(--c-accent);pointer-events:none;position:absolute}.xl-cell--anchor{overflow:visible}.xl-merge{z-index:6;white-space:nowrap;background:var(--c-surface);box-sizing:border-box;border-right:1px solid var(--c-border);border-bottom:1px solid var(--c-border);align-items:center;padding:0 6px;display:flex;position:absolute;top:0;left:0;overflow:hidden}.xl-merge--active{outline:2px solid var(--dsg-selection-border-color,#4580e6);outline-offset:-2px}.xl-cell.xl-merged-hidden{visibility:hidden}.xl-frozen-layer{pointer-events:none;position:absolute;inset:0;overflow:hidden}.xl-frozen-strip,.xl-frozen-corner{background:var(--c-surface);pointer-events:auto;position:absolute;overflow:hidden}.xl-frozen-row{z-index:16;box-shadow:0 3px 5px #00000024}.xl-frozen-col{z-index:16;box-shadow:3px 0 5px #00000024}.xl-frozen-corner{z-index:17;display:flex;box-shadow:3px 3px 5px #00000024}.xl-frozen-row .xl-frozen-scroll{will-change:transform;height:100%;display:flex}.xl-frozen-col .xl-frozen-scroll{will-change:transform}.xl-frozen-rownum{align-items:stretch;display:flex}.xl-frozen-gutter{width:44px;color:var(--c-text-soft);background:var(--c-header-bg);border-right:1px solid var(--c-border);border-bottom:1px solid var(--c-border);flex:none;place-items:center;font-size:12px;display:grid}.xl-frozen-cell{white-space:nowrap;border-right:1px solid var(--c-border);border-bottom:1px solid var(--c-border);font-variant-numeric:tabular-nums;cursor:cell;box-sizing:border-box;align-items:center;padding:0 6px;display:flex;overflow:hidden}.xl-cell{white-space:nowrap;font-variant-numeric:tabular-nums;align-items:center;width:100%;height:100%;padding:0 6px;display:flex;overflow:hidden}.xl-cell.num{justify-content:flex-end}.xl-ref-hint{box-shadow:inset 0 0 0 2px var(--c-accent);background-image:linear-gradient(var(--c-selected), var(--c-selected))}.xl-cell-input{width:100%;height:100%;font-family:var(--font-ui);color:var(--c-text);background:0 0;border:none;padding:0 6px;font-size:13px}.xl-cell-input:read-only{cursor:default}.xl-cell-input:not(:read-only){font-family:var(--font-code);background:#fffef3}.xl-cell-input:focus{outline:none}.sheet-tabs{background:var(--c-header-bg);border-top:1px solid var(--c-border);flex-shrink:0;align-items:center;gap:2px;padding:4px 10px;display:flex;overflow-x:auto}.sheet-tab{border:1px solid var(--c-border);background:var(--c-surface);color:var(--c-text-soft);white-space:nowrap;border-bottom:none;border-radius:6px 6px 0 0;align-items:center;gap:6px;padding:6px 12px;display:inline-flex}.sheet-tab.active{color:var(--c-text);border-color:var(--c-primary);border-bottom:2px solid var(--c-surface);font-weight:700}.sheet-tab .x{color:inherit;background:0 0;border:none;padding:0 2px;font-size:14px;line-height:1}.sheet-tab .x:hover{color:var(--c-danger)}.sheet-add{border:1px dashed var(--c-border-strong);color:var(--c-text-soft);background:0 0;border-radius:6px;padding:6px 10px}.drawer-overlay{z-index:50;background:#00000047;position:fixed;inset:0}.drawer{background:var(--c-surface);border-left:1px solid var(--c-border);width:min(420px,92vw);height:100%;box-shadow:var(--shadow-lg);z-index:51;flex-direction:column;transition:transform .22s;display:flex;position:fixed;top:0;right:0;transform:translate(100%)}.drawer.open{transform:translate(0)}.drawer header{border-bottom:1px solid var(--c-border);justify-content:space-between;align-items:center;padding:14px 16px;display:flex}.drawer header h2{margin:0;font-size:16px}.drawer .drawer-content{padding:16px;line-height:1.5;overflow-y:auto}.drawer .drawer-content h3{margin:18px 0 6px;font-size:14px}.drawer .drawer-content h3:first-child{margin-top:0}.drawer .drawer-content code{font-family:var(--font-code);background:var(--c-header-bg);border-radius:3px;padding:1px 4px}.help-fab{z-index:30;background:var(--c-primary);color:#fff;box-shadow:var(--shadow-lg);border:none;border-radius:999px;padding:12px 18px;font-weight:700;position:fixed;bottom:74px;right:18px}.modal-overlay{z-index:60;background:#00000059;place-items:center;padding:16px;display:grid;position:fixed;inset:0}.modal{background:var(--c-surface);border-radius:var(--radius);box-shadow:var(--shadow-lg);width:100%;max-width:420px;padding:22px}.modal h2{margin:0 0 12px;font-size:18px}.modal .modal-actions{justify-content:flex-end;gap:8px;margin-top:18px;display:flex}.center-fill{color:var(--c-text-soft);flex:1;place-items:center;display:grid}.full-center{height:100%;color:var(--c-text-soft);place-items:center;display:grid}.spinner{border:3px solid var(--c-border);border-top-color:var(--c-primary);border-radius:50%;width:26px;height:26px;animation:.7s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.row-actions{flex-wrap:wrap;gap:6px;display:flex}.inline-form{flex-wrap:wrap;align-items:flex-end;gap:8px;display:flex}.inline-form label.field{margin-bottom:0}.dsg-container{border:1px solid var(--c-border-strong);border-radius:var(--radius);height:100%}.dsg-cell{font-family:var(--font-ui)}.cm-float-ad{z-index:25;background:var(--cm-bg,#f8fafc);color:var(--cm-color,#334155);border:1px solid var(--c-border);box-shadow:var(--shadow);border-radius:999px;max-width:108px;padding:6px 10px;font-size:11px;line-height:1.4;transition:max-width .35s,border-radius .35s;position:fixed;bottom:14px;right:14px;overflow:hidden}.cm-float-ad--hovered{border-radius:12px;max-width:min(530px,100vw - 28px)}.cm-float-ad__content{white-space:nowrap;align-items:center;gap:8px;display:flex}.cm-float-ad--hovered .cm-float-ad__content{white-space:normal;align-items:flex-start}.cm-float-ad__content--column{white-space:normal;flex-direction:column;align-items:flex-start}.cm-float-ad__logo{flex-shrink:0;display:block}.cm-float-ad__link{color:inherit;font-weight:700}.cm-float-ad__mobile-detail{flex-direction:column;gap:2px;margin-top:4px;display:flex}.cm-float-ad--mobile{max-width:158px}.cm-float-ad--mobile-expanded{white-space:normal;border-radius:12px;max-width:calc(100vw - 24px)}
