_terms-privacy.scss 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370
  1. @use '../abstracts/variables' as v;
  2. @use '../abstracts/mixins' as mix;
  3. @use 'sass:map';
  4. // SHARED STYLES FOR LEGAL PAGES (Terms & Conditions, Privacy Policy, etc.)
  5. .terms-page,
  6. .privacy-page {
  7. // Header Section
  8. .terms-header,
  9. .privacy-header {
  10. padding: map.get(v.$spacers, 8) 0 map.get(v.$spacers, 6);
  11. position: relative;
  12. overflow: hidden;
  13. @include mix.respond-to-max('md') {
  14. padding: map.get(v.$spacers, 6) 0 map.get(v.$spacers, 4);
  15. }
  16. &::before {
  17. content: '';
  18. position: absolute;
  19. top: 0;
  20. left: 0;
  21. right: 0;
  22. bottom: 0;
  23. background-image:
  24. radial-gradient(circle at 20% 20%, rgba(255,255,255,0.1) 2px, transparent 2px),
  25. radial-gradient(circle at 80% 40%, rgba(255,255,255,0.08) 1px, transparent 1px),
  26. radial-gradient(circle at 40% 80%, rgba(255,255,255,0.06) 1.5px, transparent 1.5px);
  27. background-size: 100px 100px, 150px 150px, 120px 120px;
  28. opacity: 0.3;
  29. }
  30. .heading-lg {
  31. font-size: map.get(v.$font-sizes, '4xl');
  32. margin-bottom: map.get(v.$spacers, 3);
  33. position: relative;
  34. z-index: 2;
  35. @include mix.respond-to-max('md') {
  36. font-size: map.get(v.$font-sizes, '3xl');
  37. }
  38. @include mix.respond-to-max('sm') {
  39. font-size: map.get(v.$font-sizes, '2xl');
  40. }
  41. }
  42. .subtitle {
  43. font-size: map.get(v.$font-sizes, 'lg');
  44. opacity: 0.9;
  45. position: relative;
  46. z-index: 2;
  47. max-width: 700px;
  48. margin: 0 auto map.get(v.$spacers, 3);
  49. @include mix.respond-to-max('md') {
  50. font-size: map.get(v.$font-sizes, 'base');
  51. }
  52. }
  53. .last-updated {
  54. font-size: map.get(v.$font-sizes, 'sm');
  55. opacity: 0.8;
  56. position: relative;
  57. z-index: 2;
  58. }
  59. }
  60. // Content Section
  61. .terms-content,
  62. .privacy-content {
  63. // Sidebar
  64. .terms-sidebar,
  65. .privacy-sidebar {
  66. width: 280px;
  67. flex-shrink: 0;
  68. @include mix.respond-to-max('lg') {
  69. display: none;
  70. }
  71. .sidebar-sticky {
  72. position: sticky;
  73. top: 120px;
  74. background-color: v.$white;
  75. padding: map.get(v.$spacers, 4);
  76. border-radius: v.$border-radius-lg;
  77. @include mix.box-shadow(v.$box-shadow);
  78. h3 {
  79. color: v.$black;
  80. font-size: map.get(v.$font-sizes, 'lg');
  81. margin-bottom: map.get(v.$spacers, 3);
  82. border-bottom: 2px solid v.$primary;
  83. padding-bottom: map.get(v.$spacers, 2);
  84. }
  85. }
  86. .sidebar-menu {
  87. list-style: none;
  88. li {
  89. margin-bottom: map.get(v.$spacers, 1);
  90. &:last-child {
  91. margin-bottom: 0;
  92. }
  93. }
  94. }
  95. .sidebar-link {
  96. display: block;
  97. padding: map.get(v.$spacers, 2);
  98. font-size: map.get(v.$font-sizes, 'sm');
  99. color: v.$dark-gray;
  100. text-decoration: none;
  101. border-radius: v.$border-radius;
  102. @include mix.transition(v.$transition-base);
  103. &:hover {
  104. background-color: rgba(v.$primary, 0.1);
  105. color: v.$primary;
  106. @include mix.transform(translateX(5px));
  107. }
  108. &.active {
  109. background-color: v.$primary;
  110. color: v.$white;
  111. @include mix.transform(translateX(5px));
  112. }
  113. }
  114. }
  115. // Main Content
  116. .terms-main,
  117. .privacy-main {
  118. flex: 1;
  119. max-width: 100%;
  120. @include mix.respond-to-min('lg') {
  121. padding-left: map.get(v.$spacers, 5);
  122. }
  123. }
  124. .term-section,
  125. .privacy-section {
  126. margin-bottom: map.get(v.$spacers, 8);
  127. &:last-child {
  128. margin-bottom: map.get(v.$spacers, 6);
  129. }
  130. @include mix.respond-to-max('md') {
  131. margin-bottom: map.get(v.$spacers, 6);
  132. }
  133. }
  134. .section-title {
  135. font-size: map.get(v.$font-sizes, '2xl');
  136. margin-bottom: map.get(v.$spacers, 4);
  137. padding-bottom: map.get(v.$spacers, 2);
  138. border-bottom: 3px solid v.$primary;
  139. position: relative;
  140. @include mix.respond-to-max('md') {
  141. font-size: map.get(v.$font-sizes, 'xl');
  142. margin-bottom: map.get(v.$spacers, 3);
  143. }
  144. &::after {
  145. content: '';
  146. position: absolute;
  147. bottom: -3px;
  148. left: 0;
  149. width: 60px;
  150. height: 3px;
  151. background-color: v.$primary-dark;
  152. }
  153. }
  154. .subsection-title {
  155. font-size: map.get(v.$font-sizes, 'lg');
  156. color: v.$accent;
  157. margin: map.get(v.$spacers, 4) 0 map.get(v.$spacers, 2);
  158. @include mix.respond-to-max('md') {
  159. font-size: map.get(v.$font-sizes, 'base');
  160. margin: map.get(v.$spacers, 3) 0 map.get(v.$spacers, 2);
  161. }
  162. }
  163. p {
  164. font-size: map.get(v.$font-sizes, 'base');
  165. line-height: 1.7;
  166. @include mix.respond-to-max('md') {
  167. font-size: map.get(v.$font-sizes, 'sm');
  168. line-height: 1.6;
  169. }
  170. }
  171. .terms-list,
  172. .privacy-list {
  173. margin: map.get(v.$spacers, 3) 0;
  174. padding-left: map.get(v.$spacers, 4);
  175. list-style: circle;
  176. li {
  177. margin-bottom: map.get(v.$spacers, 2);
  178. font-size: map.get(v.$font-sizes, 'base');
  179. line-height: 1.6;
  180. position: relative;
  181. @include mix.respond-to-max('md') {
  182. font-size: map.get(v.$font-sizes, 'sm');
  183. }
  184. &::marker {
  185. color: v.$primary;
  186. }
  187. &:last-child {
  188. margin-bottom: 0;
  189. }
  190. strong {
  191. color: v.$white;
  192. font-weight: map.get(v.$font-weights, 'semibold');
  193. }
  194. }
  195. }
  196. // Info Boxes
  197. .highlight-box,
  198. .warning-box,
  199. .info-box {
  200. padding: map.get(v.$spacers, 4);
  201. margin: map.get(v.$spacers, 4) 0;
  202. border-radius: v.$border-radius-lg;
  203. border-left: 4px solid;
  204. @include mix.box-shadow(v.$box-shadow);
  205. @include mix.respond-to-max('md') {
  206. padding: map.get(v.$spacers, 3);
  207. margin: map.get(v.$spacers, 3) 0;
  208. }
  209. p {
  210. margin-bottom: map.get(v.$spacers, 2);
  211. &:last-child {
  212. margin-bottom: 0;
  213. }
  214. }
  215. a {
  216. color: v.$primary;
  217. text-decoration: none;
  218. font-weight: map.get(v.$font-weights, 'medium');
  219. &:hover {
  220. text-decoration: underline;
  221. }
  222. }
  223. }
  224. .highlight-box {
  225. background-color: rgba(v.$primary, 0.05);
  226. border-left-color: v.$primary;
  227. }
  228. .warning-box {
  229. background-color: rgba(#ffc107, 0.05);
  230. border-left-color: #ffc107;
  231. }
  232. .info-box {
  233. background-color: rgba(#17a2b8, 0.05);
  234. border-left-color: #17a2b8;
  235. }
  236. .contact-info {
  237. background-color: v.$light-gray;
  238. padding: map.get(v.$spacers, 4);
  239. border-radius: v.$border-radius-lg;
  240. margin-top: map.get(v.$spacers, 3);
  241. @include mix.respond-to-max('md') {
  242. padding: map.get(v.$spacers, 3);
  243. }
  244. .contact-item {
  245. @include mix.flex(row, flex-start, flex-start);
  246. gap: map.get(v.$spacers, 2);
  247. margin-bottom: map.get(v.$spacers, 2);
  248. &:last-child {
  249. margin-bottom: 0;
  250. }
  251. @include mix.respond-to-max('sm') {
  252. @include mix.flex(column, flex-start, flex-start);
  253. gap: map.get(v.$spacers, 1);
  254. }
  255. span:first-child {
  256. min-width: 140px;
  257. color: v.$black;
  258. font-weight: map.get(v.$font-weights, 'medium');
  259. @include mix.respond-to-max('sm') {
  260. min-width: auto;
  261. }
  262. }
  263. a {
  264. color: v.$primary;
  265. text-decoration: none;
  266. &:hover {
  267. text-decoration: underline;
  268. }
  269. }
  270. }
  271. }
  272. .terms-footer,
  273. .privacy-footer {
  274. margin-top: map.get(v.$spacers, 8);
  275. padding: map.get(v.$spacers, 4) 0;
  276. border-top: 1px solid v.$light-gray;
  277. @include mix.respond-to-max('md') {
  278. margin-top: map.get(v.$spacers, 6);
  279. padding: map.get(v.$spacers, 3) 0;
  280. }
  281. @include mix.respond-to-max('sm') {
  282. .d-flex {
  283. @include mix.flex(column, center, center);
  284. text-align: center;
  285. }
  286. }
  287. .text-muted {
  288. color: v.$gray;
  289. font-size: map.get(v.$font-sizes, 'sm');
  290. @include mix.respond-to-max('md') {
  291. font-size: map.get(v.$font-sizes, 'xs');
  292. }
  293. }
  294. }
  295. }
  296. }
  297. // Smooth scrolling behavior
  298. html {
  299. scroll-behavior: smooth;
  300. }
  301. // Active section highlighting (optional JavaScript enhancement)
  302. .terms-sidebar .sidebar-link.active,
  303. .privacy-sidebar .sidebar-link.active {
  304. background-color: v.$primary;
  305. color: v.$white;
  306. }