:root{font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Trebuchet MS,Segoe UI,sans-serif;font-weight:400;line-height:1.4}*{box-sizing:border-box}body{color:#0f2a34;background:radial-gradient(circle at 10% 10%,#a8d2ff 0%,#a8d2ff00 44%),radial-gradient(circle at 90% 20%,#ccf7de 0%,#ccf7de00 42%),linear-gradient(165deg,#ebf4ff,#f4fbf8 45%,#eaf7f4 100%);margin:0}.dashboard-page{flex-direction:column;gap:32px;min-height:100vh;padding:48px;display:flex}.dashboard-header{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:24px;display:flex}.header-controls{flex-direction:column;align-items:flex-end;gap:10px;display:flex}.edit-actions-row{align-items:center;gap:8px;display:flex}.eyebrow{text-transform:uppercase;letter-spacing:.1em;color:#37696b;margin:0;font-size:.8rem;font-weight:700}h1{color:#122125;margin:8px 0 6px;font-size:2.3rem}.subtitle{color:#38575e;margin:0}:where(button):not(.remove-x,.widget-type-close,.widget-preview-close,.mode-toggle,.reset-confirm-close){color:#1f414e;cursor:pointer;background:#f8fcfd;border:1px solid #c5d7df;border-radius:12px;padding:10px 14px;font-size:.9rem;font-weight:700;transition:transform .2s,box-shadow .2s,filter .2s;box-shadow:0 8px 18px #0c23341a}:where(button):not(.remove-x,.widget-type-close,.widget-preview-close,.mode-toggle,.reset-confirm-close):hover:not(:disabled){filter:brightness(1.02);transform:translateY(-2px);box-shadow:0 14px 28px #0c233429}:where(button):not(.remove-x,.widget-type-close,.widget-preview-close,.mode-toggle,.reset-confirm-close):focus-visible{outline-offset:2px;outline:3px solid #9dd7ff}:where(button):not(.remove-x,.widget-type-close,.widget-preview-close,.mode-toggle,.reset-confirm-close):disabled{cursor:not-allowed;opacity:.58;box-shadow:none;filter:none;transform:none}.add-widget-btn,.reset-layout-btn{padding:12px 18px;font-size:.95rem;transition:box-shadow .2s,filter .2s}.add-widget-btn:hover:not(:disabled),.reset-layout-btn:hover:not(:disabled),.add-widget-btn:active:not(:disabled),.reset-layout-btn:active:not(:disabled){transform:none}.add-widget-btn{color:#f4fffb;background:linear-gradient(120deg,#1649cc,#18a2a0);border:none;box-shadow:0 14px 30px #1649cc47}.reset-layout-btn{color:#000;background:linear-gradient(120deg,#ffffffeb,#f6fbfeeb);border-color:#d7e3ea;box-shadow:0 3px 8px #114d750a}.reset-layout-btn:hover:not(:disabled),.reset-layout-btn:active:not(:disabled){filter:none;background:linear-gradient(120deg,#fffffffa,#f8fcfffa);box-shadow:0 3px 8px #114d750d}.mode-toggle{color:#1e3d48;box-shadow:none;background:#f8fcfd;border:1px solid #c7dbe3;border-radius:999px;align-items:center;gap:10px;padding:6px 10px;font-size:.9rem;font-weight:600;display:inline-flex}.mode-toggle-track{border-radius:999px;align-items:center;width:42px;height:24px;transition:background-color .2s;display:inline-flex;position:relative}.mode-toggle-track.on{background:linear-gradient(130deg,#5f9f97 0%,#6faea6 52%,#7ab8b0 100%)}.mode-toggle-track.off{background:#8ca5b0}.mode-toggle-thumb{background:#fff;border-radius:50%;width:18px;height:18px;margin-left:3px;transition:transform .2s}.mode-toggle-track.on .mode-toggle-thumb{transform:translate(18px)}.widget-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;display:grid}.empty-dashboard{color:#3e6370;text-align:center;background:#f7fbfd;border:1px dashed #9fb4be;border-radius:14px;grid-column:1/-1;padding:26px 20px;font-weight:600}.layout-loading{color:#0f4b7d;text-align:center;background:#eef7ff;border:1px solid #a3d4fe;border-radius:14px;grid-column:1/-1;padding:24px 20px;font-weight:700}.operation-failure-toast{z-index:30;color:#7a1f1f;background:#fff4f4;border:1px solid #f1b3b3;border-radius:12px;align-items:center;gap:12px;max-width:min(420px,100vw - 36px);padding:11px 12px;display:flex;position:fixed;bottom:18px;left:18px;box-shadow:0 14px 30px #48121233}.operation-failure-toast p{margin:0;font-size:.88rem;font-weight:600;line-height:1.35}.operation-failure-toast button,.notification-toast button{color:#7a1f1f;box-shadow:none;background:#fff;border:1px solid #de9a9a;border-radius:8px;padding:6px 10px;font-size:.78rem;font-weight:700}.notification-toast button{color:#1b5e2c;background:#ecf8ed;border-color:#1f7a3f}.notification-toast{z-index:30;color:#0f4b7d;background:#eef7ff;border:1px solid #a3d4fe;border-radius:12px;align-items:center;gap:12px;max-width:min(420px,100vw - 36px);padding:11px 12px;display:flex;position:fixed;bottom:18px;left:18px;box-shadow:0 14px 30px #123c6426}.notification-toast p{margin:0;font-size:.88rem;font-weight:600;line-height:1.35}.warning-toast{z-index:30;color:#6d4a00;background:#fff8e6;border:1px solid #f0c36d;border-radius:12px;align-items:center;gap:12px;max-width:min(420px,100vw - 36px);padding:11px 12px;display:flex;position:fixed;bottom:18px;left:18px;box-shadow:0 14px 30px #65450d26}.warning-toast p{margin:0;font-size:.88rem;font-weight:600;line-height:1.35}.warning-toast button{color:#6d4a00;background:#fff8e6;border-color:#9d7a22}@media (width<=720px){.dashboard-page{padding:22px}.dashboard-header{flex-direction:column}.header-controls{align-items:stretch;width:100%}.add-widget-btn{width:100%}h1{font-size:1.9rem}}.reset-confirm-dialog-backdrop{z-index:24;background:#0e1c2875;justify-content:center;align-items:center;padding:20px;display:flex;position:fixed;inset:0}.reset-confirm-dialog{background:linear-gradient(#fbfeff,#f2f8fb);border:1px solid #c6d9e2;border-radius:16px;width:min(460px,100%);padding:22px;position:relative;box-shadow:0 22px 52px #0a23384d}.reset-confirm-close{color:#2a4d8f;width:30px;height:30px;box-shadow:none;background:linear-gradient(120deg,#f2f7ff,#e5efff);border:1px solid #b9caec;border-radius:999px;font-size:1.2rem;line-height:1;position:absolute;top:10px;right:10px}.reset-confirm-close:hover:not(:disabled){filter:none;box-shadow:none}.reset-confirm-dialog h2{color:#163542;margin:0;font-size:1.1rem}.reset-confirm-dialog p{color:#46626d;margin:10px 0 0;line-height:1.45}.reset-confirm-actions{justify-content:flex-end;gap:10px;margin-top:18px;display:flex}.reset-confirm-cancel,.reset-confirm-submit{border-radius:10px;padding:9px 13px;font-size:.84rem;transition:none}.reset-confirm-cancel:hover:not(:disabled),.reset-confirm-submit:hover:not(:disabled),.reset-confirm-cancel:active:not(:disabled),.reset-confirm-submit:active:not(:disabled){filter:none;transform:none}.reset-confirm-cancel:hover:not(:disabled),.reset-confirm-cancel:active:not(:disabled){box-shadow:none;background:#f0f7fa;border-color:#a9c2d1}.reset-confirm-submit:hover:not(:disabled),.reset-confirm-submit:active:not(:disabled){background:linear-gradient(120deg,#c0543f,#da7858);box-shadow:0 10px 24px #aa45304d}.reset-confirm-cancel{color:#2a4b57;box-shadow:none;background:#f8fcfd;border:1px solid #bfd0d9}.reset-confirm-submit{color:#f4fffb;background:linear-gradient(120deg,#bb4935,#d36f4e);border:none;box-shadow:0 10px 24px #aa45304d}@keyframes widgetShimmer{0%{background-position:100% 0}to{background-position:-100% 0}}.widget-content-frame{background:linear-gradient(#fbfcfd,#f4f8fa);border:1px solid #d7e1e6;border-radius:12px;flex-direction:column;flex:1;min-height:0;margin-top:12px;padding:10px 10px 8px;display:flex;overflow:hidden}.widget-content-frame-text{display:block}.widget-value{color:#0f4f53;margin:8px 0 4px;font-size:1.65rem;font-weight:700}.widget-trend{color:#49666f;margin:0;font-size:.88rem}.line-widget-chart{flex:1;width:100%;height:100%;min-height:0;margin-top:0}.line-widget-panel,.bar-widget-panel{--bar-axis-offset:16px;flex-direction:column;justify-content:flex-end;width:100%;height:100%;min-height:0;display:flex}.line-widget-panel-preview,.bar-widget-panel-preview{flex-direction:column;flex:1;justify-content:flex-end;min-height:0;display:flex}.line-widget-chart-preview{flex:1;height:100%;min-height:0;margin-top:0}.line-widget-axis,.line-widget-axis-tick{stroke:#9fb4be;stroke-width:1px}.line-widget-grid{stroke:#d9e4e9;stroke-width:1px;stroke-dasharray:3 3}.line-widget-axis-label,.line-widget-axis-value{fill:#5c7a86;font-size:.62rem;font-weight:600}.line-widget-axis-date{font-size:.58rem}.line-widget-chart path{fill:none;stroke:#1b7fbb;stroke-width:2.5px;stroke-linecap:round;stroke-linejoin:round}.line-widget-point{fill:#fff;stroke:#1b7fbb;stroke-width:1.6px;transition:r .15s,fill .15s}.line-widget-point:hover{fill:#dff3ff;r:3.4}.bar-widget-plot{flex:1;height:auto;min-height:0;margin-top:0;position:relative}.bar-widget-panel-card{background:0 0;border:none;border-radius:0;margin-top:0;padding:0}.bar-widget-panel-card .bar-widget-plot{margin-top:0}.bar-widget-panel-card .bar-widget-x-axis{margin-top:6px}.bar-widget-plot-preview{flex:1;height:auto;min-height:0;margin-top:0}.bar-widget-axis-line{background:#9fb4be;position:absolute}.bar-widget-axis-y{left:var(--bar-axis-offset);width:1px;top:0;bottom:0}.bar-widget-axis-x{left:var(--bar-axis-offset);height:1px;bottom:0;right:0}.bar-widget-chart{left:calc(var(--bar-axis-offset) + 6px);align-items:flex-end;gap:6px;display:flex;position:absolute;top:0;bottom:0;right:0}.bar-widget-chart-preview{gap:12px}.bar-widget-x-axis{padding-left:calc(var(--bar-axis-offset) + 6px);align-items:baseline;gap:10px;margin-top:8px;display:flex}.bar-widget-x-axis-preview{margin-top:6px}.bar-widget-x-ticks{flex:1;justify-content:space-between;gap:8px;min-width:0;display:flex}.bar-widget-x-tick{color:#5c7a86;white-space:nowrap;font-size:.62rem}.bar-widget-column{flex-direction:column;flex:1;justify-content:flex-end;align-items:center;gap:3px;min-width:0;display:flex}.bar-widget-value{color:#4e6b76;font-size:.68rem;line-height:1}.bar-widget-value-preview{font-size:.86rem}.bar-widget-item{background:linear-gradient(#1a97cc,#155aad);border-radius:6px 6px 0 0;width:100%;min-height:10px}.chart-date-range{color:#5c7a86;margin:6px 0 0;font-size:.75rem}.chart-date-range-preview{margin-top:8px;font-size:.86rem}.text-widget-content{color:#2d4f59;white-space:normal;word-break:break-word;min-height:0;max-height:8.1rem;margin:0;line-height:1.35rem;display:block;overflow:hidden}.text-widget-shell{height:100%;position:relative}.text-widget-shell.has-overflow-suffix .text-widget-content{padding-right:34px}.text-widget-content>:first-child{margin-top:0}.text-widget-content>:last-child{margin-bottom:0}.text-widget-overflow-suffix{color:#2d4f59;background:linear-gradient(90deg,#f4f8fa00,#f4f8fa 60%);padding-left:10px;font-size:.78rem;font-weight:700;position:absolute;bottom:0;right:0}.widget-preview-text{-webkit-line-clamp:unset;-webkit-box-orient:initial;text-overflow:clip;min-height:auto;max-height:none;line-height:1.4;display:block;overflow:visible}.widget-preview-close{color:#2a4d8f;box-shadow:none;background:linear-gradient(120deg,#f2f7ff,#e5efff);border:1px solid #b9caec}.widget-preview-close:hover:not(:disabled){filter:none;box-shadow:none}.widget-preview-dialog-backdrop{z-index:20;background:#0e1c2880;justify-content:center;align-items:center;padding:20px;display:flex;position:fixed;inset:0}.widget-preview-dialog{--widget-preview-padding:24px;--widget-preview-header-height:56px;background:#fff;border-radius:16px;flex-direction:column;width:min(428px,100%);max-height:min(48vh,374px);display:flex;position:relative;overflow:hidden;box-shadow:0 24px 60px #0b1e2a59}.widget-preview-dialog.text-preview{width:min(574px,100%);height:min(48vh,374px)}.widget-preview-dialog.chart-preview{--widget-preview-padding:16px;--widget-preview-header-height:48px;width:min(574px,100%);height:min(50vh,414px)}.widget-preview-header{height:var(--widget-preview-header-height);padding:0 var(--widget-preview-padding);background:#fff;border-bottom:1px solid #e4eaed;flex-shrink:0;justify-content:space-between;align-items:center;gap:12px;display:flex}.widget-preview-header h2{color:#1d2d35;white-space:nowrap;text-overflow:ellipsis;min-width:0;margin:0;font-size:1rem;overflow:hidden}.widget-preview-body{min-height:0;padding:var(--widget-preview-padding);scrollbar-gutter:stable;flex:1;display:flex;overflow-y:auto}.widget-preview-body .widget-content-frame{flex:1;width:100%;margin-top:0}.widget-preview-dialog.text-preview .widget-content-frame-text{scrollbar-gutter:stable;overflow-y:auto}.widget-preview-dialog.text-preview .text-widget-shell{height:auto;min-height:100%}.widget-preview-close{border-radius:999px;flex-shrink:0;width:30px;height:30px;font-size:1.2rem;line-height:1}.widget-type-close{color:#2a4d8f;box-shadow:none;background:linear-gradient(120deg,#f2f7ff,#e5efff);border:1px solid #b9caec}.widget-type-close:hover:not(:disabled){filter:none;box-shadow:none}.widget-type-dialog-backdrop{z-index:10;background:#0e1c2873;justify-content:center;align-items:center;padding:20px;display:flex;position:fixed;inset:0}.widget-type-dialog{background:#fff;border-radius:16px;width:min(560px,100%);padding:24px;position:relative;box-shadow:0 20px 50px #0b1e2a59}.widget-type-close{border-radius:999px;width:30px;height:30px;font-size:1.2rem;line-height:1;position:absolute;top:10px;right:10px}.widget-type-dialog h2{margin:0 0 8px}.widget-type-dialog p{color:#43616b}.widget-type-options{grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;margin-top:20px;display:grid}.widget-type-option{box-shadow:none;color:#18465d;cursor:pointer;text-align:left;background:#f3f8fb;border:1px solid #bfd5de;border-radius:12px;flex-direction:column;align-items:flex-start;gap:6px;min-height:116px;padding:8px;display:flex}.widget-type-option:hover{border-color:#78a8bc}.widget-type-option-title{font-size:.84rem;font-weight:700}.widget-type-option-value{color:#0f4f53;font-size:1rem;font-weight:700}.widget-type-option-line{width:100%;height:44px;margin-top:auto}.widget-type-option-line path{fill:none;stroke:#1b7fbb;stroke-width:2.5px;stroke-linecap:round;stroke-linejoin:round}.widget-type-option-bars{align-items:flex-end;gap:4px;width:100%;height:48px;margin-top:auto;display:flex}.widget-type-option-bars span{background:linear-gradient(#1a97cc,#155aad);border-radius:5px 5px 0 0;flex:1;min-height:8px}.widget-type-option-text{color:#2d4f59;font-size:.78rem;line-height:1.35}.widget-type-option-text.muted{color:#5c7a86}.widget-type-dialog-loading{text-align:center;background:#ffffffe6;border-radius:16px;flex-direction:column;justify-content:center;align-items:center;gap:12px;display:flex;position:absolute;inset:0}.widget-type-dialog-spinner{border:4px solid #1b7fbb33;border-top-color:#1b7fbb;border-radius:50%;width:36px;height:36px;animation:.8s linear infinite widget-type-dialog-spin}@keyframes widget-type-dialog-spin{to{transform:rotate(360deg)}}@media (width<=720px){.widget-type-options{grid-template-columns:1fr}}.widget-card{cursor:grab;background:#f6f7f8;border:1px solid #d4dde0;border-radius:16px;flex-direction:column;height:232px;padding:16px;transition:transform .15s,border-color .15s;display:flex;position:relative;box-shadow:0 10px 22px #08112314}.widget-card-loading{opacity:.94;overflow:hidden}.widget-card-busy-overlay{z-index:2;text-align:center;color:#1f414e;background:#ffffffeb;flex-direction:column;justify-content:center;align-items:center;gap:8px;font-weight:700;display:flex;position:absolute;inset:0}.widget-card-busy-spinner{border:4px solid #1b7fbb33;border-top-color:#1b7fbb;border-radius:50%;width:32px;height:32px;animation:.8s linear infinite widgetCardSpin}.widget-loader-status{justify-content:center;align-items:center;gap:10px;margin-bottom:12px;display:flex}.widget-loader-status span{color:#1f414e;font-size:.92rem;font-weight:700}@keyframes widgetCardSpin{to{transform:rotate(360deg)}}.widget-card-with-fixed-actions{padding-bottom:60px}.widget-card-line-chart{grid-column:span 1}.widget-card:active{cursor:grabbing}.widget-card.no-drag,.widget-card.no-drag:active{cursor:default}.widget-card-unavailable{background:#f2f4f6;border-style:dashed;border-color:#c5ced4}.widget-card.preview-clickable{cursor:pointer}.widget-card.preview-clickable:hover{border-color:#8cb6d6;box-shadow:0 14px 30px #0c2b4824}.widget-card.drag-over{border-color:#2083c7;transform:translateY(-2px)}.widget-index{color:#5c6d73;margin-bottom:8px;font-size:.82rem}.widget-card h2{color:#1d2d35;margin:0;font-size:1rem}.widget-loader{flex-direction:column;gap:10px;margin-top:2px;display:flex}.widget-unavailable{flex-direction:column;justify-content:center;gap:8px;min-height:170px;display:flex}.widget-unavailable-title{color:#3a4b55;margin:0;font-size:.95rem;font-weight:700}.widget-unavailable-text{color:#5f6f78;margin:0;font-size:.82rem;line-height:1.4}.widget-loader-title,.widget-loader-line,.widget-loader-chart{background:linear-gradient(90deg,#e1eaef 0%,#f5f9fb 45%,#e1eaef 100%) 0 0/260% 100%;border-radius:8px;animation:1.2s ease-in-out infinite widgetShimmer;display:block}.widget-loader-title{width:62%;height:16px}.widget-loader-line{width:100%;height:10px}.widget-loader-line.short{width:76%}.widget-loader-chart{border-radius:12px;width:100%;height:122px;margin-top:8px}.widget-loader-error{color:#b15b5b;margin:2px 0 0;font-size:.8rem}.widget-actions{gap:8px;margin-top:12px;display:flex}.widget-actions-fixed{margin-top:0;position:absolute;bottom:16px;left:16px}.action-btn{height:32px;box-shadow:none;border-radius:8px;justify-content:center;align-items:center;padding:7px 10px;font-size:.82rem;font-weight:600;display:inline-flex}.action-btn.edit,.action-btn.save{color:#f4fffb;background:linear-gradient(130deg,#2f7d76 0%,#46958d 48%,#68b3aa 100%);border:none;box-shadow:0 10px 20px #2c5c7e3d}.action-btn.edit:hover:not(:disabled),.action-btn.save:hover:not(:disabled){filter:brightness(1.08)saturate(1.04);box-shadow:0 12px 24px #2c5c7e4d}.action-btn.edit:active:not(:disabled),.action-btn.save:active:not(:disabled){filter:brightness(.98);box-shadow:0 8px 16px #2c5c7e38}.action-btn.cancel{color:#1f414e;background:#e8eff3;border-color:#c2d0d8}.widget-card .action-btn:hover:not(:disabled){transform:none}.action-btn.remove-x{color:#2a4d8f;width:30px;height:30px;box-shadow:none;background:linear-gradient(120deg,#f2f7ff,#e5efff);border:1px solid #b9caec;border-radius:999px;justify-content:center;align-items:center;padding:0;font-size:1.1rem;line-height:1;display:inline-flex}.action-btn.remove-x:hover:not(:disabled){filter:none;box-shadow:none}.action-btn.remove-x-corner{position:absolute;top:10px;right:10px}.widget-edit-form{flex-direction:column;gap:8px;min-height:100%;padding-bottom:52px;display:flex}.widget-actions-edit-fixed{margin-top:0;position:absolute;bottom:16px;left:16px}.widget-edit-form label{color:#2d4f59;flex-direction:column;gap:4px;font-size:.8rem;display:flex}.widget-edit-form input{font:inherit;border:1px solid #bdd0d9;border-radius:8px;padding:8px}.widget-edit-textarea{font:inherit;resize:none;border:1px solid #bdd0d9;border-radius:8px;height:120px;min-height:120px;padding:8px;line-height:1.45;overflow-y:auto}
