:root{--primary: #0b62d6;--danger: #d6300b;--warning: #b87800;--success: #1b8a3a;--text: #111418;--surface: #ffffff;--line: #c6ccd4;--content-max: 760px;--gutter: max(16px, calc((100% - var(--content-max)) / 2))}*{box-sizing:border-box;margin:0;padding:0}html,body,#root{height:100%}body{font-family:Pretendard,Noto Sans KR,sans-serif;color:var(--text);background:var(--surface);font-size:17px;-webkit-tap-highlight-color:transparent}button,input,select,textarea{font-family:inherit}.app{display:flex;flex-direction:column;height:100%}.statusbar{display:flex;align-items:center;gap:8px;padding:10px var(--gutter);background:#0e1116;color:#fff;font-size:14px;font-weight:700}.statusbar .spacer{flex:1}.badge{padding:4px 10px;border-radius:999px;font-size:13px;font-weight:800;white-space:nowrap}.badge.gps-wait{background:#5b6572;color:#fff}.badge.gps-mid{background:var(--warning);color:#fff}.badge.gps-good{background:var(--success);color:#fff}.badge.unsent{background:var(--danger);color:#fff}.badge.unsent.zero{background:#3a4450}.screen{flex:1;overflow-y:auto;padding:16px var(--gutter);padding-bottom:96px}.screen h2{font-size:20px;margin-bottom:12px;font-weight:800}.bottombar{position:fixed;left:0;right:0;bottom:0;display:flex;gap:8px;padding:12px max(12px,calc((100% - var(--content-max)) / 2));background:#fff;border-top:2px solid var(--line)}button{min-height:52px;min-width:48px;padding:0 16px;border:none;border-radius:10px;font-size:17px;font-weight:800;cursor:pointer}.btn-primary{background:var(--primary);color:#fff;flex:1}.btn-secondary{background:#e8ecf1;color:var(--text)}.btn-danger{background:var(--danger);color:#fff}button:disabled{background:#b9c2cc;color:#5c6672}input[type=text],input[type=password],textarea,select{width:100%;min-height:52px;padding:12px;border:2px solid var(--line);border-radius:10px;font-size:17px}.field{margin-bottom:14px}.field label{display:block;font-weight:800;margin-bottom:6px;font-size:15px}.card{display:block;width:100%;text-align:left;padding:14px;margin-bottom:10px;border:2px solid var(--line);border-radius:12px;background:#fff;font-size:16px;font-weight:400}.card.selected{border-color:var(--primary);background:#e9f1fd}.card .title{display:block;font-weight:800;font-size:17px}.card .sub{display:block;color:#444d57;font-size:14px;margin-top:4px}.label-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}.label-grid .card{margin-bottom:0;min-height:64px;display:flex;align-items:center;justify-content:space-between;gap:8px}.label-grid .done{border-color:var(--success)}.label-grid .count{font-weight:800;color:var(--success);white-space:nowrap}.warn-box{background:#fdf0e7;border:2px solid var(--warning);color:#7a5000;border-radius:10px;padding:12px;margin-bottom:12px;font-weight:700;font-size:15px}.error-box{background:#fdeae5;border:2px solid var(--danger);color:#8f1f04;border-radius:10px;padding:12px;margin-bottom:12px;font-weight:700}.grade-row{display:flex;gap:8px}.grade-row button{flex:1;border:2px solid var(--line);background:#fff;font-size:20px}.grade-row button.selected{border-color:var(--primary);background:var(--primary);color:#fff}.progress{font-weight:800;margin-bottom:10px}.muted{color:#5c6672;font-size:14px}.steps{display:flex;gap:0;list-style:none;margin:0 0 14px;padding:0}.steps li{flex:1;display:flex;align-items:center;gap:6px;font-size:13px;font-weight:800;color:#8a939e}.steps li:after{content:"";flex:1;height:2px;background:var(--line);margin:0 6px}.steps li:last-child:after{display:none}.steps .dot{width:24px;height:24px;border-radius:50%;background:#e8ecf1;display:inline-flex;align-items:center;justify-content:center;font-size:12px}.steps li.on{color:var(--primary)}.steps li.on .dot{background:var(--primary);color:#fff}.steps li.done{color:var(--success)}.steps li.done .dot{background:var(--success);color:#fff}.photostrip{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:12px}.photostrip .shot{position:relative;margin:0}.photostrip img{width:100%;aspect-ratio:4/3;object-fit:cover;border-radius:10px;border:2px solid var(--line)}.photostrip figcaption{font-size:12px;font-weight:700;color:#444d57;margin-top:2px}@media(min-width:600px){.photostrip{grid-template-columns:repeat(4,1fr)}}.shot-del{position:absolute;top:4px;right:4px;min-height:32px;min-width:32px;padding:0;border-radius:50%;background:#111418bf;color:#fff;border:none;font-size:14px;line-height:1}.grade-row{margin-bottom:14px}.grade-row button{display:flex;flex-direction:column;align-items:center;gap:2px;padding:10px 0}.grade-row button b{font-size:22px}.grade-row button small{font-size:12px;font-weight:700}.grade-row .grade-A.selected{background:#1b8a3a;border-color:#1b8a3a;color:#fff}.grade-row .grade-B.selected{background:#b87800;border-color:#b87800;color:#fff}.grade-row .grade-C.selected{background:#e8650b;border-color:#e8650b;color:#fff}.grade-row .grade-D.selected{background:#d6300b;border-color:#d6300b;color:#fff}.today-chips{display:flex;gap:8px;flex-wrap:wrap;margin:4px 0 8px}.chip{padding:6px 12px;border-radius:999px;background:#e8ecf1;font-size:13px;font-weight:800;color:#3a4450}.chip.done-chip{background:#e2f3e7;color:#136330}.chip.warn-chip{background:#fdf0e7;color:#7a5000}.list-head{display:flex;justify-content:space-between;align-items:center;margin:6px 0 10px}.plant-item .row1{display:flex;justify-content:space-between;align-items:baseline;gap:8px}.plant-item.near{border-color:var(--success);background:#f2faf4}.dist{font-weight:800;font-size:14px;white-space:nowrap}.dist.d-near{color:#136330}.dist.d-mid{color:#7a5000}.dist.d-far{color:#0b62d6}.alt-row{display:flex;gap:8px;margin-top:12px}.alt-row button{flex:1;min-height:44px;font-size:14px}.sheet{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--surface);z-index:40;padding:16px var(--gutter);overflow-y:auto}.sheet-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px;font-size:17px}.ph{width:100%;aspect-ratio:4/3;border-radius:10px;background:#e3e8ee}:focus-visible{outline:3px solid var(--primary);outline-offset:2px}button:not(:disabled):active{transform:scale(.98);filter:brightness(.93)}.badge.offline{background:var(--danger);color:#fff}.banner{display:flex;align-items:center;gap:8px;margin:0;border-radius:0;padding:10px var(--gutter)}.banner span{flex:1}.banner button{min-height:44px;flex:none}.toasts{position:fixed;left:0;right:0;bottom:92px;z-index:60;display:flex;flex-direction:column;align-items:center;gap:8px;padding:0 var(--gutter);pointer-events:none}.toast{max-width:100%;padding:12px 18px;border-radius:12px;background:#111418;color:#fff;font-size:15px;font-weight:700;box-shadow:0 6px 20px #00000040}.toast-success{background:var(--success)}.toast-error{background:var(--danger)}.section-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:22px 0 10px}.section-head h2{margin:0}.home-head{display:flex;align-items:center;gap:8px}.home-head h2{flex:1;margin:0}.home-head button{min-height:40px}.card .row1{display:flex;justify-content:space-between;align-items:baseline;gap:8px}.card:disabled{background:#fff;color:var(--text)}.card.is-done,.card.is-skipped{opacity:.6}.card .cta{display:block;margin-top:6px;color:var(--primary);font-weight:800;font-size:14px}.card .state-fail{color:#8f1f04;font-weight:700}.meter{height:8px;margin:-4px 0 12px;border-radius:4px;background:#e8ecf1;overflow:hidden}.meter i{display:block;height:100%;background:var(--success);transition:width .2s}.label-grid .card.missing{border-style:dashed;border-color:#8a939e}.label-grid .state{font-size:13px;font-weight:800;white-space:nowrap}.label-grid .state.req{color:#8f1f04}.label-grid .state.opt{color:#5c6672;font-weight:700}.title-row{display:flex;align-items:center;gap:8px;margin-bottom:12px}.title-row h2{flex:1;margin:0}.title-row button{min-height:40px;font-size:14px}.chip-row{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 14px}.chip-btn{min-height:44px;padding:0 14px;border:2px solid var(--line);border-radius:999px;background:#fff;font-size:15px}.summary-list{display:grid;grid-template-columns:auto 1fr;gap:6px 12px;margin-top:8px;font-size:15px}.summary-list dt{color:#5c6672;font-weight:700}.login-hero{margin:12px 0 20px}.login-hero .logo{font-size:40px;line-height:1;margin-bottom:8px}.pw-row{display:flex;gap:8px}.pw-row button{flex:none;min-width:72px;font-size:15px}
