@import url('https://fonts.googleapis.com/css2?family=Sora:wght@400;500;600;700&display=swap');
:root{color-scheme:light;--canvas:#F7F8F6;--surface:#FDFEFE;--ink:#163E63;--muted:#2F6A9A;--blue:#A7CFF2;--line:#D8E5ED;--grid:#C9DDEB;--inset:#EDF4F8;--shadow:0 12px 35px #163E630A;--danger:#8E3C43;--button-ink:#223D53;font-family:Sora,system-ui,-apple-system,sans-serif;background:var(--canvas);color:var(--ink)}
:root[data-theme=dark]{color-scheme:dark;--canvas:#171C22;--surface:#222A33;--ink:#E7EDF3;--muted:#BDCAD5;--line:#394754;--grid:#354755;--inset:#1C232B;--shadow:0 12px 35px #0003;--danger:#FFB6BA}
*{box-sizing:border-box}body{margin:0;background:var(--canvas)}[hidden]{display:none!important}a{color:inherit}button,input,select,textarea{font:inherit}button,a,input,select,textarea{-webkit-tap-highlight-color:transparent}button{min-height:44px;border:1px solid var(--line);border-radius:14px;padding:10px 16px;background:var(--surface);color:var(--ink);cursor:pointer;touch-action:manipulation;font-size:var(--ui-meta,14px);font-weight:500}button:hover{border-color:var(--blue)}button:disabled{opacity:.4;cursor:default}button:focus-visible,a:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible,summary:focus-visible,.map-viewport:focus-visible{outline:3px solid var(--blue);outline-offset:3px}.primary{display:flex;align-items:center;justify-content:center;min-height:54px;background:var(--blue);color:var(--button-ink);border:0;border-radius:18px;padding:15px 22px;font-weight:600;font-size:14px;text-decoration:none;box-shadow:0 5px 14px #163E6308}.quiet{border-color:transparent;background:transparent}.small{font-size:var(--ui-meta,14px);padding:10px 13px}.shell{max-width:900px;margin:auto;padding:0 24px env(safe-area-inset-bottom)}.mast{height:88px;display:flex;align-items:center;gap:18px;border-bottom:1px solid var(--line);margin-bottom:36px}.brand{display:flex;align-items:center;gap:7px;text-decoration:none;font-size:27px;letter-spacing:-1.8px;font-weight:600}.brand img{object-fit:contain}.owner-label{font-size:var(--ui-meta,14px);letter-spacing:2px;color:var(--muted)}.mast>button{margin-left:auto}.eyebrow{font-size:var(--ui-meta,14px);letter-spacing:2px;line-height:1.5;margin:0 0 12px;color:var(--muted);font-weight:600}h1,h2,p{margin-top:0}h1{font-size:clamp(28px,5vw,38px);font-weight:500;letter-spacing:-1.4px;margin-bottom:7px}h2{font-size:23px;line-height:1.3;letter-spacing:-.7px;font-weight:500;margin-bottom:9px}p{font-size:var(--ui-meta,14px);line-height:1.65}.title-row{display:flex;align-items:center;justify-content:space-between;gap:12px}.subline{font-size:var(--ui-meta,14px);color:var(--muted);line-height:1.6}.save-row{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:19px 0 18px}.save-row p{font-size:var(--ui-meta,14px);margin:0;max-width:65%;line-height:1.5}.save-row p:before{content:'';display:inline-block;width:6px;height:6px;background:var(--blue);border-radius:50%;margin-right:7px}.save-row p[data-state=warning]:before{background:#CB855D}.view-tabs{display:flex;border-bottom:1px solid var(--line);margin-bottom:27px;gap:18px}.view-tabs button{border:0;border-radius:0;background:transparent;font-size:var(--ui-meta,14px);padding:10px 0 16px;position:relative;color:var(--muted)}.view-tabs button[aria-current=page]{color:var(--ink)}.view-tabs button[aria-current=page]:after{content:'';height:3px;border-radius:8px;background:var(--blue);position:absolute;bottom:-2px;left:0;right:0}.view-tabs button:last-child{margin-left:auto}.view-tabs span{font-size:var(--ui-meta,14px);margin-left:4px}.map-heading p{font-size:var(--ui-meta,14px);line-height:1.6;color:var(--muted);margin-bottom:18px;min-height:38px}.map-wrap{border:1px solid var(--line);border-radius:24px;background:var(--surface);box-shadow:var(--shadow);overflow:hidden}.map-tools{display:flex;align-items:center;justify-content:space-between;padding:7px 12px 7px 18px;border-bottom:1px solid var(--line)}.map-tools>span{font-size:var(--ui-meta,14px);color:var(--muted)}.zoom-controls{display:flex;align-items:center;gap:6px}.zoom-controls button{padding:0;width:44px;height:44px;border:0;background:transparent;font-size:23px}.zoom-controls output{font-size:var(--ui-meta,14px);min-width:24px;text-align:center}.map-viewport{height:min(51dvh,450px);min-height:240px;overflow:auto;overscroll-behavior:contain;background:var(--inset)}.map-board{width:100%;position:relative;aspect-ratio:80/120;min-height:250px;touch-action:pan-x pan-y}.plot{position:absolute;inset:24px;border:1px solid var(--line);border-radius:3px;background-color:var(--surface);background-image:linear-gradient(to right,var(--grid) 1px,transparent 1px),linear-gradient(to bottom,var(--grid) 1px,transparent 1px);background-size:6.25% 4.1667%}.plot.placing{cursor:crosshair;box-shadow:0 0 0 3px var(--blue)}.map-foot{display:flex;justify-content:space-between;gap:12px;font-size:var(--ui-meta,14px);color:var(--muted);padding:12px 16px}.empty-map{position:absolute;inset:0;display:flex;flex-direction:column;gap:14px;align-items:center;justify-content:center;text-align:center;pointer-events:none;color:var(--muted)}.empty-map svg{color:var(--blue)}.empty-map span{font-size:var(--ui-meta,14px);line-height:1.6;background:var(--surface);padding:6px 10px}.pin{position:absolute;transform:translate(-50%,-50%);width:44px;height:44px;padding:3px;border:0;background:transparent;z-index:1;border-radius:50%}.pin span{display:flex;width:38px;height:38px;align-items:center;justify-content:center;background:var(--blue);color:var(--button-ink);border:3px solid var(--surface);border-radius:50%;font-size:var(--ui-meta,14px);font-weight:600;box-shadow:0 3px 9px #163E6330}.pin.entrance{z-index:2}.pin.entrance span{background:var(--ink);color:var(--surface);border-radius:13px;font-size:20px}.pin.selected span{box-shadow:0 0 0 3px var(--ink)}.map-actions{display:flex;gap:12px;margin-top:22px;flex-wrap:wrap}.map-actions>.primary{flex:1;min-width:170px}.map-disclaimer{font-size:var(--ui-meta,14px);color:var(--muted);margin:14px 4px 0;line-height:1.7}.notice{padding:15px 16px;border:1px solid var(--line);border-left:3px solid var(--blue);border-radius:12px;background:var(--surface);font-size:var(--ui-meta,14px);line-height:1.6;margin-bottom:18px}.notice p{margin:8px 0;font-size:var(--ui-meta,14px)}.section-heading{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:20px}.section-heading h2{margin:0}.search-label{font-size:var(--ui-meta,14px)}.machine-list{margin-top:18px}.machine-row{display:flex;width:100%;padding:17px 0;border:0;border-bottom:1px solid var(--line);border-radius:0;gap:16px;align-items:center;text-align:left;background:transparent}.machine-row>.badge{width:40px;height:40px;border-radius:50%;display:grid;place-items:center;background:var(--blue);color:var(--button-ink);font-size:var(--ui-meta,14px);flex-shrink:0}.machine-row .words{flex:1;min-width:0;overflow-wrap:anywhere}.machine-row strong{display:block;font-size:14px;font-weight:500}.machine-row small{display:block;margin-top:5px;font-size:var(--ui-meta,14px);color:var(--muted);font-weight:400;line-height:1.5}.machine-row .arrow{font-size:23px}.empty-list{padding:35px 0;color:var(--muted);text-align:center}.review{max-width:470px;margin:40px auto;text-align:center}.review h2{font-size:36px;letter-spacing:-1.5px}.review-count{margin:30px 0;display:flex;flex-direction:column;gap:4px}.review-count strong{font-size:76px;font-weight:500;letter-spacing:-5px;color:var(--blue);line-height:1.1}.review-count span{font-size:var(--ui-meta,14px);color:var(--muted)}.review-checks{list-style:none;padding:0;text-align:left;margin:25px 0}.review-checks li{border-bottom:1px solid var(--line);padding:14px 0;font-size:var(--ui-meta,14px);display:flex;gap:13px;align-items:flex-start;line-height:1.6}.review-checks li span:first-child{color:var(--muted)}.review>.primary{width:100%}.export-button{background:transparent;border-color:transparent;width:100%;margin:8px 0 18px}.review details{margin-top:32px;font-size:var(--ui-meta,14px);text-align:left}.review summary{padding:12px 0;cursor:pointer}.review details p{font-size:var(--ui-meta,14px);color:var(--muted);margin-top:12px}.file-button{display:block;border:1px solid var(--line);border-radius:12px;padding:12px;cursor:pointer}.file-button input{margin-top:10px;font-size:var(--ui-meta,14px);border:0;padding:4px;max-width:100%}footer{display:flex;align-items:center;justify-content:space-between;gap:16px;border-top:1px solid var(--line);margin-top:40px;padding:25px 0 90px;font-size:var(--ui-meta,14px);color:var(--muted)}footer a{min-height:44px;display:flex;align-items:center;text-decoration:none}.gate{max-width:520px;margin:70px 0}.gate h1{font-size:52px;line-height:1.1;letter-spacing:-2px;margin:24px 0}.gate>p:not(.eyebrow){margin:28px 0;color:var(--muted)}.gate>a,.gate>button{max-width:320px;margin-top:15px}.skip{position:absolute;top:-100px}.skip:focus{top:10px;z-index:100;background:var(--surface);padding:15px}dialog{width:min(100% - 28px,480px);max-height:calc(100dvh - 28px);border:1px solid var(--line);border-radius:26px;background:var(--surface);color:var(--ink);padding:26px;box-shadow:0 24px 80px #0003;overflow-y:auto;overscroll-behavior:contain}dialog::backdrop{background:#10233770;backdrop-filter:blur(5px)}.dialog-top{display:flex;justify-content:space-between;align-items:center;gap:15px;margin-bottom:16px}.dialog-top .eyebrow{margin:0}.close{font-size:27px;padding:0;width:44px;height:44px;border:0;background:var(--inset);border-radius:50%;flex-shrink:0}dialog h2{font-size:30px;margin-bottom:12px}label{display:block;font-size:var(--ui-meta,14px);line-height:1.6;margin-top:22px;margin-bottom:8px}label span{color:var(--muted);font-size:var(--ui-meta,14px)}input,textarea,select{display:block;width:100%;padding:13px 14px;background:var(--inset);color:var(--ink);border:1px solid var(--line);border-radius:12px;min-height:48px;font-size:16px;line-height:1.5}input::placeholder,textarea::placeholder{color:var(--muted);opacity:.8}textarea{resize:vertical}dialog .primary{width:100%;margin-top:23px}.button-row{display:flex;gap:8px;flex-wrap:wrap}.button-row>button{flex:1}.edit-actions{margin-top:12px}.danger{color:var(--danger)}.form-hint{font-size:var(--ui-meta,14px);line-height:1.7;color:var(--muted);margin:11px 0 0}.form-error{font-size:var(--ui-meta,14px);color:var(--danger);margin:10px 0}.input-pair{display:flex;gap:15px}.input-pair>label{flex:1;min-width:0}.input-pair input{margin-top:8px}.check-label{display:flex;align-items:center;gap:12px}.check-label input{width:22px;height:22px;min-height:22px;accent-color:var(--blue)}.undo-bar{position:fixed;bottom:max(14px,env(safe-area-inset-bottom));left:50%;transform:translateX(-50%);width:max-content;max-width:calc(100% - 24px);display:flex;align-items:center;gap:8px;background:var(--ink);color:var(--surface);border-radius:18px;padding:6px 8px 6px 15px;font-size:var(--ui-meta,14px);box-shadow:0 8px 35px #0003;z-index:8}.undo-bar span{overflow-wrap:anywhere;max-width:200px}.undo-bar button{background:transparent;color:inherit;border:0;padding:8px;font-size:var(--ui-meta,14px)}.undo-bar button:last-child{font-size:21px;width:40px}.undo-bar button:focus-visible{outline-color:var(--surface)}
@media(min-width:700px){.shell{padding:0 44px}.mast{margin-bottom:46px}.map-board{max-width:none}.map-viewport{height:460px}.map-heading{display:flex;justify-content:space-between}.map-heading p{min-height:0}.map-actions>.primary{flex:none;min-width:240px}.title-row .quiet{margin-right:-14px}.review h2{font-size:43px}}
@media(max-width:370px){.shell{padding-left:17px;padding-right:17px}.mast{height:74px;margin-bottom:28px}.owner-label{letter-spacing:1.3px}.view-tabs{gap:16px}h1{font-size:28px}.map-tools{padding-left:12px}.map-foot{font-size:var(--ui-meta,14px);padding:12px}.save-row{gap:6px}.save-row button{max-width:112px;font-size:var(--ui-meta,14px)}.map-actions{gap:5px}dialog{padding:20px}.gate h1{font-size:43px}}
@media(prefers-reduced-motion:no-preference){button{transition:background .15s,border-color .15s}.pin{animation:pin-in .2s ease-out}@keyframes pin-in{from{opacity:0}to{opacity:1}}}

.map-board{min-height:0;margin:0 auto}/* Pins stay fully legible during autosave and theme changes. */

.pin{animation:none}
.map-actions{position:sticky;bottom:0;background:var(--canvas);padding:12px 0 max(12px,env(safe-area-inset-bottom));z-index:3}
.undo-bar{bottom:max(86px,calc(env(safe-area-inset-bottom) + 72px))}
