*{box-sizing:border-box}
:root{font-family:"Segoe UI",Arial,sans-serif;font-size:12px;color:#273c33;background:#f2f6f5;--accent:#087f78;--border:#d9e5df;--muted:#52695d}
html,body{height:100%;overflow:hidden}
body{margin:0}
main{height:100dvh;width:100%;padding:8px;display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-rows:auto minmax(0,1fr);gap:8px}
header{align-self:center;min-width:0}
header small,header p{display:none}
h1{font-size:18px;line-height:1.4;margin:0;font-weight:650}
a{color:var(--accent)}
p{line-height:1.5}
.attribution{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:2px 12px;font-size:12px;line-height:1.5;color:var(--muted)}
.attribution strong{font-weight:600}
.drawing-modes{display:flex;flex-wrap:wrap;gap:6px}
.drawing-modes a{display:inline-flex;align-items:center;justify-content:center;min-height:34px;padding:7px 12px;border:1px solid #bad6cd;border-radius:6px;background:white;color:var(--accent);font-weight:600;text-decoration:none}
.drawing-modes a:hover{background:#edf7f3;border-color:#80b7a5}
.drawing-modes a[aria-current="page"]{background:var(--accent);border-color:var(--accent);color:white}
.drawing-modes a:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.card{grid-column:1/-1;min-height:0;display:grid;grid-template-columns:336px minmax(0,1fr);grid-template-rows:minmax(0,1fr) auto;border:1px solid var(--border);border-radius:8px;background:white;overflow:hidden}
.controls{grid-column:1;grid-row:1/-1;min-height:0;overflow:auto;scrollbar-width:thin;scrollbar-gutter:stable;background:#f5f9f7;border-right:1px solid var(--border)}
.toolbar{display:flex;flex-direction:column;gap:8px;padding:10px}
.tool-group{min-width:0;margin:0;padding:10px;background:white;border:1px solid var(--border);border-radius:7px}
.group-title{font-size:13px;font-weight:650;line-height:1.4;margin:0 0 8px;color:#294c3c}
.controls :is(button,input,select),#pointNameDialog :is(button,input),#pointContextMenu button{font:inherit;font-size:12px}
.controls button,#pointNameDialog button,#pointContextMenu button{min-height:32px;padding:6px 9px;border:1px solid #bad6cd;border-radius:5px;background:white;color:var(--accent);line-height:1.4;cursor:pointer;white-space:nowrap}
.controls button:hover:not(:disabled),#pointNameDialog button:hover:not(:disabled),#pointContextMenu button:hover:not(:disabled){background:#edf7f3;border-color:#80b7a5}
.controls button:disabled{opacity:.45;cursor:default}
.controls :is(button,input,select,summary):focus-visible,#pointNameDialog :is(button,input):focus-visible,#pointContextMenu button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.controls .primary,#pointNameDialog button[type=submit],.controls button[aria-pressed="true"]{background:var(--accent);border-color:var(--accent);color:white;font-weight:600}
.controls .primary:hover:not(:disabled),#pointNameDialog button[type=submit]:hover,.controls button[aria-pressed="true"]:hover:not(:disabled){background:#066c65;border-color:#066c65}
.controls :is(input[type=number],select){height:32px;min-width:0;width:100%;padding:5px 7px;border:1px solid #c4d6cc;border-radius:5px;background:white;color:#273c33;line-height:1.4}
.controls label{font-size:12px;color:#405c4e}
.field-label{display:block;margin:0 0 4px;line-height:1.4}
.template-picker{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px}
.polygon-row{display:grid;grid-template-columns:auto 52px minmax(0,1fr);align-items:center;gap:6px;margin-top:8px}
.polygon-row label{white-space:nowrap}
.selection-actions{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px}
.selection-actions button{padding-inline:4px}
.tool-hint{font-size:12px;line-height:1.5;color:var(--muted);margin:7px 0 0}
kbd{font:inherit;white-space:nowrap;font-weight:600;color:#294c3c}
.tool-details{padding:0}
.tool-details>summary{position:relative;display:flex;align-items:center;gap:8px;min-height:40px;padding:10px;cursor:pointer;font-size:13px;font-weight:600;color:#294c3c;list-style:none;line-height:1.5}
.tool-details>summary::-webkit-details-marker{display:none}
.tool-details>summary::after{content:"";flex:none;width:7px;height:7px;margin-left:auto;margin-right:3px;border-right:1.5px solid var(--muted);border-bottom:1.5px solid var(--muted);transform:rotate(-45deg);transition:transform .15s}
.tool-details[open]>summary::after{transform:rotate(45deg)}
.tool-details[open]>summary{border-bottom:1px solid var(--border)}
.tool-details>summary:hover{background:#f1f8f4;border-radius:7px}
.geometry-marks{display:flex;flex-direction:column;gap:8px;padding:8px}
.mark-panel{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));align-items:end;gap:8px 6px;padding:8px;background:#f7faf8;border:1px solid #e1eae4;border-radius:5px;min-width:0}
.mark-panel h3{grid-column:1/-1;font-size:12px;line-height:1.5;font-weight:650;margin:0}
.mark-panel label{display:flex;flex-direction:column;gap:4px;min-width:0;line-height:1.4}
.mark-panel .mark-style{grid-column:1/-1}
.mark-panel button,.mark-panel .tool-hint{grid-column:1/-1;width:100%;margin:0}
.controls .subtle-danger{color:#97533d;border-color:#e3d4ca}
.controls .subtle-danger:hover:not(:disabled){background:#fdf4ef;border-color:#ca9a81}
.export-tools{border-color:#bad6cd}
.export-tools>select{display:block}
.copy-action{display:block;width:100%;margin-top:8px}
.download-actions,.file-action-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px}
.download-actions{margin-top:6px}
.checkbox-label{display:flex;align-items:center;gap:7px;min-height:24px;margin-top:7px;line-height:1.4;cursor:pointer}
.checkbox-label input{width:14px;height:14px;margin:0;accent-color:var(--accent)}
.details-content{padding:10px}
.file-actions .tool-hint{margin:5px 0 10px}
.file-actions .tool-hint:last-of-type{margin-bottom:0}
.help-tools p{font-size:12px;margin:0 0 10px;color:var(--muted)}
.help-tools p:last-child{margin-bottom:0}
.help-tools strong{font-weight:600;color:#294c3c}
/* The grid owns the viewport size; GeoGebra also writes inline dimensions. */
#ggb-element{grid-column:2;grid-row:1;min-width:0;min-height:0;width:100%!important;height:100%!important;overflow:hidden}
#status{grid-column:2;grid-row:2;font-size:12px;line-height:1.5;margin:0;padding:5px 10px;border-top:1px solid var(--border);max-height:48px;overflow:auto;color:var(--muted)}
#status.error{color:#a33927}
#missing{grid-column:2;grid-row:1;min-height:0;overflow:auto;padding:20px;z-index:1;background:#fffcf5}
#missing h2{font-size:18px}
[hidden]{display:none!important}
#pointNameDialog{width:min(360px,calc(100vw - 24px));padding:18px;border:1px solid #bad6cd;border-radius:9px;color:#273c33;font:12px "Segoe UI",Arial,sans-serif}
#pointNameDialog::backdrop{background:#173f3438}
#pointNameDialog form{display:grid;gap:12px}
#pointNameDialog h2{font-size:16px;margin:0}
#pointNameDialog label{display:grid;gap:5px}
#pointNameInput{width:100%;min-height:34px;padding:7px;border:1px solid #bad6cd;border-radius:5px}
#pointNameDialog p{margin:0;font-size:12px;line-height:1.5}
.dialog-actions{display:flex;justify-content:flex-end;gap:6px}
#pointContextMenu{position:fixed;z-index:10000;min-width:140px;padding:4px;background:white;border:1px solid #bad6cd;border-radius:6px;box-shadow:0 4px 16px #0003}
#pointContextMenu button{width:100%;text-align:left;border:0}
@media(max-width:1100px){
 .card{grid-template-columns:316px minmax(0,1fr)}
 .attribution{max-width:550px}
}
@media(max-width:760px){
 main{grid-template-columns:minmax(0,1fr);grid-template-rows:auto auto minmax(0,1fr);gap:6px;padding:6px}
 .attribution{justify-content:flex-start;max-width:none}
 .card{grid-template-columns:minmax(0,1fr);grid-template-rows:minmax(0,38%) minmax(0,1fr) auto}
 .controls{grid-column:1;grid-row:1;border-right:0;border-bottom:1px solid var(--border)}
 .toolbar{padding:8px;gap:8px}
 #ggb-element,#missing{grid-column:1;grid-row:2}
 #status{grid-column:1;grid-row:3}
}
@media(prefers-reduced-motion:reduce){.tool-details>summary::after{transition:none}}
