:root{font-family:system-ui,-apple-system,Segoe UI,sans-serif;color:#172b20;background:#f0f5f2;font-size:16px;--green:#087a35}*{box-sizing:border-box}body{margin:0}main{max-width:900px;margin:auto;padding:24px 18px 48px}header{display:flex;gap:12px;align-items:center;margin-bottom:20px}header strong{font-size:1.15rem}small{display:block;color:#596c61;margin-top:3px}.logo{background:var(--green);color:white;padding:12px 16px;border-radius:14px;font-size:1.3rem}#counter{margin-left:auto;font-weight:700;white-space:nowrap}.progress{height:7px;background:#d7e6dc;border-radius:10px;overflow:hidden;margin-bottom:20px}#bar{height:100%;background:var(--green);transition:width .2s}#app{background:white;border:1px solid #d5e4db;border-radius:22px;overflow:hidden;box-shadow:0 15px 40px #123c2410}.head{padding:25px;background:#ecf7ef;border-bottom:1px solid #d9e8de}.tag{font-size:.85rem;letter-spacing:.05em;text-transform:uppercase;color:var(--green);font-weight:750}h1{font-size:clamp(1.25rem,3.5vw,1.65rem);line-height:1.4;margin:10px 0 0}h2{line-height:1.4}.content{padding:24px}.hint{color:#5b6c62;font-size:.92rem;line-height:1.5;margin:0 0 18px}.choice{display:flex;gap:12px;padding:16px;margin:10px 0;border:1.5px solid #d6e2da;border-radius:12px;cursor:pointer;line-height:1.5}.choice:has(input:checked){background:#edf9f1;border-color:var(--green)}input[type=checkbox]{width:23px;height:23px;flex-shrink:0;accent-color:var(--green);margin:1px 0 0}input[type=text],select{font:inherit;border:2px solid #a9bdcc;border-radius:9px;padding:11px;background:#f0f6ff;color:#153951;max-width:100%;min-width:0}input[type=text]{width:155px;margin:5px;vertical-align:middle}input:focus,select:focus,button:focus-visible{outline:3px solid #8ac8a0;outline-offset:3px}.sentence{line-height:2.6;font-size:1.1rem}.answer-row{display:grid;grid-template-columns:minmax(120px,1fr) minmax(0,1.5fr);gap:12px;align-items:center;padding:13px 0;border-bottom:1px solid #e5ece8}.answer-row select{width:100%}.actions{padding:0 24px 24px}button{font:inherit;cursor:pointer}.primary{width:100%;padding:16px;border:0;border-radius:12px;background:var(--green);color:white;font-weight:750}.primary:disabled{background:#a5beb0;cursor:not-allowed}.image-scroll{overflow:auto;margin-bottom:18px;border:1px solid #e3ebe6;border-radius:12px}.figure{position:relative;margin:0;line-height:0}.figure>img{width:100%;display:block}.label-figure{min-width:680px}.spot{position:absolute;background:#f0f6ff;border:2px solid #315f80;display:flex;align-items:center;justify-content:center;font-size:14px;line-height:1.1;color:#163b57;overflow:hidden}.spot select{width:100%;height:100%;border:0;border-radius:0;padding:1px;font-size:12px}.spot b{padding:3px}.summary{text-align:center;padding:34px 24px}.score{font-size:3.5rem;font-weight:850;color:var(--green);margin:14px}.summary p{color:#53665a}.review{padding:0 24px 24px}details{border:1px solid #dae5de;border-radius:12px;padding:14px;margin:12px 0}summary{cursor:pointer;line-height:1.5;font-weight:650}.good{color:#087a35}.bad{color:#ad2738}.review-answer{padding:12px;background:#f3f7f4;line-height:1.6;border-radius:8px;margin-top:12px;white-space:pre-wrap}.muted{color:#66776c;font-size:.85rem}footer{text-align:center;color:#617268;font-size:.82rem;margin-top:17px}.error{padding:25px;color:#a52633}@media(max-width:560px){main{padding:13px 10px 30px}.head,.content{padding:18px}.actions{padding:0 18px 18px}#app{border-radius:16px}header strong{font-size:1rem}header small{font-size:.75rem}.logo{padding:8px 12px}.answer-row{grid-template-columns:1fr;gap:7px}.choice{padding:13px}.score{font-size:3rem}input[type=text]{width:130px}.review{padding:0 15px 20px}}@media(prefers-reduced-motion:reduce){*{transition:none!important}}
.source-region{position:relative;overflow:hidden;background:white;width:100%;margin:0}
.source-region>img{position:absolute;max-width:none;display:block;filter:grayscale(1)}
.diagram-sheet{min-width:900px}
.diagram-mask{position:absolute;padding:0;border:1px solid #315f80;background:#e8f2ff;color:#153951;display:flex;align-items:center;justify-content:center;font-size:12px;line-height:1;overflow:hidden;border-radius:0}
.diagram-mask>.source-region{height:100%;width:100%}
.pattern-bank{display:grid;grid-template-columns:repeat(auto-fit,minmax(100px,1fr));gap:12px;margin:16px 0 24px}
.pattern{border:1px solid #cddbd2;border-radius:8px;padding:10px;display:flex;align-items:center;flex-direction:column;gap:10px;min-height:110px}
.pattern b{font-size:14px}
.pattern .source-region{max-width:90px;max-height:150px;flex:0 1 auto}
.pattern .source-region:has(img){width:80px}

.part{padding:18px 0;border-top:2px solid #d9e8de;margin-top:20px}.part h2{font-size:1.08rem;margin:0 0 12px}.part:first-child{margin-top:0}.content>.source-region{max-width:440px;margin:0 auto 20px}

.drag-exercise{position:relative}.drag-palette{position:sticky;top:0;z-index:5;background:#f0f6ff;border:1px solid #9bb7cc;border-radius:12px;padding:10px;margin:10px 0 16px;box-shadow:0 3px 9px #0001}.drag-palette p{margin:0 0 8px;font-size:.86rem}.drag-palette>div{display:flex;gap:8px;overflow-x:auto;padding:3px;max-height:145px;align-items:center}.drag-token{touch-action:none;user-select:none;-webkit-user-select:none;flex:0 0 auto;min-width:55px;min-height:48px;max-width:290px;border:2px solid #6687a0;border-radius:9px;background:white;padding:9px;color:#17394f;font-weight:700;cursor:grab}.drag-token[aria-pressed=true]{border-color:#087a35;background:#e0f4e8;box-shadow:0 0 0 2px #087a35}.drag-token .source-region{width:65px;max-height:100px;pointer-events:none}.drag-ghost{position:fixed!important;z-index:9999;transform:translate(-50%,-65%);pointer-events:none;opacity:.9;box-shadow:0 8px 25px #0005}.drag-status{font-size:.75rem}.drop-slot{border:2px dashed #7394ad;border-radius:7px;background:#edf5ff;min-height:48px;width:100%;padding:8px;color:#183f58;font-weight:700}.drop-slot.filled{border-style:solid;background:white}.drop-hover{outline:4px solid #087a35!important;background:#daf4e3!important}.answer-table{width:100%;border-collapse:collapse}.answer-table th,.answer-table td{border:1px solid #557065;padding:12px;text-align:center}.answer-table th{font-weight:600;background:#f0f5f2}.relay-table{min-width:650px;table-layout:fixed}.relay-table th:first-child{width:175px}.relay-table .drop-slot{font-size:38px;min-height:85px}.diagram-target{position:absolute;border-radius:0;padding:0;min-height:0;overflow:hidden;line-height:1;font-size:10px}.diagram-target .source-region{height:100%;width:100%}.diagram-target.filled{border:1px solid #7394ad}.diagram-target>span{pointer-events:none}

#app{overflow:clip}.drag-token>span{display:block;font-size:12px;margin-bottom:5px}.drag-token .source-region{margin:auto}

h1,.part h2{white-space:pre-line}

.component-photo{position:relative;max-width:none;line-height:1.05}.component-photo>img{width:100%;display:block}.photo-target,.photo-answer{position:absolute;min-height:0;border:1px dashed #567992;border-radius:3px;background:#edf5ff;display:flex;align-items:center;justify-content:center;overflow:hidden;padding:2px;font-size:14px;line-height:1.05;white-space:normal}.photo-target.filled{background:#fff;border:1px solid #567992;font-size:12px}.photo-answer{background:#fff;border:1px solid #087a35;font-size:12px}.photo-exercise .drag-palette>div{max-height:none}.photo-exercise .drag-token{font-size:15px;max-width:240px}.photo-scroll{overscroll-behavior-x:contain}.photo-target.drop-hover{background:#ddf3e7!important}

.palette-navigation{display:flex;justify-content:space-between;gap:8px;margin:6px 0}.palette-navigation button{padding:8px 12px;border:1px solid #6687a0;border-radius:6px;background:white;color:#17394f;font-size:13px;min-height:40px}

.blocking-tag{display:inline-block;background:#fff0f1;color:#9e1929;border:1px solid #d89ba3;border-radius:6px;padding:5px 8px;margin-left:10px;font-size:13px;font-weight:750}.summary h1.bad{color:#ad2738}

.field{display:flex;flex-direction:column;gap:8px;font-weight:650;margin:18px 0}.field input{font:inherit;width:100%;padding:14px;border:1px solid #aabeb0;border-radius:9px;background:#fff}.field input[name=pin]{max-width:240px;font-size:24px;letter-spacing:.4em}.secondary{display:inline-block;padding:12px 15px;background:white;color:#155431;border:1px solid #8caf99;border-radius:9px;margin:6px 0;font:inherit;text-decoration:none;text-align:center;cursor:pointer}.secondary:disabled{opacity:.5;cursor:default}.gate-nav{display:flex;justify-content:space-between;gap:12px;margin-top:24px;font-size:14px}.gate-nav a{color:#23613c}.session-state{padding:15px;border-radius:10px;font-weight:650;line-height:1.5}.session-state.open{background:#e2f5e8;color:#07552b}.session-state.closed{background:#fff1de;color:#694315}.admin-actions{display:flex;gap:10px;flex-wrap:wrap;margin:18px 0}.admin-actions .primary{width:auto;flex:1}.admin-table{width:100%;border-collapse:collapse;min-width:590px;font-size:15px}.admin-table th,.admin-table td{padding:14px;text-align:left;border-bottom:1px solid #dde7e0}.admin-table th{background:#eff6f1}.result-counts{display:flex;gap:12px;flex-wrap:wrap;margin:20px 0}.result-counts span{background:#edf4ef;padding:9px 13px;border-radius:9px}.form-message,#join-error,#login-error,#dashboard-error{color:#a52633;line-height:1.5}.resume{padding:15px;background:#f2f6fc;border-radius:10px;margin:18px 0}.received-icon{font-size:50px;color:#087a35}.link-button{display:inline-block}.save-error{padding:10px 0}

:root{--green:#98bf64}.primary{background:#b2d581;color:#17330f}.primary:hover:not(:disabled){background:#a1ca70}.primary:disabled{background:#d6e2c7;color:#5b6950}.campus-welcome{position:relative;background:#234555}.campus-photo{display:block;width:100%;height:360px;object-fit:cover;object-position:center 39%}.welcome-caption{position:absolute;bottom:0;left:0;right:0;padding:35px 24px 18px;background:linear-gradient(transparent,#102327df);color:#fff;font-size:22px;font-weight:700}.login-content{max-width:600px;margin:auto}.login-tabs{display:flex;gap:8px;margin-bottom:18px;background:#f0f4ea;padding:5px;border-radius:12px}.login-tabs button{flex:1;background:transparent;border:0;padding:12px;border-radius:9px;color:#43563a}.login-tabs button.selected{background:#b2d581;color:#17330f;font-weight:750}.module-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;margin:20px 0}.module-button{display:flex;align-items:center;gap:13px;padding:19px 15px;background:#f3f8ec;border:1px solid #c3d9a6;border-radius:14px;color:#213e17;text-decoration:none;font-weight:700;min-height:90px}.module-button:hover{background:#e3f0d2}.module-letter{display:grid;place-items:center;flex-shrink:0;width:48px;height:48px;border-radius:12px;background:#b2d581;color:#17330f;font-size:18px}.manage-link{width:100%;line-height:1.5}.module-message{text-align:center;line-height:1.7}.contact-button{display:block;text-decoration:none;margin-top:18px}.module-message .primary{max-width:340px;margin-left:auto;margin-right:auto}.login-content h1{margin-bottom:18px}@media(max-width:560px){.campus-photo{height:290px;object-position:center 38%}.welcome-caption{font-size:19px;padding-left:18px}.module-grid{grid-template-columns:1fr;gap:10px}.module-button{min-height:75px;padding:13px}}
.app-brand-icon{width:48px;height:48px;border-radius:12px;object-fit:contain}
.install-panel{display:flex;gap:14px;align-items:center;margin-bottom:24px;padding:16px;border:1px solid #d6dfce;border-radius:16px;background:#f6faef}
.install-panel img{border-radius:12px;flex-shrink:0}.install-panel strong{display:block;margin-bottom:10px}
.install-panel button{font-size:1rem;white-space:normal;text-align:left}
#install-help{max-width:460px;width:calc(100% - 40px);box-sizing:border-box;padding:24px;border:0;border-radius:20px;color:#183023}
#install-help::backdrop{background:#0008}#install-help p{line-height:1.6}
.scan-panel{margin:22px 0;padding:18px;border:1px solid #ccc;border-radius:16px;background:#f7f8fc}.carmillon-button{width:100%;color:white!important;border:0;background:linear-gradient(125deg,#153872 5%,#452a83 48%,#9e2467 100%)!important;border-radius:12px;padding:17px;font-size:1rem;font-weight:700;min-height:52px}.scan-panel canvas{max-width:100%;width:280px;height:auto;display:block;margin:12px auto;border-radius:10px}.scan-panel canvas[hidden]{display:none}.scan-panel small{display:block;font-size:.875rem;line-height:1.5;color:#454957}.resource-card{border:1px solid #d7ded8;border-radius:14px;margin:18px 0;padding:18px;overflow-wrap:anywhere}.resource-card h2,.resource-card h3{margin-top:0}.resource-card .admin-actions{flex-wrap:wrap}.field textarea,textarea{font:inherit;max-width:100%;width:100%;border:1px solid #aab6b0;border-radius:10px;padding:12px;box-sizing:border-box;background:white;color:#17291e}.danger{background:#fff0f0;color:#9c1633;border:1px solid #c994a0;border-radius:10px;padding:12px 16px;font:inherit;cursor:pointer}.inline-check{display:flex;gap:10px;align-items:center;margin:18px 0}.inline-check input,.answer-edit-row input{width:23px;height:23px;accent-color:#6a8d28}.answer-edit-row{display:grid;grid-template-columns:28px minmax(0,1fr) 44px;gap:8px;align-items:center;margin:12px 0}.answer-edit-row button{padding:10px!important}.manage-link{display:block;margin-bottom:14px;text-align:center}#quiz-draft{font-weight:600;color:#654408}.gate-nav{flex-wrap:wrap}#manager-body .admin-actions button{min-height:44px}#document-form input[type=file]{padding:10px;max-width:100%;font-size:.9rem}.field select{max-width:100%}
#live-pass-camera{margin:16px 0}#live-pass-camera[hidden]{display:none}.pass-camera-view{position:relative;background:#101728;border-radius:12px;overflow:hidden;margin-bottom:12px}.pass-camera-view video{display:block;width:100%;max-height:380px;object-fit:contain}.pass-camera-guide{position:absolute;left:6%;width:88%;aspect-ratio:1.586;top:50%;transform:translateY(-50%);border:2px solid #f1dcff;border-radius:12px;box-shadow:0 0 0 100vmax #10172830;pointer-events:none}

.scan-instruction{font-size:1.2rem;font-weight:750;line-height:1.5;color:#192e54;margin:0 0 16px}

.train-install{display:flex!important;flex-direction:column;align-items:stretch;gap:4px;min-width:0;overflow:hidden;padding:10px 20px 14px!important}.install-track{position:relative;display:block;height:58px;overflow:hidden;border-bottom:3px double #36552b}.install-train{position:absolute;display:block;left:calc(50% - 34px);bottom:0;font-size:3.4rem;line-height:1;transform:scaleX(-1);filter:drop-shadow(0 3px 2px #27401930)}.train-install-label{font-size:1rem;line-height:1.4}.train-departing .install-train{animation:train-depart .9s ease-in forwards}.train-departing{opacity:1!important}@keyframes train-depart{0%{left:calc(50% - 34px)}25%{left:calc(50% - 40px)}100%{left:110%}}@media(prefers-reduced-motion:reduce){.train-departing .install-train{animation:none}}
