@font-face{font-family:"Exo 2";src:url(/fonts/Exo2-VariableFont_wght.ttf) format("truetype-variations");font-weight:100 900;font-style:normal;font-display:swap}@font-face{font-family:"Exo 2";src:url(/fonts/Exo2-Italic-VariableFont_wght.ttf) format("truetype-variations");font-weight:100 900;font-style:italic;font-display:swap}@font-face{font-family:"Source Sans 3";src:url(/fonts/SourceSans3-VariableFont_wght.ttf) format("truetype-variations");font-weight:200 900;font-style:normal;font-display:swap}@font-face{font-family:"Source Sans 3";src:url(/fonts/SourceSans3-Italic-VariableFont_wght.ttf) format("truetype-variations");font-weight:200 900;font-style:italic;font-display:swap}:root{--color-primary: #2C2117;--color-primary-hover: #1A1410;--color-gold: #D4A017;--color-gold-hover: #B58812;--color-rust: #7A3E1D;--color-rust-hover: #5E2F15;--color-ink: #2C2117;--color-body: #4A4036;--color-muted: #6B6358;--color-line: #E7E1D6;--color-surface: #FFFFFF;--color-surface-warm: #F7F2E9;--color-surface-sand: #EFE7D8;--color-surface-dark: #2C2117;--color-success: #3F7D4E;--color-sale: #B23A2F;--color-warning: #C8841A;--color-info: #4A6E84;--color-error: #B23A2F;--font-head: "Exo 2", system-ui, -apple-system, "Segoe UI", sans-serif;--font-body: "Source Sans 3", system-ui, -apple-system, "Segoe UI", sans-serif;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 20px;--space-6: 24px;--space-8: 32px;--space-10: 40px;--space-12: 48px;--space-16: 64px;--radius-sm: 8px;--radius-md: 12px;--radius-lg: 18px;--radius-xl: 24px;--radius-pill: 999px;--shadow-sm: 0 1px 2px rgba(44,33,23,.06);--shadow-md: 0 4px 12px rgba(44,33,23,.1);--shadow-lg: 0 12px 28px rgba(44,33,23,.14);--ff-accent: var(--color-gold)}*{box-sizing:border-box}html,body{margin:0;padding:0;font-family:var(--font-body);color:var(--color-body);background:var(--color-surface-warm);-webkit-font-smoothing:antialiased}#root{min-height:100vh}h1,h2,h3,h4{font-family:var(--font-head);color:var(--color-ink);margin:0}a{color:var(--color-rust)}button{font-family:var(--font-body);cursor:pointer}:root{--ff-sidebar: 248px;--ff-panel-pad: 24px;--ff-gap: 20px}.ff-app{display:grid;grid-template-columns:var(--ff-sidebar) 1fr;min-height:100vh}.ff-sidebar{background:var(--color-surface-dark);color:#efe7d8;display:flex;flex-direction:column;position:sticky;top:0;height:100vh;border-right:1px solid rgba(255,255,255,.06)}.ff-brand{display:flex;align-items:center;gap:12px;padding:22px 22px 18px;border:0;background:transparent;width:100%;text-align:left}.ff-brand img{width:40px;height:40px;object-fit:contain}.ff-brand-text{display:flex;flex-direction:column}.ff-brand-name{font-family:var(--font-head);font-weight:700;font-size:17px;color:#fff;letter-spacing:-.01em;line-height:1}.ff-brand-sub{font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--color-gold);margin-top:3px}.ff-nav{padding:8px 12px;flex:1;overflow-y:auto;display:flex;flex-direction:column;gap:2px}.ff-nav-item{display:flex;align-items:center;gap:12px;width:100%;border:0;background:transparent;color:#c9bda8;text-align:left;font-size:14.5px;font-weight:500;font-family:var(--font-body);padding:10px 12px;border-radius:var(--radius-sm);position:relative;transition:background .14s ease,color .14s ease}.ff-nav-item svg{flex:0 0 auto}.ff-nav-item:hover{background:#ffffff0d;color:#f3ecdd}.ff-nav-item.is-active{background:#d4a01721;color:#fff}.ff-nav-item.is-active:before{content:"";position:absolute;left:-12px;top:7px;bottom:7px;width:3px;border-radius:0 3px 3px 0;background:var(--color-gold)}.ff-nav-item.is-active svg{color:var(--color-gold)}.ff-side-foot{border-top:1px solid rgba(255,255,255,.07);padding:14px 18px;display:flex;align-items:center;gap:11px}.ff-ava{width:34px;height:34px;border-radius:var(--radius-pill);object-fit:cover;flex:0 0 auto}.ff-ava-fallback{background:var(--color-gold);color:var(--color-ink);display:grid;place-items:center;font-family:var(--font-head);font-weight:700;font-size:14px}.ff-foot-txt{min-width:0;flex:1;display:flex;flex-direction:column}.ff-foot-txt .nm{font-size:13.5px;color:#f3ecdd;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ff-foot-txt .rl{font-size:11.5px;color:#8c7f6e;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ff-logout{border:0;background:transparent;color:#8c7f6e;padding:6px;border-radius:var(--radius-sm);display:grid;place-items:center}.ff-logout:hover{color:#f3ecdd;background:#ffffff0f}.ff-version{padding:9px 18px 13px;font-size:11px;color:#8c7f6e;letter-spacing:.02em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ff-main{display:flex;flex-direction:column;min-width:0}.ff-topbar{display:flex;align-items:center;gap:16px;padding:16px 32px;background:#ffffffd1;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid var(--color-line);position:sticky;top:0;z-index:20}.ff-eyebrow{font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:var(--color-rust);font-weight:600}.ff-topbar h1{font-family:var(--font-head);font-weight:700;font-size:23px;color:var(--color-ink);margin:2px 0 0;letter-spacing:-.01em}.ff-spacer{flex:1}.ff-lastsync{font-size:12.5px;color:var(--color-muted);white-space:nowrap}.ff-lastsync strong{color:var(--color-body);font-weight:600}.ff-content{padding:28px 32px 56px;max-width:1320px;width:100%}.ff-btn{display:inline-flex;align-items:center;gap:8px;height:38px;padding:0 16px;border:0;border-radius:var(--radius-pill);font-weight:700;font-size:13.5px;cursor:pointer;font-family:var(--font-body);transition:background .14s,border-color .14s,transform .1s;white-space:nowrap}.ff-btn:active{transform:translateY(1px)}.ff-btn:disabled{opacity:.55;cursor:not-allowed}.ff-btn-primary{background:var(--color-rust);color:#fff}.ff-btn-primary:hover:not(:disabled){background:var(--color-rust-hover)}.ff-btn-accent{background:var(--color-gold);color:var(--color-ink)}.ff-btn-accent:hover:not(:disabled){background:var(--color-gold-hover)}.ff-btn-ghost{background:#fff;color:var(--color-ink);border:1.5px solid var(--color-line)}.ff-btn-ghost:hover:not(:disabled){border-color:var(--color-ink)}.ff-icon-btn{width:32px;height:32px;display:grid;place-items:center;border:1px solid var(--color-line);background:#fff;color:var(--color-muted);border-radius:var(--radius-sm);cursor:pointer;transition:border-color .14s,color .14s}.ff-icon-btn:hover{border-color:var(--color-rust);color:var(--color-rust)}.ff-input,.ff-textarea{width:100%;border:1px solid var(--color-line);border-radius:var(--radius-sm);font-family:var(--font-body);font-size:14px;color:var(--color-ink);background:#fff;padding:9px 12px}.ff-textarea{resize:vertical;line-height:1.55;min-height:240px;font-size:14px}.ff-input:focus,.ff-textarea:focus{outline:none;border-color:var(--color-gold);box-shadow:0 0 0 3px #d4a0172e}.ff-grid{display:grid;gap:var(--ff-gap)}.ff-cols-2{grid-template-columns:1fr 1fr}.ff-cols-3{grid-template-columns:2fr 1fr}.ff-panel{background:#fff;border:1px solid var(--color-line);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);padding:var(--ff-panel-pad)}.ff-panel-head{display:flex;align-items:flex-start;gap:12px;margin-bottom:18px;flex-wrap:wrap}.ff-panel-title{font-family:var(--font-head);font-weight:600;font-size:17px;color:var(--color-ink);margin:0}.ff-panel-sub{font-size:13px;color:var(--color-muted);margin:3px 0 0}.ff-kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--ff-gap)}.ff-kpis-3{grid-template-columns:repeat(3,1fr)}.ff-kpi{background:#fff;border:1px solid var(--color-line);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);padding:20px 22px;display:flex;flex-direction:column;gap:10px}.ff-kpi-top{display:flex;align-items:center;justify-content:space-between}.ff-kpi .lbl{font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--color-muted);font-weight:600}.ff-kpi-ico{width:30px;height:30px;border-radius:var(--radius-sm);display:grid;place-items:center;background:#d4a01724;color:var(--color-rust)}.ff-kpi .val{font-family:var(--font-head);font-weight:700;font-size:28px;line-height:1;color:var(--color-ink);letter-spacing:-.015em;white-space:nowrap}.ff-kpi .row{display:flex;align-items:flex-end;justify-content:space-between;gap:12px}.ff-kpi .sub{font-size:12.5px;color:var(--color-muted)}.ff-delta{display:inline-flex;align-items:center;gap:3px;font-size:12.5px;font-weight:700;padding:3px 8px;border-radius:var(--radius-pill);white-space:nowrap}.ff-delta.up{color:var(--color-success);background:#3f7d4e1f}.ff-delta.down{color:var(--color-sale);background:#b23a2f1c}.ff-table-wrap{overflow-x:auto}table.ff-table{width:100%;border-collapse:collapse;font-size:13.5px}.ff-table th{text-align:left;font-weight:600;color:var(--color-muted);font-size:11px;letter-spacing:.1em;text-transform:uppercase;padding:0 16px 12px;border-bottom:1px solid var(--color-line);white-space:nowrap}.ff-table th.num,.ff-table td.num{text-align:right}.ff-table td{padding:12px 16px;border-bottom:1px solid var(--color-line);color:var(--color-body);vertical-align:middle}.ff-table tbody tr:hover{background:var(--color-surface-warm)}.ff-table tbody tr:last-child td{border-bottom:0}.ff-table .strong{font-weight:600;color:var(--color-ink)}.ff-table .mono{font-variant-numeric:tabular-nums}.ff-muted{color:var(--color-muted)}.ff-link{color:var(--color-rust);display:inline-flex;align-items:center}.ff-link:hover{color:var(--color-rust-hover)}.ff-chan{display:inline-flex;align-items:center;gap:7px;font-weight:600}.ff-badge{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:600;padding:3px 10px;border-radius:var(--radius-pill);white-space:nowrap}.ff-badge .dot{width:7px;height:7px;border-radius:50%;background:currentColor}.ff-badge.ok{color:var(--color-success);background:#3f7d4e1f}.ff-badge.wait{color:var(--color-warning);background:#c8841a24}.ff-badge.info{color:#36546a;background:#4a6e8424}.ff-badge.danger{color:var(--color-sale);background:#b23a2f1f}.ff-badge.neutral{color:var(--color-muted);background:var(--color-surface-sand)}.ff-cal-nav{display:flex;align-items:center;justify-content:center;gap:16px;margin-bottom:14px}.ff-cal-title{font-family:var(--font-head);font-weight:600;font-size:16px;color:var(--color-ink);min-width:170px;text-align:center;text-transform:capitalize}.ff-cal{border:1px solid var(--color-line);border-radius:var(--radius-md);overflow:hidden;background:var(--color-line)}.ff-cal-dow{display:grid;grid-template-columns:repeat(7,1fr);background:var(--color-surface-warm)}.ff-cal-dow>div{padding:9px 12px;font-size:11px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--color-muted)}.ff-cal-dow>div.we{color:var(--color-rust)}.ff-cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:1px}.ff-cal-cell{background:#fff;min-height:104px;padding:7px 7px 8px;display:flex;flex-direction:column;gap:5px;position:relative}.ff-cal-cell.is-out{background:#fbf8f2}.ff-cal-cell.is-weekend{background:#fcfaf5}.ff-cal-cell.is-today{box-shadow:inset 0 0 0 2px var(--color-gold)}.ff-cal-daynum{font-family:var(--font-head);font-weight:600;font-size:13.5px;color:var(--color-ink);display:flex;align-items:center;justify-content:space-between}.ff-cal-cell.is-out .ff-cal-daynum{color:var(--color-muted);opacity:.55}.ff-cal-daynum .cnt{font-family:var(--font-body);font-size:10.5px;font-weight:700;color:var(--color-muted);background:var(--color-surface-sand);border-radius:var(--radius-pill);padding:0 6px;line-height:16px}.ff-cal-chips{display:flex;flex-direction:column;gap:3px}.ff-cal-chip{font-size:11px;font-weight:600;color:var(--color-ink);padding:2px 7px;border-radius:var(--radius-sm);background:var(--color-surface-warm);border-left:3px solid var(--color-gold);line-height:1.35;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ff-cal-chip .nm{overflow:hidden;text-overflow:ellipsis}.ff-cal-more{font-size:10.5px;font-weight:600;color:var(--color-rust);padding:1px 6px}.ff-cal-legend{display:flex;gap:18px;margin-top:14px;font-size:13px;color:var(--color-body);flex-wrap:wrap}.ff-cal-legend span{display:inline-flex;align-items:center;gap:7px}.ff-cal-legend i{width:12px;height:12px;border-radius:3px;display:inline-block}.ff-feed{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}.ff-feed-row{display:flex;align-items:center;gap:12px;padding:11px 0;border-bottom:1px solid var(--color-line)}.ff-feed-row:last-child{border-bottom:0}.ff-feed-ico{width:32px;height:32px;flex:0 0 auto;border-radius:var(--radius-sm);display:grid;place-items:center;background:var(--color-surface-warm);color:var(--color-rust)}.ff-feed-main{min-width:0;flex:1}.ff-feed-title{font-size:13.5px;font-weight:600;color:var(--color-ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ff-feed-meta{font-size:12px;color:var(--color-muted)}.ff-feed-date{margin-left:auto;font-size:12.5px;color:var(--color-body);white-space:nowrap;font-variant-numeric:tabular-nums}.ff-goals{display:flex;flex-direction:column;gap:18px}.ff-goal{display:flex;flex-direction:column;gap:8px}.ff-goal-row{flex-direction:row;align-items:center;gap:16px}.ff-goal-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:8px}.ff-goal-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px}.ff-goal-title{font-size:14.5px;font-weight:600;color:var(--color-ink)}.ff-goal-period{font-size:12px;color:var(--color-muted);white-space:nowrap}.ff-goal-foot{display:flex;align-items:center;justify-content:space-between;gap:12px;font-size:12.5px;color:var(--color-muted)}.ff-goal-foot strong{color:var(--color-rust);font-weight:700}.ff-goal-actions{display:flex;gap:6px;flex:0 0 auto}.ff-bar-track{height:10px;background:var(--color-surface-sand);border-radius:var(--radius-pill);overflow:hidden}.ff-bar-fill{height:100%;border-radius:var(--radius-pill);background:var(--color-gold);transition:width .4s ease}.ff-goal-form{background:var(--color-surface-warm);border:1px solid var(--color-line);border-radius:var(--radius-md);padding:18px;margin-bottom:18px}.ff-form-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}.ff-field{display:flex;flex-direction:column;gap:5px}.ff-field>span{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--color-muted);font-weight:600}.ff-field-wide{grid-column:span 3}.ff-form-actions{display:flex;gap:10px;margin-top:16px}.ff-daygroup{margin-bottom:8px}.ff-daygroup:last-child{margin-bottom:0}.ff-daygroup-head{font-family:var(--font-head);font-weight:600;font-size:13px;color:var(--color-rust);text-transform:capitalize;padding:14px 0 6px;border-bottom:1px solid var(--color-line);margin-bottom:4px}.ff-daygroup:first-child .ff-daygroup-head{padding-top:0}.ff-legend{display:flex;flex-direction:column;gap:11px}.ff-legend-row{display:flex;align-items:center;gap:10px;font-size:13.5px}.ff-legend-row .sw{width:11px;height:11px;border-radius:3px;flex:0 0 auto}.ff-legend-row .nm{color:var(--color-body);flex:1}.ff-legend-row .pc{color:var(--color-muted);width:52px;text-align:right;font-variant-numeric:tabular-nums}.ff-tip{position:absolute;pointer-events:none;background:var(--color-ink);color:#fff;font-size:12px;padding:7px 10px;border-radius:var(--radius-sm);white-space:nowrap;transform:translate(-50%,-120%);opacity:0;transition:opacity .1s;z-index:50;box-shadow:var(--shadow-md)}.ff-tip .t-lbl{color:#c9bda8;font-size:10.5px}.ff-tip b{font-weight:700}.ff-md{color:var(--color-body);font-size:14.5px;line-height:1.65}.ff-md-h1{font-family:var(--font-head);font-weight:700;font-size:21px;color:var(--color-ink);margin:22px 0 10px}.ff-md-h2{font-family:var(--font-head);font-weight:600;font-size:17px;color:var(--color-ink);margin:20px 0 8px}.ff-md-h3{font-family:var(--font-head);font-weight:600;font-size:15px;color:var(--color-rust);margin:16px 0 6px}.ff-md>:first-child{margin-top:0}.ff-md-p{margin:0 0 12px}.ff-md-list{margin:0 0 12px;padding-left:22px}.ff-md-list li{margin:4px 0}.ff-md strong{color:var(--color-ink);font-weight:700}.ff-view{opacity:1}.ff-empty{color:var(--color-muted);font-size:14px;padding:40px;text-align:center}.ff-loading{display:flex;align-items:center;justify-content:center;gap:12px;padding:60px;color:var(--color-muted);font-size:14px}.ff-spin{width:16px;height:16px;border-radius:50%;border:2.5px solid rgba(122,62,29,.25);border-top-color:var(--color-rust);display:inline-block;animation:ff-rotate .8s linear infinite}.ff-loading .ff-spin{width:22px;height:22px}.ff-spin-light{border-color:#fff6;border-top-color:#fff}@keyframes ff-rotate{to{transform:rotate(360deg)}}.ff-boot{min-height:100vh;display:flex;align-items:center;justify-content:center;gap:12px;color:var(--color-muted);font-size:14px}.ff-login{min-height:100vh;display:flex;align-items:center;justify-content:center;background:var(--color-surface-warm);padding:24px}.ff-login-card{background:#fff;border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);padding:44px 40px;text-align:center;max-width:380px;width:100%;display:flex;flex-direction:column;align-items:center}.ff-login-seal{width:56px;height:56px;object-fit:contain;margin-bottom:16px;background:var(--color-surface-dark);border-radius:var(--radius-md);padding:8px}.ff-login-brand{font-family:var(--font-head);font-size:24px;font-weight:700;color:var(--color-rust)}.ff-login-sub{font-family:var(--font-head);font-size:16px;color:var(--color-muted);letter-spacing:.04em;margin-top:2px}.ff-login-text{color:var(--color-body);font-size:15px;margin:26px 0 22px}.ff-login-warn{margin-top:22px;color:var(--color-warning);font-size:12px;padding:9px 12px;background:var(--color-surface-sand);border-radius:var(--radius-sm)}.ff-toast{position:fixed;bottom:24px;left:50%;transform:translate(-50%);color:#fff;padding:11px 22px;border-radius:var(--radius-pill);box-shadow:var(--shadow-lg);font-size:14px;font-weight:600;z-index:9999;max-width:90vw;text-align:center;pointer-events:none}@media (max-width: 1100px){.ff-kpis,.ff-kpis-3{grid-template-columns:repeat(2,1fr)}.ff-cols-2,.ff-cols-3{grid-template-columns:1fr}.ff-form-grid{grid-template-columns:repeat(2,1fr)}.ff-field-wide{grid-column:span 2}}@media (max-width: 820px){.ff-app{grid-template-columns:72px 1fr}.ff-sidebar{--ff-sidebar: 72px}.ff-brand{padding:18px 0;justify-content:center}.ff-brand-text,.ff-nav-text,.ff-foot-txt,.ff-version{display:none}.ff-nav-item,.ff-side-foot{justify-content:center}.ff-content{padding:20px 16px 48px}.ff-topbar{padding:14px 16px}.ff-lastsync{display:none}}@media (max-width: 560px){.ff-kpis,.ff-kpis-3,.ff-form-grid{grid-template-columns:1fr}.ff-field-wide{grid-column:span 1}}
