base.css 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314
  1. * {
  2. box-sizing: border-box;
  3. }
  4. body {
  5. margin: 0;
  6. background: var(--brand-bg);
  7. color: var(--brand-text);
  8. font-family: var(--font-body);
  9. line-height: 1.6;
  10. }
  11. a {
  12. color: var(--brand-accent);
  13. text-decoration: none;
  14. }
  15. a:hover,
  16. a:focus-visible {
  17. color: #e0d700;
  18. }
  19. .container {
  20. width: 100%;
  21. max-width: 1200px;
  22. margin: 0 auto;
  23. padding: 0 20px;
  24. }
  25. body.admin-page .container {
  26. max-width: none;
  27. padding: 0 20px;
  28. }
  29. main {
  30. min-height: calc(100vh - 200px);
  31. padding: 2rem 0;
  32. }
  33. .site-footer {
  34. padding: 0.9rem 0 1.3rem;
  35. }
  36. .site-footer-inner {
  37. display: flex;
  38. justify-content: center;
  39. align-items: center;
  40. gap: 0.65rem;
  41. flex-wrap: wrap;
  42. }
  43. .site-footer-link {
  44. color: #ffffff;
  45. font-weight: 500;
  46. }
  47. .site-footer-separator {
  48. color: var(--brand-muted);
  49. }
  50. h1,
  51. h2,
  52. h3,
  53. h4,
  54. h5,
  55. h6 {
  56. margin-top: 0;
  57. color: var(--brand-text);
  58. }
  59. p {
  60. margin-top: 0;
  61. }
  62. .site-header {
  63. padding: 0.85rem 0;
  64. background: var(--brand-primary);
  65. color: #ffffff;
  66. box-shadow: 0 2px 6px rgba(0, 0, 0, 0.18);
  67. }
  68. .header-inner {
  69. display: flex;
  70. align-items: center;
  71. justify-content: space-between;
  72. gap: 1rem;
  73. }
  74. .brand {
  75. display: inline-flex;
  76. align-items: center;
  77. gap: 0.8rem;
  78. color: #ffffff;
  79. text-decoration: none;
  80. }
  81. .brand-logo {
  82. height: 52px;
  83. width: auto;
  84. filter: drop-shadow(0 2px 6px rgba(0, 0, 0, 0.25));
  85. }
  86. .brand-title {
  87. font-size: 1.3rem;
  88. font-weight: 700;
  89. letter-spacing: 0.02em;
  90. line-height: 1.1;
  91. }
  92. .brand-subtitle {
  93. margin-top: 0.15rem;
  94. font-size: 0.9rem;
  95. font-weight: 500;
  96. opacity: 0.9;
  97. line-height: 1.1;
  98. }
  99. .site-nav {
  100. display: flex;
  101. align-items: center;
  102. gap: 0.8rem;
  103. }
  104. .site-nav a {
  105. color: #ffffff;
  106. font-weight: 600;
  107. letter-spacing: 0.02em;
  108. }
  109. .site-nav a:hover,
  110. .site-nav a:focus-visible {
  111. color: var(--brand-accent);
  112. }
  113. .card,
  114. .panel {
  115. background: var(--brand-surface);
  116. border: 1px solid var(--brand-border);
  117. border-radius: 8px;
  118. box-shadow: 0 2px 4px rgba(0, 0, 0, 0.35);
  119. padding: 1.5rem;
  120. margin-bottom: 1.5rem;
  121. }
  122. .panel-compact {
  123. padding: 1rem;
  124. }
  125. .panel-spacious {
  126. padding: 2rem;
  127. margin: 2rem 0;
  128. }
  129. .admin-header {
  130. display: flex;
  131. align-items: center;
  132. justify-content: space-between;
  133. gap: 1rem;
  134. flex-wrap: wrap;
  135. }
  136. body.admin-page main {
  137. min-height: calc(100vh - 140px);
  138. padding: 1rem 0 1.5rem;
  139. }
  140. body.admin-page .card {
  141. padding: 1rem 1.1rem;
  142. margin-bottom: 1rem;
  143. }
  144. body.admin-page h1 {
  145. margin-bottom: 0.45rem;
  146. font-size: 1.35rem;
  147. }
  148. body.admin-page h2 {
  149. margin: 1rem 0 0.55rem;
  150. font-size: 1.1rem;
  151. }
  152. body.admin-page h3 {
  153. margin: 0.65rem 0 0.4rem;
  154. font-size: 0.98rem;
  155. }
  156. .admin-toolbar {
  157. display: flex;
  158. align-items: flex-end;
  159. justify-content: space-between;
  160. gap: 0.75rem;
  161. margin-bottom: 0.9rem;
  162. flex-wrap: wrap;
  163. }
  164. .admin-toolbar .field {
  165. margin-bottom: 0;
  166. flex: 1;
  167. min-width: 260px;
  168. }
  169. .admin-toolbar .field input {
  170. max-width: 440px;
  171. }
  172. .admin-inline-actions {
  173. display: flex;
  174. flex-wrap: wrap;
  175. gap: 0.5rem;
  176. margin-bottom: 1rem;
  177. }
  178. .admin-inline-actions form {
  179. margin: 0;
  180. }
  181. .admin-inline-actions .btn {
  182. width: auto;
  183. padding: 0.48rem 0.75rem;
  184. }
  185. .admin-detail-header {
  186. display: flex;
  187. align-items: flex-start;
  188. justify-content: space-between;
  189. gap: 0.75rem;
  190. margin-bottom: 0.75rem;
  191. }
  192. .admin-detail-header h1 {
  193. margin: 0;
  194. }
  195. .admin-detail-header .admin-inline-actions {
  196. justify-content: flex-end;
  197. margin-bottom: 0;
  198. }
  199. .admin-meta-table {
  200. margin-bottom: 0.9rem;
  201. }
  202. .admin-meta-table th {
  203. background: var(--brand-surface-alt);
  204. color: var(--brand-text);
  205. font-weight: 700;
  206. white-space: nowrap;
  207. }
  208. .admin-meta-table td {
  209. background: var(--brand-surface);
  210. }
  211. .admin-form-data-table {
  212. table-layout: fixed;
  213. }
  214. .admin-form-data-table th,
  215. .admin-form-data-table td {
  216. width: 50%;
  217. word-break: break-word;
  218. }
  219. .admin-step-block + .admin-step-block {
  220. margin-top: 0.75rem;
  221. }
  222. .admin-upload-group + .admin-upload-group {
  223. margin-top: 0.75rem;
  224. }
  225. .admin-uploads-list {
  226. margin: 0;
  227. padding-left: 1.2rem;
  228. }
  229. .admin-uploads-list li {
  230. margin: 0.2rem 0;
  231. }
  232. .admin-stats {
  233. display: grid;
  234. grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  235. gap: 1rem;
  236. }
  237. .stat-card {
  238. background: var(--brand-surface-alt);
  239. border: 1px solid var(--brand-border);
  240. border-radius: 8px;
  241. padding: 1rem;
  242. box-shadow: 0 2px 4px rgba(0, 0, 0, 0.35);
  243. }
  244. .stat-value {
  245. font-size: 1.4rem;
  246. font-weight: 700;
  247. }
  248. .form-group,
  249. .field {
  250. margin-bottom: 1rem;
  251. }
  252. label {
  253. display: block;
  254. margin-bottom: 0.5rem;
  255. font-weight: 600;
  256. }
  257. .required-mark {
  258. display: inline-block;
  259. margin-left: 0.35rem;
  260. padding: 0.05rem 0.35rem;
  261. border-radius: 999px;
  262. background: rgba(193, 18, 31, 0.18);
  263. color: #ffd0d4;
  264. font-size: 0.75rem;
  265. font-weight: 700;
  266. letter-spacing: 0.01em;
  267. vertical-align: middle;
  268. }
  269. .required-mark-conditional {
  270. background: rgba(202, 195, 0, 0.18);
  271. color: #fff6a8;
  272. }
  273. .required-legend {
  274. margin: 0 0 0.9rem;
  275. color: var(--brand-muted);
  276. font-size: 0.9rem;
  277. }
  278. .checkbox-label {
  279. display: inline-flex;
  280. align-items: center;
  281. gap: 0.5rem;
  282. font-weight: 500;
  283. }
  284. input,
  285. select,
  286. textarea,
  287. button {
  288. font: inherit;
  289. }
  290. .form-group input,
  291. .form-group textarea,
  292. .form-group select,
  293. .field input,
  294. .field textarea,
  295. .field select,
  296. input,
  297. select,
  298. textarea {
  299. width: 100%;
  300. padding: 0.65rem 0.75rem;
  301. color: var(--brand-text);
  302. background: var(--brand-surface-alt);
  303. border: 1px solid var(--brand-border);
  304. border-radius: 4px;
  305. }
  306. input[type='checkbox'] {
  307. width: auto;
  308. accent-color: var(--brand-accent);
  309. }
  310. textarea {
  311. min-height: 110px;
  312. resize: vertical;
  313. }
  314. input:focus-visible,
  315. select:focus-visible,
  316. textarea:focus-visible,
  317. button:focus-visible,
  318. .btn:focus-visible {
  319. outline: none;
  320. border-color: var(--brand-accent);
  321. box-shadow: 0 0 0 3px rgba(202, 195, 0, 0.2);
  322. }
  323. .btn,
  324. button {
  325. display: inline-block;
  326. width: 100%;
  327. padding: 0.65rem 0.9rem;
  328. border: 1px solid var(--brand-danger);
  329. border-radius: 4px;
  330. color: #ffffff;
  331. background: var(--brand-danger);
  332. cursor: pointer;
  333. transition: background-color 0.3s;
  334. }
  335. .btn:hover,
  336. button:hover {
  337. background: var(--brand-danger-dark);
  338. }
  339. .btn:disabled,
  340. button:disabled {
  341. opacity: 0.6;
  342. cursor: not-allowed;
  343. }
  344. .btn-secondary {
  345. border-color: var(--brand-border);
  346. color: var(--brand-text);
  347. background: transparent;
  348. }
  349. .btn-secondary:hover {
  350. background: var(--brand-surface-alt);
  351. }
  352. .btn-small {
  353. width: auto;
  354. padding: 0.45rem 0.7rem;
  355. font-size: 0.9rem;
  356. }
  357. .btn-block {
  358. width: 100%;
  359. text-align: center;
  360. }
  361. .disclaimer-text {
  362. white-space: pre-line;
  363. color: var(--brand-text);
  364. }
  365. .progress {
  366. margin-bottom: 1rem;
  367. color: var(--brand-muted);
  368. }
  369. .wizard-actions,
  370. .inline-actions,
  371. .upload-actions {
  372. display: grid;
  373. grid-template-columns: 1fr;
  374. gap: 0.75rem;
  375. }
  376. .upload-actions {
  377. grid-template-columns: repeat(2, minmax(0, 1fr));
  378. }
  379. .error,
  380. .error-text {
  381. color: var(--brand-danger);
  382. }
  383. .error {
  384. min-height: 1.2rem;
  385. margin-top: 0.2rem;
  386. font-size: 0.9rem;
  387. }
  388. .hint,
  389. small {
  390. display: block;
  391. margin-top: 0.25rem;
  392. color: var(--brand-muted);
  393. font-size: 0.85rem;
  394. }
  395. /*
  396. .mandatory-field {
  397. padding-left: 0.55rem;
  398. border-left: 3px solid rgba(193, 18, 31, 0.75);
  399. }
  400. .mandatory-field-hard {
  401. border-left-color: rgba(193, 18, 31, 0.75);
  402. }
  403. */
  404. .address-disclaimer {
  405. margin-top: 0.45rem;
  406. padding: 0.65rem 0.75rem;
  407. border: 1px solid var(--brand-border);
  408. border-left: 4px solid var(--brand-accent);
  409. border-radius: 6px;
  410. background: rgba(202, 195, 0, 0.08);
  411. color: var(--brand-text);
  412. font-size: 0.9rem;
  413. }
  414. .hidden,
  415. .hp-field {
  416. display: none;
  417. }
  418. .field-hidden-by-rule {
  419. display: none !important;
  420. }
  421. .upload-control {
  422. border: 1px dashed var(--brand-border);
  423. border-radius: 8px;
  424. padding: 0.8rem;
  425. background: var(--brand-surface-alt);
  426. }
  427. .table-input-wrapper {
  428. border: 1px solid var(--brand-border);
  429. border-radius: 8px;
  430. background: var(--brand-surface-alt);
  431. padding: 0.6rem;
  432. }
  433. .form-table-input {
  434. margin: 0;
  435. box-shadow: none;
  436. }
  437. .form-table-input th {
  438. background: var(--brand-surface);
  439. color: var(--brand-text);
  440. }
  441. .form-table-input tr:hover td {
  442. background: inherit;
  443. }
  444. .form-table-input td {
  445. background: var(--brand-surface-alt);
  446. }
  447. .table-cell-input {
  448. min-width: 150px;
  449. }
  450. .upload-action-btn {
  451. display: block;
  452. width: 100%;
  453. text-align: center;
  454. padding: 0.65rem 0.9rem;
  455. border: 1px solid var(--brand-accent);
  456. border-radius: 4px;
  457. color: var(--brand-text);
  458. background: transparent;
  459. font-weight: 600;
  460. cursor: pointer;
  461. transition: background-color 0.3s;
  462. }
  463. .upload-action-btn:hover {
  464. background: var(--brand-surface);
  465. }
  466. .upload-action-btn-camera {
  467. border-color: var(--brand-accent);
  468. }
  469. .upload-native-input {
  470. display: none;
  471. }
  472. .upload-selected {
  473. margin: 0.75rem 0 0;
  474. color: var(--brand-muted);
  475. font-size: 0.9rem;
  476. }
  477. .upload-list {
  478. margin-top: 0.75rem;
  479. padding: 0.75rem;
  480. border: 1px solid var(--brand-border);
  481. border-radius: 8px;
  482. background: var(--brand-surface-alt);
  483. }
  484. .upload-list:empty {
  485. display: none;
  486. }
  487. .upload-item {
  488. margin-top: 0.35rem;
  489. padding: 0.45rem 0.6rem;
  490. border: 1px solid var(--brand-border);
  491. border-radius: 8px;
  492. background: var(--brand-surface);
  493. color: var(--brand-text);
  494. font-size: 0.9rem;
  495. display: flex;
  496. align-items: center;
  497. justify-content: space-between;
  498. gap: 0.65rem;
  499. flex-wrap: wrap;
  500. }
  501. .upload-item:first-child {
  502. margin-top: 0;
  503. }
  504. .upload-item-info {
  505. flex: 1 1 250px;
  506. min-width: 180px;
  507. overflow-wrap: anywhere;
  508. }
  509. .upload-item-actions {
  510. display: inline-flex;
  511. gap: 0.45rem;
  512. flex-wrap: wrap;
  513. }
  514. .upload-item-btn {
  515. display: inline-flex;
  516. align-items: center;
  517. justify-content: center;
  518. padding: 0.28rem 0.55rem;
  519. border: 1px solid var(--brand-border);
  520. border-radius: 6px;
  521. background: transparent;
  522. color: var(--brand-text);
  523. text-decoration: none;
  524. font: inherit;
  525. font-weight: 600;
  526. cursor: pointer;
  527. }
  528. .upload-item-btn:hover {
  529. background: var(--brand-surface-alt);
  530. }
  531. .upload-item-btn:disabled {
  532. opacity: 0.65;
  533. cursor: not-allowed;
  534. }
  535. .upload-item-btn-danger {
  536. border-color: var(--brand-danger);
  537. color: #ffccd1;
  538. }
  539. .status-text {
  540. min-height: 1.2rem;
  541. margin-top: 1rem;
  542. color: var(--brand-muted);
  543. }
  544. .disclaimer-ack-field {
  545. margin: 1rem 0;
  546. }
  547. .compact-status {
  548. margin-top: 0.75rem;
  549. padding: 0.65rem 0.75rem;
  550. border: 1px solid var(--brand-border);
  551. border-radius: 6px;
  552. background: var(--brand-surface-alt);
  553. font-size: 0.92rem;
  554. }
  555. .compact-status p {
  556. margin: 0 0 0.3rem;
  557. }
  558. .compact-status p:last-of-type {
  559. margin-bottom: 0.65rem;
  560. }
  561. .step-summary {
  562. border: 0;
  563. border-radius: 0;
  564. padding: 0;
  565. background: transparent;
  566. }
  567. .summary-missing-note {
  568. margin-bottom: 0.9rem;
  569. padding: 0.65rem 0.75rem;
  570. border: 1px solid rgba(202, 195, 0, 0.55);
  571. border-radius: 6px;
  572. background: rgba(202, 195, 0, 0.1);
  573. color: #fff1a1;
  574. font-weight: 600;
  575. }
  576. .summary-missing-note.summary-missing-warning {
  577. border-color: rgba(193, 18, 31, 0.7);
  578. background: rgba(193, 18, 31, 0.14);
  579. color: #ffd3d7;
  580. }
  581. .summary-content {
  582. display: grid;
  583. gap: 1rem;
  584. min-width: 0;
  585. }
  586. .summary-step-card {
  587. border: 0;
  588. border-radius: 0;
  589. padding: 0;
  590. background: transparent;
  591. min-width: 0;
  592. }
  593. .summary-step-card + .summary-step-card {
  594. margin-top: 0.35rem;
  595. }
  596. .summary-step-card h4 {
  597. margin: 0 0 0.75rem;
  598. font-size: 1rem;
  599. overflow-wrap: anywhere;
  600. word-break: break-word;
  601. }
  602. .summary-item {
  603. margin-top: 0;
  604. min-width: 0;
  605. }
  606. .summary-step-card .summary-item + .summary-item {
  607. margin-top: 0;
  608. }
  609. .summary-item-required {
  610. border-left: 0;
  611. }
  612. .summary-item-missing {
  613. border: 0;
  614. background: transparent;
  615. }
  616. .summary-item-invalid {
  617. border: 0;
  618. background: transparent;
  619. }
  620. .summary-item-label {
  621. font-weight: 600;
  622. margin-bottom: 0.5rem;
  623. overflow-wrap: anywhere;
  624. word-break: break-word;
  625. }
  626. .summary-item-value {
  627. width: 100%;
  628. max-width: 100%;
  629. min-width: 0;
  630. padding: 0.65rem 0.75rem;
  631. border: 1px solid var(--brand-border);
  632. border-radius: 4px;
  633. background: var(--brand-surface-alt);
  634. font-size: 0.95rem;
  635. color: var(--brand-text);
  636. white-space: pre-wrap;
  637. overflow-wrap: anywhere;
  638. word-break: break-word;
  639. }
  640. .summary-item-value-multiline {
  641. font-family: inherit;
  642. }
  643. .summary-item-value-empty {
  644. color: var(--brand-muted);
  645. }
  646. .summary-item-value-missing {
  647. color: #ffd0d4;
  648. font-weight: 700;
  649. }
  650. .summary-item-missing .summary-item-label {
  651. color: #ffd3d7;
  652. }
  653. .summary-item-missing .summary-item-value {
  654. border-color: rgba(193, 18, 31, 0.75);
  655. background: rgba(193, 18, 31, 0.1);
  656. }
  657. .summary-item-invalid .summary-item-label {
  658. color: #ffd3d7;
  659. }
  660. .summary-item-invalid .summary-item-value {
  661. border-color: rgba(193, 18, 31, 0.75);
  662. background: rgba(193, 18, 31, 0.1);
  663. }
  664. .summary-badge {
  665. display: inline-block;
  666. margin-left: 0.4rem;
  667. margin-top: 0.25rem;
  668. padding: 0.05rem 0.35rem;
  669. border-radius: 999px;
  670. font-size: 0.75rem;
  671. font-weight: 700;
  672. max-width: 100%;
  673. white-space: normal;
  674. overflow-wrap: anywhere;
  675. word-break: break-word;
  676. }
  677. .summary-badge-required {
  678. background: rgba(202, 195, 0, 0.2);
  679. color: #fff6a8;
  680. }
  681. .summary-badge-missing {
  682. background: rgba(193, 18, 31, 0.24);
  683. color: #ffd3d7;
  684. }
  685. .summary-badge-invalid {
  686. background: rgba(193, 18, 31, 0.24);
  687. color: #ffd3d7;
  688. }
  689. .btn-spinner {
  690. display: inline-block;
  691. width: 14px;
  692. height: 14px;
  693. margin-left: 0.45rem;
  694. border: 2px solid rgba(255, 255, 255, 0.5);
  695. border-top-color: #ffffff;
  696. border-radius: 50%;
  697. animation: spinner-rotate 0.8s linear infinite;
  698. vertical-align: -2px;
  699. }
  700. .btn-spinner.hidden {
  701. display: none;
  702. }
  703. .btn.is-loading {
  704. pointer-events: none;
  705. }
  706. @keyframes spinner-rotate {
  707. from {
  708. transform: rotate(0deg);
  709. }
  710. to {
  711. transform: rotate(360deg);
  712. }
  713. }
  714. .alert {
  715. margin-bottom: 1rem;
  716. padding: 0.8rem 1rem;
  717. border: 1px solid var(--brand-border);
  718. border-radius: 4px;
  719. background: var(--brand-surface-alt);
  720. }
  721. .alert-success,
  722. .alert-warning {
  723. border-color: var(--brand-accent);
  724. }
  725. .alert-error {
  726. border-color: var(--brand-danger);
  727. }
  728. .alert-info {
  729. border-color: #ffffff;
  730. }
  731. .status {
  732. display: inline-flex;
  733. align-items: center;
  734. gap: 0.35rem;
  735. padding: 0.2rem 0.75rem;
  736. border: 1px solid var(--brand-border);
  737. border-radius: 999px;
  738. font-size: 0.85rem;
  739. font-weight: 600;
  740. letter-spacing: 0.02em;
  741. }
  742. .status-open {
  743. color: var(--brand-accent);
  744. border-color: var(--brand-accent);
  745. }
  746. .status-notified,
  747. .status-picked {
  748. color: #ffffff;
  749. border-color: #ffffff;
  750. }
  751. .status-expired {
  752. color: var(--brand-danger);
  753. border-color: var(--brand-danger);
  754. }
  755. .status-hidden {
  756. color: #9ca3af;
  757. border-color: #6b7280;
  758. }
  759. .table-responsive {
  760. width: 100%;
  761. overflow-x: auto;
  762. }
  763. table {
  764. width: 100%;
  765. border-collapse: collapse;
  766. border: 1px solid var(--brand-border);
  767. border-radius: 8px;
  768. overflow: hidden;
  769. background: var(--brand-surface);
  770. box-shadow: 0 2px 4px rgba(0, 0, 0, 0.35);
  771. }
  772. th,
  773. td {
  774. padding: 0.75rem;
  775. border-bottom: 1px solid var(--brand-border);
  776. text-align: left;
  777. vertical-align: top;
  778. }
  779. th {
  780. background: var(--brand-primary);
  781. color: #ffffff;
  782. }
  783. tr:hover td {
  784. background: var(--brand-surface-alt);
  785. }
  786. .table-compact th,
  787. .table-compact td {
  788. padding: 0.5rem;
  789. font-size: 0.9rem;
  790. }
  791. .table-dense th,
  792. .table-dense td {
  793. padding: 0.4rem 0.55rem;
  794. font-size: 0.88rem;
  795. line-height: 1.35;
  796. }
  797. .admin-submissions-table td:last-child {
  798. width: 1%;
  799. white-space: nowrap;
  800. }
  801. .products-grid {
  802. display: grid;
  803. grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
  804. gap: 1rem;
  805. }
  806. .product-card {
  807. background: var(--brand-surface);
  808. border: 1px solid var(--brand-border);
  809. border-radius: 8px;
  810. box-shadow: 0 2px 8px rgba(0, 0, 0, 0.4);
  811. transition: transform 0.3s, box-shadow 0.3s;
  812. }
  813. .product-card:hover {
  814. transform: translateY(-5px);
  815. box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
  816. }
  817. .product-card-content {
  818. padding: 1rem;
  819. }
  820. .product-detail-grid,
  821. .checkout-grid {
  822. display: grid;
  823. grid-template-columns: 1fr 1fr;
  824. gap: 1rem;
  825. }
  826. .price {
  827. font-size: 1.2rem;
  828. font-weight: 700;
  829. }
  830. .stock.in-stock {
  831. color: var(--brand-accent);
  832. }
  833. .stock.out-of-stock {
  834. color: var(--brand-danger);
  835. }
  836. .cart-item {
  837. display: flex;
  838. align-items: center;
  839. justify-content: space-between;
  840. gap: 1rem;
  841. padding: 1rem;
  842. border: 1px solid var(--brand-border);
  843. border-radius: 8px;
  844. }
  845. .cart-actions {
  846. display: flex;
  847. align-items: center;
  848. justify-content: flex-end;
  849. gap: 1rem;
  850. }
  851. .modal {
  852. position: fixed;
  853. inset: 0;
  854. z-index: 1000;
  855. display: none;
  856. align-items: center;
  857. justify-content: center;
  858. padding: 1.25rem;
  859. background: rgba(0, 0, 0, 0.6);
  860. }
  861. .modal-content {
  862. position: relative;
  863. width: 100%;
  864. max-width: 1000px;
  865. max-height: 95vh;
  866. overflow: auto;
  867. background: var(--brand-surface);
  868. border: 1px solid var(--brand-border);
  869. border-radius: 8px;
  870. box-shadow: 0 2px 4px rgba(0, 0, 0, 0.35);
  871. padding: 1.5rem;
  872. }
  873. .modal-close {
  874. position: absolute;
  875. top: 0.5rem;
  876. right: 0.5rem;
  877. width: auto;
  878. }
  879. .media-hero-image {
  880. width: 100%;
  881. border-radius: 8px;
  882. box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
  883. }
  884. .auth-container {
  885. max-width: 400px;
  886. margin-top: 4rem;
  887. }
  888. .inline-form {
  889. display: inline;
  890. }
  891. .filter-form {
  892. display: flex;
  893. gap: 1rem;
  894. align-items: end;
  895. flex-wrap: wrap;
  896. }
  897. .filter-field-grow {
  898. flex: 1;
  899. min-width: 200px;
  900. }
  901. .quantity-input {
  902. width: 90px;
  903. text-align: center;
  904. }
  905. .text-center {
  906. text-align: center;
  907. }
  908. .u-w-full {
  909. width: 100%;
  910. }
  911. .list-indent {
  912. margin-left: 1.5rem;
  913. }
  914. .ml-2 {
  915. margin-left: 1rem;
  916. }
  917. .mt-1 {
  918. margin-top: 0.5rem;
  919. }
  920. .mt-2 {
  921. margin-top: 1rem;
  922. }
  923. .mt-3 {
  924. margin-top: 1.5rem;
  925. }
  926. .mb-1 {
  927. margin-bottom: 0.5rem;
  928. }
  929. .mb-2 {
  930. margin-bottom: 1rem;
  931. }
  932. .mb-3 {
  933. margin-bottom: 1.5rem;
  934. }
  935. #startSection.compact-mode {
  936. max-width: 640px;
  937. margin-left: auto;
  938. margin-right: auto;
  939. padding-top: 0.8rem;
  940. padding-bottom: 0.8rem;
  941. }
  942. @media (max-width: 768px) {
  943. .header-inner {
  944. flex-direction: column;
  945. align-items: flex-start;
  946. }
  947. .site-nav {
  948. flex-wrap: wrap;
  949. }
  950. .brand-logo {
  951. height: 46px;
  952. }
  953. .products-grid {
  954. grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
  955. }
  956. .product-detail-grid,
  957. .checkout-grid {
  958. grid-template-columns: 1fr;
  959. }
  960. .cart-item {
  961. flex-direction: column;
  962. align-items: stretch;
  963. }
  964. .cart-actions {
  965. justify-content: flex-start;
  966. flex-direction: column;
  967. align-items: stretch;
  968. }
  969. .wizard-actions {
  970. grid-template-columns: repeat(3, 1fr);
  971. }
  972. .inline-actions,
  973. .upload-actions {
  974. grid-template-columns: repeat(2, 1fr);
  975. }
  976. .admin-header {
  977. flex-direction: column;
  978. align-items: flex-start;
  979. }
  980. .admin-toolbar {
  981. align-items: stretch;
  982. }
  983. .admin-toolbar .field {
  984. width: 100%;
  985. min-width: 0;
  986. }
  987. .admin-toolbar .field input {
  988. max-width: none;
  989. }
  990. .admin-detail-header {
  991. align-items: stretch;
  992. flex-direction: column;
  993. }
  994. .admin-detail-header .admin-inline-actions {
  995. justify-content: flex-start;
  996. }
  997. th,
  998. td {
  999. padding: 0.65rem;
  1000. font-size: 0.95rem;
  1001. }
  1002. .admin-stats {
  1003. grid-template-columns: 1fr;
  1004. }
  1005. body.admin-page .table-responsive {
  1006. margin: 0 -20px;
  1007. padding: 0 20px;
  1008. }
  1009. .table-responsive .btn {
  1010. white-space: normal;
  1011. }
  1012. body.admin-page table.responsive-table,
  1013. body.admin-page table.responsive-table thead,
  1014. body.admin-page table.responsive-table tbody,
  1015. body.admin-page table.responsive-table tr,
  1016. body.admin-page table.responsive-table th,
  1017. body.admin-page table.responsive-table td {
  1018. display: block;
  1019. width: 100%;
  1020. }
  1021. body.admin-page table.responsive-table thead {
  1022. display: none;
  1023. }
  1024. body.admin-page table.responsive-table tr {
  1025. margin-bottom: 0.85rem;
  1026. border: 1px solid var(--brand-border);
  1027. border-radius: 8px;
  1028. overflow: hidden;
  1029. background: var(--brand-surface);
  1030. }
  1031. body.admin-page table.responsive-table td {
  1032. border: 0;
  1033. border-bottom: 1px solid var(--brand-border);
  1034. padding: 0.65rem 0.75rem;
  1035. }
  1036. body.admin-page table.responsive-table td:last-child {
  1037. border-bottom: 0;
  1038. }
  1039. body.admin-page table.responsive-table td::before {
  1040. content: attr(data-label);
  1041. display: block;
  1042. margin-bottom: 0.2rem;
  1043. color: var(--brand-muted);
  1044. font-size: 0.8rem;
  1045. font-weight: 600;
  1046. letter-spacing: 0.02em;
  1047. text-transform: uppercase;
  1048. }
  1049. }
  1050. @media (max-width: 480px) {
  1051. .container,
  1052. body.admin-page .container {
  1053. padding: 0 12px;
  1054. }
  1055. main {
  1056. padding: 1.25rem 0;
  1057. }
  1058. .brand-title {
  1059. font-size: 1.1rem;
  1060. }
  1061. .brand-subtitle {
  1062. font-size: 0.8rem;
  1063. }
  1064. .products-grid {
  1065. grid-template-columns: 1fr;
  1066. }
  1067. .table-responsive table:not(.responsive-table) {
  1068. min-width: 520px;
  1069. }
  1070. .admin-meta-table,
  1071. .admin-meta-table tbody,
  1072. .admin-meta-table tr,
  1073. .admin-meta-table th,
  1074. .admin-meta-table td {
  1075. display: block;
  1076. width: 100%;
  1077. }
  1078. }
  1079. @media print {
  1080. header,
  1081. footer,
  1082. .btn,
  1083. nav {
  1084. display: none !important;
  1085. }
  1086. body {
  1087. padding: 20px;
  1088. background: #ffffff;
  1089. color: #000000;
  1090. }
  1091. .order-number,
  1092. table {
  1093. page-break-inside: avoid;
  1094. }
  1095. }