@import "parameters"; @import "bootstrap"; @import "rails_bootstrap_forms"; /* Bootstrap + r2 fixes */ :root[dir=rtl] { .bs-tooltip-auto[data-popper-placement^="right"] .tooltip-arrow { /* no-r2 */ right: unset !important; left: calc(-1 * var(--bs-tooltip-arrow-height)) !important; &::before { /* no-r2 */ left: unset !important; right: -1px !important; } } .bs-tooltip-auto[data-popper-placement^="left"] .tooltip-arrow { /* no-r2 */ left: unset !important; right: calc(-1 * var(--bs-tooltip-arrow-height)) !important; &::before { /* no-r2 */ right: unset !important; left: -1px !important; } } } /* Styles common to large and small screens */ /* Default rules for the body of every page */ body { font-size: $typeheight; } p > img { width: auto; max-width: 100%; } small, aside { font-size: 12px; } #container { position: relative; } .small_icon { vertical-align: middle; margin-right: $lineheight * 0.25; } [dir=rtl] { /* no-r2 */ text-align: right; } [dir=ltr] { /* no-r2 */ text-align: left; } /* Rules for icons */ .icon { display: inline-block; vertical-align: top; width: 20px; height: 20px; background: transparent image-url("sprite.png") no-repeat 0 0; background-image: image-url("sprite.svg"); text-indent: -9999px; overflow: hidden; } .icon.search { /* no-r2 */ background-position: 0 0; } .icon.donate { /* no-r2 */ background-position: -20px 0; } .icon.zoomin { /* no-r2 */ background-position: -40px 0; } .icon.zoomout { /* no-r2 */ background-position: -60px 0; } .icon.geolocate { /* no-r2 */ background-position: -80px 0; } .active .icon.geolocate { /* no-r2 */ background-position: -80px -20px; } .icon.layers { /* no-r2 */ background-position: -100px 0; } .icon.key { /* no-r2 */ background-position: -120px 0; } .icon.share { /* no-r2 */ background-position: -140px 0; } .icon.clipboard { /* no-r2 */ background-position: -160px 0; } .icon.link { /* no-r2 */ background-position: -180px 0; } .icon.close { /* no-r2 */ background-position: -200px 0; } .icon.close:hover { /* no-r2 */ background-position: -200px -20px; } .icon.check { /* no-r2 */ background-position: -220px 0; } .icon.note { /* no-r2 */ background-position: -240px 0; } .icon.note.grey { /* no-r2 */ background-position: -240px -20px; } .icon.query { /* no-r2 */ background-position: -260px 0; } /* Utility for de-emphasizing content */ .text-muted a { color: $blue; } /* Rules for borders */ /* These add additional colours to those provided by bootstrap */ .border-grey { border-color: $grey !important; } .border-lightgrey { border-color: $lightgrey !important; } /* Rules for the header */ #menu-icon { display: none; float: right; background: image-url("menu-icon.png") no-repeat; background-size: 30px 30px; width: 30px; height: 30px; margin: 14px 10px 0 0; opacity: 0.6; } header { height: $headerHeight; position: relative; z-index: 1001; font-size: 14px; h1, nav, nav > ul, nav > ul > li { display: inline-block; } > * { height: 100%; padding: $lineheight * 0.5; } h1, nav.primary { float: left; } img.logo { margin-top: -2px; } h1 { font-size: 18px; line-height: 1.2; padding-top: 15px; } .btn { font-size: 14px; } } nav.primary { & > .btn-group .btn-outline-primary { @include button-outline-variant($green, $color-hover: $white, $active-color: $white); } .disabled { .btn-outline-primary { color: $grey; cursor: default; .caret { border-top-color: $grey; } &:hover { background-color: lighten($green, 30%); } } } // Small tweaks to the toggle to stop the primary colour showing through // when the menu is shown .show > .btn-outline-primary.dropdown-toggle { background-color: $green; border-color: $green; &:focus { box-shadow: 0 0 0 0.2rem fade-out($green, 0.5); } } } nav.secondary { position: absolute; right: 0; .nav-link { padding: 0.2rem; color: $darkgrey; } > ul li.current a { color: darken($darkgrey, 25%); } #inboxanchor { background-color: lighten($grey, 10%); } } nav.primary, nav.secondary { .dropdown-item { &:hover, &:active { background-color: $green; color: white; } } } #compact-secondary-nav { display: none; } body.compact-nav { #compact-secondary-nav { display: inline-block; } .compact-hide { display: none; } } body.small-nav { #menu-icon { display: block; } nav.primary, nav.secondary { float: none !important; position: relative; display: block; clear: both; } header { height: auto; min-height: $headerHeight; background: #fff; &.closed nav { display: none; } .search_forms { display: block; } } #sidebar .search_forms, #edit_tab, #export_tab { display: none; } nav.primary { padding: 0; ul, li { border: none; border-radius: 0; width: 100%; } ul { border-top: 1px solid #eee; li { border-bottom: 1px solid #eee; border-right: none; > a { border-radius: 0; width: 100%; text-align: center; font-size: 15px; } } } .btn-group { width: 100%; padding: 10px; } } nav.secondary { .user-menu, .login-menu { width: 100%; } } #compact-secondary-nav { display: none; } .compact-hide { display: inline-block; } .overlay-sidebar #sidebar .welcome { display: none; } .overlay-sidebar #sidebar #banner { display: none; } } /* Utility for styling notification numbers */ .count-number { background: lighten($green, 30%); color: $gray-800; font-weight: $font-weight-normal; } /* Rules for the message shown in place of the map when javascript is disabled */ #noscript { z-index: 20000000; margin-left: 400px; margin-top: 50px; } /* Rules for Leaflet maps */ .leaflet-top.leaflet-right, .leaflet-top.leaflet-left { height: 100%; column-gap: 10px; display: flex; flex-direction: column; flex-wrap: wrap-reverse; } .leaflet-control .control-button { display: block; height: 40px; width: 40px; background-color: #333; background-color: rgba(0,0,0,.6); outline: none; &:hover, &:focus { background-color: black; } &.disabled, &.leaflet-disabled { background-color: #333; background-color: rgba(0,0,0,.5); cursor: default; } &.active { background-color: $vibrant-green; } &-first { border-start-start-radius: 4px; } &-last { border-end-start-radius: 4px; margin-bottom: 10px; } .icon { margin: 10px; } } /* Rules for the sidebar and main map area */ .map-layout { #content { overflow: hidden; position: absolute; top: $headerHeight; bottom: 0; width: 100%; } #sidebar, #map { position: relative; height: 100%; overflow-x: hidden; overflow-y: auto; } #sidebar { float: left; width: $sidebarWidth; background: #fff; #sidebar_loader { display: none; } #sidebar_content { padding: $spacer; } > div { position: relative; } } .overlay-sidebar #sidebar { position: absolute; z-index: 1000; height: auto; overflow: hidden; #banner { display: block; } .welcome { display: block; } #sidebar_content { display: none; } } .welcome { display: none; p { font-size: 110%; font-weight: 300; } } #banner { display: none; img { display: block; width: $sidebarWidth; } button.btn-close { background-color: rgba(255, 255, 255, 0.5); opacity: 1.0; } } #map { height: 100%; overflow: hidden; &.query-active { cursor: help; } &.query-disabled { cursor: not-allowed; } .leaflet-marker-draggable { cursor: move; } } #map-ui { display: none; position: relative; float: right; width: 250px; height: 100%; background: white; overflow: auto; .section { border-bottom: 1px solid $grey; padding: $spacer; } } } @include media-breakpoint-down(md) { body.map-layout { #sidebar, #map { position: relative; overflow-x: hidden; width: 100%; height: 50%; } #map-ui { z-index: 9999; width: 100%; height: 50%; overflow-y: scroll; } .overlay-sidebar { #sidebar { position: absolute; width: 350px; height: auto; overflow: hidden; } #map, #map-ui { height: 100%; } } } } .layers-ui { .base-layers { .leaflet-container { width: 100%; height: 50px; cursor: pointer; } li { overflow: hidden; border-radius: 3px; border: 2px solid #fff; margin-bottom: 8px; position: relative; transition: border-color 0.08s ease-in; label { position: absolute; top: 0; left: 0; padding: 2px 6px; border-bottom-right-radius: 3px; cursor: pointer; font-weight: 600; font-size: 16px; text-stroke: 2px #fff; background: rgba(255,255,255,.9); z-index: 1000; input[type="radio"] { display: none; } } &.active { border-color: darken($green, 10%); } &:hover { border-color: $grey; &.active { border-color: darken($green, 20%); } } } } .overlay-layers { p { font-size: 13px; margin-bottom: 8px; } li.disabled { color: $darkgrey; } } } .share-ui { #mapnik_scale { width: 100px; } } .leaflet-top { top: 10px !important; .leaflet-control { margin-right: 0px !important; margin-top: 0px !important; } } .leaflet-popup-scrolled { padding-right: $lineheight; border-bottom: 0px !important; border-top: 0px !important; } .leaflet-popup-content-wrapper { border-radius: 4px !important; } /* Rules for attribution text under the main map shown on printouts */ .donate-attr { color: darken($green, 10%) !important; } /* Rules for the sidebar */ #browse_status { input { display: block; margin-left: auto; margin-right: auto; } > div { padding: $spacer; } } /* Temporary label size override until we remove site-wide font customisation */ form { label { font-size: 16px; } .col-form-label { font-size: 16px; } } /* Stop bootstrap 5 from floating legends when they don't need to be */ legend { float: none; } /* Override the text colour for primary and secondary buttons, to match our bootstrap 4 colours. Note this has accessibility issues, which is why bootstrap 5 calculates black as the appropriate colour, and we should reconsider our colours at some point with that in mind. */ .btn-primary { @include button-variant($primary, $primary, $color: $white, $hover-color: $white, $active-color: $white, $disabled-color: $white); } .btn-secondary { @include button-variant($secondary, $secondary, $color: $white, $hover-color: $white, $active-color: $white, $disabled-color: $white); } .btn-outline-secondary { @include button-outline-variant($secondary, $color-hover: $white, $active-color: $white); } /* Rules for the search and direction forms */ header .search_forms, .directions_form { display: none; } /* Rules for the map key which appears in the popout sidebar */ #mapkey { .mapkey-table-key img { display: block; margin-left: auto; margin-right: auto; } } /* Rules for search sidebar */ #sidebar .search_results_entry { ul li.selected { background: $list-highlight; } .search_more .loader { display: none; } } /* Rules for routing */ div.direction { background-image: image-url('routing-sprite.png'); width: 20px; height: 20px; background-repeat: no-repeat; } @for $i from 0 through 25 { div.direction.i#{$i} { background-position: #{($i)*-20}px 0px; } } td.distance { font-size: x-small; } tr.turn { cursor: pointer; } tr.turn:hover { background: $list-highlight; } .routing_marker { width: 15px; cursor: move; } .browse_status { display: none; } /* Rules for the history sidebar */ #sidebar .changesets { li { &.selected { background: $list-highlight; } /* color is derived from changeset bbox fillColor in history.js */ a.stretched-link > span, a:not(.stretched-link), [title] { position: relative; z-index: 2; /* needs to be higher than Bootstrap's stretched link ::after z-index */ } } .changeset_more .loader { display: none; width: 100%; } } /* Rules for the browse sidebar */ #sidebar_content { .browse-section { padding-bottom: $spacer; margin-bottom: $spacer; border-bottom: 1px solid $grey; h4:first-child { word-wrap: break-word; } } .browse-section:last-of-type { border-bottom: none; } .browse-tag-list { background-color: $offwhite; table-layout: fixed; border-collapse: separate; border-spacing: 0; width: 100%; margin-bottom: $spacer; th, td { border-bottom: 1px solid $grey; } tr:last-child th, tr:last-child td { border-bottom: 0; } .browse-tag-k, .browse-tag-v { width: 50%; padding: 6px 10px; word-wrap: break-word; white-space: pre-wrap; } .browse-tag-k { font-weight: 500; background-color: $offwhite; } .browse-tag-v { border-left: 1px solid $grey; background-color: #fff; } .colour-preview-box { float: right; width: 14px; height: 14px; margin: 4px 0px; border: 1px solid rgba(0, 0, 0, .1); // add color via inline css on element: background-color: ; } } span.action-button:hover { cursor: pointer; text-decoration: underline; } .note-description { overflow: hidden; margin: 0 0 10px 10px; } .query-results { display: none; ul { li { &.query-result { cursor: pointer; } &.selected { background: $list-highlight; } } } } } /* Bootstrap buttons don't have any vertical margin, so they touch when adjacent buttons wrap onto a new line e.g. wide form buttons on a narrow sidebar */ .btn-wrapper { > .btn { margin-bottom: $spacer * 0.25; } } /* Rules for export sidebar */ .export_form { .export_area_inputs, .export_button { text-align: center; } .export_area_inputs { margin-bottom: $spacer; input[type="text"] { width: 100px; text-align: center; } } .export_boxy { background: $lightgrey; #maxlat { margin-top: -1px; } #minlon { float: left; /* no-r2 */ margin-left: -1px; } #maxlon { float: right; /* no-r2 */ margin-right: -1px; } #minlat { margin-bottom: -1px; } } } /* Rules for edit pages */ .site-edit { #content { position: absolute; top: $headerHeight; bottom: 0; width: 100%; } #map { height: 100%; overflow: hidden; } } /* Rules for non-map content pages */ .content-heading { background: $lightgrey; } .content-inner { position: relative; max-width: 960px; margin: auto; padding: $lineheight; } /* Overrides for pages that use new layout conventions */ .header-illustration { background-position: 0 0; background-repeat: no-repeat; position: relative; min-height: 200px; width: 100%; left: 0; bottom: 0; &.new-user-main { background-image: image-url("sign-up-illustration.png"); } &.confirm-main { background-image: image-url("confirm-illustration.png"); } &.new-user-terms { background-image: image-url("terms-illustration.png"); } &.new-user-arm { height: 110px; width: 130px; left: 280px; top: 180px; background-image: image-url("sign-up-illustration-arm.png"); position: absolute; z-index: 100; pointer-events: none; } } [dir=rtl] .header-illustration { transform: scaleX(-1); h1 { transform: scaleX(-1); } } #content.maximised { top: 0; left: 0; right: 0; bottom: 0; border: 0; z-index: 2000; } /* Rules for small maps in content areas */ .content_map { height: 200px; margin-bottom: $lineheight; } @include media-breakpoint-up(md) { .content_map { height: 400px; } } /* Rules for the user map */ .content_map .leaflet-popup-content { margin: $spacer; min-height: 50px; } /* Rules for user popups on maps */ .user_popup { min-width: 200px; p { padding: 0 0 5px 0; margin: 0 0 0 60px; font-size: 12px; } } /* Rules for the diary entry page */ .diary_entries { #map { height: 400px; display: none; } .comments { max-width: 740px; } .diary-comment { border-top: 1px dashed $grey; &:first-child { border-top: 1px solid $grey; } } } /* Rules for the account confirmation page */ .users-terms { .legale { padding: $lineheight; margin-bottom: $lineheight; overflow: auto; height: 20em; li { list-style: inherit; } ol ol { list-style-type: lower-alpha; } } } /* Rules for messages pages */ .messages { .inbox-row { background: $offwhite; } .inbox-row-unread td { background: #CBEEA7; } } .search_form { background-color: $lightgrey; #query { z-index: 0; } .describe_location { font-size: 10px; } } .directions_form { background-color: $lightgrey; } /* Rules for user images */ img.user_image { max-width: 100px; max-height: 100px; } img.user_thumbnail { max-width: 50px; max-height: 50px; } img.user_thumbnail_tiny { width: auto; height: auto; max-width: 25px; max-height: 25px; } /* General styles for action lists / subnavs */ nav.secondary-actions { margin-left: -11px; overflow: hidden; > ul { display: flex; flex-direction: row; flex-wrap: wrap; margin-bottom: 0; margin-left: -1px; padding: 0; > li { flex-basis: auto; list-style: none; border-left: 1px solid $grey; padding-left: $lineheight * 0.5; margin-right: $lineheight * 0.5; margin-bottom: $lineheight * 0.125; } } } div.secondary-actions { padding: 10px; text-align: center; } /* Rules for rich text */ .richtext, .prose { code { background: $lightgrey; padding: 2px 3px; } pre { background: $lightgrey; padding: 2px 3px; white-space: pre-wrap; code { padding: 0; } } img { padding: $lineheight; background-color: $offwhite; display: block; max-width: 100%; margin: auto; } blockquote { border-left: $lineheight solid $offwhite; padding-left: $lineheight; margin: 0; color: $darkgrey; } } /* Rules for the iD editor */ .id-embed { width: 100%; height: 100%; } /* Rules for the "Welcome" page */ .site-welcome, .site-fixthemap { .sprite { background-image: image-url("welcome-sprite.png"); background-size: 500px 250px; display: block; } .sprite.small { width: 50px; height: 50px; } .sprite.x { /* no-r2 */ background-position: -50px 0; } .sprite.term { margin-right: 10px; vertical-align: middle; } .sprite.node { /* no-r2 */ background-position: -100px 0; } .sprite.way { /* no-r2 */ background-position: -150px 0; } .sprite.tag { /* no-r2 */ background-position: -200px 0; } .sprite.editor { /* no-r2 */ background-position: -250px 0; } .sprite.question { /* no-r2 */ background-position: -300px 0; } .sprite.rules { /* no-r2 */ background-position: -350px 0; } .icon.note { background-color: #333; border-radius: 4px; } } .site-about #content { background-color: $lightgrey; .content-inner { max-width: 760px; } .attr { margin-top: -20px; h1 { span { color: $vibrant-green; } } .user-image { height: 150px; background-position: 0 50%; background-repeat: no-repeat; background-image: image-url('about/osm.png'); background-size: cover; background-color: $vibrant-green; } .byosm { background: $vibrant-green; } .byosm span { display: inline-block; width: 1em; margin-left: -1em; } } .icon { width: 30px; height: 30px; background: 40px 40px image-url('about/sprite.png') no-repeat; &.local { /* no-r2 */ background-position: 0px 0px; } &.community { /* no-r2 */ background-position: 0px -40px; } &.open { /* no-r2 */ background-position: 0px -80px; } &.partners { /* no-r2 */ background-position: 0px -120px; } &.infringement { /* no-r2 */ background-position: 0px -160px; } &.legal { /* no-r2 */ background-position: -45px -160px; } } } @import 'browse';