* { box-sizing: border-box; }

:root{
  --bg:#eef2f6;
  --card:#ffffff;
  --card-soft:#f8fbfe;
  --line:#dbe3ec;
  --line-strong:#c7d3df;
  --text:#1f2a36;
  --muted:#617182;
  --accent:#2b6df6;
  --accent-soft:#eaf1ff;
  --danger:#c73a3a;
  --shadow:0 6px 18px rgba(22, 36, 54, 0.08);
  --radius:16px;
}

html, body {
  height: 100%;
}

body{
  margin:0;
  font-family: Inter, Arial, Helvetica, sans-serif;
  background:linear-gradient(180deg, #f5f8fb 0%, var(--bg) 100%);
  color:var(--text);
}

input,
select,
button{
  font:inherit;
}

.app-shell{
  max-width:1320px;
  margin:0 auto;
  padding:12px;
}

.topbar{
  display:flex;
  justify-content:space-between;
  gap:12px;
  align-items:flex-start;
  margin-bottom:12px;
}

.topbar h1{
  margin:0 0 4px;
  font-size:1.35rem;
  line-height:1.15;
}

.topbar p{
  margin:0;
  color:var(--muted);
  max-width:760px;
  font-size:0.94rem;
}

.topbar-actions{
  display:flex;
  gap:8px;
  flex-wrap:wrap;
  justify-content:flex-end;
}

.layout{
  display:grid;
  grid-template-columns:minmax(0, 1.55fr) minmax(280px, 360px);
  gap:12px;
  align-items:start;
}

.workspace-card,
.sidebar-card{
  background:var(--card);
  border:1px solid var(--line);
  border-radius:var(--radius);
  box-shadow:var(--shadow);
}

.workspace-card{
  padding:10px;
}

.sidebar-card{
  padding:10px;
}

.canvas-toolbar{
  display:grid;
  grid-template-columns:minmax(0, 1fr) minmax(220px, 290px);
  gap:10px;
  margin-bottom:10px;
}

.toolbar-stack{
  display:flex;
  flex-direction:column;
  gap:8px;
  min-width:0;
}

.toolbar-group{
  display:flex;
  flex-wrap:wrap;
  gap:8px;
  align-items:flex-end;
  min-width:0;
}

.toolbar-group-range,
.toolbar-group-view,
.map-angle-panel{
  border:1px solid var(--line);
  border-radius:14px;
  background:var(--card-soft);
  padding:8px;
}

.toolbar-group label,
.form-grid label,
.map-angle-grid label{
  display:flex;
  flex-direction:column;
  gap:4px;
  font-size:0.82rem;
  color:var(--muted);
  min-width:0;
}

.toolbar-group input,
.form-grid input,
.form-grid select,
.map-angle-grid input,
.map-angle-grid select{
  min-width:0;
  border:1px solid var(--line-strong);
  border-radius:10px;
  padding:8px 10px;
  font-size:0.92rem;
  color:var(--text);
  background:#fff;
  outline:none;
}

.toolbar-group input:focus,
.form-grid input:focus,
.form-grid select:focus,
.map-angle-grid input:focus,
.map-angle-grid select:focus{
  border-color:#8eb0ee;
  box-shadow:0 0 0 3px rgba(43,109,246,0.08);
}

.toolbar-group-range label{
  flex:1 1 92px;
}

.toolbar-group-range input{
  width:100%;
}

.toolbar-group-range .btn{
  flex:0 0 auto;
}

.toolbar-group-view{
  display:flex;
  flex-direction:column;
  align-items:stretch;
}

.zoom-wrap{
  width:100%;
}

.zoom-wrap input{
  width:100%;
}

.hint{
  font-size:0.84rem;
  color:var(--muted);
  line-height:1.3;
}

.stage{
  position:relative;
}

.map-angle-panel{
  position:static;
  width:100%;
  box-shadow:none;
}

.map-angle-title{
  font-size:0.86rem;
  font-weight:700;
  margin-bottom:6px;
}

.map-angle-grid{
  display:grid;
  grid-template-columns:repeat(3, minmax(0, 1fr));
  gap:8px;
}

.declination-note{
  margin-top:8px;
  line-height:1.35;
}

.viewport{
  position:relative;
  width:100%;
  aspect-ratio:1 / 1;
  overflow:hidden;
  border:1px solid var(--line);
  border-radius:14px;
  background:#edf2f7;
  touch-action:none;
}

.world{
  position:absolute;
  inset:0;
  transform-origin:top left;
}

.bg-image,
#gridCanvas,
.points-layer{
  position:absolute;
  inset:0;
  width:100%;
  height:100%;
}

.bg-image{
  object-fit:contain;
  user-select:none;
  pointer-events:none;
}

#gridCanvas,
.points-layer{
  pointer-events:none;
}

.statusbar{
  display:grid;
  grid-template-columns:repeat(2, minmax(0, 1fr));
  gap:8px;
  margin-top:10px;
  font-size:0.88rem;
}

.statusbar > div{
  border:1px solid var(--line);
  background:var(--card-soft);
  border-radius:12px;
  padding:8px 10px;
}

.tabs{
  display:grid;
  grid-template-columns:repeat(5, 1fr);
  gap:6px;
  margin-bottom:10px;
  padding:4px;
  border:1px solid var(--line);
  border-radius:14px;
  background:#f4f8fc;
}

.tab-btn{
  border:1px solid transparent;
  background:transparent;
  color:var(--text);
  border-radius:10px;
  padding:9px 8px;
  cursor:pointer;
  font-weight:700;
  font-size:0.88rem;
  transition:background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease;
}

.tab-btn:hover{
  background:#edf4fd;
}

.tab-btn.active{
  background:#fff;
  border-color:#bfd0e4;
  color:#123f9c;
  box-shadow:0 1px 2px rgba(15, 23, 42, 0.04);
}

.tab-panel{
  display:none;
}

.tab-panel.active{
  display:block;
}

.panel-block{
  border:1px solid var(--line);
  border-radius:14px;
  padding:11px;
  background:#fff;
  margin-bottom:10px;
}

.panel-block h2{
  margin:0 0 8px;
  font-size:0.98rem;
}

.form-grid,
.calibration-grid{
  display:grid;
  grid-template-columns:repeat(2, minmax(0, 1fr));
  gap:8px;
}

.button-row{
  display:flex;
  gap:8px;
  flex-wrap:wrap;
  margin-top:10px;
}

.btn,
.mini-btn,
.file-label{
  appearance:none;
  border:none;
  border-radius:10px;
  padding:9px 12px;
  font-weight:700;
  cursor:pointer;
  text-decoration:none;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  transition:filter 0.15s ease, transform 0.02s ease;
}

.btn:active,
.mini-btn:active,
.file-label:active{
  transform:translateY(1px);
}

.btn{
  background:var(--accent);
  color:#fff;
}

.btn.secondary,
.file-label.secondary,
.mini-btn{
  background:#eef3fb;
  color:#23415f;
}

.btn.danger{
  background:var(--danger);
  color:#fff;
}

.output-box{
  margin-top:10px;
  padding:10px;
  border:1px solid var(--line);
  border-radius:12px;
  background:#f9fbfd;
  font-size:0.92rem;
  line-height:1.42;
}



.compact-output{
  margin-top:8px;
  padding:8px 10px;
  font-size:0.84rem;
}

.status-error{
  border-color:rgba(199,58,58,0.45);
  background:rgba(199,58,58,0.08);
}
.small-note{
  font-size:0.82rem;
  color:var(--muted);
}

.help-list{
  margin:0;
  padding-left:18px;
  color:var(--text);
}

.points-list{
  display:flex;
  flex-direction:column;
  gap:8px;
}

.point-row{
  display:flex;
  justify-content:space-between;
  gap:8px;
  align-items:center;
  border:1px solid var(--line);
  border-radius:12px;
  padding:10px;
  background:#fbfdff;
}

.point-row-title{
  font-weight:700;
  margin-bottom:4px;
}

.point-row-meta{
  font-size:0.84rem;
  color:var(--muted);
}

.point-row-actions{
  display:flex;
  flex-wrap:wrap;
  gap:6px;
}

.point{
  position:absolute;
  transform:translate(-50%, -50%);
  pointer-events:none;
}

.point-marker{
  position:relative;
  width:18px;
  height:18px;
}

.point-cross{
  position:absolute;
  inset:0;
}

.point-cross::before,
.point-cross::after{
  content:"";
  position:absolute;
  left:50%;
  top:50%;
  background:#d22a2a;
  transform:translate(-50%, -50%);
}

.point-cross::before{
  width:2px;
  height:18px;
}

.point-cross::after{
  width:18px;
  height:2px;
}

.point-center-dot{
  position:absolute;
  left:50%;
  top:50%;
  width:5px;
  height:5px;
  border-radius:50%;
  background:#fff;
  border:2px solid #d22a2a;
  transform:translate(-50%, -50%);
}

.point.preview .point-cross::before,
.point.preview .point-cross::after{
  background:#2b6df6;
}

.point.preview .point-center-dot{
  border-color:#2b6df6;
}

.point.calibration .point-cross::before,
.point.calibration .point-cross::after{
  background:#1ca55a;
}

.point.calibration .point-center-dot{
  border-color:#1ca55a;
}

.point-label{
  position:absolute;
  left:11px;
  top:11px;
  background:rgba(255,255,255,0.96);
  border:1px solid var(--line);
  border-radius:8px;
  padding:2px 6px;
  font-size:0.75rem;
  white-space:nowrap;
  box-shadow:0 2px 6px rgba(0,0,0,0.06);
}

@media (max-width: 1100px){
  .layout{
    grid-template-columns:1fr;
  }

  .canvas-toolbar{
    grid-template-columns:1fr;
  }

  .toolbar-stack-side{
    order:-1;
  }
}

@media (max-width: 820px){
  .app-shell{
    padding:8px;
  }

  .topbar{
    flex-direction:column;
  }

  .topbar-actions{
    justify-content:flex-start;
  }

  .topbar p{
    font-size:0.88rem;
  }

  .statusbar{
    grid-template-columns:1fr;
  }

  .map-angle-grid{
    grid-template-columns:1fr;
  }
}

@media (max-width: 600px){
  .tabs{
    grid-template-columns:repeat(2, minmax(0, 1fr));
  }

  .form-grid,
  .calibration-grid{
    grid-template-columns:1fr;
  }

  .point-row{
    flex-direction:column;
    align-items:flex-start;
  }
}

@media (max-width: 480px){
  .workspace-card,
  .sidebar-card{
    border-radius:14px;
    padding:8px;
  }

  .viewport{
    border-radius:12px;
  }

  .toolbar-group-range{
    display:grid;
    grid-template-columns:repeat(2, minmax(0, 1fr));
    align-items:end;
  }

  .toolbar-group-range .btn{
    grid-column:1 / -1;
    width:100%;
  }

  .btn,
  .mini-btn,
  .file-label{
    width:100%;
  }

  .button-row{
    flex-direction:column;
  }

  .point-marker{
    width:16px;
    height:16px;
  }

  .point-cross::before{
    height:16px;
  }

  .point-cross::after{
    width:16px;
  }
}

@media (max-width: 420px){
  .topbar h1{
    font-size:1.15rem;
  }

  .topbar p{
    display:none;
  }

  .tabs{
    gap:4px;
    padding:3px;
  }

  .tab-btn{
    font-size:0.82rem;
    padding:8px 6px;
  }

  .panel-block,
  .toolbar-group-range,
  .toolbar-group-view,
  .map-angle-panel,
  .statusbar > div{
    padding:8px;
  }

  .small-note,
  .hint{
    font-size:0.78rem;
  }
}


:root[data-theme="dark"]{
  --bg:#0b1220;
  --card:#121b2b;
  --card-soft:#172235;
  --line:#263247;
  --line-strong:#33435e;
  --text:#e7eef7;
  --muted:#9fb0c6;
  --accent:#5d93ff;
  --accent-soft:#18305f;
  --danger:#d95b5b;
  --shadow:0 10px 28px rgba(0, 0, 0, 0.28);
}

:root[data-theme="dark"] body{
  background:linear-gradient(180deg, #0d1525 0%, var(--bg) 100%);
}

:root[data-theme="dark"] .toolbar-group input,
:root[data-theme="dark"] .form-grid input,
:root[data-theme="dark"] .form-grid select,
:root[data-theme="dark"] .map-angle-grid input,
:root[data-theme="dark"] .map-angle-grid select,
:root[data-theme="dark"] .tab-btn.active,
:root[data-theme="dark"] .point-label{
  background:#0f1724;
  color:var(--text);
}

:root[data-theme="dark"] .viewport{
  background:#0f1724;
}

:root[data-theme="dark"] .btn.secondary,
:root[data-theme="dark"] .file-label.secondary,
:root[data-theme="dark"] .mini-btn{
  background:#243247;
  color:#dfe9f7;
}

:root[data-theme="dark"] .tab-btn:hover{
  background:#1b2940;
}

:root[data-theme="dark"] .output-box,
:root[data-theme="dark"] .point-row,
:root[data-theme="dark"] .map-row,
:root[data-theme="dark"] .tabs,
:root[data-theme="dark"] .statusbar > div{
  background:#162133;
}

.point{
  transform:translate(-50%, -50%) scale(var(--point-scale, 1));
  transform-origin:center center;
}

.point.calibration{
  pointer-events:auto;
  cursor:grab;
}

.point.calibration:active{
  cursor:grabbing;
}

.map-library-list{
  display:flex;
  flex-direction:column;
  gap:8px;
  margin-top:10px;
}

.map-row{
  display:flex;
  justify-content:space-between;
  gap:8px;
  align-items:center;
  border:1px solid var(--line);
  border-radius:12px;
  padding:10px;
  background:#fbfdff;
}
