You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

apps.scss 13KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670
  1. /**
  2. * @copyright Copyright (c) 2014, Jan-Christoph Borchardt (http://jancborchardt.net)
  3. * @copyright Copyright (c) 2017, John Molakvoæ (skjnldsv@protonmail.com)
  4. *
  5. * @license GNU AGPL version 3 or any later version
  6. *
  7. */
  8. /* HEADING STYLING ---------------------------------------------------------- */
  9. h2 {
  10. font-size: 20px;
  11. font-weight: 300;
  12. margin-bottom: 12px;
  13. line-height: 140%;
  14. }
  15. h3 {
  16. font-size: 15px;
  17. font-weight: 300;
  18. margin: 12px 0;
  19. }
  20. /* do not use italic typeface style, instead lighter color */
  21. em {
  22. font-style: normal;
  23. -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=50)';
  24. opacity: .5;
  25. }
  26. /* APP STYLING -------------------------------------------------------------- */
  27. #app {
  28. height: 100%;
  29. width: 100%;
  30. * {
  31. box-sizing: border-box;
  32. }
  33. }
  34. /* APP-NAVIGATION ------------------------------------------------------------*/
  35. /* Navigation: folder like structure */
  36. #app-navigation {
  37. width: 250px;
  38. height: 100%;
  39. float: left;
  40. box-sizing: border-box;
  41. background-color: #fff;
  42. padding-bottom: 44px;
  43. -webkit-user-select: none;
  44. -moz-user-select: none;
  45. -ms-user-select: none;
  46. user-select: none;
  47. border-right: 1px solid #eee;
  48. > ul {
  49. position: relative;
  50. height: 100%;
  51. width: inherit;
  52. overflow: auto;
  53. box-sizing: border-box;
  54. }
  55. li {
  56. position: relative;
  57. width: 100%;
  58. box-sizing: border-box;
  59. }
  60. &.without-app-settings {
  61. padding-bottom: 0;
  62. }
  63. .active.with-menu > a,
  64. .with-counter > a {
  65. padding-right: 50px;
  66. }
  67. .active.with-menu.with-counter > a {
  68. padding-right: 90px;
  69. }
  70. .with-icon a,
  71. .app-navigation-entry-loading a {
  72. padding-left: 44px;
  73. background-size: 16px 16px;
  74. background-position: 14px center;
  75. background-repeat: no-repeat;
  76. }
  77. li > a {
  78. display: block;
  79. width: 100%;
  80. line-height: 44px;
  81. min-height: 44px;
  82. padding: 0 12px;
  83. overflow: hidden;
  84. box-sizing: border-box;
  85. white-space: nowrap;
  86. text-overflow: ellipsis;
  87. color: #000;
  88. opacity: .57;
  89. }
  90. li:hover > a,
  91. li:focus > a,
  92. a:focus,
  93. .selected,
  94. .selected a,
  95. .active,
  96. .active a {
  97. opacity: 1;
  98. box-shadow: inset 2px 0 #0082c9;
  99. }
  100. .collapse {
  101. display: none;
  102. /* hide collapse button initially */
  103. }
  104. .collapsible {
  105. > .collapse {
  106. position: absolute;
  107. height: 44px;
  108. width: 44px;
  109. margin: 0;
  110. padding: 0;
  111. background: none;
  112. background-image: url('../img/actions/triangle-s.svg?v=1');
  113. background-size: 16px;
  114. background-repeat: no-repeat;
  115. background-position: center;
  116. border: none;
  117. border-radius: 0;
  118. outline: none !important;
  119. box-shadow: none;
  120. }
  121. &:hover > a,
  122. &:focus > a {
  123. background-image: none;
  124. }
  125. &:hover,
  126. &:focus {
  127. > .collapse {
  128. display: block;
  129. }
  130. }
  131. .collapse {
  132. -webkit-transform: rotate(-90deg);
  133. -ms-transform: rotate(-90deg);
  134. transform: rotate(-90deg);
  135. }
  136. &.open {
  137. .collapse {
  138. -webkit-transform: rotate(0);
  139. -ms-transform: rotate(0);
  140. transform: rotate(0);
  141. }
  142. background-image: linear-gradient(top, rgb(238, 238, 238) 0%, rgb(245, 245, 245) 100%);
  143. background-image: -webkit-linear-gradient(top, rgb(238, 238, 238) 0%, rgb(245, 245, 245) 100%);
  144. background-image: -ms-linear-gradient(top, rgb(238, 238, 238) 0%, rgb(245, 245, 245) 100%);
  145. }
  146. }
  147. > {
  148. /* Second level nesting for lists */
  149. ul ul {
  150. display: none;
  151. li > a {
  152. padding-left: 32px;
  153. }
  154. }
  155. .with-icon ul li {
  156. > a,
  157. &.app-navigation-entry-loading > a {
  158. padding-left: 68px;
  159. background-position: 44px center;
  160. }
  161. }
  162. }
  163. > ul .collapsible.open {
  164. &:hover,
  165. &:focus {
  166. box-shadow: inset 0 0 3px #ddd;
  167. }
  168. ul {
  169. display: block;
  170. }
  171. }
  172. /* Deleted entries with undo button */
  173. .app-navigation-entry-deleted {
  174. display: inline-block;
  175. height: 44px;
  176. width: 100%;
  177. }
  178. .app-navigation-entry-deleted-description {
  179. padding-left: 12px;
  180. position: relative;
  181. white-space: nowrap;
  182. text-overflow: ellipsis;
  183. overflow: hidden;
  184. display: inline-block;
  185. width: calc(100% - 49px);
  186. line-height: 44px;
  187. float: left;
  188. }
  189. .app-navigation-entry-deleted-button {
  190. margin: 0;
  191. height: 44px;
  192. width: 44px;
  193. line-height: 44px;
  194. border: 0;
  195. display: inline-block;
  196. background-color: transparent;
  197. opacity: .5;
  198. &:hover, &:focus {
  199. opacity: 1;
  200. }
  201. }
  202. /* counter and actions, legacy code */
  203. .utils {
  204. position: absolute;
  205. padding: 7px 7px 0 0;
  206. right: 0;
  207. top: 0;
  208. bottom: 0;
  209. font-size: 12px;
  210. button,
  211. .counter {
  212. width: 44px;
  213. height: 44px;
  214. padding-top: 12px;
  215. }
  216. }
  217. /* drag and drop */
  218. .drag-and-drop {
  219. -webkit-transition: padding-bottom 500ms ease 0s;
  220. transition: padding-bottom 500ms ease 0s;
  221. padding-bottom: 40px;
  222. }
  223. .error {
  224. color: #dd1144;
  225. }
  226. .app-navigation-separator {
  227. border-bottom: 1px solid #ddd;
  228. }
  229. /**
  230. * App navigation utils, buttons and counters for drop down menu
  231. */
  232. .app-navigation-entry-utils {
  233. position: absolute;
  234. top: 0;
  235. right: 0;
  236. z-index: 105;
  237. ul {
  238. display: flex !important;
  239. align-items: center;
  240. justify-content: flex-end;
  241. }
  242. li {
  243. width: 44px !important;
  244. height: 44px;
  245. }
  246. }
  247. .active > .app-navigation-entry-utils li {
  248. display: inline-block;
  249. }
  250. .app-navigation-entry-utils button {
  251. height: 100%;
  252. width: 100%;
  253. margin: 0;
  254. box-shadow: none;
  255. }
  256. .app-navigation-entry-utils-menu-button {
  257. button {
  258. border: 0;
  259. opacity: .5;
  260. background-color: transparent;
  261. background-repeat: no-repeat;
  262. background-position: center;
  263. background-image: url('../img/actions/more.svg?v=1');
  264. }
  265. &:hover button,
  266. &:focus button {
  267. background-color: transparent;
  268. opacity: 1;
  269. }
  270. }
  271. .app-navigation-entry-utils-counter {
  272. overflow: hidden;
  273. text-overflow: hidden;
  274. text-align: right;
  275. font-size: 9pt;
  276. width: 38px;
  277. line-height: 44px;
  278. padding: 0 10px;
  279. }
  280. .app-navigation-entry-utils ul, .app-navigation-entry-menu ul {
  281. list-style-type: none;
  282. }
  283. /* editing an entry */
  284. .app-navigation-entry-edit {
  285. padding-left: 5px;
  286. padding-right: 5px;
  287. display: inline-block;
  288. height: 39px;
  289. width: 100%;
  290. input {
  291. border-bottom-right-radius: 0;
  292. border-top-right-radius: 0;
  293. width: calc(100% - 36px);
  294. padding: 5px;
  295. margin-right: 0;
  296. height: 38px;
  297. float: left;
  298. border: 1px solid rgba(190, 190, 190, 0.9);
  299. }
  300. button,
  301. input[type='submit'] {
  302. width: 36px;
  303. height: 38px;
  304. float: left;
  305. }
  306. .icon-checkmark {
  307. border-bottom-left-radius: 0;
  308. border-top-left-radius: 0;
  309. border-left: 0;
  310. margin-right: 0;
  311. }
  312. }
  313. }
  314. /* APP-CONTENT ---------------------------------------------------------------*/
  315. /* Part where the content will be loaded into */
  316. #app-content {
  317. position: relative;
  318. height: 100%;
  319. overflow-y: auto;
  320. /* no top border for first settings item */
  321. > .section:first-child {
  322. border-top: none;
  323. }
  324. &.with-app-sidebar {
  325. margin-right: 27%;
  326. }
  327. }
  328. #app-content-wrapper {
  329. min-width: 100%;
  330. min-height: 100%;
  331. }
  332. /* APP-SIDEBAR ----------------------------------------------------------------*/
  333. /*
  334. Sidebar: a sidebar to be used within #app-content
  335. have it as first element within app-content in order to shrink other
  336. sibling containers properly. Compare Files app for example.
  337. */
  338. #app-sidebar {
  339. position: fixed;
  340. top: 45px;
  341. right: 0;
  342. left: auto;
  343. bottom: 0;
  344. width: 27%;
  345. min-width: 300px;
  346. display: block;
  347. background: #fff;
  348. border-left: 1px solid #eee;
  349. -webkit-transition: margin-right 300ms;
  350. transition: margin-right 300ms;
  351. overflow-x: hidden;
  352. overflow-y: auto;
  353. visibility: visible;
  354. z-index: 500;
  355. &.disappear {
  356. visibility: hidden;
  357. }
  358. }
  359. /* APP-SETTINGS ---------------------------------------------------------------*/
  360. /* settings area */
  361. #app-settings {
  362. position: fixed;
  363. width: 250px;
  364. /* change to 100% when layout positions are absolute */
  365. bottom: 0;
  366. z-index: 140;
  367. &.open #app-settings-content,
  368. &.opened #app-settings-content {
  369. display: block;
  370. }
  371. }
  372. #app-settings-content {
  373. display: none;
  374. padding: 10px;
  375. background-color: #fff;
  376. /* restrict height of settings and make scrollable */
  377. max-height: 300px;
  378. overflow-y: auto;
  379. border-right: 1px solid #eee;
  380. width: 250px;
  381. box-sizing: border-box;
  382. /* display input fields at full width */
  383. input[type='text'] {
  384. width: 93%;
  385. }
  386. }
  387. #app-settings-header {
  388. border-right: 1px solid #eee;
  389. width: 250px;
  390. box-sizing: border-box;
  391. }
  392. .settings-button {
  393. display: block;
  394. height: 44px;
  395. width: 100%;
  396. padding: 0;
  397. margin: 0;
  398. background-color: #fff;
  399. background-image: url('../img/actions/settings.svg?v=1');
  400. background-position: 14px center;
  401. background-repeat: no-repeat;
  402. box-shadow: none;
  403. border: 0;
  404. border-radius: 0;
  405. text-align: left;
  406. padding-left: 42px;
  407. font-weight: normal;
  408. &:hover,
  409. &:focus {
  410. background-color: #fff;
  411. }
  412. &.opened {
  413. &:hover, &:focus {
  414. background-color: #fff;
  415. }
  416. }
  417. }
  418. /* GENERAL SECTION ---------------------------------------------------------- */
  419. .section {
  420. display: block;
  421. padding: 30px;
  422. color: #555;
  423. margin-bottom: 24px;
  424. &.hidden {
  425. display: none !important;
  426. }
  427. /* slight position correction of checkboxes and radio buttons */
  428. input {
  429. &[type='checkbox'],
  430. &[type='radio'] {
  431. vertical-align: -2px;
  432. margin-right: 4px;
  433. }
  434. }
  435. }
  436. .sub-section {
  437. position: relative;
  438. margin-top: 10px;
  439. margin-left: 27px;
  440. margin-bottom: 10px;
  441. }
  442. .appear {
  443. opacity: 1;
  444. -webkit-transition: opacity 500ms ease 0s;
  445. -moz-transition: opacity 500ms ease 0s;
  446. -ms-transition: opacity 500ms ease 0s;
  447. -o-transition: opacity 500ms ease 0s;
  448. transition: opacity 500ms ease 0s;
  449. &.transparent {
  450. opacity: 0;
  451. }
  452. }
  453. /* DROPDOWN ----------------------------------------------------------------- */
  454. .dropdown {
  455. background: #eee;
  456. border-bottom-left-radius: 5px;
  457. border-bottom-right-radius: 5px;
  458. box-shadow: 0 1px 1px #777;
  459. display: block;
  460. margin-right: 0;
  461. position: absolute;
  462. right: 0;
  463. width: 420px;
  464. z-index: 500;
  465. padding: 16px;
  466. }
  467. /* TABS --------------------------------------------------------------------- */
  468. .tabHeaders {
  469. display: inline-block;
  470. margin: 15px;
  471. .tabHeader {
  472. float: left;
  473. padding: 5px;
  474. cursor: pointer;
  475. color: #888;
  476. margin-bottom: 1px;
  477. a {
  478. color: #888;
  479. margin-bottom: 1px;
  480. }
  481. &.selected {
  482. font-weight: 600;
  483. border-bottom: 1px solid #333;
  484. }
  485. &:hover {
  486. border-bottom: 1px solid #333;
  487. }
  488. &.selected, &:hover {
  489. margin-bottom: 0px;
  490. color: #000;
  491. a {
  492. margin-bottom: 0px;
  493. color: #000;
  494. }
  495. }
  496. }
  497. }
  498. .tabsContainer {
  499. clear: left;
  500. .tab {
  501. padding: 0 15px 15px;
  502. }
  503. }
  504. /* POPOVER MENU ------------------------------------------------------------- */
  505. .ie,
  506. .edge {
  507. .bubble, .bubble:after,
  508. .popovermenu, .popovermenu:after,
  509. #app-navigation .app-navigation-entry-menu,
  510. #app-navigation .app-navigation-entry-menu:after {
  511. border: 1px solid #eee;
  512. }
  513. }
  514. .bubble,
  515. .app-navigation-entry-menu,
  516. .popovermenu {
  517. position: absolute;
  518. background-color: #fff;
  519. color: #333;
  520. border-radius: 3px;
  521. border-top-right-radius: 0;
  522. z-index: 110;
  523. margin: 5px;
  524. margin-top: -5px;
  525. right: 0;
  526. -webkit-filter: drop-shadow(0 0 5px rgba(150, 150, 150, 0.75));
  527. -moz-filter: drop-shadow(0 0 5px rgba(150, 150, 150, 0.75));
  528. -ms-filter: drop-shadow(0 0 5px rgba(150, 150, 150, 0.75));
  529. -o-filter: drop-shadow(0 0 5px rgba(150, 150, 150, 0.75));
  530. filter: drop-shadow(0 0 5px rgba(150, 150, 150, 0.75));
  531. display: none;
  532. &:after {
  533. bottom: 100%;
  534. /* Min-width of popover is 36px and arrow width is 20px
  535. wich leaves us 8px right and 8px left */
  536. right: 8px;
  537. /* change this to adjust the arrow position */
  538. border: solid transparent;
  539. content: ' ';
  540. height: 0;
  541. width: 0;
  542. position: absolute;
  543. pointer-events: none;
  544. border-color: rgba(238, 238, 238, 0);
  545. border-bottom-color: #fff;
  546. border-width: 10px;
  547. }
  548. /* Center the popover */
  549. &.menu-center {
  550. transform: translateX(50%);
  551. right: 50%;
  552. margin-right: 0;
  553. border-top-right-radius: 3px;
  554. &:after {
  555. right: 50%;
  556. transform: translateX(50%);
  557. }
  558. }
  559. /* Align the popover to the left */
  560. &.menu-left {
  561. right: auto;
  562. left: 0;
  563. margin-right: 0;
  564. border-top-left-radius: 0;
  565. border-top-right-radius: 3px;
  566. &:after {
  567. left: 6px;
  568. right: auto;
  569. }
  570. }
  571. &.open {
  572. display: block;
  573. }
  574. ul {
  575. /* Overwrite #app-navigation > ul ul */
  576. display: flex !important;
  577. flex-direction: column;
  578. }
  579. li {
  580. display: flex;
  581. > button,
  582. > a,
  583. > .menuitem {
  584. cursor: pointer;
  585. line-height: 36px;
  586. border: 0;
  587. -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=50)' !important;
  588. filter: alpha(opacity = 50) !important;
  589. opacity: .5 !important;
  590. background-color: transparent;
  591. display: flex;
  592. align-items: center;
  593. width: auto;
  594. height: auto;
  595. margin: 0;
  596. font-weight: inherit;
  597. box-shadow: none;
  598. /* prevent .action class to break the design */
  599. &.action {
  600. padding: inherit !important;
  601. }
  602. &:hover, &:focus {
  603. -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)' !important;
  604. filter: alpha(opacity = 100) !important;
  605. opacity: 1 !important;
  606. background-color: transparent;
  607. }
  608. > span {
  609. cursor: pointer;
  610. white-space: nowrap;
  611. }
  612. > p {
  613. width: 150px;
  614. line-height: 1.6em;
  615. padding: 8px 0;
  616. > span {
  617. -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=70)' !important;
  618. filter: alpha(opacity = 70) !important;
  619. opacity: .7 !important;
  620. }
  621. }
  622. /* Add padding if contains icon+text */
  623. &:not(:empty) {
  624. padding: 0 !important;
  625. padding-right: 10px !important;
  626. }
  627. > img {
  628. width: 16px;
  629. padding: 0 10px;
  630. }
  631. }
  632. [class^='icon-'],
  633. [class*=' icon-']{
  634. /* Keep padding to define the width to
  635. assure correct position of a possible text */
  636. padding: 18px 0 18px 36px;
  637. min-width: 0; /* Overwrite icons*/
  638. min-height: 0;
  639. background-position: 10px center
  640. }
  641. }
  642. }