:root{--color-primary: #009688;--color-primary-dark: #00796B;--color-accent: #1DE9B6;--color-layout-bg: #26A69A;--color-gradient-end: #004D40;--header-gradient: linear-gradient(90deg, #009688 0%, #26A69A 35%, #004D40 100%);--color-white: #FFFFFF;--color-soft-white: #EEEAEA;--color-black: #000000;--color-gray-700: #616161;--color-text: #000000;--color-text-on-primary: #FFFFFF;--color-btn-bg: #00796B;--color-btn-text: #FFFFFF;--color-success: #1B5E20;--color-danger: #F44336;--color-danger-dark: #B00020;--color-warning: #D67601;--color-orange-press: #FF8A00;--color-blue-button: #1C76BB;--color-loading-overlay: rgba(0, 0, 0, .6);--card-radius: 4px;--card-elevation: 4px;--card-margin: 2px;--icon-size: 50px;--safe-top: env(safe-area-inset-top, 0px);--safe-bottom: env(safe-area-inset-bottom, 0px);--font-ui: "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif}*,*:before,*:after{box-sizing:border-box}html,body{margin:0;padding:0;min-height:100%;font-family:var(--font-ui);color:var(--color-text);background:var(--color-soft-white);-webkit-tap-highlight-color:transparent}body{padding-top:var(--safe-top);padding-bottom:var(--safe-bottom)}#app{min-height:100dvh;display:flex;flex-direction:column}button,input,textarea,select{font:inherit}button{cursor:pointer;border:none;background:none}a{color:var(--color-primary-dark)}.app-header{background:var(--header-gradient);color:var(--color-text-on-primary);padding:12px 16px;display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:52px;box-shadow:0 2px 4px #0000002e}.app-header h1{margin:0;font-size:1.05rem;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.app-header .header-actions{display:flex;align-items:center;gap:10px;flex-shrink:0}.sync-badge{background:var(--color-orange-press);color:#fff;font-size:.72rem;font-weight:700;min-width:1.4rem;height:1.4rem;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;padding:0 6px}.sync-badge[hidden]{display:none}.btn-icon{width:36px;height:36px;border-radius:4px;display:inline-flex;align-items:center;justify-content:center}.btn-icon:active{background:#ffffff26}.btn-icon img{width:22px;height:22px;object-fit:contain;filter:brightness(0) invert(1)}.page{flex:1;display:flex;flex-direction:column;padding:12px;gap:12px}.page-scroll{flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch}.login-page{flex:1;display:flex;flex-direction:column;background:var(--header-gradient);min-height:100dvh}.login-hero{padding:48px 24px 28px;text-align:center;color:var(--color-text-on-primary)}.login-hero img{width:96px;height:96px;object-fit:contain;margin-bottom:16px}.login-hero h1{margin:0 0 6px;font-size:1.45rem;font-weight:700;letter-spacing:.02em}.login-hero p{margin:0;opacity:.92;font-size:.92rem}.login-card{margin:0 16px 24px;background:var(--color-white);border-radius:8px;padding:20px 16px;box-shadow:0 4px 16px #0000002e}.form-field{margin-bottom:14px}.form-field label{display:block;font-size:.82rem;color:var(--color-gray-700);margin-bottom:6px}.form-field input,.form-field textarea,.form-field select{width:100%;padding:12px;border:1px solid #cfd8dc;border-radius:4px;background:#fff;color:var(--color-text)}.form-field input:focus,.form-field textarea:focus{outline:2px solid var(--color-accent);outline-offset:1px}.form-field textarea{min-height:88px;resize:vertical}.btn-primary{width:100%;padding:13px 16px;background:var(--color-btn-bg);color:var(--color-btn-text);border-radius:4px;font-weight:600;font-size:1rem}.btn-primary:active{background:var(--color-orange-press)}.btn-primary:disabled{opacity:.55;cursor:not-allowed}.btn-secondary{width:100%;padding:12px 16px;background:transparent;color:var(--color-primary-dark);border:1px solid var(--color-primary-dark);border-radius:4px;font-weight:600}.btn-secondary:active{background:#00796b14}.btn-danger{width:100%;padding:12px 16px;background:var(--color-danger);color:#fff;border-radius:4px;font-weight:600}.btn-row{display:flex;gap:10px;margin-top:12px}.btn-row>*{flex:1}.helper-text{font-size:.8rem;color:var(--color-gray-700);margin-top:10px;line-height:1.35}.error-text{color:var(--color-danger);font-size:.85rem;margin:8px 0 0}.profile-card{background:var(--color-white);border-radius:var(--card-radius);box-shadow:0 1px var(--card-elevation) #0000001f;padding:14px;margin:0 2px}.profile-card .name{font-weight:700;font-size:1.05rem;margin:0 0 4px}.profile-card .meta{margin:0;font-size:.85rem;color:var(--color-gray-700)}.profile-card .status-row{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}.chip{display:inline-flex;align-items:center;gap:4px;font-size:.72rem;font-weight:600;padding:4px 8px;border-radius:4px;background:#e0f2f1;color:var(--color-primary-dark)}.chip.warn{background:#fff3e0;color:var(--color-warning)}.chip.danger{background:#ffebee;color:var(--color-danger-dark)}.chip.ok{background:#e8f5e9;color:var(--color-success)}.dash-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;padding:4px 2px 20px}.dash-card{background:var(--color-white);border-radius:var(--card-radius);box-shadow:0 1px var(--card-elevation) #00000024;margin:var(--card-margin);padding:18px 8px 14px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;min-height:110px;transition:transform .08s ease,background .08s ease;-webkit-user-select:none;user-select:none}.dash-card:active:not(.disabled){background:#fff8f0;transform:scale(.98)}.dash-card:active:not(.disabled) .dash-label{color:var(--color-orange-press)}.dash-card.disabled{opacity:.42;pointer-events:none}.dash-card img{width:var(--icon-size);height:var(--icon-size);object-fit:contain}.punch-time{display:block;font-size:.75rem;font-weight:700;text-align:center;line-height:1.25;min-height:1.1em}.punch-date{font-size:.7rem;font-weight:700}.dash-label{font-size:.82rem;font-weight:600;text-align:center;color:var(--color-text);line-height:1.2}.panel{background:var(--color-white);border-radius:var(--card-radius);box-shadow:0 1px 4px #0000001f;padding:16px}.panel h2{margin:0 0 8px;font-size:1.1rem;color:var(--color-primary-dark)}.panel p.lead{margin:0 0 14px;font-size:.9rem;color:var(--color-gray-700)}.camera-idle{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;width:100%;min-height:160px;padding:20px 12px;margin-bottom:12px;background:var(--color-soft-white);border-radius:4px;text-align:center}.camera-idle[hidden],.camera-wrap[hidden],#shot-preview[hidden],#photo-actions[hidden],#capture-actions[hidden]{display:none!important}.camera-idle-icon{width:72px;height:72px;object-fit:contain}.camera-wrap{position:relative;width:100%;aspect-ratio:3 / 4;background:#000;border-radius:4px;overflow:hidden;margin-bottom:12px}.camera-wrap video,.camera-wrap img.preview,#shot-preview{width:100%;height:auto;max-height:360px;object-fit:cover;border-radius:4px;margin-bottom:12px;display:block}.camera-wrap video{height:100%;max-height:none;margin-bottom:0}.camera-wrap canvas{display:none}.gps-line{font-size:.8rem;color:var(--color-gray-700);margin:0 0 12px;word-break:break-all}.status-banner{padding:10px 12px;border-radius:4px;font-size:.85rem;margin-bottom:12px}.status-banner.info{background:#e0f2f1;color:var(--color-primary-dark)}.status-banner.warn{background:#fff3e0;color:#e65100}.status-banner.error{background:#ffebee;color:var(--color-danger-dark)}.status-banner.ok{background:#e8f5e9;color:var(--color-success)}.loading-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--color-loading-overlay);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;z-index:1000;color:#fff}.loading-overlay[hidden]{display:none}.spinner{width:42px;height:42px;border:3px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}#toast-root{position:fixed;left:12px;right:12px;bottom:calc(16px + var(--safe-bottom));z-index:1100;display:flex;flex-direction:column;gap:8px;pointer-events:none}.toast{background:#323232;color:#fff;padding:12px 14px;border-radius:4px;font-size:.88rem;box-shadow:0 4px 12px #00000040;animation:toast-in .2s ease}.toast.error{background:var(--color-danger-dark)}.toast.success{background:var(--color-success)}@keyframes toast-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.offline-bar{background:var(--color-warning);color:#fff;text-align:center;font-size:.78rem;font-weight:600;padding:6px 8px}.offline-bar[hidden]{display:none}.back-link{color:var(--color-text-on-primary);font-size:.9rem;font-weight:600;padding:4px 0}.muted{color:var(--color-gray-700);font-size:.85rem}.dialog-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--color-loading-overlay);display:flex;align-items:center;justify-content:center;z-index:1200;padding:20px}.dialog-card{background:#fff;border-radius:4px;width:100%;max-width:360px;padding:18px 16px 14px;box-shadow:0 8px 24px #00000040}.dialog-title{margin:0 0 10px;font-size:1.05rem;color:var(--color-primary-dark)}.dialog-msg{margin:0 0 16px;font-size:.92rem;line-height:1.4;color:var(--color-text);word-break:break-word}.dialog-actions{display:flex;gap:10px}.dialog-actions>*{flex:1}.install-card .install-steps{margin:0 0 16px;padding-left:1.25rem;font-size:.9rem;line-height:1.45;color:var(--color-text)}.install-card .install-steps li{margin-bottom:8px}.install-card .install-steps li:last-child{margin-bottom:0}.install-actions{flex-wrap:wrap}.browser-block-page{min-height:100dvh;display:flex;align-items:center;justify-content:center;padding:calc(20px + var(--safe-top)) 16px calc(20px + var(--safe-bottom));background:linear-gradient(160deg,var(--color-primary) 0%,var(--color-layout-bg) 45%,var(--color-gradient-end) 100%);box-sizing:border-box}.browser-block-card{background:#fff;border-radius:4px;width:100%;max-width:380px;padding:22px 18px 18px;box-shadow:0 8px 24px #00000040;text-align:left}.browser-block-logo{display:block;width:72px;height:72px;margin:0 auto 12px;border-radius:50%;object-fit:cover}.browser-block-card .dialog-title{text-align:center}.browser-block-card .btn-primary{width:100%;margin-top:4px}.browser-block-card .helper-text{margin-top:12px;text-align:center}.task-divider{border:none;border-top:1px solid #e0e0e0;margin:16px 0}.panel .meta{margin:0 0 8px;font-size:.9rem}.form-step{margin:0 0 8px;font-size:.75rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--color-primary-dark)}.task-form h2{margin-top:0}.photo-card,.end-card{background:#fafafa;border:1px solid #e8e8e8;border-radius:4px;padding:14px;margin-top:14px;text-align:center}.img-count-top{margin:0 0 8px;text-align:right;font-size:.85rem;font-weight:700}.img-count-label{margin:8px 0 0;font-size:.85rem;font-weight:600;min-height:1.2em}.end-icon{display:block;margin:0 auto 8px;object-fit:contain}.report-form{padding-bottom:24px}.report-photo-preview{display:block;width:120px;height:160px;object-fit:cover;margin:4px auto 14px;border-radius:2px;background:#000}.report-loc-box{margin:0 0 12px;padding:16px 18px 14px;border:2px solid var(--color-primary);border-radius:4px;background:#fff}.report-time{margin:0 0 10px;font-size:1rem;font-weight:700;color:var(--color-black)}.report-address{margin:0 0 10px;font-size:1rem;font-weight:400;color:var(--color-black);word-break:break-word;line-height:1.35}.report-accuracy{margin:0 0 12px;font-size:1rem;font-weight:700;color:var(--color-black);min-height:1.2em}.report-refresh{display:block;width:100%;margin:0;padding:10px 8px;border:none;background:transparent;color:var(--color-primary);font-size:1.05rem;font-weight:700;cursor:pointer;font-family:inherit;text-align:center}.report-refresh[hidden],.report-refresh-spin[hidden]{display:none!important}.report-refresh:active{opacity:.7}.report-refresh-spin{width:28px;height:28px;margin:8px auto;border:3px solid #b2dfdb;border-top-color:var(--color-primary);border-radius:50%;animation:spin .8s linear infinite}.report-remark-box{position:relative;margin:0 0 16px;padding:10px 12px 6px;border:2px solid #7b1fa2;border-radius:4px;background:#fff}.report-remark-label{display:block;margin:0 0 4px;font-size:.85rem;color:var(--color-gray-700)}.report-remark-box textarea{width:100%;min-height:72px;margin:0;padding:8px;border:1px solid #e0e0e0;border-radius:2px;resize:vertical;font-family:inherit;font-size:.95rem}.report-counter{margin:4px 0 0;text-align:right;font-size:.75rem;color:var(--color-gray-700)}
