:root{--xl-green:#107c41;--xl-dark:#0b3822;--xl-mint:#e8f5ed;--xl-blue:#2563eb;--xl-ink:#172235;--xl-muted:#69778b;--xl-line:#dce4e0;--xl-bg:#f3f7f5;--xl-card:#fff;--xl-warn:#a46600;--xl-red:#c43d4c}
*{box-sizing:border-box}.pyapp,.pygate{font-family:Inter,ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif;color:var(--xl-ink)}
.pyapp{position:fixed;inset:0;z-index:2147483000;background:var(--xl-bg);overflow:hidden}.pyapp button,.pyapp input,.pyapp select,.pygate input,.pygate button{font:inherit}
.pytopbar{height:64px;padding:8px 18px;display:flex;align-items:center;justify-content:space-between;gap:16px;background:linear-gradient(120deg,var(--xl-dark),#116837);color:#fff}.pybrand,.pytop-actions{display:flex;align-items:center;gap:11px}.pybrand-mark,.pylogo{display:grid;place-items:center;width:44px;height:44px;border-radius:12px;background:#fff;color:var(--xl-green);font-size:25px;font-weight:950;box-shadow:0 8px 24px #001a0d45}.pybrand strong,.pybrand small{display:block}.pybrand strong{font-size:18px}.pybrand small{color:#bfe2ce;font-size:11px}.pystudent{font-weight:750}.pymode{padding:6px 9px;border-radius:999px;background:#ffd86a;color:#493500;font-size:10px;font-weight:900;text-transform:uppercase;letter-spacing:.07em}
.pybutton{display:inline-flex;align-items:center;justify-content:center;min-height:38px;padding:8px 13px;border:1px solid transparent;border-radius:9px;font-weight:800;font-size:12px;text-decoration:none!important;cursor:pointer}.pybutton:disabled{opacity:.48;cursor:not-allowed}.pybutton-primary{background:var(--xl-green);color:#fff}.pybutton-secondary{border-color:#a9c7b7;background:#eef8f2;color:#075c2d}.pybutton-ghost{border-color:#ffffff42;background:#ffffff12;color:#fff!important}
.pyworkspace{display:grid;grid-template-columns:292px minmax(0,1fr);height:calc(100dvh - 64px)}.pysidebar{height:100%;padding:16px 12px;overflow:auto;border-right:1px solid var(--xl-line);background:#fff}.pysidebar-head{display:flex;align-items:center;justify-content:space-between;margin:0 5px 10px}.pysidebar-head h2{margin:0;font-size:21px}.pysidebar-head span{color:var(--xl-muted);font-size:11px}.pyinput,.pyfilters select{width:100%;padding:9px 10px;border:1px solid var(--xl-line);border-radius:9px;background:#f9fbfa;color:var(--xl-ink);outline:none}.pyinput:focus,.pyfilters select:focus{border-color:var(--xl-green);box-shadow:0 0 0 3px #107c4116}.pyfilters{display:grid;grid-template-columns:1fr 1fr;gap:7px;margin:7px 0 12px}.pytask-list{display:grid;gap:5px}.pytask{display:grid;grid-template-columns:31px 1fr;align-items:center;gap:8px;width:100%;padding:9px 8px;border:0;border-radius:10px;background:transparent;color:var(--xl-ink);text-align:left;cursor:pointer}.pytask:hover{background:#f0f7f3}.pytask.is-active{background:var(--xl-mint);box-shadow:inset 3px 0 var(--xl-green);color:#075c2d}.pytask-state{display:grid;place-items:center;width:29px;height:29px;border-radius:8px;background:#edf1ef;color:#617168;font-size:11px;font-weight:900}.pytask.is-active .pytask-state{background:var(--xl-green);color:#fff}.pytask strong,.pytask small{display:block}.pytask strong{font-size:12px;line-height:1.28}.pytask small{margin-top:2px;color:#829087;font-size:9.5px}
.pymain{height:100%;min-width:0;padding:14px;overflow:auto}.pyhero{display:grid;grid-template-columns:1fr auto;align-items:center;gap:14px;margin-bottom:12px;padding:14px 18px;border:1px solid var(--xl-line);border-radius:15px;background:#fff;box-shadow:0 8px 28px #173a280b}.pyeyebrow{margin:0;text-transform:uppercase;letter-spacing:.1em;color:var(--xl-green);font-size:10px;font-weight:900}.pyhero h1{margin:4px 0 3px;font-size:clamp(21px,2vw,29px);line-height:1.12}.pyhero p:last-child{margin:0;color:var(--xl-muted);font-size:13px}.pypoints{display:flex;flex-direction:column;align-items:center;justify-content:center;width:62px;height:62px;border-radius:15px;background:var(--xl-mint)}.pypoints strong{color:var(--xl-green);font-size:23px}.pypoints span{font-size:9px;color:var(--xl-muted)}
.excel-grid{display:grid;grid-template-columns:minmax(230px,.85fr) minmax(300px,1fr) minmax(300px,1.1fr);gap:12px;min-height:calc(100% - 106px)}.pypanel{min-width:0;padding:16px;border:1px solid var(--xl-line);border-radius:15px;background:#fff;box-shadow:0 10px 28px #173a280b;overflow:auto}.pypanel-title{display:flex;align-items:center;gap:10px;margin-bottom:15px;padding-bottom:12px;border-bottom:1px solid var(--xl-line)}.pypanel-title>span{display:grid;place-items:center;flex:0 0 34px;width:34px;height:34px;border-radius:10px;background:var(--xl-mint);color:var(--xl-green);font-weight:950}.pypanel-title h2,.pypanel-title p{margin:0}.pypanel-title h2{font-size:17px}.pypanel-title p{margin-top:2px;color:var(--xl-muted);font-size:10px;text-transform:uppercase;letter-spacing:.06em}.pyprose{color:#35443c;font-size:13px;line-height:1.58}.pyprose p{margin:0 0 14px}.pyhints{margin-top:14px;padding:10px 12px;border-radius:10px;background:#fff7df;color:#725000;font-size:12px}.pyhints summary{font-weight:800;cursor:pointer}.pyhints ol{margin:9px 0 0;padding-left:18px}.pymuted{color:#8a968f}.is-error{color:var(--xl-red)!important}
.resource-list{display:grid;gap:7px}.resource-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:5px}.resource-actions{display:grid;gap:4px}.resource-actions>button{padding:6px 8px;border:1px solid #a9c7b7;border-radius:8px;background:#eef8f2;color:#075c2d;font-size:9px;font-weight:850;cursor:pointer}.resource-actions>button:hover{border-color:var(--xl-green);background:#dcf2e5}.resource-card{display:grid;grid-template-columns:30px 1fr;align-items:center;gap:8px;padding:9px;border:1px solid var(--xl-line);border-radius:10px;color:var(--xl-ink)!important;text-decoration:none!important}.resource-card:hover{border-color:#8cbca2;background:#f4fbf7}.resource-card>span{display:grid;place-items:center;width:28px;height:28px;border-radius:8px;background:var(--xl-mint);color:var(--xl-green);font-weight:950}.resource-card strong,.resource-card small{display:block;overflow:hidden;text-overflow:ellipsis}.resource-card strong{font-size:11px}.resource-card small{margin-top:2px;color:var(--xl-muted);font-size:9.5px}
.file-drop{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:150px;padding:18px;border:2px dashed #98bca9;border-radius:14px;background:#f4faf7;text-align:center;cursor:pointer;transition:.18s}.file-drop:hover,.file-drop.is-dragging{border-color:var(--xl-green);background:#e4f5eb;transform:translateY(-1px)}.file-drop strong{font-size:15px}.file-drop span{margin:5px 0;color:var(--xl-green);font-size:12px}.file-drop small{color:var(--xl-muted);font-size:10px}.web-editor-callout{display:flex;align-items:center;justify-content:space-between;gap:9px;margin-top:9px;padding:10px;border:1px solid #b5d8c4;border-radius:11px;background:#eaf7ef}.web-editor-callout strong,.web-editor-callout span{display:block}.web-editor-callout strong{font-size:11px}.web-editor-callout span{margin-top:2px;color:#557062;font-size:9px}.workbook-meta{margin:10px 0;padding:11px;border-radius:11px;background:#f7faf8;font-size:12px}.workbook-meta p{margin:0}.workbook-ok{display:grid;grid-template-columns:30px 1fr;align-items:center;gap:8px}.workbook-ok>span{display:grid;place-items:center;width:28px;height:28px;border-radius:50%;background:#d8f3e3;color:var(--xl-green);font-weight:950}.workbook-ok strong,.workbook-ok small{display:block}.workbook-ok small{margin-top:2px;color:var(--xl-muted)}.sheet-chips{display:flex;flex-wrap:wrap;gap:4px;margin-top:9px}.sheet-chips span{padding:3px 7px;border-radius:999px;background:#e9eeeb;color:#536158;font-size:9px}.pyactions{display:flex;gap:8px}.pyactions .pybutton{flex:1}.privacy-note{margin:10px 0 0;color:var(--xl-muted);font-size:9.5px;line-height:1.4}
.pytabs{display:flex;gap:4px;margin:-4px -4px 14px;padding-bottom:8px;border-bottom:1px solid var(--xl-line)}.pytabs button{padding:8px 9px;border:0;border-bottom:2px solid transparent;background:transparent;color:var(--xl-muted);font-size:11px;font-weight:800;cursor:pointer}.pytabs button.is-active{border-color:var(--xl-green);color:var(--xl-green)}.pytab-panel{display:none}.pytab-panel.is-active{display:block}.check-summary{display:flex;align-items:center;gap:11px;margin-bottom:10px;padding:11px;border-radius:11px;background:#fff2d6;color:#785300}.check-summary.is-pass{background:#dff5e8;color:#075f30}.check-summary>strong{font-size:24px}.check-summary b,.check-summary span{display:block}.check-summary span{font-size:10px}.check-row{display:grid;grid-template-columns:27px 1fr;gap:8px;margin:6px 0;padding:9px;border:1px solid var(--xl-line);border-radius:9px}.check-row>span{display:grid;place-items:center;width:25px;height:25px;border-radius:50%;background:#ffe6e8;color:var(--xl-red);font-weight:950}.check-row.is-pass>span{background:#dff5e8;color:var(--xl-green)}.check-row strong,.check-row small{display:block}.check-row strong{font-size:11px}.check-row small{margin-top:2px;color:var(--xl-muted);font-size:9.5px}.oral-progress,.oral-nav{display:flex;align-items:center;justify-content:space-between;gap:8px}.oral-progress{color:var(--xl-muted);font-size:10px}.oral-panel h3{margin:18px 0;font-size:19px;line-height:1.35}.oral-panel details{padding:10px;border-radius:9px;background:#f2f6f3;font-size:11px}.oral-panel details summary{font-weight:800;cursor:pointer}.oral-rating{display:grid;gap:5px;margin:10px 0}.oral-rating button,.oral-nav button{padding:8px;border:1px solid var(--xl-line);border-radius:8px;background:#fff;text-align:left;cursor:pointer}.oral-rating button.is-active{border-color:var(--xl-green);background:var(--xl-mint);color:#075c2d;font-weight:800}.oral-nav button{padding:7px 10px}.solution-panel{padding:12px;border-left:3px solid var(--xl-green);border-radius:0 10px 10px 0;background:#f4faf7;font-size:12px;line-height:1.55}.solution-panel h3{margin:0 0 7px}.solution-panel p{margin:0}.solution-panel+.resource-list{margin-top:12px}
.pytoast{position:fixed;right:18px;bottom:18px;z-index:2147483640;max-width:350px;padding:11px 15px;border-radius:10px;background:#163b28;color:#fff;box-shadow:0 12px 34px #0004;opacity:0;transform:translateY(10px);transition:.2s;pointer-events:none}.pytoast.is-visible{opacity:1;transform:none}.pytoast.is-warning{background:#8c5f00}
.sheet-modal[hidden]{display:none}.sheet-modal{position:fixed;inset:0;z-index:2147483500;display:grid;grid-template-rows:58px minmax(0,1fr);background:#fff}.sheet-modal>header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 13px;background:linear-gradient(110deg,var(--xl-dark),#116837);color:#fff}.sheet-modal>header strong,.sheet-modal>header small{display:block}.sheet-modal>header small{margin-top:2px;color:#bfe2ce;font-size:9px}.sheet-modal>header>div:last-child{display:flex;align-items:center;gap:6px}.sheet-modal>header button{padding:7px 9px;border:1px solid #ffffff42;border-radius:7px;background:#ffffff12;color:#fff;font-size:10px;font-weight:800;cursor:pointer}.sheet-modal>header button.primary{background:#fff;color:var(--xl-green)}#editor-close{width:34px;font-size:18px!important}.sheet-modal #web-sheet{position:relative;min-width:0;min-height:0;height:calc(100dvh - 58px);overflow:hidden}.sheet-modal .x-spreadsheet{font-family:Inter,ui-sans-serif,system-ui,sans-serif}.sheet-modal .x-spreadsheet-sheet{height:calc(100dvh - 98px)!important}
.pygate{display:grid;place-items:center;min-height:70vh;padding:42px 24px;background:#fff}.pygate-card{display:grid;gap:10px;width:min(390px,100%);padding:10px;background:transparent;text-align:left}.pylogo-image{display:block;width:72px;height:72px;margin:0 auto 20px}.pygate-card h1{margin:0 0 20px;text-align:center;font-size:34px;line-height:1.15}.pygate-card label{font-size:11px;font-weight:800}.pygate-card input{width:100%;padding:12px;border:1px solid var(--xl-line);border-radius:9px;background:#f7faf8}.pygate-card .pybutton{margin-top:8px}.pygate-message{width:min(560px,100%);text-align:center}.pygate-message h1{font-size:40px}
@media(max-width:1180px){.excel-grid{grid-template-columns:1fr 1fr}.pyresult-panel{grid-column:1/-1}.pypanel{min-height:390px}}
@media(max-width:820px){.pyworkspace{display:block;height:calc(100dvh - 64px);overflow:auto}.pysidebar{height:auto;max-height:250px;border-right:0;border-bottom:1px solid var(--xl-line)}.pymain{height:auto;overflow:visible}.excel-grid{grid-template-columns:1fr}.pyresult-panel{grid-column:auto}.pytop-actions .pystudent{display:none}}
@media(max-width:520px){.pytopbar{height:56px;padding:7px 10px}.pybrand-mark{width:39px;height:39px}.pybrand small,.pymode{display:none}.pyworkspace{height:calc(100dvh - 56px)}.pymain{padding:8px}.pyhero{padding:11px}.pypoints{display:none}.pypanel{padding:12px}.pyfilters{grid-template-columns:1fr}.pyactions{flex-direction:column}.web-editor-callout{align-items:stretch;flex-direction:column}.sheet-modal{grid-template-rows:auto minmax(0,1fr)}.sheet-modal>header{align-items:flex-start;flex-direction:column}.sheet-modal>header>div:last-child{width:100%;overflow:auto}.sheet-modal #web-sheet{height:calc(100dvh - 105px)}}
@media(prefers-reduced-motion:reduce){*{transition:none!important}}
.pybrand-logo{display:block;flex:0 0 42px;width:42px;height:42px}
.pygate{min-height:calc(100dvh - 215px);padding:48px 20px;background:#fff;color:#14233c}.pygate-card{width:min(440px,100%);gap:0;padding:0}.pylogo-image{width:76px;height:76px;margin:0 auto 30px}.pygate-card h1{margin:0;text-align:center;font-size:clamp(30px,3.5vw,40px);line-height:1.15;font-weight:800;letter-spacing:-.025em}.pygate-subtitle{margin:14px 0 26px;color:#6a7890;text-align:center;font-size:17px;line-height:1.45}.pygate-card label{margin:0 0 8px;color:#13233a;font-size:12px;font-weight:800}.pygate-card input{height:56px;margin:0 0 16px;padding:0 14px;border:1px solid #d5e2f6;border-radius:10px;background:#edf4ff;color:#14233c;font-size:16px;outline:none}.pygate-card input:focus{border-color:#2f6be4;box-shadow:0 0 0 3px #2f6be426}.pygate-card .pybutton{width:100%;height:48px;margin:0;border-radius:10px;background:#2f6be4;color:#fff;font-size:16px;font-weight:700}.pygate-card .pybutton:hover{background:#245bd0}.pygate-message{width:min(600px,100%)}.pygate-message h1{font-size:clamp(32px,4vw,42px)}
@media(max-width:520px){.pygate{min-height:calc(100dvh - 160px);padding:36px 22px}.pylogo-image{margin-bottom:24px}.pygate-subtitle{font-size:15px}}
