:root{--font-base: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;--color-bg: #f5f5f5;--color-surface: #ffffff;--color-surface-muted: #f5f5f5;--color-surface-hover: #f9f9f9;--color-border: #d8d8d8;--color-border-strong: #cfcfcf;--color-border-subtle: #ededed;--color-text: #1f1f1f;--color-text-muted: #666666;--color-text-subtle: #999999;--color-accent: #2f2f2f;--radius-sm: 4px;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 20px;--space-6: 24px}*{box-sizing:border-box}html,body{width:100%;overflow-x:hidden;height:100%;overscroll-behavior-y:none;overflow-y:hidden}body{margin:0;font-family:var(--font-base);color:var(--color-text);background:var(--color-bg);overscroll-behavior-x:none}input,button,select{font:inherit;color:inherit}button{background:transparent}.app{height:100svh;min-height:100svh;padding:var(--space-6);padding-top:calc(var(--space-6) + 21px);width:100vw;max-width:100vw;overflow:hidden;position:relative;display:flex;flex-direction:column;touch-action:pan-y}.app__header-bar{position:absolute;top:var(--space-4);left:var(--space-6);right:var(--space-6);display:flex;justify-content:space-between;align-items:center;z-index:1000}.app__header-title{font-size:16px;font-weight:600;color:var(--color-text)}.app__user-panel{position:relative}.app__user-name{cursor:pointer;font-size:13px;font-weight:600;color:var(--color-text);-webkit-user-select:none;user-select:none;transition:opacity .2s ease}.app__user-name:hover{opacity:.7}.app__user-dropdown{position:absolute;top:100%;right:0;margin-top:2px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-sm);box-shadow:0 2px 8px #0000001a;min-width:120px;overflow:hidden}.app__user-menu-item{display:block;width:100%;padding:8px 12px;text-align:left;background:transparent;border:none;cursor:pointer;font-size:13px;color:var(--color-text);transition:background .2s ease}.app__user-menu-item:hover{background:var(--color-surface-hover)}.app__error{padding:.5rem 1rem;background:#fee;color:#c00;text-align:center;font-size:13px;flex-shrink:0}.error-message{padding:var(--space-2) var(--space-4);background:#fee;color:#c00;border-radius:var(--radius-sm);margin-bottom:var(--space-4);font-size:13px}.toast-host{position:fixed;top:var(--space-4);left:50%;transform:translate(-50%);width:min(66.666%,900px);display:flex;flex-direction:column;gap:var(--space-2);z-index:2000;pointer-events:none}body.operator-mobile .toast-host{top:auto;bottom:var(--space-3);width:min(92vw,520px)}.toast{pointer-events:auto;display:grid;grid-template-columns:28px 1fr 20px;align-items:center;gap:var(--space-2);padding:8px 10px;border:1px solid var(--color-border);border-left:4px solid var(--toast-color, #607d8b);border-radius:var(--radius-sm);background:var(--color-surface);box-shadow:0 2px 8px #0000001a;animation:toast-in .2s ease-out both}body.operator-mobile .toast{grid-template-columns:32px 1fr 24px;padding:12px 14px}.toast--closing{animation:toast-out .2s ease-in both}.toast__icon{width:22px;height:22px;border-radius:999px;background:var(--toast-color, #607d8b);color:#fff;font-size:12px;font-weight:700;display:flex;align-items:center;justify-content:center;line-height:1}body.operator-mobile .toast__icon{width:26px;height:26px;font-size:14px}.toast__body{display:flex;flex-direction:column;gap:2px;min-width:0}.toast__title{font-size:13px;font-weight:600;color:var(--color-text)}body.operator-mobile .toast__title{font-size:16px}.toast__message{font-size:12px;color:var(--color-text-muted)}body.operator-mobile .toast__message{font-size:14px}.toast__close{background:transparent;border:none;color:var(--color-text-subtle);cursor:pointer;font-size:14px;line-height:1;padding:0}body.operator-mobile .toast__close{font-size:18px}body.operator-mobile,body.operator-mobile *{user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}.app__header-bar--hidden{display:none}.toast__close:hover{color:var(--color-text)}.toast--error{--toast-color: #c00}.toast--success{--toast-color: #28a745}.toast--warning{--toast-color: #b26a00}.toast--info{--toast-color: #607d8b}@keyframes toast-in{0%{opacity:0}to{opacity:1}}@keyframes toast-out{0%{opacity:1}to{opacity:0}}.table{width:100%;border-collapse:collapse;font-size:12px;table-layout:fixed}.table thead{border-bottom:1px solid var(--color-border)}.table th{padding:2px 4px;text-align:left;font-weight:600;color:var(--color-text);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.table th:nth-child(1){width:10%}.table th:nth-child(2){width:10%}.table th:nth-child(3){width:15%}.table th:nth-child(4){width:7%}.table th:nth-child(5){width:7%}.table th:nth-child(6){width:15%}.table th:nth-child(7){width:12%}.table th:nth-child(8){width:24%}.table td{padding:2px 4px;border-bottom:1px solid var(--color-border-subtle);overflow:hidden;text-overflow:ellipsis}.table td:last-child{white-space:normal;overflow:visible}.table td input{white-space:normal}.table tbody tr:last-child td{border-bottom:none}.table__status-active{color:#28a745}.table__status-inactive{color:#dc3545}.table__actions{display:flex;gap:var(--space-2);flex-wrap:wrap}.button--small{font-size:11px;padding:3px 8px;line-height:1.3}.button--danger{color:#dc3545}.button--success{color:#28a745}.form-section{margin-bottom:var(--space-5);padding:var(--space-4);background:var(--color-surface-muted);border-radius:var(--radius-sm)}.form-section__title{margin-top:0;margin-bottom:var(--space-3);font-size:16px;font-weight:600}.app__layout{display:flex;flex-direction:column;gap:var(--space-3);flex:1;min-height:0;overflow:hidden;overscroll-behavior-x:none}.app__layout--operator-mobile{padding-top:0}.app__top-row{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-3);flex:1;min-height:0}.app__bottom-row{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:var(--space-2);flex:1;min-height:0}.panel{background:var(--color-surface);border:1px solid var(--color-border);padding:var(--space-3);display:flex;flex-direction:column;gap:var(--space-2);min-height:0}.panel--compact{min-height:0}.panel__header{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:var(--space-2)}.panel__title{margin:0;font-size:16px;font-weight:600;line-height:1.2;grid-column:1}.panel__date{font-size:12px;color:var(--color-text-muted);white-space:nowrap;grid-column:2;justify-self:center}.panel__title{margin:0;font-size:16px;font-weight:600;line-height:1.2}.panel__date{font-size:12px;color:var(--color-text-muted);white-space:nowrap}.panel__content{flex:1;overflow-y:auto;overflow-x:hidden;min-height:0;margin-top:var(--space-4);overscroll-behavior-x:none}.app--operator{font-size:18px;padding:var(--space-4);padding-top:calc(var(--space-4) + 24px);height:100svh;min-height:100svh;overflow:hidden}.app--operator-mobile{padding:var(--space-2);padding-top:var(--space-1)}.app--operator-mobile .app__header-bar{position:static;margin-bottom:var(--space-1)}.app--operator .app__header-title{font-size:20px}.app--operator .app__user-name{font-size:16px}.app--operator .panel__title{font-size:20px}.app--operator .panel__date,.app--operator .time-grid__label{font-size:14px}.app--operator .list__item{padding-bottom:8px}.app--operator .list__checkbox{width:24px;height:24px}.app--operator .list__delete-btn{width:24px;height:24px;font-size:22px}.app--operator .list__time{font-size:14px}.operator-mobile{flex:1;min-height:0;height:100%;display:flex;flex-direction:column;gap:var(--space-3);font-size:20px;padding-top:0;overflow:hidden}.operator-mobile__header{align-items:center;margin-top:0;margin-bottom:var(--space-2)}.operator-mobile__title{user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}.operator-mobile .panel__title,.app--operator .app__header-title{font-size:24px}.app--operator .app__user-name{font-size:12px}.operator-mobile .panel__date{font-size:16px}.operator-mobile__content{flex:1;min-height:0;max-height:100%;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch}.operator-mobile__list{gap:var(--space-3)}.operator-mobile__item{cursor:default}.operator-mobile__controls{display:flex;align-items:center;gap:var(--space-3)}.operator-mobile .list__item{align-items:center}.operator-mobile .list__name,.operator-mobile .list__controls{align-items:center;line-height:1.2}.operator-mobile .list__item--completed .list__name{text-decoration:line-through}.operator-mobile__item--new{animation:operator-pulse .52s ease-out;transform-origin:center;will-change:transform}@keyframes operator-pulse{0%{transform:scale(1)}18%{transform:scale(1.14)}32%{transform:scale(.98)}52%{transform:scale(1.12)}to{transform:scale(1)}}@media (prefers-reduced-motion: reduce){.operator-mobile__item--new{animation:none}}.operator-mobile .list__checkbox{width:28px;height:28px}.operator-mobile .list__checkbox:disabled{opacity:1}.operator-mobile__checkbox{pointer-events:none}.operator-mobile .list__delete-btn{width:28px;height:28px;font-size:24px}.operator-mobile .list__time{font-size:16px}.operator-mobile__empty{font-size:16px;color:var(--color-text-muted)}@media (max-width: 600px){.app{padding:var(--space-4);padding-top:calc(var(--space-4) + 24px)}.operator-mobile{gap:var(--space-2)}.app.app--operator-mobile{padding:var(--space-2);padding-top:var(--space-1)}}.list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:var(--space-2);min-height:0;flex-shrink:1}.list--compact{font-size:12px;gap:var(--space-1)}.list__item{display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--color-border-subtle);padding-bottom:4px;cursor:grab;gap:var(--space-2);flex-shrink:0}.list__item:last-child{border-bottom:none;padding-bottom:0}.list__item:active{cursor:grabbing}.list__item--completed{opacity:.5;cursor:default}.list__item--completed:active{cursor:default}.list__name{display:flex;align-items:center;flex-wrap:wrap;gap:var(--space-1)}.list__responsible{font-style:italic;color:var(--color-text-subtle);font-weight:400}.list__controls{display:flex;align-items:center;gap:var(--space-2)}.list__checkbox{cursor:pointer;width:18px;height:18px;margin:0;flex-shrink:0}.list__checkbox:disabled{cursor:not-allowed;opacity:.6}.list__delete-btn{background:transparent;border:none;color:#dc3545;font-size:18px;line-height:1;cursor:pointer;padding:0;width:18px;height:18px;display:flex;align-items:center;justify-content:center;opacity:.7;transition:opacity .2s ease;flex-shrink:0}.list__delete-btn:hover{opacity:1}.list__delete-btn:active{opacity:.5}.list__time{color:var(--color-text-muted)}.list__empty{font-size:12px;color:var(--color-text-muted)}.time-grid{display:flex;flex-direction:column;gap:var(--space-2);min-height:0}.time-grid--compact{gap:var(--space-1)}.time-grid__row{display:grid;grid-template-columns:50px 1fr;align-items:center;gap:var(--space-2);border-bottom:1px solid var(--color-border-subtle);padding-bottom:6px;cursor:pointer;flex-shrink:0}.time-grid__row:hover{background-color:var(--color-surface-hover)}.time-grid__row--dragover{background-color:var(--color-surface-hover);outline:1px dashed var(--color-border-strong);outline-offset:-1px}.time-grid__row:last-child{border-bottom:none;padding-bottom:0}.time-grid__label{font-size:12px;color:var(--color-text-muted)}.time-grid__content{min-height:18px}.time-grid__empty-row{height:14px}.simple-list{min-height:0;flex:1;display:flex;flex-direction:column;overflow:hidden}.simple-list--dragover{background-color:var(--color-surface-hover);outline:1px dashed var(--color-border-strong);outline-offset:-1px}.simple-list__empty-row{height:24px;margin-top:var(--space-2);border-bottom:1px dashed var(--color-border);cursor:pointer;transition:background-color .2s ease,border-color .2s ease}.simple-list__empty-row:hover{background-color:var(--color-surface-muted);border-bottom-color:var(--color-text-muted)}.form{display:flex;flex-direction:column;gap:var(--space-3)}.form__field{display:grid;grid-template-columns:120px 1fr;align-items:center;gap:var(--space-2)}.form__label{font-size:12px;color:var(--color-text-muted)}.form__control{display:flex;flex-direction:column;gap:var(--space-2);width:100%}.form__options{display:flex;gap:var(--space-3);flex-wrap:wrap}.form__option{display:flex;align-items:center;gap:var(--space-1);font-size:13px}.form__checkbox-label{display:flex;align-items:center;gap:var(--space-2);font-size:13px;cursor:pointer}.form__checkbox{width:16px;height:16px;cursor:pointer;margin:0}.input,.select{padding:8px 10px;border:1px solid var(--color-border-strong);border-radius:var(--radius-sm);background:var(--color-surface)}.input[type=date]{width:100%}.input:disabled{background-color:var(--color-surface-muted);color:var(--color-text-subtle);cursor:not-allowed}.button{padding:4px 10px;border:1px solid var(--color-border-strong);background:var(--color-surface);cursor:pointer;align-self:flex-start;transition:background .2s ease,border-color .2s ease;font-size:12px;border-radius:var(--radius-sm);line-height:1.4}.button:hover:not(:disabled){background:var(--color-surface-hover);border-color:var(--color-border)}.button:disabled{opacity:.5;cursor:not-allowed}.button--primary{background:var(--color-accent);color:#fff;border-color:var(--color-accent)}.button--primary:hover:not(:disabled){background:#1a1a1a;border-color:#1a1a1a}.role-list{display:flex;flex-direction:column;gap:var(--space-2)}.role-list__empty{font-size:12px;color:var(--color-text-muted);padding:var(--space-2) 0}.role-row{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:var(--space-3);align-items:center;padding:var(--space-2) var(--space-3);border:1px solid var(--color-border-subtle);border-radius:var(--radius-sm);background:var(--color-surface)}.role-row__main{min-width:0;display:flex;flex-direction:column;gap:2px}.role-row__title{display:flex;align-items:baseline;gap:var(--space-2);min-width:0}.role-row__name{font-size:13px;font-weight:600;color:var(--color-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.role-row__meta{font-size:11px;color:var(--color-text-muted);white-space:nowrap;flex-shrink:0}.role-row__desc{font-size:12px;color:var(--color-text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.role-row__summary{display:flex;align-items:center;justify-content:flex-end}.role-row__perms{display:flex;gap:var(--space-1);flex-wrap:wrap;justify-content:flex-end}.role-row__perm-pill{font-size:11px;padding:2px 6px;border:1px solid var(--color-border-subtle);border-radius:999px;color:var(--color-text-muted);background:var(--color-surface-muted);white-space:nowrap}.role-row__actions{display:flex;gap:var(--space-2);flex-wrap:nowrap;justify-content:flex-end}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000040;display:flex;align-items:center;justify-content:center;z-index:3000}.modal{width:min(920px,calc(100vw - 32px));height:min(80vh,760px);background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-sm);box-shadow:0 8px 30px #0003;display:flex;flex-direction:column;overflow:hidden}.modal__header{padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--color-border-subtle);display:flex;align-items:center;justify-content:space-between;gap:var(--space-2)}.modal__title{font-size:14px;font-weight:600}.modal__body{padding:var(--space-4);overflow:auto;min-height:0;display:flex;flex-direction:column;gap:var(--space-4)}.modal__grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-3)}.modal__field{display:flex;flex-direction:column;gap:var(--space-1);min-width:0}.modal__field--name{grid-column:1}.modal__field--interface{grid-column:3}.modal__field--description{grid-column:1 / -1}.modal__label{font-size:11px;color:var(--color-text-muted)}.modal__footer{padding:var(--space-3) var(--space-4);border-top:1px solid var(--color-border-subtle);display:flex;gap:var(--space-2);justify-content:flex-end;background:var(--color-surface)}.perm-sections{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-3);min-height:0}.perm-section{border:1px solid var(--color-border-subtle);border-radius:var(--radius-sm);overflow:hidden;display:flex;flex-direction:column;min-height:0}.perm-section__header{padding:var(--space-2) var(--space-3);background:var(--color-surface-muted);border-bottom:1px solid var(--color-border-subtle);display:flex;align-items:center;justify-content:space-between;gap:var(--space-2)}.perm-section__title{font-size:12px;font-weight:600;color:var(--color-text);white-space:nowrap}.perm-section__actions{display:flex;gap:var(--space-2);flex-wrap:wrap;justify-content:flex-end}.perm-section__list{padding:var(--space-2) var(--space-3);overflow:auto;max-height:360px}.perm-section__empty{font-size:12px;color:var(--color-text-muted);padding:var(--space-2) 0}.perm-item{display:grid;grid-template-columns:16px 1fr;gap:var(--space-2);align-items:start;padding:4px 0;font-size:12px;cursor:pointer}.perm-item__text{display:flex;flex-direction:column;gap:1px;min-width:0}.perm-item__name{color:var(--color-text);line-height:1.2}.perm-item__code{font-size:11px;color:var(--color-text-subtle);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media (max-width: 900px){.modal__grid,.perm-sections{grid-template-columns:1fr}.role-row{grid-template-columns:minmax(0,1fr);gap:var(--space-2)}.role-row__summary,.role-row__actions{justify-content:flex-start}}.weekend{display:flex;flex-direction:column;gap:var(--space-3)}.weekend__section{border-top:1px solid var(--color-border-subtle);padding-top:var(--space-2)}.weekend__section:first-child{border-top:none;padding-top:0}.weekend__title{font-size:12px;font-weight:600;margin-bottom:var(--space-2)}.autocomplete__dropdown{position:absolute;top:100%;left:0;right:0;margin-top:2px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-sm);box-shadow:0 2px 8px #0000001a;max-height:200px;overflow-y:auto;z-index:1000}.autocomplete__item{padding:8px 10px;cursor:pointer;font-size:13px;transition:background .2s ease;border-bottom:1px solid var(--color-border-subtle)}.autocomplete__item:last-child{border-bottom:none}.autocomplete__item:hover{background:var(--color-surface-hover)}.autocomplete__item--loading,.autocomplete__item--empty{color:var(--color-text-muted);cursor:default}.autocomplete__item--loading:hover,.autocomplete__item--empty:hover{background:var(--color-surface)}@media (max-width: 1400px){.app__bottom-row{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (max-width: 1100px){.app__top-row{grid-template-columns:repeat(2,minmax(0,1fr))}.form__field{grid-template-columns:1fr;align-items:start}}@media (max-width: 820px){.app__top-row,.app__bottom-row{grid-template-columns:1fr}.panel{min-height:auto}}
