92 lines
7.2 KiB
CSS
92 lines
7.2 KiB
CSS
*{box-sizing:border-box}
|
|
body{margin:0;background:#f0f2f5;color:#2c2c2c;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}
|
|
button,input,select{font:inherit}
|
|
code{background:#e8e8e8;border-radius:4px;padding:1px 4px}
|
|
.app{min-height:100vh;padding:16px}
|
|
.layout{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:16px;max-width:1360px;margin:0 auto}
|
|
.header{margin-bottom:12px}
|
|
.header h1{margin:0 0 6px;font-size:24px;letter-spacing:-0.02em;color:#1a1a1a;font-weight:700}
|
|
.header p{margin:0;color:#5a5a5a;line-height:1.6;font-size:14px}
|
|
.canvas-shell,.card{background:#ffffff;border:1px solid rgba(0,0,0,0.08);border-radius:8px;box-shadow:0 4px 12px rgba(0,0,0,0.04)}
|
|
.canvas-shell{padding:12px;overflow:auto;position:relative;cursor:grab;user-select:none;touch-action:none}
|
|
.map-canvas{display:block;border-radius:8px;background:#f8f9fa}
|
|
.sidebar{display:flex;flex-direction:column;gap:12px}
|
|
.card{padding:14px}
|
|
.label,.card-title{display:block;margin-bottom:12px;color:#1a1a1a;font-size:14px;font-weight:600}
|
|
.inline-label{margin-top:12px}
|
|
.input{width:100%;border:1px solid rgba(0,0,0,0.15);background:#fff;color:#2c2c2c;border-radius:8px;padding:10px 12px;outline:none;transition:border-color 0.2s}
|
|
.input:focus{border-color:#1a73e8;box-shadow:0 0 0 3px rgba(26,115,232,0.15)}
|
|
.primary-button,.mode-button{border:0;border-radius:8px;padding:10px 12px;cursor:pointer;font-weight:600;transition:background 0.2s}
|
|
.primary-button{margin-top:12px;width:100%;background:#1a73e8;color:#fff}
|
|
.primary-button:hover{background:#1557b0}
|
|
.mode-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px}
|
|
.mode-button{background:#f1f3f4;color:#3c4043;border:1px solid transparent}
|
|
.mode-button:hover{background:#e8eaed}
|
|
.mode-button.active{background:#e8f0fe;color:#1a73e8;border:1px solid #1a73e8}
|
|
.checkbox-row{display:flex;gap:8px;align-items:center;margin-top:12px;color:#3c4043;font-size:14px;cursor:pointer}
|
|
.stats{display:flex;flex-direction:column;gap:8px}
|
|
.stat-row{display:flex;justify-content:space-between;gap:12px;color:#5f6368;font-size:13px;align-items:baseline}
|
|
.stat-row strong{color:#202124;font-family:ui-monospace,monospace}
|
|
.legend{color:#5f6368;font-size:13px;line-height:1.6}
|
|
.legend p{margin:8px 0 0}
|
|
|
|
@media (max-width:1100px){.layout{grid-template-columns:1fr}}
|
|
|
|
.legend-grid{display:flex;flex-direction:column;gap:8px;margin-top:12px}
|
|
.legend-row{display:grid;grid-template-columns:32px 1fr;gap:8px;align-items:center;min-height:22px}
|
|
|
|
/* Layered GIS style CSS equivalents */
|
|
.legend-line{display:inline-block;width:28px;height:4px;border-radius:2px;}
|
|
.express-line{background:#6eb982; border:1px solid #508c64;}
|
|
.road-line{background:#f5e182; border:1px solid #beaf8c;}
|
|
|
|
/* Fishbone Railway Style */
|
|
.rail-line{background:#6e6e6e; height:1.5px; position:relative; border:none; margin-top:2px; border-radius:0}
|
|
.rail-line::after{content:"";position:absolute;top:-2.5px;left:0;right:0;height:7px;background:repeating-linear-gradient(90deg, transparent, transparent 5px, #6e6e6e 5px, #6e6e6e 6px);}
|
|
|
|
.river-major{background:#a0cdf0; border:none; height:3px;}
|
|
.old-road-line{background:#fff; border:1px solid #dcdcdc; height:3px; border-top:none;}
|
|
|
|
.legend-swatch{display:inline-block;width:24px;height:14px;border-radius:4px;background:#f5f5f5}
|
|
.border-swatch{border:2px dashed rgba(110,90,110,1);box-shadow:inset 0 0 0 1px rgba(255,255,255,1), 0 0 0 1px rgba(255,255,255,1)}
|
|
.cbd-swatch{background:#f0dccd; border:1px solid rgba(0,0,0,0.1)}
|
|
|
|
.legend-icon{display:inline-block;width:14px;height:14px;justify-self:center;border:2px solid #fff;border-radius:50%;box-shadow:0 0 0 1px rgba(0,0,0,0.15)}
|
|
.city-icon{background:#f06e6e;}
|
|
.satellite-icon{background:#d75f91;}
|
|
.station-icon{background:#fff;border-color:#444;}
|
|
.industry-icon{background:#8caaa0; border-radius:3px;}
|
|
.castle-icon{background:#b44646; border-radius:3px;}
|
|
|
|
.port-icon{width:0;height:0;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:14px solid #4682c8;border-top:0;box-shadow:none;background:transparent;border-radius:0}
|
|
.newtown-icon{width:0;height:0;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:14px solid #b4d2f0;border-top:0;box-shadow:none;background:transparent;border-radius:0}
|
|
|
|
.map-tooltip{position:absolute;z-index:20;pointer-events:none;min-width:200px;max-width:280px;background:rgba(255,255,255,0.74);border:1px solid rgba(0,0,0,0.10);border-radius:8px;box-shadow:0 10px 30px rgba(0,0,0,0.10);backdrop-filter:blur(4px);padding:10px 12px;color:#2c2c2c;font-size:12px;line-height:1.5;opacity:0;transform:translateY(4px);transition:opacity 0.15s ease, transform 0.15s ease;font-weight:500}
|
|
.map-tooltip.visible{opacity:1;transform:translateY(0)}
|
|
|
|
.generation-progress{position:absolute;inset:24px auto auto 24px;z-index:30;min-width:300px;max-width:440px;background:rgba(255,255,255,0.96);border:1px solid rgba(0,0,0,0.12);border-radius:12px;box-shadow:0 14px 36px rgba(0,0,0,0.14);padding:14px 16px;color:#202124;font-size:13px;line-height:1.5}
|
|
.generation-progress.hidden{display:none}
|
|
.progress-title{font-weight:700;margin-bottom:4px}
|
|
.progress-stage{color:#5f6368;margin-bottom:10px}
|
|
.progress-timings{display:flex;flex-direction:column;gap:4px;font-family:ui-monospace,monospace;font-size:12px;color:#3c4043}
|
|
.progress-timing-row{display:flex;justify-content:space-between;gap:16px;border-top:1px solid rgba(0,0,0,0.06);padding-top:4px}
|
|
|
|
.canvas-shell.panning{cursor:grabbing}
|
|
.map-selection-svg{position:absolute;inset:12px;z-index:18;display:none;pointer-events:none;overflow:visible}
|
|
.map-selection-svg polygon{fill:rgba(26,115,232,0.16);stroke:rgba(26,115,232,0.88);stroke-width:2;vector-effect:non-scaling-stroke;stroke-linejoin:round}
|
|
.map-selection-svg.invalid polygon{fill:rgba(179,38,30,0.14);stroke:rgba(179,38,30,0.88)}
|
|
.canvas-shell.selecting{cursor:crosshair}
|
|
.map-selection{position:absolute;z-index:18;display:none;pointer-events:none;border:2px solid rgba(26,115,232,0.86);background:rgba(26,115,232,0.16);box-shadow:0 0 0 1px rgba(255,255,255,0.70) inset,0 8px 22px rgba(26,115,232,0.20)}
|
|
.primary-button:disabled{background:#a8b6c8;color:#eef3f8;cursor:not-allowed}
|
|
.patch-status{margin:10px 0 0;color:#5f6368;font-size:12px;line-height:1.45}
|
|
.patch-status.invalid{color:#b3261e;font-weight:600}
|
|
.map-selection.invalid{border-color:rgba(179,38,30,0.88);background:rgba(179,38,30,0.14);box-shadow:0 0 0 1px rgba(255,255,255,0.70) inset,0 8px 22px rgba(179,38,30,0.18)}
|
|
|
|
.patch-variant-row{display:grid;grid-template-columns:1fr 92px;gap:8px;align-items:end;margin-top:12px}
|
|
.patch-variant-label{margin-bottom:0;align-self:center}
|
|
.patch-variant-input{padding:8px 10px;text-align:right;font-family:ui-monospace,monospace}
|
|
.patch-button-row{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:12px}
|
|
.patch-button-row .primary-button,.patch-button-row .secondary-button{margin-top:0;width:100%}
|
|
.secondary-button{border:1px solid rgba(26,115,232,0.35);border-radius:8px;padding:10px 12px;cursor:pointer;font-weight:600;background:#eef4ff;color:#1557b0;transition:background 0.2s,border-color 0.2s}
|
|
.secondary-button:hover{background:#e1edff;border-color:rgba(26,115,232,0.55)}
|
|
.secondary-button:disabled{background:#eef1f4;color:#8a98a8;border-color:rgba(0,0,0,0.08);cursor:not-allowed}
|