:root{--brand:#1e6b42;--brand-bright:#30d158;--text:#0b1a12;--text-muted:rgba(60,60,67,0.62);--bg:#ffffff;--surface:#f2f2f7;--border:#e5e5ea;--radius:14px;--max-width:960px;--tok-num:#b4690e;--focus:rgba(30,107,66,0.18)}*{box-sizing:border-box}body,html{margin:0;padding:0;background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;line-height:1.55;-webkit-font-smoothing:antialiased}a{color:var(--brand);text-decoration:none}a:hover{text-decoration:underline}.container{max-width:var(--max-width);margin:0 auto;padding:0 20px}.btn{display:inline-block;background:var(--brand);color:#fff;padding:12px 22px;border-radius:999px;font-weight:600;border:none;cursor:pointer;font-size:15px}.btn:hover{background:#175634;text-decoration:none}.btn.btn-secondary{background:var(--surface);color:var(--text);border:1px solid var(--border)}.btn.btn-secondary:hover{background:var(--border);color:var(--text)}.card{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);padding:26px}code,pre{font-family:ui-monospace,SF Mono,Menlo,Monaco,monospace}pre{background:#0b1a12;color:#eafff1;padding:18px;border-radius:var(--radius);overflow-x:auto;font-size:13px}code{background:var(--surface);padding:2px 6px;border-radius:6px;font-size:.9em}pre code{background:none;padding:0}.code-card{max-width:600px;margin:0 auto;border:1px solid var(--border);border-radius:16px;background:var(--surface);overflow:hidden;box-shadow:0 14px 40px rgba(0,0,0,.16)}.code-card__bar{display:flex;align-items:center;gap:7px;padding:12px 16px;border-bottom:1px solid var(--border)}.code-card__bar .dot{width:11px;height:11px;border-radius:50%;display:inline-block}.code-card__bar .dot--r{background:#ff5f57}.code-card__bar .dot--y{background:#febc2e}.code-card__bar .dot--g{background:#28c840}.code-card__url{margin-left:auto;font-size:12px;color:var(--text-muted)}.code-card__body,.code-card__url{font-family:ui-monospace,SF Mono,Menlo,Monaco,monospace}.code-card__body{margin:0;padding:20px 22px;background:transparent;color:var(--text);border-radius:0;font-size:13px;line-height:1.75;overflow-x:auto}.code-card__method{color:var(--brand);font-weight:700}.code-card__status,.tok-key{color:var(--text-muted)}.tok-str{color:var(--brand)}.tok-num{color:var(--tok-num)}.tok-punc{color:var(--text-muted)}.field{margin-bottom:16px}.field>label{display:block;font-size:13px;font-weight:600;margin-bottom:6px;color:var(--text)}.field .hint{font-size:12px;color:var(--text-muted);margin:6px 0 0}.control{width:100%;padding:11px 13px;border-radius:11px;border:1px solid var(--border);background:var(--surface);color:var(--text);font-size:15px;font-family:inherit;transition:border-color .15s,box-shadow .15s}.control::placeholder{color:var(--text-muted)}.control:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--focus)}textarea.control{resize:vertical;min-height:78px}.row{display:flex;gap:12px}.row>*{flex:1 1}.row>.grow2{flex:2 1}.segmented{display:inline-flex;background:var(--surface);border:1px solid var(--border);border-radius:999px;padding:4px;gap:2px}.segmented button{border:none;background:transparent;color:var(--text-muted);padding:9px 20px;border-radius:999px;font-weight:600;cursor:pointer;font-size:14px;transition:background .15s,color .15s}.segmented button.active{background:var(--brand);color:#fff}.check-row{display:flex;gap:22px;margin:2px 0 16px}.check-row label{display:inline-flex;align-items:center;gap:8px;font-size:14px;cursor:pointer}.check-row input{width:16px;height:16px;accent-color:var(--brand)}.map-preview{width:100%;height:220px;border-radius:12px;border:1px solid var(--border);display:block;object-fit:cover;margin-bottom:6px}.map-preview--empty{border-style:dashed;background:var(--surface);display:flex;align-items:center;justify-content:center;text-align:center;padding:16px;color:var(--text-muted);font-size:14px}.combobox{position:relative}.combobox__spinner{position:absolute;right:14px;top:12px;color:var(--text-muted);font-size:13px}.combobox__menu{position:absolute;top:calc(100% + 6px);left:0;right:0;z-index:20;background:var(--bg);border:1px solid var(--border);border-radius:12px;box-shadow:0 14px 34px rgba(0,0,0,.22);overflow:hidden auto;max-height:300px}.combobox__option{display:block;width:100%;text-align:left;padding:11px 14px;border:none;border-bottom:1px solid var(--border);background:transparent;color:var(--text);cursor:pointer;font-size:14px}.combobox__option:last-child{border-bottom:none}.combobox__option.active,.combobox__option:hover{background:var(--surface)}.combobox__empty{padding:12px 14px;color:var(--text-muted);font-size:14px}.chosen{justify-content:space-between;gap:12px;padding:12px 14px;border-radius:12px;border:1px solid var(--brand);margin-bottom:10px}.chosen,.op-slot{display:flex;align-items:center;background:var(--surface)}.op-slot{flex-wrap:wrap;gap:8px;padding:10px;border:1px solid var(--border);border-radius:12px;margin-bottom:8px}.op-slot .control{background:var(--bg)}.op-slot .op-day{flex:0 0 128px}.op-times{display:flex;align-items:center;gap:6px;flex:1 1 210px}.op-times .control{flex:1 1;min-width:0}.op-times .op-sep{color:var(--text-muted);font-size:13px}.op-note{flex:1 1 130px}.op-remove{flex:0 0 auto;border:none;background:transparent;color:var(--text-muted);cursor:pointer;font-size:15px;padding:9px 11px;border-radius:9px;line-height:1}.op-remove:hover{color:#e5484d;background:var(--bg)}.op-add{width:100%;border:1px dashed var(--border);background:transparent;color:var(--text);border-radius:12px;padding:12px;cursor:pointer;font-weight:600;font-size:14px;transition:border-color .15s,color .15s}.op-add:hover{border-color:var(--brand);color:var(--brand)}.badge{display:inline-block;font-size:12px;font-weight:700;padding:3px 10px;border-radius:999px;vertical-align:middle}.badge--ok{background:rgba(48,209,88,.16);color:#1e6b42}.badge--warn{background:rgba(255,141,40,.16);color:#b4690e}.badge--danger{background:rgba(229,72,77,.16);color:#c0392b}@media (prefers-color-scheme:dark){.badge--ok{color:#30d158}.badge--warn{color:#ff9230}.badge--danger{color:#ff6b6b}}:root{--admin-topbar-h:56px}.admin-shell{display:flex;flex-direction:column;min-height:100vh}.admin-topbar{position:-webkit-sticky;position:sticky;top:0;z-index:50;display:flex;align-items:center;gap:20px;height:var(--admin-topbar-h);padding:0 20px;background:var(--bg);border-bottom:1px solid var(--border)}.admin-topbar__title{font-weight:700;font-size:15px}.admin-tabs{display:flex;gap:2px;align-self:stretch}.admin-tab{display:inline-flex;align-items:center;padding:0 14px;font-size:14px;font-weight:600;color:var(--text-muted);border-bottom:2px solid transparent}.admin-tab:hover{color:var(--text);text-decoration:none}.admin-tab.active{color:var(--brand);border-bottom-color:var(--brand)}.admin-topbar__back{margin-left:auto;font-size:13px;color:var(--text-muted)}.admin-main{flex:1 1;display:flex;flex-direction:column;min-height:0}.admin-page{width:100%;max-width:1080px;margin:0 auto;padding:32px 20px 80px}.fac-workspace{display:flex;height:calc(100vh - var(--admin-topbar-h));overflow:hidden}.fac-sidebar{width:380px;flex-shrink:0;min-height:0;border-right:1px solid var(--border)}.fac-controls,.fac-sidebar{display:flex;flex-direction:column}.fac-controls{gap:10px;padding:14px 14px 12px;border-bottom:1px solid var(--border)}.fac-controls__row{display:flex;gap:8px}.fac-controls__row .control{flex:1 1;min-width:0}.btn--compact{padding:9px 16px;font-size:14px;flex-shrink:0}.fac-chips{display:flex;flex-wrap:wrap;gap:6px}.chip{border:1px solid var(--border);background:transparent;color:var(--text-muted);border-radius:999px;padding:4px 12px;font-size:12px;font-weight:600;cursor:pointer;transition:background .15s,color .15s,border-color .15s}.chip:hover{color:var(--brand)}.chip.active,.chip:hover{border-color:var(--brand)}.chip.active{background:var(--brand);color:#fff}.fac-count{font-size:12px;color:var(--text-muted)}.fac-list{flex:1 1;min-height:0;overflow-y:auto;padding:8px}.fac-empty{padding:28px 16px;text-align:center;color:var(--text-muted);font-size:14px}.fac-row{display:block;width:100%;padding:10px 12px;margin-bottom:4px;border:1px solid transparent;border-radius:10px;background:transparent;text-align:left;cursor:pointer;color:var(--text)}.fac-row.selected,.fac-row:hover{background:var(--surface)}.fac-row.selected{border-color:var(--brand)}.fac-row__top{display:flex;align-items:center;justify-content:space-between;gap:8px}.fac-row__name{font-weight:600;font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fac-row__meta{display:flex;align-items:center;flex-wrap:wrap;gap:6px;margin-top:2px;font-size:12.5px;color:var(--text-muted)}.fac-row__edit{flex-shrink:0;border:1px solid var(--border);background:var(--bg);color:var(--brand);font-size:12px;font-weight:600;padding:3px 12px;border-radius:999px;cursor:pointer;opacity:0;transition:opacity .12s,border-color .12s}.fac-row.selected .fac-row__edit,.fac-row:focus-visible .fac-row__edit,.fac-row:hover .fac-row__edit{opacity:1}.fac-row__edit:hover{border-color:var(--brand)}.fac-row__review{border:none;background:transparent;color:var(--brand);font-size:12px;font-weight:600;padding:2px 6px;border-radius:999px;cursor:pointer;opacity:0;transition:opacity .12s}.fac-row.selected .fac-row__review,.fac-row:hover .fac-row__review,.fac-row__review:focus-visible{opacity:1}.fac-row__review:hover{text-decoration:underline}.fac-row__review:disabled{opacity:1;cursor:default}.fac-map{position:relative;flex:1 1;min-width:0;background:var(--surface)}.fac-map__missing{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:var(--text-muted);font-size:14px}.mapboxgl-popup .mapboxgl-popup-content{background:var(--bg);color:var(--text);border:1px solid var(--border);border-radius:12px;box-shadow:0 12px 34px rgba(0,0,0,.24);padding:12px 14px;font-family:inherit}.mapboxgl-popup .mapboxgl-popup-close-button{color:var(--text-muted);font-size:16px;right:6px;top:4px}.mapboxgl-popup.mapboxgl-popup-anchor-bottom .mapboxgl-popup-tip,.mapboxgl-popup.mapboxgl-popup-anchor-bottom-left .mapboxgl-popup-tip,.mapboxgl-popup.mapboxgl-popup-anchor-bottom-right .mapboxgl-popup-tip{border-top-color:var(--bg)}.mapboxgl-popup.mapboxgl-popup-anchor-top .mapboxgl-popup-tip,.mapboxgl-popup.mapboxgl-popup-anchor-top-left .mapboxgl-popup-tip,.mapboxgl-popup.mapboxgl-popup-anchor-top-right .mapboxgl-popup-tip{border-bottom-color:var(--bg)}.mapboxgl-popup.mapboxgl-popup-anchor-left .mapboxgl-popup-tip{border-right-color:var(--bg)}.mapboxgl-popup.mapboxgl-popup-anchor-right .mapboxgl-popup-tip{border-left-color:var(--bg)}.map-pop{min-width:190px}.map-pop__name{font-weight:700;font-size:14px;padding-right:14px;margin-bottom:2px}.map-pop__meta{font-size:12px;color:var(--text-muted);margin-bottom:9px}.map-pop__btn{display:inline-block;background:var(--brand);color:#fff;border:none;border-radius:999px;padding:7px 16px;font-size:13px;font-weight:600;cursor:pointer}.mapboxgl-popup.map-tip .mapboxgl-popup-content{padding:6px 10px;font-size:12px;font-weight:600}.drawer-overlay{position:fixed;inset:0;z-index:70;background:rgba(0,0,0,.4)}.drawer{position:fixed;top:0;right:0;bottom:0;z-index:71;width:min(560px,100vw);background:var(--bg);display:flex;flex-direction:column;box-shadow:-20px 0 60px rgba(0,0,0,.28);animation:drawer-in .18s ease-out}@keyframes drawer-in{0%{transform:translateX(24px);opacity:0}to{transform:none;opacity:1}}.drawer__head{display:flex;align-items:center;gap:12px;padding:14px 20px;border-bottom:1px solid var(--border)}.drawer__title{font-weight:700;font-size:16px}.drawer__sub{font-size:12px;color:var(--text-muted)}.drawer__close{margin-left:auto;border:none;background:transparent;color:var(--text-muted);font-size:17px;cursor:pointer;padding:6px 10px;border-radius:8px;line-height:1}.drawer__close:hover{background:var(--surface);color:var(--text)}.drawer__body{flex:1 1;overflow-y:auto;padding:20px}@media (max-width:860px){.fac-workspace{flex-direction:column;height:auto}.fac-map{flex:none;height:45vh;order:1}.fac-sidebar{width:100%;border-right:none;order:2}.fac-list{max-height:45vh}}@media (prefers-color-scheme:dark){.chip.active,.map-pop__btn{color:#06210f}:root{--brand:#30d158;--brand-bright:#30d158;--text:#f5f7f6;--text-muted:rgba(235,235,245,0.6);--bg:#000000;--surface:#121214;--border:#272729;--tok-num:#ff9230;--focus:rgba(48,209,88,0.28)}.btn,.segmented button.active{color:#06210f}.btn:hover{background:#28b84c}}