:root{--bg:#f7f8f9;--bg-soft:#f1f2f4;--surface:#ffffff;--surface-2:#f7f8f9;--border:#dfe1e6;--border-strong:#c1c7d0;--border-subtle:#091e4224;--text:#172b4d;--text-2:#44546f;--text-3:#626f86;--accent:#0c66e4;--accent-hover:#0055cc;--accent-pressed:#09326c;--accent-bg:#e9f2ff;--accent-bg-2:#cce0ff;--green:#22a06b;--green-text:#216e4e;--green-bg:#dcfff1;--yellow:#e2b203;--yellow-text:#a54800;--yellow-bg:#fff7d6;--red:#c9372c;--red-text:#ae2e24;--red-bg:#ffeceb;--gray:#8590a2;--gray-bg:#f1f2f4;--radius:8px;--radius-sm:3px;--shadow-sm:0 1px 1px #091e4240,0 0 1px #091e424f;--shadow-md:0 4px 8px -2px #091e4226,0 0 1px #091e424f;--shadow-lg:0 8px 12px #091e4226,0 0 1px #091e424f;--font:-apple-system,BlinkMacSystemFont,"Segoe UI","Inter",Roboto,"Helvetica Neue",Arial,sans-serif}*{box-sizing:border-box}body,html{margin:0;padding:0;background:var(--bg);color:var(--text);font-family:var(--font);-webkit-font-smoothing:antialiased;font-size:14px;line-height:1.42857}a{color:var(--accent);text-decoration:none}button{font-family:inherit;cursor:pointer}input,select,textarea{font-family:inherit;font-size:14px}.app{max-width:1180px;margin:0 auto;padding:32px 32px 96px}.topbar{position:-webkit-sticky;position:sticky;top:0;z-index:30;background:var(--surface);border-bottom:1px solid var(--border)}.topbar-inner{max-width:1180px;margin:0 auto;padding:10px 24px;display:flex;align-items:center;gap:16px;flex-wrap:nowrap}.topbar-tabs{flex:1 1;min-width:0;overflow-x:auto;scrollbar-width:none}.topbar-tabs::-webkit-scrollbar{display:none}.topbar-tabs .brand-tabs{margin:0;flex-wrap:nowrap}.logo-mark{width:30px;height:30px;flex-shrink:0;display:grid;place-items:center;color:var(--text)}.brand-title{font-weight:600;font-size:16px;letter-spacing:-.003em;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex-shrink:1;min-width:0}.brand-sub{display:none}.spacer{flex:1 1}.period-dd{position:relative;flex-shrink:0}.period{display:flex;align-items:center;gap:8px;background:var(--bg-soft);border:1px solid transparent;border-radius:var(--radius-sm);padding:4px 10px 4px 8px;cursor:pointer;transition:background .1s}.period:hover{background:#dcdfe4}.period .ring{position:relative;width:26px;height:26px}.period-info{text-align:left;line-height:1.2}.period-name{font-weight:700;font-size:13px;color:var(--text);display:flex;align-items:center;gap:4px}.period-name .caret{font-size:9px;color:var(--text-3)}.period-days{font-size:11px;color:var(--text-2)}.period-menu{position:absolute;top:calc(100% + 6px);right:0;z-index:50;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-lg);padding:4px;min-width:200px}.period-group{padding-bottom:2px}.period-group+.period-group{border-top:1px solid var(--border);margin-top:4px;padding-top:4px}.period-group-year{font-size:11px;font-weight:700;letter-spacing:.04em;color:var(--text-3);padding:6px 10px 2px}.period-item{display:flex;justify-content:space-between;align-items:center;gap:16px;width:100%;background:transparent;border:none;padding:8px 10px;border-radius:var(--radius-sm);text-align:left}.period-item:hover{background:var(--bg-soft)}.period-item.active{background:var(--accent-bg)}.period-item-name{font-weight:600;font-size:13px;color:var(--text)}.period-item.active .period-item-name{color:var(--accent)}.period-item-sub{font-size:11px;color:var(--text-3);white-space:nowrap}.btn{display:inline-flex;align-items:center;gap:6px;border:none;background:var(--bg-soft);color:var(--text-2);padding:6px 12px;border-radius:var(--radius-sm);font-weight:500;font-size:14px;transition:background .1s ease,color .1s ease}.btn:hover{background:#dcdfe4;color:var(--text)}.btn:active{background:#c1c7d0}.btn.primary{background:var(--accent);color:#fff}.btn.primary:hover{background:var(--accent-hover);color:#fff}.btn.primary:active{background:var(--accent-pressed)}.btn.ghost{background:transparent}.btn.ghost:hover{background:#091e4214;color:var(--text)}.btn.danger:hover{background:var(--red-bg);color:var(--red-text)}.btn.sm{padding:4px 10px;font-size:13px}.btn.xs{padding:3px 8px;font-size:12px}.toggle{display:inline-flex;align-items:center;gap:8px;font-size:13px;color:var(--text-2);font-weight:500}.switch{width:36px;height:20px;border-radius:999px;background:#8590a2;position:relative;transition:.15s;border:none;flex-shrink:0}.switch.on{background:var(--green)}.switch:after{content:"";position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;background:#fff;transition:.15s;box-shadow:var(--shadow-sm)}.switch.on:after{left:18px}.brand-tabs{display:flex;gap:4px;flex-wrap:wrap}.brand-tab{display:flex;align-items:center;gap:8px;padding:6px 12px 6px 8px;border-radius:var(--radius-sm);background:transparent;border:none;font-weight:500;font-size:14px;color:var(--text-2);transition:background .1s;white-space:nowrap}.brand-tab:hover{background:#091e4214;color:var(--text)}.brand-tab.active{color:#fff}.brand-tab .ava{width:16px;height:16px;border-radius:0;object-fit:contain;background:transparent;display:grid;place-items:center;font-size:11px;font-weight:700}.brand-tab.active .ava{background:transparent}.brand-tab.active .ava img{filter:brightness(0) invert(1)}.card{background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow-sm)}.goal-card{position:relative;overflow:hidden;padding:20px 24px;margin-bottom:32px;display:flex;align-items:center;gap:24px}.goal-logo{width:56px;height:56px;object-fit:contain;background:transparent;display:grid;place-items:center;font-size:22px;font-weight:600;color:var(--text-2);flex-shrink:0}.goal-meta{flex:1 1;min-width:0}.goal-name{font-size:20px;font-weight:600;letter-spacing:-.008em;margin:0;display:flex;align-items:center;gap:8px;color:var(--text)}.goal-stats{display:flex;gap:16px;align-items:flex-start;flex-shrink:0}.stat-col{display:flex;flex-direction:column;gap:4px;width:92px;text-align:right}.stat-h{font-size:11px;font-weight:600;letter-spacing:.02em;text-transform:uppercase;color:var(--text-3)}.stat-col b{color:var(--text);font-weight:600;font-size:15px}.goal-right{display:flex;align-items:center;gap:12px;flex-shrink:0}.dial{width:88px;height:88px;flex-shrink:0;position:relative}.dial .pct{position:absolute;inset:0;display:grid;place-items:center;font-weight:700;font-size:19px}.dept{margin-bottom:32px}.dept-head{display:flex;align-items:center;gap:8px;margin:0 2px 10px}.dept-title{font-weight:700;font-size:12px;letter-spacing:.04em;text-transform:uppercase;color:var(--text-2)}.product-section{margin:0 0 44px;padding-top:40px;border-top:1px solid var(--border)}.product-section:first-of-type{border-top:none;padding-top:8px}.product-head{display:flex;align-items:center;gap:12px;margin-bottom:18px}.product-logo{width:28px;height:28px;border-radius:var(--radius-sm);object-fit:cover;background:var(--bg-soft)}.product-name{font-weight:600;font-size:20px;letter-spacing:-.01em;color:var(--text)}.brand-level{margin-top:44px;padding-top:40px;border-top:1px solid var(--border)}.brand-level-label{font-weight:700;font-size:12px;letter-spacing:.04em;text-transform:uppercase;color:var(--text-2);margin-bottom:18px}.brand-bar{display:flex;gap:8px;justify-content:flex-end;margin-bottom:14px}.obj{padding:14px 16px;margin-bottom:8px;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);transition:box-shadow .1s,border-color .1s}.obj:hover{box-shadow:var(--shadow-sm);border-color:var(--border-strong)}.obj-head{display:flex;align-items:center;gap:14px}.obj-main{flex:1 1;min-width:0}.obj-name{font-weight:600;font-size:15px;gap:8px;flex-wrap:wrap;line-height:1.3;color:var(--text)}.obj-name,.obj-score{display:flex;align-items:center}.obj-score{gap:10px;flex-shrink:0}.kr-list{margin-top:12px;border-top:1px solid var(--border);padding-top:6px}.kr{display:grid;grid-template-columns:1fr 92px 92px 92px 116px;align-items:center;grid-gap:12px;gap:12px;padding:7px 0;border-radius:var(--radius-sm)}.kr-list.admin .kr{grid-template-columns:1fr 92px 92px 92px 116px 64px}.kr:not(.kr-header):hover{background:transparent}.kr-header{padding-top:2px;padding-bottom:2px}.kr-col-h{font-size:11px;font-weight:600;letter-spacing:.02em;text-transform:uppercase;color:var(--text-3);text-align:right}.kr-name{font-size:14px;font-weight:400;display:flex;align-items:center;gap:7px;color:var(--text)}.kr-tag{font-size:11px;font-weight:600;color:var(--text-3);opacity:.7;flex-shrink:0}.kr-num{font-size:14px;color:var(--text-2);text-align:right}.kr-num b{color:var(--text);font-weight:600}.kr-prev{color:var(--text-3);opacity:.7;font-weight:400}.kr-col-h.prev,.stat-prev .stat-h{opacity:.55}.stat-prev b{color:var(--text-3);opacity:.75;font-weight:500}.kr-score{display:flex;flex-direction:column;gap:4px;align-items:flex-end}.bar{height:4px;width:100%;background:var(--bg-soft);overflow:hidden}.bar,.bar>span{border-radius:999px}.bar>span{display:block;height:100%}.chip{display:inline-flex;align-items:center;gap:4px;font-weight:700;font-size:11px;letter-spacing:.02em;padding:2px 6px;border-radius:var(--radius-sm);white-space:nowrap}.chip.big{font-size:15px;padding:4px 10px}.chip.green{color:var(--green-text);background:var(--green-bg)}.chip.yellow{color:var(--yellow-text);background:var(--yellow-bg)}.chip.red{color:var(--red-text);background:var(--red-bg)}.chip.none{color:var(--text-2);background:var(--gray-bg)}.diff{font-size:9.5px;font-weight:700;letter-spacing:.02em;text-transform:uppercase;padding:1px 5px;border-radius:var(--radius-sm)}.diff.easy{color:#206a83;background:#e7f9ff}.diff.medium{color:var(--yellow-text);background:var(--yellow-bg)}.diff.hard{color:var(--red-text);background:var(--red-bg)}.status-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0;cursor:help;box-shadow:0 0 0 3px transparent;transition:box-shadow .12s}.status-dot:hover{box-shadow:0 0 0 3px currentColor}.status-dot.on_track{background:var(--green);color:color-mix(in srgb,var(--green) 22%,transparent)}.status-dot.at_risk{background:var(--yellow);color:color-mix(in srgb,var(--yellow) 22%,transparent)}.status-dot.off_track{background:var(--red);color:color-mix(in srgb,var(--red) 22%,transparent)}.goal-right .status-dot{width:10px;height:10px}.note-btn{border:none;background:transparent;color:var(--text-3);padding:1px;line-height:0;border-radius:50%;display:inline-flex}.note-btn:hover{color:var(--accent)}.confetti-icon{font-size:15px;line-height:1;flex-shrink:0}.goal-right .confetti-icon{font-size:20px}.pill{font-size:12px;color:var(--text-3)}.login-wrap{min-height:100vh;display:grid;place-items:center;padding:24px}.login-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-md);padding:36px 32px;width:100%;max-width:380px;text-align:center}.login-logo{color:var(--text);display:flex;justify-content:center;margin-bottom:14px}.login-title{font-size:20px;font-weight:700;color:var(--text)}.login-sub{font-size:13.5px;color:var(--text-2);margin:6px 0 22px}.login-err{font-size:13px;color:var(--red-text);background:var(--red-bg);border-radius:var(--radius-sm);padding:8px 12px;margin-bottom:16px}.slack-btn{display:inline-flex;align-items:center;justify-content:center;gap:10px;width:100%;padding:11px 16px;border:1px solid var(--border-strong);border-radius:var(--radius-sm);font-weight:600;font-size:15px;color:var(--text);background:var(--surface);transition:background .1s}.slack-btn:hover{background:var(--bg-soft)}.login-note{font-size:12px;color:var(--text-3);margin-top:16px;line-height:1.4}.dev-login{display:flex;flex-direction:column;gap:12px}.dev-badge{font-size:11.5px;font-weight:600;color:var(--yellow-text);background:var(--yellow-bg);border-radius:var(--radius-sm);padding:6px 10px}.dev-quick{display:grid;grid-template-columns:1fr 1fr;grid-gap:8px;gap:8px}.dev-quick .btn{justify-content:center}.dev-form{display:flex;flex-direction:column;gap:8px;border-top:1px solid var(--border);padding-top:12px}.dev-form .btn{justify-content:center}.user-dd{position:relative;flex-shrink:0}.user-btn{border:none;background:transparent;padding:0;cursor:pointer;line-height:0}.user-btn,.user-btn img{border-radius:50%;display:block}.user-btn img{width:30px;height:30px;object-fit:cover}.user-btn:hover{box-shadow:0 0 0 2px var(--accent-bg-2)}.user-ava{width:30px;height:30px;border-radius:50%;background:var(--accent-bg-2);color:var(--accent-pressed);display:grid;place-items:center;font-weight:700;font-size:13px;flex-shrink:0}.user-menu{position:absolute;top:calc(100% + 6px);right:0;z-index:50;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-lg);padding:12px;min-width:200px}.user-menu-name{font-weight:600;font-size:14px;color:var(--text)}.user-menu-email{font-size:12px;color:var(--text-3);margin:2px 0 10px;word-break:break-all}.user-menu .btn{width:100%;justify-content:center}.utag{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.03em;color:var(--accent);background:var(--accent-bg);padding:1px 6px;border-radius:var(--radius-sm);margin-left:8px}.ov-summary{font-size:14px;color:var(--text-2);margin-bottom:18px}.ov-summary b{color:var(--text)}.ov-list{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;box-shadow:var(--shadow-sm)}.ov-row{display:grid;grid-template-columns:40px 1fr 180px 200px 90px;align-items:center;grid-gap:16px;gap:16px;padding:12px 18px;border-bottom:1px solid var(--border);color:var(--text)}.ov-row:last-child{border-bottom:none}a.ov-row{transition:background .1s}a.ov-row:hover{background:var(--bg-soft)}.ov-headrow{font-size:11px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--text-3);padding-top:10px;padding-bottom:10px}.ov-headrow,.ov-headrow:hover{background:var(--surface-2)}.ov-rank{font-weight:700;color:var(--text-3);font-size:13px;text-align:center}.ov-main{display:flex;align-items:center;gap:11px;min-width:0}.ov-dot{width:9px;height:9px;border-radius:50%;flex-shrink:0}.ov-textwrap{display:flex;flex-direction:column;gap:1px;min-width:0}.ov-brandline{font-weight:700;font-size:14.5px;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ov-prod{color:var(--text-2);font-weight:600}.ov-goalname{font-size:12.5px;color:var(--text-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ov-vals{font-size:13px;color:var(--text-2);text-align:right}.ov-vals b{color:var(--text);font-weight:600}.ov-barcol{min-width:0}.ov-scorecol{text-align:right}.muted{color:var(--text-3)}.add-row{margin-top:8px}.add-obj{margin-top:4px}.section-add{display:flex;justify-content:flex-end;margin-bottom:18px}.overlay{position:fixed;inset:0;background:#091e4229;display:grid;place-items:center;z-index:100;padding:20px}.modal{background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow-lg);width:100%;max-width:540px;max-height:90vh;overflow:auto}.modal.wide{max-width:720px}.modal-head{display:flex;align-items:center;justify-content:space-between;padding:20px 24px 12px;position:-webkit-sticky;position:sticky;top:0;background:var(--surface)}.modal-title{font-weight:600;font-size:16px;color:var(--text)}.modal-body{padding:8px 24px 20px}.modal-foot{padding:12px 24px 20px;display:flex;justify-content:flex-end;gap:8px;position:-webkit-sticky;position:sticky;bottom:0;background:var(--surface)}.field{margin-bottom:16px}.field label{display:block;font-size:12px;font-weight:600;color:var(--text-2);margin-bottom:4px}.field .hint{font-size:11.5px;color:var(--text-3);margin-top:4px;font-weight:400}.input,.select,.textarea{width:100%;padding:8px 10px;border:2px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-soft);color:var(--text);outline:none;transition:.1s}.input:hover,.select:hover,.textarea:hover{background:#ebecf0}.input:focus,.select:focus,.textarea:focus{background:var(--surface);border-color:var(--accent)}.textarea{resize:vertical;min-height:64px}.row2{grid-template-columns:1fr 1fr;grid-gap:12px}.row2,.row3{display:grid;gap:12px}.row3{grid-template-columns:1fr 1fr 1fr;grid-gap:12px}.drawer-overlay{background:#091e4229;-webkit-backdrop-filter:none;backdrop-filter:none;z-index:100}.drawer{position:fixed;top:0;right:0;bottom:0;width:420px;max-width:92vw;background:var(--surface);box-shadow:var(--shadow-lg);z-index:110;display:flex;flex-direction:column;animation:slidein .18s ease}@keyframes slidein{0%{transform:translateX(30px);opacity:.4}to{transform:none;opacity:1}}.drawer-head{padding:18px 20px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between}.drawer-sub{font-size:12.5px;color:var(--text-3);margin-top:2px}.drawer-body{padding:8px 20px 24px;overflow:auto}.log{padding:11px 0;border-bottom:1px solid var(--border)}.log-top{display:flex;justify-content:space-between;gap:10px}.log-field{font-weight:600;font-size:13px;color:var(--text)}.log-time{font-size:11px;color:var(--text-3);white-space:nowrap}.log-change{font-size:12.5px;color:var(--text-2);margin-top:3px}.log-change del{color:var(--red-text);text-decoration:line-through}.log-change ins{color:var(--green-text);text-decoration:none}.log-who{font-size:11px;color:var(--text-3);margin-top:3px}.src-tag{font-size:10px;font-weight:700;padding:1px 6px;border-radius:var(--radius-sm);background:var(--bg-soft);color:var(--text-2)}.row-actions{display:flex;gap:2px;opacity:0;transition:opacity .1s}.goal-card:hover .row-actions,.kr:hover .row-actions,.obj:hover .row-actions{opacity:1}.icon-btn{border:none;background:transparent;color:var(--text-3);padding:4px 6px;border-radius:var(--radius-sm);font-size:13px}.icon-btn:hover{background:#091e4214;color:var(--text)}.icon-btn:disabled{opacity:.3;cursor:default}.icon-btn:disabled:hover{background:transparent;color:var(--text-3)}.confetti-piece{position:fixed;width:9px;height:14px;top:-20px;z-index:200;pointer-events:none;border-radius:2px}.toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);background:#182135;color:#fff;padding:10px 18px;border-radius:var(--radius-sm);font-size:14px;font-weight:500;box-shadow:var(--shadow-lg);z-index:300;animation:slidein .2s}@media (max-width:760px){.app{padding:24px 16px 80px}.row2,.row3{grid-template-columns:1fr}.kr,.kr-list.admin .kr{grid-template-columns:1fr auto auto auto;gap:8px}.kr-header{display:none}.kr-name{grid-column:1/-1}.goal-card{flex-wrap:wrap}.product-name{font-size:18px}.brand-title{display:none}}