.login-page{--wallpaper-violet:#dcd7fa;--wallpaper-blue:#d2e6f9;--wallpaper-line:#6d73ab18;isolation:isolate;background:radial-gradient(ellipse at 12% 18%, var(--wallpaper-violet), transparent 52%), radial-gradient(ellipse at 88% 82%, var(--wallpaper-blue), transparent 54%), var(--bg);min-height:100vh;font-family:var(--font-ui);color:var(--ink);justify-content:center;align-items:center;padding:24px;display:flex;position:relative}.login-page:before,.login-page:after{content:"";z-index:-1;pointer-events:none;position:absolute;inset:0}.login-page:before{background-image:linear-gradient(var(--wallpaper-line) 1px, transparent 1px), linear-gradient(90deg, var(--wallpaper-line) 1px, transparent 1px);background-size:64px 64px;-webkit-mask-image:linear-gradient(120deg,#000,#0000 55%,#000);mask-image:linear-gradient(120deg,#000,#0000 55%,#000)}.login-page:after{background:radial-gradient(ellipse at 0% 100%, transparent 39%, var(--wallpaper-line) 39.1%, transparent 39.3%, transparent 48%, var(--wallpaper-line) 48.1%, transparent 48.3%), radial-gradient(ellipse at 100% 0%, transparent 34%, var(--wallpaper-line) 34.1%, transparent 34.3%, transparent 44%, var(--wallpaper-line) 44.1%, transparent 44.3%)}[data-theme=dark] .login-page{--wallpaper-violet:#292344;--wallpaper-blue:#18334b;--wallpaper-line:#b4bbf019}.login-page .login-theme{z-index:1}.login-card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);width:100%;max-width:380px;box-shadow:var(--shadow-lg);padding:36px 32px 32px;position:relative}.login-card__brand{align-items:center;gap:14px;margin-bottom:28px;display:flex}.login-card__logo{border-radius:50%;flex:none;width:48px;height:48px;box-shadow:0 2px 6px #0b3d912e}.login-card__title{font-size:var(--fs-lg);color:var(--ink);margin:0 0 3px;font-weight:600}.login-card__subtitle{font-size:var(--fs-sm);color:var(--ink-muted);margin:0;line-height:1.5}.login-page .form-error{font-family:var(--font-ui);font-size:var(--fs-sm);align-items:flex-start;gap:9px;display:flex}.login-page .form-error svg{flex:none;margin-top:1px}.login-card__field{margin-bottom:18px;display:block}.login-card__label{font-size:var(--fs-sm);color:#44516a;margin-bottom:7px;font-weight:600;display:block}.login-card__field input{box-sizing:border-box;width:100%;font:inherit;font-size:var(--fs-md);color:var(--ink);background:var(--card);border:1px solid var(--border);border-radius:var(--radius-sm);outline:none;padding:11px 14px;transition:border-color .15s,box-shadow .15s}.login-card__field input::placeholder{color:var(--ink-muted)}.login-card__field input[aria-invalid=true]{border-color:var(--red)}.login-card__field input:hover{border-color:#c7d0df}.login-card__field input:focus-visible{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-bg)}.login-card__password-wrap{position:relative}.login-card__password-wrap input{padding-right:42px}.login-card__toggle{width:32px;height:32px;color:var(--ink-muted);cursor:pointer;background:0 0;border:none;border-radius:7px;justify-content:center;align-items:center;transition:color .15s,background .15s;display:flex;position:absolute;top:50%;right:4px;transform:translateY(-50%)}.login-card__toggle:hover{color:var(--ink);background:var(--bg)}.login-card__toggle:focus-visible{outline:2px solid var(--primary);outline-offset:1px}.login-card__submit{justify-content:center;align-items:center;gap:9px;width:100%;margin-top:6px;display:flex}.login-card__spinner{border:2px solid #ffffff59;border-top-color:#fff;border-radius:50%;width:14px;height:14px;animation:.7s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){.login-card__spinner{animation:none}}@media (width<=420px){.login-card{padding:28px 22px 26px}}:root{--bg:#f5f7fb;--card:#fff;--ink:#18243b;--ink-muted:#627089;--border:#e2e7f0;--primary:#5146b8;--primary-light:#44389f;--primary-bg:#eeecfa;--amber:#916000;--amber-bg:#fff6df;--orange:#b34f12;--orange-bg:#fff0e5;--red:#bd3342;--red-bg:#fff0f1;--green:#18774f;--green-bg:#eaf7f0;--blue:#315fbb;--blue-bg:#edf3ff;--radius:14px;--radius-sm:10px;--shadow:0 6px 20px #231e5a0f;--shadow-lg:0 16px 40px #231e5a24;--font-ui:"IBM Plex Sans Thai", "Sarabun", "Noto Sans Thai", system-ui, sans-serif;--font-mono:"IBM Plex Sans Thai", "Sarabun", "Noto Sans Thai", system-ui, sans-serif;--fs-2xs:11px;--fs-xs:12px;--fs-sm:14px;--fs-md:15px;--fs-lg:18px;--fs-xl:28px;--fs-2xl:32px}*{box-sizing:border-box}body{background:var(--bg);color:var(--ink);font-family:var(--font-ui);margin:0;font-size:14px;line-height:1.5}button,select,option{font-family:inherit}.app-shell{flex-direction:column;min-height:100vh;display:flex}.app{flex-direction:column;flex:1;min-width:0;display:flex}.sidebar{background:var(--card);border-right:none;border-bottom:1px solid var(--border);z-index:30;flex-direction:row;flex-shrink:0;align-items:center;gap:32px;width:100%;padding:12px 32px;display:flex;position:sticky;top:0}.sidebar__brand{align-items:center;gap:10px;padding:0;display:flex}.sidebar__logo{border-radius:var(--radius-sm);object-fit:contain;flex-shrink:0;justify-content:center;align-items:center;width:62px;height:62px;padding:4px;display:flex}.sidebar__brand-text{font-weight:600;font-size:var(--fs-md);color:var(--ink);white-space:nowrap;line-height:1.3}.sidebar__nav{flex-direction:row;gap:4px;display:flex}.sidebar__nav-item{text-align:left;border-radius:var(--radius-sm);color:var(--ink-muted);font-size:var(--fs-md);cursor:pointer;white-space:nowrap;background:0 0;border:none;align-items:center;gap:8px;padding:8px 14px;font-weight:500;display:flex}.sidebar__nav-item:hover{background:var(--bg);color:var(--ink)}.sidebar__nav-item--active{background:var(--primary-bg);color:var(--primary)}.sidebar__nav-icon{text-align:center;width:18px}.app-header{color:var(--ink);box-sizing:border-box;background:0 0;justify-content:space-between;align-items:center;width:100%;margin:0 auto;padding:24px 32px 8px;display:flex}.app-header__title{flex-direction:column;gap:2px;display:flex}.app-header__eyebrow{font-family:var(--font-mono);font-size:var(--fs-xs);letter-spacing:.06em;color:var(--ink-muted)}.app-header h1{font-size:var(--fs-xl);margin:0;font-weight:700}.app-header__actions{align-items:center;gap:12px;display:flex}.back-btn{color:var(--primary);font-size:var(--fs-sm);cursor:pointer;background:0 0;border:none;align-self:flex-start;padding:0 0 4px;font-weight:600}.back-btn:hover{text-decoration:underline}.app-main{box-sizing:border-box;flex:1;width:100%;margin:0 auto;padding:20px 32px 48px}.loading-text{color:var(--ink-muted)}.dashboard-page{flex-direction:column;gap:20px;display:flex}.chart-grid{grid-template-columns:1fr 1fr;gap:16px;display:grid}.chart-card{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);padding:18px 20px}.chart-card--wide{grid-column:span 2}.chart-card__title{font-size:var(--fs-md);color:var(--ink);margin:0 0 8px;font-weight:600}@media (width<=900px){.chart-grid{grid-template-columns:1fr}.chart-card--wide{grid-column:span 1}}.top-expiring__list{flex-direction:column;display:flex}.top-expiring__row{border-bottom:1px solid var(--border);grid-template-columns:32px minmax(0,1.6fr) minmax(0,2fr) 90px;align-items:center;gap:16px;padding:12px 4px;display:grid}.top-expiring__row:last-child{border-bottom:none}.top-expiring__row--header{font-size:var(--fs-xs);color:var(--ink-muted);padding-top:0;padding-bottom:10px;font-weight:600}.top-expiring__rank{font-family:var(--font-mono);font-size:var(--fs-sm);color:var(--ink-muted)}.top-expiring__name{font-size:var(--fs-md);white-space:normal;overflow-wrap:break-word;word-break:break-word;font-weight:500}.top-expiring__bar-track{background:var(--bg);border-radius:999px;height:6px;overflow:hidden}.top-expiring__bar-fill{border-radius:999px;height:100%;display:block}.top-expiring__pill-col{text-align:right}.top-expiring__pill{font-size:var(--fs-xs);font-weight:600;font-family:var(--font-mono);white-space:nowrap;border:1px solid;border-radius:999px;padding:3px 12px;display:inline-block}@media (width<=640px){.top-expiring__row{grid-template-columns:24px 1fr 70px}.top-expiring__bar-track{display:none}}.hierarchy-list{flex-direction:column;display:flex}.hierarchy-group{border-bottom:1px solid var(--border)}.hierarchy-group:last-child{border-bottom:none}.hierarchy-row{grid-template-columns:24px minmax(0,2fr) minmax(0,1fr) 110px 140px;align-items:center;gap:14px;padding:12px 4px;display:grid}.hierarchy-row--master{cursor:pointer;font-weight:600}.hierarchy-row--master:hover{background:var(--bg)}.hierarchy-row--child{background:#fbfbff;padding-left:4px}.hierarchy-toggle{color:var(--ink-muted);font-size:var(--fs-xs);text-align:center}.hierarchy-name{font-size:var(--fs-md);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.hierarchy-row--child .hierarchy-name{padding-left:20px;font-weight:400}.hierarchy-meta{font-size:var(--fs-xs);color:var(--ink-muted)}.hierarchy-date{font-size:var(--fs-sm)}@media (width<=720px){.hierarchy-row{grid-template-columns:20px minmax(0,1fr) 85px 90px}.hierarchy-meta{display:none}}.summary-strip{grid-template-columns:repeat(6,1fr);gap:16px;display:grid}.summary-block{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);align-items:flex-start;gap:14px;padding:18px;transition:transform .15s,box-shadow .15s;display:flex}.summary-block--clickable{cursor:pointer}.summary-block--clickable:hover{box-shadow:var(--shadow-lg);transform:translateY(-2px)}.summary-block--clickable:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.summary-icon{border-radius:12px;flex-shrink:0;justify-content:center;align-items:center;width:42px;height:42px;font-size:18px;display:flex}.summary-icon--blue{background:var(--blue-bg)}.summary-icon--red,.summary-icon--critical{background:var(--red-bg)}.summary-icon--urgent{background:var(--amber-bg)}.summary-icon--warn{background:var(--orange-bg)}.summary-icon--green{background:var(--green-bg)}.summary-block__text{flex-direction:column;gap:2px;display:flex}.summary-value{font-family:var(--font-mono);font-size:var(--fs-2xl);font-weight:700;line-height:1.1}.summary-label{font-size:var(--fs-sm);color:var(--ink-muted)}.summary-pct{font-size:var(--fs-xs);color:var(--ink-muted);margin-top:2px}.filter-bar{flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:16px;display:flex}.filter-search{flex:1;min-width:220px}.filter-bar select,.filter-bar input[type=text]{border:1px solid var(--border);background:var(--card);color:var(--ink);font-family:inherit;font-size:var(--fs-md);border-radius:999px;padding:10px 14px}.filter-bar select:focus,.filter-bar input[type=text]:focus,.contract-form input:focus,.contract-form select:focus,.contract-form textarea:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-bg);outline:none}.filter-bar__add{margin-left:auto}.btn{border:1px solid var(--border);background:var(--card);color:var(--ink);cursor:pointer;font-size:var(--fs-md);border-radius:999px;padding:10px 18px;font-weight:600}.btn:hover{border-color:var(--primary);color:var(--primary)}.btn--primary{background:var(--primary);border-color:var(--primary);color:#fff}.btn--primary:hover{background:var(--primary-light);color:#fff}.btn--danger{background:var(--red);border-color:var(--red);color:#fff}.btn--danger:hover{color:#fff;background:#e64545}.link-btn{color:var(--primary);cursor:pointer;font-size:var(--fs-sm);background:0 0;border:none;padding:2px 4px;font-weight:600}.link-btn:hover{text-decoration:underline}.link-btn--danger{color:var(--red)}.link-btn:disabled{color:var(--ink-muted);cursor:default;text-decoration:none}.table-wrap{border:1px solid var(--border);border-radius:var(--radius);background:var(--card);box-shadow:var(--shadow);overflow-x:auto}.contracts-table{border-collapse:collapse;table-layout:fixed;width:100%;min-width:980px}.contracts-table th{text-align:left;font-size:var(--fs-xs);text-transform:none;color:var(--ink-muted);border-bottom:1px solid var(--border);white-space:nowrap;background:#fafaff;padding:14px 16px;font-weight:600}.sortable-th{cursor:pointer;-webkit-user-select:none;user-select:none}.sortable-th:hover,.sortable-th--active{color:var(--primary)}.sort-arrow{width:10px;font-size:var(--fs-2xs);margin-left:3px;display:inline-block}.contracts-table td{border-bottom:1px solid var(--border);vertical-align:middle;white-space:nowrap;font-size:var(--fs-md);padding:14px 16px}.contracts-table tbody tr:last-child td{border-bottom:none}.contracts-table tbody tr:not(.detail-row){cursor:pointer}.contracts-table .num{text-align:right}.mono{font-family:var(--font-mono);font-size:var(--fs-sm)}.cell-strong{font-weight:600}.contracts-table td.cell-clip{white-space:normal;overflow-wrap:break-word;word-break:break-word}.expand-toggle{color:var(--ink-muted);text-align:center;width:20px}.row-actions{white-space:nowrap;gap:8px;display:flex}.row-expanded{background:#fafaff}.row-highlighted{animation:3s ease-out highlight-fade}@keyframes highlight-fade{0%{background:var(--primary-bg)}to{background:0 0}}.type-badge{font-size:var(--fs-xs);background:var(--primary-bg);color:var(--primary);vertical-align:middle;white-space:nowrap;border-radius:999px;margin-left:8px;padding:1px 8px;font-weight:600;display:inline-block}.detail-row td{white-space:normal;background:#fbfbff;padding:16px 16px 20px 44px}.detail-grid{grid-template-columns:repeat(4,minmax(150px,1fr));gap:12px 24px;display:grid}.detail-wide{grid-column:span 2}.detail-label{font-size:var(--fs-xs);color:var(--ink-muted);margin-bottom:2px;display:block}.detail-subcontracts{border-top:1px dashed var(--border);margin-top:16px;padding-top:14px}.subcontract-list{flex-direction:column;gap:6px;margin-top:8px;display:flex;overflow-x:auto}.subcontract-item{background:var(--card);cursor:pointer;font-size:var(--fs-md);grid-template-columns:18px auto minmax(0,1.3fr) minmax(0,.9fr) 80px 95px 75px 110px minmax(0,.8fr) 100px auto;align-items:center;gap:10px;min-width:900px;padding:8px 12px;display:grid}.subcontract-card{border:1px solid var(--border);border-radius:var(--radius-sm);overflow:hidden}.subcontract-item .mono{font-size:inherit}.subcontract-item .num{text-align:right}.subcontract-item--header{cursor:default;font-size:var(--fs-xs);color:var(--ink-muted);background:#fafaff;padding-top:6px;padding-bottom:6px;font-weight:600}.subcontract-item:hover{background:var(--bg)}.subcontract-detail{border-top:1px dashed var(--border);background:#fbfbff;padding:14px 16px 16px}.subcontract-name{font-size:var(--fs-md);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.empty-state{text-align:center;color:var(--ink-muted);border:1px dashed var(--border);border-radius:var(--radius);background:var(--card);padding:48px}.table-footer{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;margin-top:14px;display:flex}.table-footer__count{font-size:var(--fs-sm);color:var(--ink-muted)}.pagination{align-items:center;gap:10px;display:flex}.pagination__btn{border:1px solid var(--border);background:var(--card);color:var(--ink);font-size:var(--fs-sm);cursor:pointer;border-radius:999px;padding:7px 14px;font-weight:600}.pagination__btn:hover:not(:disabled){border-color:var(--primary);color:var(--primary)}.pagination__btn:disabled{color:var(--ink-muted);cursor:default;opacity:.5}.pagination__pages{align-items:center;gap:2px;display:flex}.pagination__page{width:30px;height:30px;color:var(--ink-muted);font-size:var(--fs-sm);cursor:pointer;background:0 0;border:none;border-radius:999px;font-weight:600}.pagination__page:hover{background:var(--bg);color:var(--ink)}.pagination__page--active{background:var(--primary);color:#fff}.pagination__ellipsis{color:var(--ink-muted);font-size:var(--fs-sm);padding:0 4px}.status-chip{font-size:var(--fs-xs);white-space:nowrap;border-radius:999px;padding:4px 12px;font-weight:600;display:inline-block}.status--amber{background:var(--amber-bg);color:var(--amber)}.status--blue{background:var(--blue-bg);color:var(--blue)}.status--green{background:var(--green-bg);color:var(--green)}.status--red{background:var(--red-bg);color:var(--red)}.status--neutral{color:var(--ink-muted);background:#f0f0f7}.days-value{font-family:var(--font-mono);font-size:var(--fs-md);font-weight:600}.days--safe{color:var(--ink)}.days--notice{color:var(--amber)}.days--warn{color:var(--orange)}.days--critical{color:var(--red)}.days--expired{color:var(--red);font-weight:700}.modal-overlay{z-index:50;background:#1b1c3973;justify-content:center;align-items:flex-start;padding:40px 16px;display:flex;position:fixed;inset:0;overflow-y:auto}.modal{background:var(--card);border-radius:var(--radius);width:100%;max-width:720px;box-shadow:var(--shadow-lg)}.modal-header{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:20px 24px;display:flex}.modal-header h2{font-size:var(--fs-lg);margin:0}.modal-close{cursor:pointer;color:var(--ink-muted);background:0 0;border:none;font-size:22px;line-height:1}.form-grid{grid-template-columns:1fr 1fr;gap:14px 18px;display:grid}.form-wide{grid-column:span 2}.contract-form label{font-size:var(--fs-sm);color:var(--ink-muted);flex-direction:column;gap:4px;font-weight:500;display:flex}.searchable-select{position:relative}.searchable-select__input{border:1px solid var(--border);border-radius:var(--radius-sm);width:100%;font-family:inherit;font-size:var(--fs-md);color:var(--ink);background:var(--card);padding:9px 12px}.searchable-select__input:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-bg);outline:none}.searchable-select__panel{background:var(--card);border:1px solid var(--border);border-radius:var(--radius-sm);max-height:240px;box-shadow:var(--shadow-lg);z-index:60;position:absolute;top:calc(100% + 4px);left:0;right:0;overflow-y:auto}.searchable-select__option{font-size:var(--fs-md);cursor:pointer;padding:9px 12px}.searchable-select__option:hover{background:var(--bg)}.searchable-select__option--active{background:var(--primary-bg);color:var(--primary);font-weight:600}.searchable-select__empty{font-size:var(--fs-sm);color:var(--ink-muted);text-align:center;padding:12px}.contract-form input,.contract-form select,.contract-form textarea{border:1px solid var(--border);border-radius:var(--radius-sm);font-family:inherit;font-size:var(--fs-md);color:var(--ink);background:var(--card);padding:9px 12px}.contract-form textarea{resize:vertical}.form-error{background:var(--red-bg);color:var(--red);border-radius:var(--radius-sm);font-size:var(--fs-md);margin-bottom:14px;padding:10px 14px}.modal-actions{justify-content:flex-end;gap:10px;margin-top:20px;display:flex}.notif{position:relative}.notif-bell{background:var(--card);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--ink);cursor:pointer;box-shadow:var(--shadow);padding:10px;display:flex;position:relative}.notif-bell:hover{border-color:var(--primary)}.notif-badge{background:var(--red);color:#fff;font-size:var(--fs-2xs);text-align:center;border-radius:999px;min-width:16px;padding:1px 5px;font-weight:700;position:absolute;top:-6px;right:-6px}.notif-panel{background:var(--card);width:380px;max-height:480px;color:var(--ink);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-lg);z-index:40;flex-direction:column;display:flex;position:absolute;top:calc(100% + 10px);right:0}.notif-panel__header{border-bottom:1px solid var(--border);font-weight:600;font-size:var(--fs-md);justify-content:space-between;align-items:center;padding:14px 18px;display:flex}.notif-panel__actions{gap:10px;display:flex}.notif-list{overflow-y:auto}.notif-empty{text-align:center;color:var(--ink-muted);font-size:var(--fs-md);padding:28px 16px}.notif-item{border-bottom:1px solid var(--border);cursor:pointer;padding:14px 18px}.notif-item:last-child{border-bottom:none}.notif-item--unseen{background:var(--primary-bg)}.notif-item__top{font-size:var(--fs-xs);color:var(--ink-muted);justify-content:space-between;margin-bottom:4px;display:flex}.notif-item__threshold{font-family:var(--font-mono);color:var(--primary);font-weight:600}.notif-item__message{font-size:var(--fs-md);line-height:1.4}.notif-item__tag{font-size:var(--fs-2xs);background:var(--green-bg);color:var(--green);border-radius:999px;margin-top:6px;padding:2px 9px;font-weight:600;display:inline-block}.notif-item__tag--muted{color:var(--ink-muted);background:#f0f0f7}.toast{background:var(--ink);color:#fff;font-size:var(--fs-md);box-shadow:var(--shadow-lg);z-index:60;border-radius:999px;padding:10px 22px;position:fixed;bottom:24px;left:50%;transform:translate(-50%)}@media (width<=900px){.sidebar{gap:20px;padding:12px 16px;overflow-x:auto}.summary-strip{grid-template-columns:repeat(2,1fr)}}@media (width<=720px){.app-header,.app-main{padding-left:16px;padding-right:16px}.form-grid{grid-template-columns:1fr}.form-wide,.detail-wide{grid-column:span 1}.notif-panel{width:calc(100vw - 32px);right:-16px}}body{font-size:15px;line-height:1.65}button,input,select,textarea{font:inherit}input::placeholder,textarea::placeholder{color:var(--ink-muted);opacity:1}:where(button,a,input,select,textarea,[tabindex]):focus-visible{outline:3px solid var(--primary);outline-offset:3px}button:disabled{cursor:not-allowed;opacity:.55}button{touch-action:manipulation}.sidebar{gap:40px;padding:12px 32px;box-shadow:0 2px 12px #18243b05}.sidebar__logo{width:46px;height:46px}.sidebar__brand-text{font-size:16px;font-weight:700}.sidebar__nav{background:var(--bg);border-radius:12px;padding:4px}.sidebar__nav-item{min-height:42px;padding:8px 18px}.sidebar__nav-item--active,.sidebar__nav-item--active:hover{background:var(--card);color:var(--primary);box-shadow:0 1px 5px #18243b14}.app-header,.app-main{max-width:1760px}.app-header{gap:20px;padding-top:32px}.app-header__title{gap:6px;min-width:0}.app-header h1{overflow-wrap:anywhere;line-height:1.4}.app-header__actions{flex-wrap:wrap}.app-main{padding-top:24px}.dashboard-page{gap:24px}.chart-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:24px}.chart-card{border:1px solid var(--border);min-width:0;padding:24px}.chart-card__title{font-size:var(--fs-lg);margin-bottom:24px;line-height:1.6}.recharts-text{fill:var(--ink-muted);font-family:var(--font-ui);font-size:12px}.recharts-default-tooltip{border-radius:10px;line-height:1.8}.summary-strip{grid-template-columns:repeat(6,minmax(0,1fr));gap:14px}.summary-block{border:1px solid var(--border);border-top:3px solid var(--blue);flex-direction:column;gap:12px;min-width:0;padding:20px 16px}.summary-block--red,.summary-block--critical{border-top-color:var(--red)}.summary-block--urgent{border-top-color:var(--orange)}.summary-block--warn{border-top-color:var(--amber)}.summary-block--green{border-top-color:var(--green)}.summary-icon{border-radius:10px;width:36px;height:36px}.summary-block__text{gap:8px;min-width:0}.summary-value{font-variant-numeric:tabular-nums;line-height:1.2}.summary-label{color:#44516a;font-weight:600;line-height:1.6}.summary-pct{margin:0}.filter-bar{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);grid-template-columns:repeat(4,minmax(0,1fr)) auto;gap:12px;margin-bottom:20px;padding:20px;display:grid}.filter-search{grid-column:1/-1;min-width:0}.filter-bar select,.filter-bar input[type=text]{border-color:#c7d0df;border-radius:10px;width:100%;min-width:0;min-height:46px}.filter-bar select{padding-right:8px}.filter-bar__add{white-space:nowrap;margin:0}.btn{border-radius:10px;min-height:44px;padding:10px 18px;transition:background-color .15s,border-color .15s}.btn--primary{box-shadow:0 3px 8px #5146b81c}.link-btn{border-radius:6px;min-height:36px;padding:6px}.link-btn:hover{background:var(--primary-bg)}.link-btn--danger:hover{background:var(--red-bg)}.table-wrap{scrollbar-color:#a9b5c9 var(--bg)}.contracts-table{min-width:1380px}.contracts-table th{color:#4c5c76;background:#f0f3f9;padding:16px 12px;font-size:13px}.contracts-table th.sortable-th--active{color:var(--primary)}.contracts-table td{padding:18px 12px;line-height:1.65}.contracts-table td.num{white-space:normal;overflow-wrap:anywhere;font-variant-numeric:tabular-nums}.contracts-table .expand-toggle{padding-left:6px;padding-right:6px}.contracts-table td.row-actions{white-space:normal;display:table-cell}.row-actions .link-btn{padding:5px 4px;font-size:13px}.contracts-table tbody tr:not(.detail-row):hover{background:#f5f4fc}.contracts-table .row-expanded{background:var(--primary-bg)}.contracts-table .row-expanded>td:first-child{box-shadow:inset 3px 0 var(--primary)}.status-chip{white-space:normal;max-width:100%;padding:5px 10px;line-height:1.5}.mono,.days-value,.top-expiring__rank,.top-expiring__pill{font-variant-numeric:tabular-nums}.detail-row td{background:#f7f8fc;padding:24px 28px}.detail-grid{gap:20px 28px}.detail-grid>div{overflow-wrap:anywhere;min-width:0}.detail-label{margin-bottom:6px;font-weight:600}.subcontract-card{min-width:1180px}.subcontract-item{grid-template-columns:18px 100px minmax(140px,1.5fr) minmax(100px,1fr) 85px 105px 90px 145px minmax(95px,1fr) 115px 50px;padding:12px}.subcontract-item>span{white-space:normal;overflow-wrap:anywhere;min-width:0}.subcontract-item .type-badge{margin:0}.subcontract-name{overflow:visible}.table-footer{gap:16px;margin-top:20px}.pagination{flex-wrap:wrap;gap:8px}.pagination__pages{flex-wrap:wrap;gap:4px}.pagination__page{border-radius:9px;width:38px;height:38px}.pagination__btn{border-radius:9px;min-height:40px}.pagination__page--active:hover{color:#fff;background:var(--primary-light)}.top-expiring__row{grid-template-columns:28px minmax(0,1.6fr) minmax(44px,1fr) 108px;gap:12px;padding:14px 0}.top-expiring__row--header{padding-top:0}.top-expiring__pill{background:#f8f9fc;padding:4px 10px;font-size:12px;color:var(--ink)!important}.modal-overlay{-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);background:#15213880;padding:32px 16px}.modal{border:1px solid var(--border);max-width:800px}.modal--narrow{max-width:460px}.modal-header{gap:16px;padding:22px 28px}.modal-close{background:var(--bg);border-radius:10px;flex-shrink:0;width:40px;height:40px}.modal-close:hover{background:var(--red-bg);color:var(--red)}.contract-form{padding:24px 28px 28px}.form-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:20px 24px}.contract-form label{color:#44516a;gap:8px;min-width:0;font-weight:600}.contract-form>label{margin-top:20px}.contract-form input,.contract-form select,.contract-form textarea{border-color:#c7d0df;width:100%;min-width:0;min-height:46px;font-weight:400}.contract-form textarea{min-height:92px;line-height:1.7}.modal-actions{border-top:1px solid var(--border);margin-top:28px;padding-top:20px}.searchable-select__option{padding:12px 14px;line-height:1.6}.notif-bell{justify-content:center;align-items:center;min-width:44px;min-height:44px}.notif-panel{width:min(400px,100vw - 32px);max-height:min(560px,75dvh)}.notif-panel__header{flex-wrap:wrap;gap:8px}.notif-list{overscroll-behavior:contain;min-height:0}.notif-item{padding:18px}.notif-item--unseen{box-shadow:inset 3px 0 var(--primary)}.notif-item__message{overflow-wrap:anywhere;line-height:1.7}.notif-item__top{flex-wrap:wrap;gap:12px}.toast{text-align:center;overflow-wrap:anywhere;border-radius:12px;max-width:calc(100vw - 32px)}@media (width<=1200px){.summary-strip{grid-template-columns:repeat(3,minmax(0,1fr))}.summary-block{flex-direction:row}.filter-bar{grid-template-columns:repeat(2,minmax(0,1fr))}.filter-bar__add{grid-column:1/-1;justify-self:end}}@media (width<=900px){.chart-grid{grid-template-columns:minmax(0,1fr)}.sidebar{gap:20px;padding:12px 16px}.app-header,.app-main{padding-left:20px;padding-right:20px}}@media (width<=720px){.sidebar{flex-wrap:wrap;gap:10px;position:relative;overflow:visible}.sidebar__brand-text{white-space:normal;font-size:15px}.sidebar__nav{flex-wrap:wrap;width:100%}.sidebar__nav-item{flex:1;justify-content:center;padding:8px}.app-header{flex-wrap:wrap;align-items:flex-start;padding-top:24px}.app-header h1{font-size:24px}.app-main{padding-top:20px}.app-header,.app-main{padding-left:16px;padding-right:16px}.summary-strip{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.summary-block{flex-direction:column;padding:16px}.summary-value{font-size:28px}.chart-card{padding:18px 16px}.filter-bar{padding:16px}.filter-bar__add{justify-self:stretch}.form-grid{grid-template-columns:minmax(0,1fr)}.form-wide{grid-column:1/-1}.modal-overlay{padding:16px 10px}.modal-header{padding:18px}.contract-form{padding:20px 18px}.contract-form input,.contract-form select,.contract-form textarea,.filter-bar input[type=text],.filter-bar select{font-size:16px}.notif-panel{margin-top:10px;position:fixed;top:auto;right:16px}}@media (width<=640px){.top-expiring__row{grid-template-columns:24px minmax(0,1fr) 108px;gap:10px}.top-expiring__row--header>span:nth-child(3),.top-expiring__bar-track{display:none}.pagination{width:100%}}@media (width<=440px){.filter-bar{grid-template-columns:minmax(0,1fr)}.pagination{justify-content:space-between}.pagination__pages{order:3;justify-content:center;width:100%}.modal-actions .btn{flex:1}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition:none!important;animation:none!important}}.contract-expand-btn{border:1px solid var(--border);background:var(--card);width:32px;min-height:36px;color:var(--primary);cursor:pointer;border-radius:8px;justify-content:center;align-items:center;padding:0;display:inline-flex}.contract-expand-btn:hover{background:var(--primary-bg)}.contract-name-btn{color:inherit;font:inherit;text-align:left;white-space:normal;overflow-wrap:anywhere;cursor:pointer;font-weight:600;line-height:inherit;background:0 0;border:0;padding:0}.contract-name-btn:hover{color:var(--primary);text-decoration:underline}.contract-children__title{font-size:var(--fs-md);margin:0 0 12px}.contract-children__title span{color:var(--ink-muted);font-weight:400}.contract-children__list{gap:8px;margin:0;padding:0;list-style:none;display:grid}.contract-children__item{border:1px solid var(--border);background:var(--card);cursor:pointer;border-radius:10px;grid-template-columns:120px minmax(0,1fr) auto;align-items:center;gap:16px;padding:12px 16px;display:grid}.contract-children__item:hover{background:var(--primary-bg)}.contract-children__item .type-badge{justify-self:start;margin:0}.contract-details-dialog{overscroll-behavior:contain;border:1px solid var(--border);border-radius:var(--radius);background:var(--card);width:min(800px,100vw - 32px);max-width:none;max-height:calc(100dvh - 32px);color:var(--ink);box-shadow:var(--shadow-lg);font-family:var(--font-ui);margin:auto;padding:0;line-height:1.65;overflow-y:auto}.contract-details-dialog::backdrop{-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);background:#15213880}.contract-details-dialog .modal-header{align-items:flex-start}.contract-details-dialog__name{color:var(--ink-muted);overflow-wrap:anywhere;margin:8px 0 0}.contract-details-dialog__body{padding:24px 28px}.contract-details-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:24px;margin:0;display:grid}.contract-details-grid>div{min-width:0}.contract-details-grid dt{font-size:var(--fs-sm);color:var(--ink-muted);margin-bottom:6px}.contract-details-grid dd{font-size:var(--fs-md);white-space:pre-wrap;overflow-wrap:anywhere;margin:0}.contract-details-grid__wide{grid-column:1/-1}@media (width<=640px){.contract-details-dialog__body{padding:20px 18px}.contract-details-grid{grid-template-columns:minmax(0,1fr);gap:20px}}:root{--alert-overdue:#7e22ce;--alert-critical:#c62828;--alert-urgent:#b85c00;--alert-warning:#0369a1;--alert-ok:#15803d}.summary-block--blue{--summary-accent:#1d4ed8;--summary-tint:#eff6ff;--summary-edge:#bfdbfe}.summary-block--red{--summary-accent:var(--alert-overdue);--summary-tint:#faf5ff;--summary-edge:#e9d5ff}.summary-block--critical{--summary-accent:var(--alert-critical);--summary-tint:#fff1f2;--summary-edge:#fecdd3}.summary-block--urgent{--summary-accent:var(--alert-urgent);--summary-tint:#fff7ed;--summary-edge:#fed7aa}.summary-block--warn{--summary-accent:var(--alert-warning);--summary-tint:#f0f9ff;--summary-edge:#bae6fd}.summary-block--green{--summary-accent:var(--alert-ok);--summary-tint:#f0fdf4;--summary-edge:#bbf7d0}.summary-block{background:var(--summary-tint,white);border-color:var(--summary-edge,var(--border));border-top:4px solid var(--summary-accent,var(--primary))}.summary-block .summary-value{color:var(--summary-accent,var(--ink))}.summary-block .summary-icon{border:1px solid var(--summary-edge,var(--border));background:#fff}.summary-block .summary-label{color:#24354c}.summary-block .summary-pct{color:#526079}.summary-block--clickable:hover{border-color:var(--summary-accent)}.chart-card{border-color:#d5dfec}.chart-card__title{border-bottom:1px solid #e2e8f0;padding-bottom:14px}.chart-legend{border-top:1px solid var(--border);flex-wrap:wrap;gap:10px 20px;margin:16px 0 0;padding:14px 0 0;list-style:none;display:flex}.chart-legend li{color:#334155;align-items:center;gap:8px;font-size:13px;display:inline-flex}.chart-legend__dot{border-radius:3px;flex-shrink:0;width:12px;height:12px}.modal,.contract-details-dialog{border-color:#c2cfe0;box-shadow:0 24px 80px #0f172a45}.modal-header{color:#fff;background:#233c64;border-bottom-color:#233c64;border-radius:13px 13px 0 0}.modal-header h2{color:#fff}.modal-header .modal-close{color:#fff;background:#ffffff1f;border:1px solid #fff5}.modal-header .modal-close:hover{color:#fff;background:#ffffff36}.modal-header .modal-close:focus-visible{outline-color:#fff}.contract-details-dialog__name{color:#e0eaff}.contract-details-dialog__body{background:#f1f5fa}.contract-details-grid{gap:14px}.contract-details-grid>div{background:#fff;border:1px solid #d8e2ef;border-radius:10px;padding:16px}.contract-details-grid dt{color:#425873;font-weight:600}.contract-details-grid dd{color:#14263e}.contract-details-grid__wide{background:#f0f6ff!important;border-left:4px solid #487bb9!important}.contract-form{background:#f5f7fb;border-radius:0 0 13px 13px}.contract-form label{color:#334b68}.contract-form input,.contract-form select,.contract-form textarea{background:#fff;border-color:#b7c7da}.modal-overlay,.contract-details-dialog::backdrop{background:#0f172a99}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:root[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#101725;--card:#1b2638;--ink:#edf2fa;--ink-muted:#aab9cf;--border:#394a63;--primary:#b3a7ff;--primary-light:#c9c0ff;--primary-bg:#342e54;--amber:#f1c365;--amber-bg:#42351c;--orange:#ffb37c;--orange-bg:#452e21;--red:#ff929e;--red-bg:#442735;--green:#79d6ac;--green-bg:#1d3b32;--blue:#94baff;--blue-bg:#253653;--alert-overdue:#d1a0ff;--alert-critical:#ff929e;--alert-urgent:#ffb37c;--alert-warning:#86cfff;--alert-ok:#79d6ac;--shadow:0 6px 20px #0003;--shadow-lg:0 16px 40px #0006}.theme-toggle{flex-shrink:0;justify-content:center;align-items:center;width:44px;height:44px;padding:0;display:inline-flex}.theme-toggle:focus-visible{outline:2px solid var(--primary);outline-offset:3px}.correction-log__heading{justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.correction-log__refresh{flex-shrink:0;justify-content:center;align-items:center;width:44px;height:44px;padding:0;display:inline-flex}.correction-log h2{font-size:var(--fs-lg);margin:0}.correction-log__heading p{color:var(--ink-muted);margin:6px 0 18px}.correction-log__filters{flex-wrap:wrap;gap:16px;margin-bottom:20px;display:flex}.correction-log__filters label{font-size:var(--fs-sm);gap:6px;display:grid}.correction-log__filters input,.correction-log__filters select{border:1px solid var(--border);background:var(--bg);max-width:100%;min-height:44px;color:var(--ink);font:inherit;border-radius:8px;padding:10px 12px}.correction-log__entries{margin:0;padding:0;list-style:none}.correction-log__entries>li{border-top:1px solid var(--border);padding:18px 0}.correction-log__meta{overflow-wrap:anywhere;flex-wrap:wrap;align-items:baseline;gap:8px 20px;margin-bottom:10px;display:flex}.correction-log__meta strong{flex:260px}.correction-log__meta span,.correction-log__meta time{color:var(--ink-muted);font-size:var(--fs-sm)}.correction-log details{border:1px solid var(--border);border-radius:12px;overflow:hidden}.correction-log summary{cursor:pointer;color:var(--ink);background:var(--bg);flex-wrap:wrap;align-items:center;gap:10px;padding:12px 16px;list-style:none;display:flex}.correction-log summary::-webkit-details-marker{display:none}.correction-log summary:focus-visible{outline:2px solid var(--primary);outline-offset:-3px}.correction-log__count{min-width:28px;height:28px;color:var(--primary);background:var(--primary-bg);border-radius:8px;place-items:center;padding:0 6px;font-weight:700;display:inline-grid}.correction-log__expand,.correction-log__collapse{font-size:var(--fs-sm);color:var(--primary);margin-left:auto}.correction-log__collapse,.correction-log details[open] .correction-log__expand{display:none}.correction-log details[open] .correction-log__collapse{display:inline}.correction-log__chevron{color:var(--primary);transition:transform .15s}.correction-log details[open] .correction-log__chevron{transform:rotate(180deg)}.correction-log__table-wrap{border-top:1px solid var(--border);padding:16px;overflow-x:auto}.correction-log table{table-layout:fixed;border-collapse:collapse;width:100%;min-width:480px}.correction-log th,.correction-log td{text-align:left;vertical-align:top;border:1px solid var(--border);overflow-wrap:anywhere;white-space:pre-wrap;padding:12px}.correction-log th{background:var(--bg);font-weight:600}.correction-log td{font-variant-numeric:tabular-nums}.correction-log__before{color:var(--ink-muted)}.correction-log__after{background:var(--primary-bg);color:var(--ink);font-weight:600}.correction-log__caption{text-align:left;color:var(--ink-muted);padding-bottom:8px}.login-theme{position:absolute;top:20px;right:20px}.login-page{padding-top:88px;position:relative}[data-theme=dark] .btn--primary,[data-theme=dark] .btn--danger,[data-theme=dark] .pagination__page--active{color:#101725}[data-theme=dark] .summary-block{--summary-tint:var(--card);--summary-edge:var(--border)}[data-theme=dark] .summary-block--blue{--summary-accent:var(--blue)}[data-theme=dark] .summary-block .summary-icon{background:var(--bg)}[data-theme=dark] .summary-block .summary-label,[data-theme=dark] .chart-legend li,[data-theme=dark] .contract-form label,[data-theme=dark] .login-card__label,[data-theme=dark] .contract-details-grid dd{color:var(--ink)}[data-theme=dark] .summary-block .summary-pct,[data-theme=dark] .contract-details-grid dt{color:var(--ink-muted)}[data-theme=dark] .contracts-table th{background:var(--bg);color:var(--ink-muted)}[data-theme=dark] .contracts-table tbody tr:not(.detail-row):hover,[data-theme=dark] .row-expanded{background:var(--primary-bg)}[data-theme=dark] .detail-row td,[data-theme=dark] .hierarchy-row--child,[data-theme=dark] .subcontract-item--header,[data-theme=dark] .subcontract-detail,[data-theme=dark] .status--neutral,[data-theme=dark] .top-expiring__pill,[data-theme=dark] .contract-form,[data-theme=dark] .contract-details-dialog__body{background:var(--bg)}[data-theme=dark] .contract-details-grid>div,[data-theme=dark] .contract-form input,[data-theme=dark] .contract-form select,[data-theme=dark] .contract-form textarea{background:var(--card);color:var(--ink);border-color:var(--border)}[data-theme=dark] .contract-details-grid__wide{background:var(--primary-bg)!important}[data-theme=dark] .chart-card,[data-theme=dark] .chart-card__title,[data-theme=dark] .modal,[data-theme=dark] .contract-details-dialog,[data-theme=dark] .filter-bar input,[data-theme=dark] .filter-bar select{border-color:var(--border)}
