:root{--tf-bg:#f9fbfc;--tf-surface:#fff;--tf-sidebar:#f5f5f5;--tf-text-1:#000000e6;--tf-text-2:#0009;--tf-text-3:#00000073;--tf-border:#00000021;--tf-border-light:#00000012;--tf-fill-1:#00000008;--tf-fill-2:#0000000d;--tf-blue:#1783ff;--tf-blue-hover:#167ff7;--tf-blue-active:#167cf2;--tf-blue-soft:#e8f3ff;--tf-green:#16c456;--tf-green-soft:#16c4561a;--tf-orange:#ff9500;--tf-orange-soft:#ff95001a;--tf-red:#ff3849;--tf-red-soft:#ff4d4d1a;--tf-gray-soft:#0000000d;--tf-radius-lg:12px;--tf-radius-md:10px;--tf-radius-sm:8px;--tf-radius-xs:4px;--tf-space-page:32px;--tf-ease-out:cubic-bezier(.23, 1, .32, 1);--tf-duration-fast:.12s;--tf-duration-ui:.18s;--tf-duration-toast:.35s;--tf-font:system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--tf-font-mono:ui-monospace, "SF Mono", "Cascadia Code", Menlo, Consolas, monospace;--tf-z-header:500;--tf-z-modal-backdrop:800;--tf-z-modal:810;--tf-z-toast:1000}*,:before,:after{box-sizing:border-box}:root{font-family:var(--tf-font);color:var(--tf-text-1);background-color:var(--tf-bg);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;line-height:1.5}body{min-width:320px;min-height:100vh;margin:0;font-size:14px}h1,h2,h3,p{margin:0}a{color:var(--tf-blue);text-decoration:none}a:hover{text-decoration:underline}.tf-logo-mark{vertical-align:middle;flex:none;display:inline-block}button{font-family:inherit}:focus-visible{outline:2px solid var(--tf-blue);outline-offset:2px;border-radius:var(--tf-radius-xs)}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.tf-toast-region{z-index:var(--tf-z-toast);pointer-events:none;flex-direction:column;gap:8px;display:flex;position:fixed;bottom:24px;right:24px}.tf-toast{pointer-events:auto;background:var(--tf-surface);border:1px solid var(--tf-border-light);border-left:3px solid var(--tf-blue);border-radius:var(--tf-radius-md);cursor:pointer;min-width:260px;max-width:380px;animation:tf-toast-in var(--tf-duration-toast) var(--tf-ease-out);align-items:center;gap:8px;padding:12px 16px;display:flex;box-shadow:0 8px 24px #0000001f}.tf-toast-success{border-left-color:var(--tf-green)}.tf-toast-success .tf-toast-icon{color:var(--tf-green)}.tf-toast-error{border-left-color:var(--tf-red)}.tf-toast-error .tf-toast-icon{color:var(--tf-red)}.tf-toast-info .tf-toast-icon{color:var(--tf-blue)}.tf-toast-icon{flex-shrink:0;display:inline-flex}.tf-toast-message{color:var(--tf-text-1);font-size:14px}.tf-toast-leave{animation:tf-toast-out .26s var(--tf-ease-out) forwards}@keyframes tf-toast-in{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}@keyframes tf-toast-out{to{opacity:0;transform:translateY(8px)}}.tf-shell{min-height:100vh;display:flex}.tf-sidebar{background:var(--tf-sidebar);border-right:1px solid var(--tf-border-light);flex-direction:column;flex-shrink:0;width:240px;padding:16px 12px;display:flex}.tf-sidebar-brand{align-items:center;gap:8px;padding:4px 8px 16px;display:flex}.tf-brand-name{color:var(--tf-text-1);font-size:16px;font-weight:600}.tf-nav{flex-direction:column;flex:1;gap:2px;display:flex}.tf-nav-item{border-radius:var(--tf-radius-sm);color:var(--tf-text-2);transition:background-color var(--tf-duration-fast) ease;align-items:center;gap:8px;padding:8px 10px;font-size:14px;text-decoration:none;display:flex}.tf-nav-item:hover{background:var(--tf-fill-1);text-decoration:none}.tf-nav-item.active{background:var(--tf-fill-2);color:var(--tf-text-1);font-weight:500}.tf-sidebar-user{border-top:1px solid var(--tf-border-light);align-items:center;gap:8px;padding:10px 8px 4px;display:flex}.tf-avatar{background:var(--tf-blue-soft);width:32px;height:32px;color:var(--tf-blue);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;font-size:14px;font-weight:600;display:inline-flex}.tf-profile-link{min-width:0;font:inherit;text-align:left;border-radius:var(--tf-radius-sm);cursor:pointer;transition:background-color var(--tf-duration-fast) ease;background:0 0;border:none;flex:1;align-items:center;gap:8px;margin:-6px;padding:6px;display:flex}.tf-profile-link:hover{background:var(--tf-fill-1)}.tf-user-meta{flex-direction:column;flex:1;min-width:0;display:flex}.tf-user-name{color:var(--tf-text-1);white-space:nowrap;text-overflow:ellipsis;font-size:14px;font-weight:500;overflow:hidden}.tf-role-badge{border-radius:var(--tf-radius-xs);background:var(--tf-gray-soft);color:var(--tf-text-2);align-self:flex-start;margin-top:2px;padding:1px 6px;font-size:12px;line-height:16px}.tf-role-admin{background:var(--tf-blue-soft);color:var(--tf-blue)}.tf-role-technicien{background:var(--tf-orange-soft);color:var(--tf-orange)}.tf-icon-button{border-radius:var(--tf-radius-sm);width:32px;height:32px;color:var(--tf-text-3);cursor:pointer;transition:background-color var(--tf-duration-fast) ease, color var(--tf-duration-fast) ease, transform var(--tf-duration-fast) ease;background:0 0;border:none;justify-content:center;align-items:center;display:inline-flex}.tf-icon-button:hover{background:var(--tf-fill-1);color:var(--tf-text-1)}.tf-icon-button:active{transform:scale(.97)}.tf-main{flex-direction:column;flex:1;min-width:0;display:flex}.tf-header{background:var(--tf-surface);border-bottom:1px solid var(--tf-border-light);height:56px;z-index:var(--tf-z-header);align-items:center;padding:0 32px;display:flex;position:sticky;top:0}.tf-header-title{color:var(--tf-text-1);font-size:16px;font-weight:600}.tf-content{flex:1;width:100%;max-width:1100px;margin:0 auto;padding:32px 24px}.tf-auth-loading{min-height:100vh;color:var(--tf-text-3);flex-direction:column;justify-content:center;align-items:center;gap:16px;font-size:14px;display:flex}.tf-auth-loading .tf-logo-mark{animation:1.4s ease-in-out infinite tf-pulse}@keyframes tf-pulse{0%,to{opacity:1}50%{opacity:.55}}.tf-auth-page{background:var(--tf-bg);justify-content:center;align-items:center;min-height:100vh;padding:24px;display:flex}.tf-auth-card{background:var(--tf-surface);border:1px solid var(--tf-border-light);border-radius:var(--tf-radius-lg);width:100%;max-width:400px;animation:tf-card-in var(--tf-duration-ui) var(--tf-ease-out);padding:32px}@keyframes tf-card-in{0%{opacity:0;transform:scale(.97)}to{opacity:1;transform:scale(1)}}.tf-auth-brand{text-align:center;flex-direction:column;align-items:center;gap:8px;margin-bottom:24px;display:flex}.tf-auth-title{color:var(--tf-text-1);font-size:20px;font-weight:600}.tf-auth-subtitle{color:var(--tf-text-3);font-size:14px}.tf-form{flex-direction:column;gap:16px;display:flex}.tf-field{flex-direction:column;gap:4px;display:flex}.tf-field-label{color:var(--tf-text-2);font-size:14px;font-weight:500}.tf-input{height:40px;color:var(--tf-text-1);background:var(--tf-surface);border:1px solid var(--tf-border);border-radius:var(--tf-radius-md);transition:border-color var(--tf-duration-fast) ease;padding:0 12px;font-family:inherit;font-size:14px}.tf-input::placeholder{color:var(--tf-text-3)}.tf-input:hover{border-color:#00000038}.tf-input:focus{border-color:var(--tf-blue);box-shadow:0 0 0 3px var(--tf-blue-soft);outline:none}.tf-form-error{color:var(--tf-red);background:var(--tf-red-soft);border-radius:var(--tf-radius-sm);padding:10px 12px;font-size:14px}.tf-button-primary{color:#fff;background:var(--tf-blue);border-radius:var(--tf-radius-md);cursor:pointer;height:40px;transition:background-color var(--tf-duration-fast) ease, transform var(--tf-duration-fast) ease;border:none;margin-top:4px;font-family:inherit;font-size:14px;font-weight:500}.tf-button-primary:hover{background:var(--tf-blue-hover)}.tf-button-primary:active{background:var(--tf-blue-active);transform:scale(.97)}.tf-button-primary:disabled{opacity:.6;cursor:default;transform:none}.tf-auth-footer{color:var(--tf-text-3);text-align:center;margin-top:24px;font-size:14px}.tf-placeholder{text-align:center;background:var(--tf-surface);border:1px solid var(--tf-border-light);border-radius:var(--tf-radius-lg);flex-direction:column;justify-content:center;align-items:center;gap:8px;padding:96px 24px;display:flex}.tf-placeholder-icon{background:var(--tf-fill-1);width:56px;height:56px;color:var(--tf-text-3);border-radius:50%;justify-content:center;align-items:center;margin-bottom:8px;display:inline-flex}.tf-placeholder-title{color:var(--tf-text-1);font-size:16px;font-weight:600}.tf-placeholder-text{max-width:420px;color:var(--tf-text-2);font-size:14px}.tf-users-page{flex-direction:column;gap:16px;display:flex}.tf-table-card{background:var(--tf-surface);border:1px solid var(--tf-border-light);border-radius:var(--tf-radius-lg);overflow:hidden}.tf-table{border-collapse:collapse;width:100%;font-size:14px}.tf-table th{color:var(--tf-text-3);text-align:left;border-bottom:1px solid var(--tf-border-light);padding:10px 16px;font-size:12px;font-weight:500}.tf-table td{color:var(--tf-text-1);border-bottom:1px solid var(--tf-border-light);padding:12px 16px}.tf-table tbody tr:last-child td{border-bottom:none}.tf-table tbody tr{transition:background-color var(--tf-duration-fast) ease}.tf-table tbody tr:hover{background:var(--tf-fill-1)}.tf-table-name{font-weight:500}.tf-you-badge{border-radius:var(--tf-radius-xs);background:var(--tf-blue-soft);color:var(--tf-blue);margin-left:8px;padding:1px 6px;font-size:12px;font-weight:400}.tf-table-date{color:var(--tf-text-3)}.tf-table-actions-head{width:96px}.tf-table-actions{justify-content:flex-end;gap:4px;display:flex}.tf-table-empty{text-align:center;color:var(--tf-text-3);padding:32px 16px}.tf-icon-button-danger:hover:not(:disabled){color:var(--tf-red);background:var(--tf-red-soft)}.tf-icon-button:disabled{opacity:.35;cursor:default}.tf-table-skeleton td{padding:16px}.tf-skeleton-bar{border-radius:var(--tf-radius-xs);background:var(--tf-fill-2);height:14px;animation:1.4s ease-in-out infinite tf-pulse;display:block}.tf-modal-backdrop{z-index:var(--tf-z-modal-backdrop);animation:tf-fade-in var(--tf-duration-fast) ease;background:#00000052;justify-content:center;align-items:center;padding:24px;display:flex;position:fixed;inset:0}@keyframes tf-fade-in{0%{opacity:0}}.tf-modal{z-index:var(--tf-z-modal);background:var(--tf-surface);border:1px solid var(--tf-border-light);border-radius:var(--tf-radius-lg);width:100%;max-width:440px;animation:tf-card-in var(--tf-duration-ui) var(--tf-ease-out);padding:24px}.tf-modal-header{justify-content:space-between;align-items:center;margin-bottom:20px;display:flex}.tf-modal-title{color:var(--tf-text-1);font-size:16px;font-weight:600}.tf-modal-text{color:var(--tf-text-2);margin-bottom:20px;font-size:14px;line-height:1.5}.tf-modal-footer{justify-content:flex-end;gap:8px;margin-top:8px;display:flex}.tf-select{appearance:none;cursor:pointer}.tf-button-secondary,.tf-button-danger{border-radius:var(--tf-radius-md);cursor:pointer;height:36px;transition:background-color var(--tf-duration-fast) ease, transform var(--tf-duration-fast) ease;padding:0 14px;font-family:inherit;font-size:14px;font-weight:500}.tf-button-secondary{color:var(--tf-text-1);background:var(--tf-surface);border:1px solid var(--tf-border)}.tf-button-secondary:hover{background:var(--tf-fill-1)}.tf-button-danger{color:#fff;background:var(--tf-red);border:none}.tf-button-danger:hover{background:#e62e3f}.tf-button-secondary:active,.tf-button-danger:active{transform:scale(.97)}.tf-button-danger:disabled{opacity:.6;cursor:default;transform:none}.tf-modal .tf-button-primary{height:36px;margin-top:0;padding:0 14px}.tf-visually-hidden{clip:rect(0 0 0 0);width:1px;height:1px;position:absolute;overflow:hidden}.tf-profile-page{flex-direction:column;gap:16px;max-width:560px;display:flex}.tf-profile-card{background:var(--tf-surface);border:1px solid var(--tf-border-light);border-radius:var(--tf-radius-lg);padding:24px}.tf-profile-identity{align-items:center;gap:16px;display:flex}.tf-avatar-large{width:56px;height:56px;font-size:22px}.tf-profile-name{color:var(--tf-text-1);margin-bottom:4px;font-size:18px;font-weight:600}.tf-profile-since{color:var(--tf-text-3);margin-top:6px;font-size:14px}.tf-profile-section-title{color:var(--tf-text-1);margin-bottom:16px;font-size:14px;font-weight:600}.tf-profile-actions{justify-content:flex-end;display:flex}.tf-profile-actions .tf-button-primary{height:36px;margin-top:0;padding:0 14px}
