style.css 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354
  1. * {
  2. box-sizing: border-box;
  3. }
  4. html,
  5. body {
  6. height: 100%;
  7. margin: 0;
  8. font-family: "Segoe UI", "PingFang SC", sans-serif;
  9. background: #edf3ea;
  10. color: #163126;
  11. overflow: hidden;
  12. }
  13. .layout {
  14. display: grid;
  15. grid-template-columns: 400px 1fr;
  16. height: 100vh;
  17. overflow: hidden;
  18. }
  19. .panel {
  20. height: 100vh;
  21. padding: 20px;
  22. background: rgba(250, 252, 248, 0.96);
  23. border-right: 1px solid rgba(22, 49, 38, 0.08);
  24. overflow-y: auto;
  25. overscroll-behavior: contain;
  26. }
  27. .panel__header h1 {
  28. margin: 8px 0 10px;
  29. font-size: 28px;
  30. }
  31. .panel__links {
  32. margin: 0 0 10px;
  33. }
  34. .panel__links a {
  35. color: #24523e;
  36. text-decoration: none;
  37. font-size: 13px;
  38. font-weight: 700;
  39. }
  40. .panel__eyebrow {
  41. font-weight: 800;
  42. letter-spacing: 0.18em;
  43. font-size: 12px;
  44. color: #557266;
  45. }
  46. .badge {
  47. display: inline-flex;
  48. align-items: center;
  49. min-height: 30px;
  50. padding: 0 12px;
  51. border-radius: 999px;
  52. font-size: 13px;
  53. font-weight: 700;
  54. }
  55. .badge--muted {
  56. background: #e5ece5;
  57. color: #4f6458;
  58. }
  59. .badge--ok {
  60. background: #d8f7e3;
  61. color: #0a7a3d;
  62. }
  63. .group {
  64. margin-top: 18px;
  65. padding: 16px;
  66. border-radius: 18px;
  67. background: #ffffff;
  68. box-shadow: 0 10px 30px rgba(34, 63, 49, 0.07);
  69. }
  70. .group__title {
  71. font-size: 14px;
  72. font-weight: 800;
  73. letter-spacing: 0.08em;
  74. color: #5d786c;
  75. margin-bottom: 12px;
  76. }
  77. .group__status {
  78. min-height: 18px;
  79. margin: -4px 0 12px;
  80. font-size: 12px;
  81. line-height: 1.5;
  82. color: #5e786d;
  83. }
  84. .row {
  85. display: flex;
  86. gap: 10px;
  87. margin-bottom: 10px;
  88. }
  89. .btn {
  90. flex: 1;
  91. min-height: 40px;
  92. border: 0;
  93. border-radius: 12px;
  94. background: #ebf0ea;
  95. color: #193226;
  96. font-weight: 700;
  97. cursor: pointer;
  98. transition: transform 120ms ease, background 120ms ease, color 120ms ease, opacity 120ms ease;
  99. }
  100. .btn--primary {
  101. background: #103f2f;
  102. color: #fff;
  103. }
  104. .btn--accent {
  105. background: #0ea5a4;
  106. color: #fff;
  107. }
  108. .btn.is-active {
  109. outline: 2px solid #ffb300;
  110. }
  111. .btn:disabled {
  112. opacity: 0.56;
  113. cursor: not-allowed;
  114. }
  115. .file-input-hidden {
  116. position: absolute;
  117. width: 1px;
  118. height: 1px;
  119. opacity: 0;
  120. pointer-events: none;
  121. }
  122. .field {
  123. display: flex;
  124. flex-direction: column;
  125. gap: 6px;
  126. margin-bottom: 10px;
  127. font-size: 13px;
  128. color: #557266;
  129. }
  130. .field input,
  131. .field select {
  132. min-height: 38px;
  133. border: 1px solid rgba(22, 49, 38, 0.12);
  134. border-radius: 10px;
  135. padding: 0 12px;
  136. font: inherit;
  137. }
  138. .field--check {
  139. flex-direction: row;
  140. align-items: center;
  141. }
  142. .hint {
  143. font-size: 12px;
  144. color: #678276;
  145. line-height: 1.5;
  146. }
  147. .hint--ok {
  148. color: #0a7a3d;
  149. }
  150. .hint--warn {
  151. color: #8d4b08;
  152. }
  153. .stat {
  154. display: flex;
  155. justify-content: space-between;
  156. padding: 8px 0;
  157. border-bottom: 1px solid rgba(22, 49, 38, 0.06);
  158. }
  159. .stat:last-child {
  160. border-bottom: 0;
  161. }
  162. .stat span {
  163. color: #668073;
  164. font-size: 13px;
  165. }
  166. .stat strong {
  167. font-size: 14px;
  168. }
  169. .log {
  170. min-height: 140px;
  171. max-height: 220px;
  172. overflow-y: auto;
  173. padding: 10px 12px;
  174. border-radius: 12px;
  175. background: #f3f7f1;
  176. font-size: 12px;
  177. line-height: 1.5;
  178. color: #486257;
  179. white-space: pre-wrap;
  180. }
  181. .log--debug {
  182. max-height: 280px;
  183. background: #111917;
  184. color: #d6f3df;
  185. font-family: Consolas, "SFMono-Regular", monospace;
  186. }
  187. .log--floating {
  188. min-height: 260px;
  189. max-height: min(44vh, 420px);
  190. font-size: 13px;
  191. line-height: 1.6;
  192. }
  193. .jump-list {
  194. display: flex;
  195. flex-wrap: wrap;
  196. gap: 8px;
  197. margin-top: 12px;
  198. }
  199. .jump-chip {
  200. min-height: 32px;
  201. padding: 0 12px;
  202. border: 0;
  203. border-radius: 999px;
  204. background: #eef6ea;
  205. color: #244132;
  206. font-size: 12px;
  207. font-weight: 700;
  208. cursor: pointer;
  209. }
  210. .jump-chip--start {
  211. background: #fff0c9;
  212. }
  213. .jump-chip--finish {
  214. background: #ffe2b8;
  215. }
  216. .map-shell {
  217. position: relative;
  218. height: 100vh;
  219. overflow: hidden;
  220. }
  221. .floating-debug-log {
  222. position: absolute;
  223. right: 20px;
  224. bottom: 20px;
  225. z-index: 600;
  226. width: min(460px, calc(100vw - 480px));
  227. min-width: 360px;
  228. max-width: 520px;
  229. padding: 14px;
  230. border-radius: 22px;
  231. background: rgba(255, 255, 255, 0.94);
  232. border: 1px solid rgba(255, 255, 255, 0.52);
  233. box-shadow: 0 22px 60px rgba(17, 33, 26, 0.22);
  234. backdrop-filter: blur(16px);
  235. }
  236. .floating-debug-log__header {
  237. display: flex;
  238. align-items: center;
  239. justify-content: space-between;
  240. gap: 12px;
  241. margin-bottom: 10px;
  242. }
  243. .floating-debug-log__title {
  244. font-size: 14px;
  245. font-weight: 800;
  246. letter-spacing: 0.08em;
  247. color: #4a6a5e;
  248. }
  249. .floating-debug-log__clear {
  250. min-height: 30px;
  251. padding: 0 12px;
  252. border: 0;
  253. border-radius: 999px;
  254. background: rgba(17, 33, 26, 0.1);
  255. color: #244132;
  256. font-size: 12px;
  257. font-weight: 700;
  258. cursor: pointer;
  259. }
  260. #map {
  261. width: 100%;
  262. height: 100vh;
  263. }
  264. .leaflet-container {
  265. background: #dfeadb;
  266. }
  267. .course-marker {
  268. display: flex;
  269. align-items: center;
  270. justify-content: center;
  271. }
  272. .course-marker__control {
  273. width: 34px;
  274. height: 34px;
  275. border-radius: 999px;
  276. border: 3px solid #cc0077;
  277. color: #cc0077;
  278. background: rgba(255, 255, 255, 0.9);
  279. font-size: 16px;
  280. font-weight: 800;
  281. line-height: 1;
  282. }
  283. .course-marker__start {
  284. width: 0;
  285. height: 0;
  286. border-left: 16px solid transparent;
  287. border-right: 16px solid transparent;
  288. border-bottom: 28px solid #cc0077;
  289. filter: drop-shadow(0 3px 10px rgba(22, 49, 38, 0.22));
  290. }
  291. .course-marker__finish {
  292. position: relative;
  293. width: 36px;
  294. height: 36px;
  295. border-radius: 999px;
  296. border: 4px solid #cc0077;
  297. background: rgba(255, 255, 255, 0.76);
  298. }
  299. .course-marker__finish::after {
  300. content: "";
  301. position: absolute;
  302. inset: 6px;
  303. border-radius: 999px;
  304. border: 3px solid #cc0077;
  305. }