admin.css 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712
  1. /* * {
  2. -webkit-box-sizing: border-box;
  3. -moz-box-sizing: border-box;
  4. box-sizing: border-box;
  5. } */
  6. #logo {
  7. height: 30px;
  8. vertical-align: -6px;
  9. padding-right: 5px;
  10. }
  11. #site-name:hover a {
  12. opacity: 0.9;
  13. }
  14. #site-name .loader {
  15. height: 25px;
  16. width: 25px;
  17. display: inline-block;
  18. border-width: 3px;
  19. vertical-align: -3px;
  20. margin-right: 5px;
  21. margin-top: 2px;
  22. }
  23. #branding h1, #branding h1 a:link, #branding h1 a:visited {
  24. color: mintcream;
  25. }
  26. #header {
  27. background: #aa1e55;
  28. padding: 6px 14px;
  29. }
  30. #content {
  31. padding: 8px 8px;
  32. }
  33. #user-tools {
  34. font-size: 13px;
  35. }
  36. div.breadcrumbs {
  37. background: #772948;
  38. color: #f5dd5d;
  39. padding: 6px 15px;
  40. }
  41. #toolbar #searchbar {
  42. height: 25px;
  43. }
  44. /* View Mode Switcher - Prominent Toggle */
  45. #snapshot-view-mode {
  46. float: right;
  47. margin-bottom: -40px;
  48. display: inline-flex;
  49. align-items: center;
  50. margin-top: 3px;
  51. margin-right: 10px;
  52. font-size: 13px;
  53. background: #f1f5f9;
  54. border: 1px solid #e2e8f0;
  55. border-radius: 8px;
  56. padding: 2px;
  57. gap: 2px;
  58. }
  59. #snapshot-view-mode a {
  60. display: inline-flex;
  61. align-items: center;
  62. justify-content: center;
  63. gap: 4px;
  64. padding: 6px 12px;
  65. color: #64748b;
  66. text-decoration: none;
  67. border-radius: 6px;
  68. font-weight: 500;
  69. transition: all 0.15s ease;
  70. white-space: nowrap;
  71. }
  72. #snapshot-view-mode a:hover {
  73. color: #334155;
  74. background: #e2e8f0;
  75. }
  76. #snapshot-view-mode a.active {
  77. background: #fff;
  78. color: #1e293b;
  79. box-shadow: 0 1px 3px rgba(0,0,0,0.1);
  80. }
  81. #snapshot-view-mode .view-icon {
  82. font-size: 14px;
  83. line-height: 1;
  84. }
  85. body.model-snapshot.change-list div.breadcrumbs,
  86. body.model-snapshot.change-list #content .object-tools {
  87. display: none;
  88. }
  89. .module h2, .module caption, .inline-group h2 {
  90. background: #772948;
  91. }
  92. #content .adv-data textarea {
  93. width: 82vw;
  94. max-width: 100%;
  95. min-height: 100px;
  96. height: auto;
  97. background-color: #145454;
  98. color: #f1f1fd;
  99. font-size: 12px;
  100. font-family: monospace;
  101. border-radius: 8px;
  102. line-height: 1.2;
  103. padding: 6px 9px;
  104. }
  105. #content .object-tools {
  106. margin-top: -35px;
  107. margin-right: -10px;
  108. float: right;
  109. }
  110. #content .object-tools a:link, #content .object-tools a:visited {
  111. border-radius: 0px;
  112. background-color: #f5dd5d;
  113. color: #333;
  114. font-size: 12px;
  115. font-weight: 800;
  116. }
  117. #content .object-tools a.addlink {
  118. background-blend-mode: difference;
  119. }
  120. #content #changelist #toolbar {
  121. padding: 0px;
  122. background: none;
  123. margin-bottom: 10px;
  124. border-top: 0px;
  125. border-bottom: 0px;
  126. }
  127. #content #changelist #toolbar form input[type="submit"] {
  128. border-color: #aa1e55;
  129. }
  130. #content #changelist-filter li.selected a {
  131. color: #aa1e55;
  132. }
  133. /*#content #changelist .actions {
  134. position: fixed;
  135. bottom: 0px;
  136. z-index: 800;
  137. }*/
  138. #content #changelist .actions {
  139. float: right;
  140. margin-top: -34px;
  141. padding: 0px;
  142. background: none;
  143. margin-right: 0px;
  144. width: auto;
  145. max-height: 40px;
  146. display: block;
  147. }
  148. @media (max-width: 1000px) {
  149. #content #changelist .actions {
  150. max-height: 200px;
  151. }
  152. }
  153. #content #changelist .actions .button {
  154. border-radius: 2px;
  155. background-color: #f5dd5d;
  156. color: #333;
  157. font-size: 12px;
  158. font-weight: 800;
  159. margin-right: 4px;
  160. box-shadow: 4px 4px 4px rgba(0,0,0,0.02);
  161. border: 1px solid rgba(0,0,0,0.08);
  162. }
  163. #content #changelist .actions .button:hover {
  164. border: 1px solid rgba(0,0,0,0.2);
  165. opacity: 0.9;
  166. }
  167. #content #changelist .actions .button[name=verify_snapshots], #content #changelist .actions .button[name=update_titles] {
  168. background-color: #dedede;
  169. color: #333;
  170. }
  171. #content #changelist .actions .button[name=update_snapshots] {
  172. background-color: #9ee54b;
  173. color: #333;
  174. }
  175. #content #changelist .actions .button[name=resnapshot_snapshot] {
  176. background-color:lightseagreen;
  177. color: #333;
  178. }
  179. #content #changelist .actions .button[name=overwrite_snapshots] {
  180. background-color: #ffaa31;
  181. color: #333;
  182. margin-left: 10px;
  183. }
  184. #content #changelist .actions .button[name=delete_snapshots] {
  185. background-color: #f91f74;
  186. color: rgb(255 248 252 / 64%);
  187. }
  188. #content #changelist .actions .button[name=add_tags] {
  189. }
  190. #content #changelist .actions .button[name=remove_tags] {
  191. margin-right: 25px;
  192. }
  193. #content #changelist .actions > label {
  194. max-height: 25px;
  195. }
  196. #content #changelist .actions > label {
  197. width: auto !important;
  198. min-width: 90px;
  199. }
  200. #content #changelist .actions > label > select {
  201. margin-top: 3px;
  202. }
  203. /* Filter Sidebar - Improved Layout */
  204. #content #changelist-filter {
  205. background: #fff;
  206. border: 1px solid #e2e8f0;
  207. border-radius: 10px;
  208. box-shadow: 0 1px 3px rgba(0,0,0,0.05);
  209. overflow: hidden;
  210. }
  211. #content #changelist-filter h2 {
  212. border-radius: 0;
  213. background: #f8fafc;
  214. color: #475569;
  215. font-size: 11px;
  216. font-weight: 600;
  217. text-transform: uppercase;
  218. letter-spacing: 0.05em;
  219. padding: 10px 12px;
  220. margin: 0;
  221. border-bottom: 1px solid #e2e8f0;
  222. }
  223. #content #changelist-filter h3 {
  224. font-size: 11px;
  225. font-weight: 600;
  226. color: #64748b;
  227. text-transform: uppercase;
  228. letter-spacing: 0.03em;
  229. padding: 10px 12px 4px;
  230. margin: 0;
  231. background: transparent;
  232. }
  233. #content #changelist-filter ul {
  234. padding: 0 6px 8px;
  235. margin: 0;
  236. list-style: none;
  237. }
  238. #content #changelist-filter li {
  239. margin: 0;
  240. }
  241. #content #changelist-filter li a {
  242. display: block;
  243. padding: 6px 10px;
  244. color: #475569;
  245. text-decoration: none;
  246. font-size: 12px;
  247. border-radius: 5px;
  248. transition: background 0.15s ease, color 0.15s ease;
  249. white-space: nowrap;
  250. overflow: hidden;
  251. text-overflow: ellipsis;
  252. }
  253. #content #changelist-filter li a:hover {
  254. background: #f1f5f9;
  255. color: #1e293b;
  256. }
  257. #content #changelist-filter li.selected a {
  258. background: #eff6ff;
  259. color: #2563eb;
  260. font-weight: 500;
  261. }
  262. #content #changelist-filter-clear {
  263. padding: 8px 12px;
  264. margin: 0;
  265. border-bottom: 1px solid #e2e8f0;
  266. background: #fef2f2;
  267. }
  268. #content #changelist-filter-clear a {
  269. color: #dc2626;
  270. font-size: 12px;
  271. font-weight: 500;
  272. text-decoration: none;
  273. }
  274. #content #changelist-filter-clear a:hover {
  275. text-decoration: underline;
  276. }
  277. #changelist .paginator {
  278. border-top: 0px;
  279. border-bottom: 0px;
  280. }
  281. @media (min-width: 767px) {
  282. #content #changelist-filter {
  283. top: 35px;
  284. width: 160px;
  285. margin-bottom: 35px;
  286. }
  287. .change-list .filtered .results,
  288. .change-list .filtered .paginator,
  289. .filtered #toolbar,
  290. .filtered div.xfull {
  291. margin-right: 168px;
  292. }
  293. }
  294. @media (max-width: 1127px) {
  295. #content #changelist .actions {
  296. position: fixed;
  297. bottom: 6px;
  298. left: 10px;
  299. float: left;
  300. z-index: 1000;
  301. }
  302. }
  303. #content a img.favicon {
  304. height: 20px;
  305. max-width: 28px;
  306. vertical-align: -5px;
  307. padding-right: 6px;
  308. }
  309. #content img.snapshot-preview {
  310. width: 30px;
  311. height: 30px;
  312. max-width: 30px;
  313. max-height: 30px;
  314. object-fit: contain;
  315. border-radius: 4px;
  316. display: block;
  317. margin: 0 auto;
  318. }
  319. #content img.snapshot-preview.screenshot {
  320. width: 100px;
  321. height: 100px;
  322. max-width: 100px;
  323. max-height: 100px;
  324. object-fit: cover;
  325. }
  326. #content th.field-preview_icon,
  327. #content td.field-preview_icon {
  328. width: 100px;
  329. max-width: 100px;
  330. }
  331. #content td, #content th {
  332. vertical-align: middle;
  333. padding: 4px;
  334. }
  335. #content #changelist table input {
  336. vertical-align: -2px;
  337. }
  338. #content thead th .text a {
  339. padding: 8px 4px;
  340. }
  341. #content th.field-added, #content td.field-updated {
  342. word-break: break-word;
  343. min-width: 135px;
  344. white-space: normal;
  345. }
  346. #content th.field-title_str {
  347. min-width: 300px;
  348. padding-left: 2px;
  349. padding-right: 2px;
  350. }
  351. #content td.field-title_str {
  352. padding-left: 2px;
  353. padding-right: 2px;
  354. }
  355. #content th.field-preview_icon,
  356. #content td.field-preview_icon {
  357. padding-left: 2px;
  358. padding-right: 2px;
  359. }
  360. #content th.field-created_at,
  361. #content td.field-created_at {
  362. padding-left: 2px;
  363. padding-right: 2px;
  364. }
  365. #content th.column-action-checkbox,
  366. #content th.action-checkbox-column,
  367. #content td.action-checkbox {
  368. padding-left: 2px;
  369. padding-right: 2px;
  370. }
  371. #content th.field-preview_icon,
  372. #content td.field-preview_icon {
  373. padding-left: 2px;
  374. padding-right: 2px;
  375. }
  376. #content th.field-created_at,
  377. #content td.field-created_at {
  378. padding-left: 2px;
  379. padding-right: 2px;
  380. }
  381. #content th.column-action-checkbox,
  382. #content th.action-checkbox-column,
  383. #content td.action-checkbox {
  384. padding-left: 2px;
  385. padding-right: 2px;
  386. }
  387. #content th.field-status_with_progress,
  388. #content td.field-status_with_progress {
  389. padding-left: 2px;
  390. padding-right: 2px;
  391. }
  392. #content th.field-size_with_stats,
  393. #content td.field-size_with_stats {
  394. padding-left: 2px;
  395. padding-right: 2px;
  396. }
  397. #content th.field-files,
  398. #content td.field-files {
  399. padding-left: 2px;
  400. padding-right: 2px;
  401. }
  402. #content th.field-files,
  403. #content td.field-files {
  404. padding-left: 2px;
  405. padding-right: 2px;
  406. }
  407. #content th.field-size_with_stats,
  408. #content td.field-size_with_stats {
  409. padding-left: 2px;
  410. padding-right: 2px;
  411. }
  412. #content th.field-status_with_progress,
  413. #content td.field-status_with_progress {
  414. padding-left: 2px;
  415. padding-right: 2px;
  416. }
  417. #content th.field-tags_inline,
  418. #content td.field-tags_inline {
  419. max-width: 220px;
  420. width: 220px;
  421. padding-left: 2px;
  422. padding-right: 2px;
  423. }
  424. #content td.field-tags_inline .tag-pills-inline {
  425. flex-wrap: wrap;
  426. }
  427. #content td.field-tags_inline .tag-editor-inline {
  428. max-width: 220px;
  429. }
  430. #content th.field-tags_inline,
  431. #content td.field-tags_inline {
  432. max-width: 220px;
  433. width: 220px;
  434. padding-left: 2px;
  435. padding-right: 2px;
  436. }
  437. #content td.field-tags_inline .tag-pills-inline {
  438. flex-wrap: wrap;
  439. }
  440. #content td.field-tags_inline .tag-editor-inline {
  441. max-width: 220px;
  442. }
  443. #content td.field-files {
  444. white-space: nowrap;
  445. }
  446. #content td.field-files .files-icons a {
  447. display: inline-flex;
  448. align-items: center;
  449. justify-content: center;
  450. padding: 0;
  451. margin: 0;
  452. line-height: 1;
  453. width: 16px;
  454. height: 16px;
  455. min-width: 16px;
  456. }
  457. #content td.field-files .files-icons svg,
  458. #content td.field-files .files-icons img {
  459. display: block;
  460. margin: 0;
  461. width: 16px;
  462. height: 16px;
  463. }
  464. #content td.field-files .exists-True {
  465. opacity: 1;
  466. }
  467. #content td.field-files .exists-False {
  468. opacity: 0.1;
  469. filter: grayscale(100%);
  470. }
  471. #content td.field-size {
  472. white-space: nowrap;
  473. }
  474. #content td.field-url_str {
  475. word-break: break-all;
  476. min-width: 200px;
  477. }
  478. #content tr b.status-pending {
  479. font-weight: 200;
  480. opacity: 0.6;
  481. }
  482. .loader {
  483. border: 16px solid #f3f3f3; /* Light grey */
  484. border-top: 16px solid #3498db; /* Blue */
  485. border-radius: 50%;
  486. width: 30px;
  487. height: 30px;
  488. box-sizing: border-box;
  489. animation: spin 2s linear infinite;
  490. }
  491. @keyframes spin {
  492. 0% { transform: rotate(0deg); }
  493. 100% { transform: rotate(360deg); }
  494. }
  495. .tag {
  496. float: right;
  497. border-radius: 5px;
  498. background-color: #bfdfff;
  499. padding: 2px 5px;
  500. margin-left: 4px;
  501. margin-top: 1px;
  502. }
  503. .files-icons {
  504. display: inline-flex;
  505. flex-wrap: wrap;
  506. gap: 2px;
  507. vertical-align: middle;
  508. }
  509. .files-icons a {
  510. display: inline-flex;
  511. align-items: center;
  512. justify-content: center;
  513. text-decoration: none;
  514. }
  515. .files-icons .abx-output-icon {
  516. width: 16px;
  517. height: 16px;
  518. display: inline-flex;
  519. align-items: center;
  520. justify-content: center;
  521. border-radius: 0;
  522. color: #1f2937;
  523. background: transparent;
  524. box-shadow: none;
  525. }
  526. .files-icons .abx-output-icon svg {
  527. width: 16px;
  528. height: 16px;
  529. display: block;
  530. }
  531. .exists-False {
  532. opacity: 0.1;
  533. filter: grayscale(100%);
  534. }
  535. #result_list tbody td.field-cmd_str pre,
  536. #result_list tbody td.field-output_str pre {
  537. max-width: 22vw;
  538. word-wrap: anywhere;
  539. white-space: break-spaces;
  540. max-height: 40px;
  541. overflow: hidden;
  542. margin: 2px;
  543. background-color: rgba(0,0,0,0.05);
  544. padding: 1px 4px 16px 8px;
  545. border-radius: 4px;
  546. }
  547. body.filters-collapsed #content #changelist-filter {
  548. display: none !important;
  549. }
  550. body.filters-collapsed .change-list .filtered .results,
  551. body.filters-collapsed .change-list .filtered .paginator,
  552. body.filters-collapsed .filtered #toolbar,
  553. body.filters-collapsed .filtered div.xfull {
  554. margin-right: 0 !important;
  555. }
  556. body.filters-collapsed #content #changelist-filter {
  557. display: none !important;
  558. }
  559. body.filters-collapsed .change-list .filtered .results,
  560. body.filters-collapsed .change-list .filtered .paginator,
  561. body.filters-collapsed .filtered #toolbar,
  562. body.filters-collapsed .filtered div.xfull {
  563. margin-right: 0 !important;
  564. }
  565. #result_list tbody td.field-extractor {
  566. font-weight: 800;
  567. font-variant: small-caps;
  568. }
  569. #result_list tbody td.field-status {
  570. font-variant: small-caps;
  571. }
  572. .inline-group .tabular td.original p {
  573. margin-top: -28px;
  574. }
  575. tbody .output-link {
  576. float: right;
  577. margin-bottom: -25px;
  578. margin-right: -3px;
  579. margin-top: -4px;
  580. opacity: 0.4;
  581. box-shadow: 4px 4px 4px rgba(0,0,0,0.1);
  582. }
  583. tbody .output-link:hover {opacity: 1;}
  584. @keyframes fadeIn {
  585. 0% { opacity: 0; }
  586. 30% { opacity: 0.1;}
  587. 100% { opacity: 1; }
  588. }
  589. .fade-in-progress-url {
  590. animation: fadeIn 14s;
  591. }
  592. /* Snapshot Progress Spinner */
  593. .snapshot-progress-spinner {
  594. display: inline-block;
  595. width: 12px;
  596. height: 12px;
  597. border: 2px solid #e2e8f0;
  598. border-top-color: #3b82f6;
  599. border-radius: 50%;
  600. animation: snapshot-spin 0.8s linear infinite;
  601. }
  602. @keyframes snapshot-spin {
  603. to { transform: rotate(360deg); }
  604. }
  605. /* Status Badges */
  606. .status-badge {
  607. display: inline-block;
  608. padding: 2px 8px;
  609. border-radius: 12px;
  610. font-size: 11px;
  611. font-weight: 500;
  612. }
  613. .status-badge.queued { background: #fef3c7; color: #f59e0b; }
  614. .status-badge.started { background: #dbeafe; color: #3b82f6; }
  615. .status-badge.sealed { background: #d1fae5; color: #10b981; }
  616. .status-badge.succeeded { background: #d1fae5; color: #10b981; }
  617. .status-badge.failed { background: #fee2e2; color: #ef4444; }
  618. .status-badge.backoff { background: #fef3c7; color: #f59e0b; }
  619. .status-badge.skipped { background: #f3f4f6; color: #6b7280; }
  620. /* Progress Bar */
  621. .snapshot-progress-bar {
  622. background: #e2e8f0;
  623. border-radius: 4px;
  624. height: 6px;
  625. overflow: hidden;
  626. }
  627. .snapshot-progress-bar-fill {
  628. height: 100%;
  629. transition: width 0.3s ease;
  630. border-radius: 4px;
  631. }