*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{font-size:16px;-webkit-text-size-adjust:100%}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;background:var(--bg);color:var(--text);min-height:100dvh;line-height:1.5;-webkit-font-smoothing:antialiased}img,video{max-width:100%;height:auto;display:block}button,input,select,textarea{font:inherit;color:inherit;border:none;background:none;outline:none}a{color:inherit;text-decoration:none}:root{--brand-900: #0F172A;--brand-800: #1E3A8A;--brand-700: #1D4ED8;--brand-600: #2563EB;--brand-100: #DBEAFE;--brand-50: #EFF6FF;--success: #10B981;--success-bg: #ECFDF5;--success-text: #065F46;--warning: #F59E0B;--warning-bg: #FFFBEB;--warning-text: #92400E;--danger: #EF4444;--danger-bg: #FEF2F2;--danger-text: #991B1B;--info: #3B82F6;--info-bg: #EFF6FF;--bg: #F8FAFC;--surface: #FFFFFF;--border: #E2E8F0;--border-2: #CBD5E1;--text: #0F172A;--text-2: #475569;--text-3: #94A3B8;--nav-h: 64px;--header-h: 56px;--radius: 12px;--radius-sm: 8px;--shadow: 0 1px 3px rgba(0,0,0,.08), 0 1px 2px rgba(0,0,0,.04);--shadow-md: 0 4px 6px -1px rgba(0,0,0,.07), 0 2px 4px -1px rgba(0,0,0,.05)}#app{display:flex;flex-direction:column;min-height:100dvh;max-width:480px;margin:0 auto;position:relative}.page{flex:1;padding:calc(var(--header-h) + 12px) 16px calc(var(--nav-h) + 16px);overflow-y:auto}.page--no-nav{padding-bottom:32px}.app-header{position:fixed;top:0;left:50%;transform:translate(-50%);width:100%;max-width:480px;height:var(--header-h);background:var(--brand-800);color:#fff;display:flex;align-items:center;padding:0 16px;gap:12px;z-index:100;box-shadow:var(--shadow-md)}.app-header__back{display:flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:50%;cursor:pointer;flex-shrink:0;transition:background .15s}.app-header__back:active{background:#ffffff26}.app-header__title{flex:1;font-size:17px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.app-header__action{display:flex;align-items:center;justify-content:center;min-width:40px;height:40px;padding:0 12px;border-radius:20px;cursor:pointer;font-size:14px;font-weight:500;background:#ffffff26;transition:background .15s}.app-header__action:active{background:#ffffff40}.app-nav{position:fixed;bottom:0;left:50%;transform:translate(-50%);width:100%;max-width:480px;height:var(--nav-h);background:var(--surface);border-top:1px solid var(--border);display:flex;align-items:center;z-index:100;padding-bottom:env(safe-area-inset-bottom)}.app-nav__item{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;cursor:pointer;color:var(--text-3);font-size:11px;font-weight:500;padding:8px 4px;transition:color .15s;-webkit-tap-highlight-color:transparent}.app-nav__item.active{color:var(--brand-700)}.app-nav__item svg{width:24px;height:24px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.app-nav__badge{position:absolute;top:6px;right:calc(50% - 20px);background:var(--danger);color:#fff;font-size:10px;font-weight:700;min-width:16px;height:16px;border-radius:8px;display:flex;align-items:center;justify-content:center;padding:0 4px}.card{background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden}.card+.card{margin-top:12px}.card__header{display:flex;align-items:center;justify-content:space-between;padding:16px;border-bottom:1px solid var(--border)}.card__title{font-size:15px;font-weight:600}.card__body{padding:16px}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:48px;padding:0 20px;border-radius:var(--radius-sm);font-size:15px;font-weight:600;cursor:pointer;transition:opacity .15s,transform .1s;-webkit-tap-highlight-color:transparent;user-select:none}.btn:active{transform:scale(.97);opacity:.9}.btn--primary{background:var(--brand-700);color:#fff;width:100%}.btn--secondary{background:var(--brand-50);color:var(--brand-700);border:1.5px solid var(--brand-100);width:100%}.btn--danger{background:var(--danger);color:#fff}.btn--ghost{background:transparent;color:var(--text-2)}.btn--sm{min-height:36px;padding:0 14px;font-size:13px}.btn:disabled{opacity:.45;pointer-events:none}.btn svg{width:20px;height:20px;flex-shrink:0}.fab{position:fixed;bottom:calc(var(--nav-h) + 16px);right:16px;width:56px;height:56px;border-radius:50%;background:var(--brand-700);color:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 14px #2563eb66;cursor:pointer;z-index:90;transition:transform .15s,box-shadow .15s;-webkit-tap-highlight-color:transparent}.fab:active{transform:scale(.93);box-shadow:0 2px 8px #2563eb4d}.fab svg{width:28px;height:28px;stroke:currentColor;fill:none;stroke-width:2.5}.form-group{margin-bottom:16px}.form-group:last-child{margin-bottom:0}.label{display:block;font-size:13px;font-weight:600;color:var(--text-2);margin-bottom:6px;text-transform:uppercase;letter-spacing:.04em}.label .required{color:var(--danger);margin-left:2px}.input,.select,.textarea{display:block;width:100%;min-height:48px;padding:12px 14px;background:var(--surface);border:1.5px solid var(--border-2);border-radius:var(--radius-sm);font-size:16px;color:var(--text);transition:border-color .15s,box-shadow .15s;-webkit-appearance:none}.input:focus,.select:focus,.textarea:focus{border-color:var(--brand-600);box-shadow:0 0 0 3px #2563eb1f}.input::placeholder,.textarea::placeholder{color:var(--text-3)}.select{cursor:pointer}.textarea{min-height:100px;resize:vertical;line-height:1.5}.input.error,.select.error{border-color:var(--danger)}.badge{display:inline-flex;align-items:center;gap:4px;padding:3px 10px;border-radius:20px;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.04em}.badge--draft{background:#f1f5f9;color:#64748b}.badge--pending{background:var(--warning-bg);color:var(--warning-text)}.badge--approved{background:var(--success-bg);color:var(--success-text)}.badge--failed,.badge--open{background:var(--danger-bg);color:var(--danger-text)}.badge--in_progress{background:var(--warning-bg);color:var(--warning-text)}.badge--awaiting_validation{background:var(--info-bg);color:var(--info)}.badge--closed{background:var(--success-bg);color:var(--success-text)}.badge--critical{background:#fef2f2;color:#991b1b}.badge--high{background:#fff7ed;color:#9a3412}.badge--medium{background:var(--warning-bg);color:var(--warning-text)}.badge--low{background:var(--info-bg);color:#1d4ed8}.list-item{display:flex;align-items:center;gap:12px;padding:14px 16px;background:var(--surface);border-bottom:1px solid var(--border);cursor:pointer;-webkit-tap-highlight-color:transparent;transition:background .1s}.list-item:last-child{border-bottom:none}.list-item:active{background:var(--bg)}.list-item__icon{width:42px;height:42px;border-radius:10px;display:flex;align-items:center;justify-content:center;flex-shrink:0;background:var(--brand-50)}.list-item__icon svg{width:22px;height:22px;stroke:var(--brand-700);fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.list-item__body{flex:1;min-width:0}.list-item__title{font-size:15px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.list-item__sub{font-size:13px;color:var(--text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:2px}.list-item__right{display:flex;flex-direction:column;align-items:flex-end;gap:4px;flex-shrink:0}.list-item__chevron{color:var(--text-3)}.kpi-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.kpi{background:var(--surface);border-radius:var(--radius);padding:16px;box-shadow:var(--shadow);display:flex;flex-direction:column;gap:6px}.kpi__value{font-size:32px;font-weight:700;line-height:1;color:var(--text)}.kpi__label{font-size:12px;font-weight:500;color:var(--text-2);text-transform:uppercase;letter-spacing:.05em}.kpi--success .kpi__value{color:var(--success)}.kpi--warning .kpi__value{color:var(--warning)}.kpi--danger .kpi__value{color:var(--danger)}.section-header{display:flex;align-items:center;justify-content:space-between;margin:20px 0 10px}.section-title{font-size:13px;font-weight:700;color:var(--text-2);text-transform:uppercase;letter-spacing:.06em}.empty{display:flex;flex-direction:column;align-items:center;padding:48px 24px;text-align:center;gap:12px}.empty svg{width:56px;height:56px;stroke:var(--text-3);fill:none}.empty__title{font-size:17px;font-weight:600;color:var(--text-2)}.empty__sub{font-size:14px;color:var(--text-3)}#toast{position:fixed;bottom:calc(var(--nav-h) + 12px);left:50%;transform:translate(-50%);max-width:448px;width:calc(100% - 32px);background:var(--brand-900);color:#fff;padding:12px 16px;border-radius:var(--radius-sm);font-size:14px;font-weight:500;box-shadow:var(--shadow-md);z-index:200;display:flex;align-items:center;gap:10px;opacity:0;transition:opacity .25s,transform .25s;pointer-events:none}#toast.show{opacity:1;pointer-events:auto}#toast.toast--success{background:var(--success)}#toast.toast--error{background:var(--danger)}#offline-banner{position:fixed;top:0;left:50%;transform:translate(-50%);width:100%;max-width:480px;background:var(--warning);color:var(--warning-text);font-size:13px;font-weight:600;padding:8px 16px;display:flex;align-items:center;gap:8px;z-index:150}#offline-banner[hidden]{display:none}.spinner{width:24px;height:24px;border:2.5px solid rgba(37,99,235,.2);border-top-color:var(--brand-600);border-radius:50%;animation:spin .7s linear infinite;flex-shrink:0}@keyframes spin{to{transform:rotate(360deg)}}.loading-full{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:200px;gap:16px;color:var(--text-2);font-size:14px}.divider{height:1px;background:var(--border);margin:16px 0}.text-sm{font-size:13px}.text-xs{font-size:11px}.text-muted{color:var(--text-2)}.text-danger{color:var(--danger)}.text-success{color:var(--success)}.fw-600{font-weight:600}.mt-8{margin-top:8px}.mt-16{margin-top:16px}.mt-24{margin-top:24px}.mb-8{margin-bottom:8px}.mb-16{margin-bottom:16px}.gap-8{gap:8px}.flex{display:flex}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-between{justify-content:space-between}.w-full{width:100%}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}html{scroll-behavior:smooth}*{-webkit-overflow-scrolling:touch}
