From e4a8af55525e762dabac520be3081e8e68a949ce Mon Sep 17 00:00:00 2001 From: David Arcos Date: Wed, 30 Sep 2026 00:34:45 +0200 Subject: [PATCH 01/58] Add accessible names to icon-only links The email and social links on the contact page, and the social links in the footer, contain only a Font Awesome icon that is hidden from assistive technology. The links had no accessible name at all, so a screen reader announced only the target URL. The association email address was not available in any text form. - Add an aria-label to every icon-only link. The email links state the address, for example "Email PyBCN at pybcn@googlegroups.com". - Add a name field to each social item in config.toml, to build the labels ("PyBCN on GitHub"). - Mark the decorative icons with aria-hidden="true". - Give the navigation logo an alt text, because the logo is the only content of the home link on every page. --- config.toml | 9 +++++++++ themes/pybcn_theme/layouts/_default/contact.html | 12 ++++++------ themes/pybcn_theme/layouts/partials/footer.html | 4 ++-- themes/pybcn_theme/layouts/partials/nav.html | 4 ++-- 4 files changed, 19 insertions(+), 10 deletions(-) diff --git a/config.toml b/config.toml index 70e03111..8ceb52d1 100644 --- a/config.toml +++ b/config.toml @@ -18,32 +18,41 @@ unsafe=true [params.social_items] [params.social_items.twitter] + name = "Twitter" icon = "fab fa-twitter-square fa-2x" link = "https://twitter.com/PyBCN" [params.social_items.youtube] + name = "YouTube" link = "https://www.youtube.com/c/PythonBarcelona" icon = "fab fa-youtube-square fa-2x" [params.social_items.meetup] + name = "Meetup" link = "https://www.meetup.com/python-barcelona/" icon = "fab fa-meetup fa-2x" [params.social_items.github] + name = "GitHub" link = "https://github.com/pybcn" icon = "fab fa-github fa-2x" [params.social_items.linkedin] + name = "LinkedIn" link = "https://linkedin.com/company/pybcn" icon = "fab fa-linkedin fa-2x" [params.social_items.slack] + name = "Slack" link = "https://pybcn.slack.com" icon = "fab fa-slack fa-2x" [params.social_items_pyladies] [params.social_items_pyladies.twitter] + name = "Twitter" icon = "fab fa-twitter-square fa-2x" link = "https://twitter.com/PyLadiesBCN" [params.social_items_pyladies.meetup] + name = "Meetup" link = "https://www.meetup.com/PyLadies-BCN" icon = "fab fa-meetup fa-2x" [params.social_items_pyladies.github] + name = "GitHub" link = "https://github.com/pyladies-bcn" icon = "fab fa-github fa-2x" diff --git a/themes/pybcn_theme/layouts/_default/contact.html b/themes/pybcn_theme/layouts/_default/contact.html index 37157e8e..e0ba0b6c 100644 --- a/themes/pybcn_theme/layouts/_default/contact.html +++ b/themes/pybcn_theme/layouts/_default/contact.html @@ -6,20 +6,20 @@
{{ if .Params.show_pybcn }} -

PyBCN

+

PyBCN

- + {{ range $.Site.Params.social_items }} - + {{ end }}


{{ end }} -

PyLadiesBCN

+

PyLadiesBCN

- + {{ range $.Site.Params.social_items_pyladies }} - + {{ end }}

diff --git a/themes/pybcn_theme/layouts/partials/footer.html b/themes/pybcn_theme/layouts/partials/footer.html index 424ebb3b..728391e9 100644 --- a/themes/pybcn_theme/layouts/partials/footer.html +++ b/themes/pybcn_theme/layouts/partials/footer.html @@ -4,11 +4,11 @@
{{ $logo := resources.Get "images/favicon.png" }} -
{{ $.Site.Params.short_name }} · {{ $.Site.Params.extended_name }}
+
{{ $.Site.Params.short_name }} · {{ $.Site.Params.extended_name }}
diff --git a/themes/pybcn_theme/layouts/partials/nav.html b/themes/pybcn_theme/layouts/partials/nav.html index 33b1676d..49a5c0ec 100644 --- a/themes/pybcn_theme/layouts/partials/nav.html +++ b/themes/pybcn_theme/layouts/partials/nav.html @@ -3,7 +3,7 @@
{{ $logo := resources.Get "images/logo.png" }} - +
@@ -37,24 +37,24 @@

{{ $.person.Params.name }}

{{ if or ($.person.Params.photo_url) ($.person.Params.photo) }} - + {{ else }} {{ $anon_member := resources.Get "images/anon_member.png" }} - + {{ end }} {{ $.person.Params.short_bio | markdownify }} From f39977635f1267226c99247b4c260acc2feb803d Mon Sep 17 00:00:00 2001 From: David Arcos Date: Wed, 30 Sep 2026 00:35:29 +0200 Subject: [PATCH 03/58] Add bin/measure-images to size the built image payload The script reads a built Hugo directory and reports the image bytes each page references, the site-wide image totals, the count of img elements that carry width, height, loading and srcset, and the largest image files with their pixel dimensions. It uses only the Python standard library and decodes PNG, JPEG, GIF and WebP headers directly, so it needs no extra software. Use it before and after an image change to get reproducible figures. --- bin/measure-images | 313 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 313 insertions(+) create mode 100755 bin/measure-images diff --git a/bin/measure-images b/bin/measure-images new file mode 100755 index 00000000..f1677dd9 --- /dev/null +++ b/bin/measure-images @@ -0,0 +1,313 @@ +#!/usr/bin/env python3 +"""Measure the image payload of a built Hugo site. + +Reports, for a set of pages, the bytes of every local image the page +references, plus site-wide totals and attribute counts. Use it before and +after an image change to get reproducible numbers. + +Usage: + bin/measure-images [page-path ...] + bin/measure-images --list-images + +A page path is relative to the built directory, with or without index.html. +Without page paths, the script uses a default set of pages. +""" + +import os +import re +import struct +import sys +from html.parser import HTMLParser +from urllib.parse import unquote, urlsplit + +DEFAULT_PAGES = [ + "index.html", + "pybcn_association/organizers/index.html", + "events/pyday_bcn/pyday_bcn_2025/index.html", + "sponsors/index.html", + "contact/index.html", + "events/monthly_events/index.html", +] + +IMAGE_EXT = { + ".jpg", ".jpeg", ".png", ".gif", ".webp", ".svg", ".avif", ".ico", ".bmp", + ".tif", ".tiff", +} + +CSS_URL = re.compile(r"url\(\s*['\"]?([^'\")]+)['\"]?\s*\)") + + +class ImageCollector(HTMLParser): + """Collect image references and img-tag attribute statistics.""" + + def __init__(self): + super().__init__(convert_charrefs=True) + self.refs = [] # (url, kind) with kind in src|srcset|css|other + self.img_total = 0 + self.img_dimensions = 0 + self.img_lazy = 0 + self.img_srcset = 0 + + def handle_starttag(self, tag, attrs): + a = {k.lower(): (v or "") for k, v in attrs} + + if tag == "img": + self.img_total += 1 + if a.get("width") and a.get("height"): + self.img_dimensions += 1 + if a.get("loading", "").lower() == "lazy": + self.img_lazy += 1 + if a.get("srcset"): + self.img_srcset += 1 + + if tag in ("img", "source"): + if a.get("src"): + self.refs.append((a["src"], "src")) + for candidate in a.get("srcset", "").split(","): + candidate = candidate.strip().split() + if candidate: + self.refs.append((candidate[0], "srcset")) + + if tag == "link" and "icon" in a.get("rel", "").lower(): + if a.get("href"): + self.refs.append((a["href"], "other")) + + for value in (a.get("style", ""), a.get("data-bg", "")): + for url in CSS_URL.findall(value): + self.refs.append((url, "css")) + + +def local_path(root, page_rel, url): + """Map a URL found on a page to a file inside the built directory.""" + url = url.strip() + if not url or url.startswith(("data:", "#")): + return None + parts = urlsplit(url) + if parts.scheme or parts.netloc: + return None # remote, not counted in local bytes + path = unquote(parts.path) + if path.startswith("/"): + candidate = os.path.join(root, path.lstrip("/")) + else: + candidate = os.path.join(root, os.path.dirname(page_rel), path) + candidate = os.path.normpath(candidate) + if os.path.isfile(candidate): + return candidate + return None + + +def png_size(fh): + fh.seek(16) + return struct.unpack(">II", fh.read(8)) + + +def gif_size(fh): + fh.seek(6) + return struct.unpack("H", data)[0] + if 0xC0 <= marker <= 0xCF and marker not in (0xC4, 0xC8, 0xCC): + body = fh.read(5) + height, width = struct.unpack(">HH", body[1:5]) + return width, height + fh.seek(length - 2, os.SEEK_CUR) + + +def webp_size(fh): + fh.seek(12) + chunk = fh.read(4) + if chunk == b"VP8 ": + fh.seek(26) + width, height = struct.unpack("> 14) & 0x3FFF) + 1 + if chunk == b"VP8X": + fh.seek(24) + raw = fh.read(6) + width = (raw[0] | raw[1] << 8 | raw[2] << 16) + 1 + height = (raw[3] | raw[4] << 8 | raw[5] << 16) + 1 + return width, height + return None + + +def dimensions(path): + """Return (width, height) of a raster image, or None.""" + try: + with open(path, "rb") as fh: + head = fh.read(16) + if head.startswith(b"\x89PNG\r\n\x1a\n"): + return png_size(fh) + if head.startswith(b"GIF8"): + return gif_size(fh) + if head.startswith(b"\xff\xd8"): + return jpeg_size(fh) + if head.startswith(b"RIFF") and head[8:12] == b"WEBP": + return webp_size(fh) + except (OSError, struct.error): + return None + return None + + +def page_report(root, page_rel): + path = os.path.join(root, page_rel) + if os.path.isdir(path): + page_rel = os.path.join(page_rel, "index.html") + path = os.path.join(root, page_rel) + if not os.path.isfile(path): + return None + + with open(path, encoding="utf-8", errors="replace") as fh: + collector = ImageCollector() + collector.feed(fh.read()) + + primary, every, remote = {}, {}, set() + for url, kind in collector.refs: + resolved = local_path(root, page_rel, url) + if resolved is None: + parts = urlsplit(url.strip()) + if parts.scheme in ("http", "https"): + remote.add(url.strip()) + continue + size = os.path.getsize(resolved) + every[resolved] = size + if kind != "srcset": + primary[resolved] = size + + return { + "page": page_rel, + "primary_bytes": sum(primary.values()), + "all_bytes": sum(every.values()), + "files": every, + "primary_files": primary, + "remote": sorted(remote), + "img_total": collector.img_total, + "img_dimensions": collector.img_dimensions, + "img_lazy": collector.img_lazy, + "img_srcset": collector.img_srcset, + } + + +def mb(value): + """Format a byte count as MiB, the unit every figure in this tool uses.""" + return "%.2f MiB" % (value / 1024 / 1024) + + +def site_totals(root): + total_bytes = 0 + images = [] + for dirpath, _dirs, files in os.walk(root): + for name in files: + full = os.path.join(dirpath, name) + try: + size = os.path.getsize(full) + except OSError: + continue + total_bytes += size + if os.path.splitext(name)[1].lower() in IMAGE_EXT: + images.append((size, full)) + images.sort(reverse=True) + return total_bytes, images + + +def html_attribute_totals(root): + totals = {"img": 0, "dims": 0, "lazy": 0, "srcset": 0, "pages": 0} + for dirpath, _dirs, files in os.walk(root): + for name in files: + if not name.endswith(".html"): + continue + totals["pages"] += 1 + with open(os.path.join(dirpath, name), encoding="utf-8", + errors="replace") as fh: + collector = ImageCollector() + collector.feed(fh.read()) + totals["img"] += collector.img_total + totals["dims"] += collector.img_dimensions + totals["lazy"] += collector.img_lazy + totals["srcset"] += collector.img_srcset + return totals + + +def main(argv): + if len(argv) < 2: + print(__doc__) + return 2 + root = argv[1].rstrip("/") + rest = argv[2:] + + if rest and rest[0] == "--list-images": + for page in rest[1:]: + report = page_report(root, page) + if report is None: + print("missing page: %s" % page, file=sys.stderr) + continue + for path in sorted(report["primary_files"]): + print(os.path.relpath(path, root)) + return 0 + + pages = rest or DEFAULT_PAGES + + print("built directory: %s" % root) + print() + print("%-52s %12s %12s %5s %5s %5s %5s" + % ("page", "1x payload", "all srcset", "img", "dim", "lazy", "set")) + for page in pages: + report = page_report(root, page) + if report is None: + print("%-52s %12s" % (page, "MISSING")) + continue + print("%-52s %12s %12s %5d %5d %5d %5d" % ( + report["page"][:52], + mb(report["primary_bytes"]), + mb(report["all_bytes"]), + report["img_total"], + report["img_dimensions"], + report["img_lazy"], + report["img_srcset"], + )) + for url in report["remote"]: + print("%-52s remote: %s" % ("", url)) + + total_bytes, images = site_totals(root) + attrs = html_attribute_totals(root) + + print() + print("site totals") + print(" output directory size : %s" % mb(total_bytes)) + print(" image files : %d, %s" + % (len(images), mb(sum(size for size, _ in images)))) + print(" html pages : %d" % attrs["pages"]) + print(" img elements : %d" % attrs["img"]) + print(" with width + height : %d" % attrs["dims"]) + print(" with loading=lazy : %d" % attrs["lazy"]) + print(" with srcset : %d" % attrs["srcset"]) + print() + print("largest image files") + for size, full in images[:10]: + dims = dimensions(full) + shape = "%dx%d" % dims if dims else "vector or unknown" + pixels = ("%.1f Mpx" % (dims[0] * dims[1] / 1e6)) if dims else "-" + print(" %9s %-18s %-10s %s" + % (mb(size), shape, pixels, os.path.relpath(full, root))) + return 0 + + +if __name__ == "__main__": + sys.exit(main(sys.argv)) From ae89a2d8dcae318acb494da730bf9943532bd8f0 Mon Sep 17 00:00:00 2001 From: David Arcos Date: Wed, 30 Sep 2026 00:35:52 +0200 Subject: [PATCH 04/58] Render agenda levels and legend from data, not raw HTML The agenda read three front matter fields through safeHTML: python_level and topic_level in agenda.html and event_detail.html, and legend in agenda.html. safeHTML bypasses escaping even when goldmark unsafe is off, so any merged pull request could put script into every agenda page. The site takes talk data from outside contributors, so this was a persistent cross-site scripting path. Front matter now carries tokens and the templates own the markup: - python_level and topic_level take beginner, intermediate or advanced. A new level_badge.html partial maps the token to a label and a class. An unknown token prints as escaped text and logs a build warning. - legend is a list of items: "type: ", "level: " or "separator: true". A new agenda_legend.html partial renders it. - event_types.html holds the one table of type tokens, icons and labels. event_type_icon.html renders an icon from it. This replaces the two copies of the if-else icon chain in agenda.html and event_detail.html, which had drifted: the modal was missing the "photo" type. The change also fixes two accessibility defects: - The level was given by the colour of a dot alone, which fails WCAG 1.4.1 Use of Color. The badge now shows the text label next to the dot. - The dots did not meet the 3:1 floor of WCAG 1.4.11 Non-text Contrast. A red dot on the red cell of the agenda gave 1.38:1. The badge now draws its own white background, so contrast no longer depends on the cell colour: beginner 5.1:1, intermediate 5.2:1, advanced 5.5:1. The badge border holds 3:1 or better against every cell colour. - The legend was set to "opacity: 0.7" with full opacity on hover, which cut the contrast for every reader who does not hover. Removed. - The gold star of a sponsored event gave 1.44:1 on the white page background. Darkened to #8C6900 inside the legend. Migrated every affected file in content/events: 156 HTML level values in 6 files, 19 plain text level values in pyday_bcn_2020.md, and 6 legend strings. The legend of pyday_bcn_2024.md had a copy and paste fault, a second escaped icon where the word "Beginner" belonged. The structured legend removes it. Build verified: 310 HTML pages, no warnings from the new partials. --- README.md | 37 +++++++- content/events/pydatabcn/pydatabcn_2023.md | 58 +++++++------ content/events/pyday_bcn/pyday_bcn_2020.md | 38 ++++----- content/events/pyday_bcn/pyday_bcn_2021.md | 66 +++++++------- content/events/pyday_bcn/pyday_bcn_2022.md | 56 ++++++------ content/events/pyday_bcn/pyday_bcn_2023.md | 56 ++++++------ content/events/pyday_bcn/pyday_bcn_2024.md | 56 ++++++------ content/events/pyday_bcn/pyday_bcn_2025.md | 72 +++++++++------- ...s_77b10c8e87ff110a62c52933fe3f7f11.content | 2 +- ...scss_77b10c8e87ff110a62c52933fe3f7f11.json | 2 +- themes/pybcn_theme/assets/scss/agenda.scss | 85 +++++++++++++++++-- .../pybcn_theme/layouts/partials/agenda.html | 28 +----- .../layouts/partials/agenda_legend.html | 35 ++++++++ .../layouts/partials/event_detail.html | 20 +---- .../layouts/partials/event_type_icon.html | 15 ++++ .../layouts/partials/event_types.html | 24 ++++++ .../layouts/partials/level_badge.html | 26 ++++++ 17 files changed, 442 insertions(+), 234 deletions(-) create mode 100644 themes/pybcn_theme/layouts/partials/agenda_legend.html create mode 100644 themes/pybcn_theme/layouts/partials/event_type_icon.html create mode 100644 themes/pybcn_theme/layouts/partials/event_types.html create mode 100644 themes/pybcn_theme/layouts/partials/level_badge.html diff --git a/README.md b/README.md index 7c42b082..d6660c21 100644 --- a/README.md +++ b/README.md @@ -162,7 +162,42 @@ Each event in the list can indicate: - the color of the event in the calendar: red, orange, yellow, green, blue, purple (defaults to orange) - the location where the event will take place (a room, or a url) - the topic of the event (e.g. Data Science, Security...) -- the type of the event: talk, workshop, coffee, lunch, group, qa, lightning +- the type of the event: talk, workshop, coffee, lunch, photo, group, qa, lightning +- `python_level` and `topic_level`: the experience the attendee needs. Use one + of `beginner`, `intermediate` or `advanced` + +#### Experience levels + +`python_level` and `topic_level` take a token, never markup. The site renders +each token as a badge with a coloured dot and the matching text label, so the +level does not depend on colour alone: + +| Token | Label | Dot | +|---|---|---| +| `beginner` | Beginner | green | +| `intermediate` | Intermediate | amber | +| `advanced` | Advanced | red | + +An unknown token prints as plain text and logs a build warning. The tokens and +the labels live in `themes/pybcn_theme/layouts/partials/level_badge.html`. + +#### Agenda legend + +`legend` is a list of items, not an HTML string. Each item is one of: + +``` +legend: + - type: workshop # any event type, plus "sponsor" for the gold star + label: Hands-on # optional, overrides the default label + - type: talk + - separator: true # a visual group break + - level: beginner + - level: intermediate + - level: advanced +``` + +The icons and the default labels come from +`themes/pybcn_theme/layouts/partials/event_types.html`. ``` spansDuration: 20 diff --git a/content/events/pydatabcn/pydatabcn_2023.md b/content/events/pydatabcn/pydatabcn_2023.md index 93387cdc..1eb562c2 100644 --- a/content/events/pydatabcn/pydatabcn_2023.md +++ b/content/events/pydatabcn/pydatabcn_2023.md @@ -90,7 +90,15 @@ people_sections: spansDuration: 15 numTracks: 4 eventTimes: [9:00, 9:15, 9:30, 9:45, 10:00, 10:15, 10:30, 10:45, 11:00, 11:15, 11:30, 11:45, 12:00, 12:15, 12:30, 12:45, 13:00, 13:15, 13:30, 13:45, 14:00, 14:15, 14:30, 14:45, 15:00, 15:15, 15:30, 15:45, 16:00, 16:15, 16:30, 16:45, 17:00, 17:15, 17:30, 17:45] -legend: " Workshop     Talk    |    Beginner     Intermediate     Advanced    |    Sponsored event" +legend: + - type: workshop + - type: talk + - separator: true + - level: beginner + - level: intermediate + - level: advanced + - separator: true + - type: sponsor events: - start_time_slot: 9:00 end_time_slot: 9:15 @@ -109,8 +117,8 @@ events: end_time_slot: 10:45 track_length: 1 color: orange - python_level: "" - topic_level: "" + python_level: intermediate + topic_level: beginner type: workshop topic: "(Maintainable) Data Science" location: Sala d'actes Ada Lovelace @@ -123,8 +131,8 @@ events: end_time_slot: 10:45 track_length: 1 color: grey - python_level: "" - topic_level: "" + python_level: beginner + topic_level: beginner type: workshop topic: "Data Analysis" location: Aula Hedy Lamarr @@ -137,8 +145,8 @@ events: end_time_slot: 10:45 track_length: 1 color: grey - python_level: "" - topic_level: "" + python_level: intermediate + topic_level: intermediate type: workshop topic: "Big Data Analysis" location: Sala Margarita Salas @@ -151,8 +159,8 @@ events: end_time_slot: 10:45 track_length: 1 color: purple - python_level: "" - topic_level: "" + python_level: intermediate + topic_level: beginner type: workshop topic: "Machine Learning" location: Aula Hipàtia d'Alexandria @@ -175,8 +183,8 @@ events: end_time_slot: 12:45 track_length: 1 color: grey - python_level: "" - topic_level: "" + python_level: beginner + topic_level: beginner type: workshop topic: "Data Analysis" location: Sala d'actes Ada Lovelace @@ -189,8 +197,8 @@ events: end_time_slot: 12:45 track_length: 1 color: purple - python_level: "" - topic_level: "" + python_level: beginner + topic_level: beginner type: workshop topic: "Deep Learning, Artificial Intelligence" location: Aula Hedy Lamarr @@ -203,8 +211,8 @@ events: end_time_slot: 12:45 track_length: 1 color: purple - python_level: "" - topic_level: "" + python_level: intermediate + topic_level: intermediate type: workshop topic: "Machine Learning Robustness and Monitoring" location: Sala Margarita Salas @@ -217,8 +225,8 @@ events: end_time_slot: 12:45 track_length: 1 color: orange - python_level: "" - topic_level: "" + python_level: intermediate + topic_level: beginner type: workshop topic: "Data Engineering" location: Aula Hipàtia d'Alexandria @@ -250,8 +258,8 @@ events: end_time_slot: 15:15 track_length: 1 color: purple - python_level: "" - topic_level: "" + python_level: intermediate + topic_level: beginner type: workshop topic: "Artificial Intelligence" location: Sala d'actes Ada Lovelace @@ -264,8 +272,8 @@ events: end_time_slot: 15:15 track_length: 1 color: purple - python_level: "" - topic_level: "" + python_level: beginner + topic_level: beginner type: workshop topic: "Machine Learning" location: Aula Hedy Lamarr @@ -278,8 +286,8 @@ events: end_time_slot: 15:15 track_length: 1 color: purple - python_level: "" - topic_level: "" + python_level: intermediate + topic_level: intermediate type: workshop location: Sala Margarita Salas requirements: "Intermediate knowledge of Python programming, understanding of natural language processing and semantic search concepts, enthusiasm and willingness to learn and collaborate.
Technical requirements: Laptop with python >= 3.9 installed and HF’s SentenceTransformers. Nucliadb is optional, if not installed we’ll do it together during the workshop. A requirements.txt and more details will be provided prior to the event." @@ -292,8 +300,8 @@ events: end_time_slot: 15:15 track_length: 1 color: grey - python_level: "" - topic_level: "" + python_level: intermediate + topic_level: beginner type: workshop location: Aula Hipàtia d'Alexandria requirements: "Cal certa comoditat a l'hora de treballar amb Python, NumPy i Matplotlib. Tots els gràfics seran introduïts abans d'utilitzar-se, però és recomanable tenir coneixements bàsics d'estadística." diff --git a/content/events/pyday_bcn/pyday_bcn_2020.md b/content/events/pyday_bcn/pyday_bcn_2020.md index 3d32a45a..15a74698 100644 --- a/content/events/pyday_bcn/pyday_bcn_2020.md +++ b/content/events/pyday_bcn/pyday_bcn_2020.md @@ -95,7 +95,7 @@ events: language: "English" speaker: "Ankit Mahato" type: talk - python_level: Beginner + python_level: beginner topic: Data Science, ML, DL location: YouTube track1 - start_time_slot: 16:45 @@ -108,7 +108,7 @@ events: language: "Spanish" speaker: "Daniel Mesejo" type: talk - python_level: Intermediate + python_level: intermediate topic: Data Science, ML, DL location: YouTube track1 - start_time_slot: 17:15 @@ -121,7 +121,7 @@ events: language: "Catalan" speaker: "Ferran Fábregas" type: lightning - python_level: Intermediate + python_level: intermediate topic: Data Science, ML, DL location: YouTube track1 - start_time_slot: 17:30 @@ -134,7 +134,7 @@ events: language: "English" speaker: "Julio Martínez" type: lightning - python_level: Intermediate + python_level: intermediate topic: Data Science, ML, DL location: YouTube track1 - start_time_slot: 17:45 @@ -147,7 +147,7 @@ events: language: "English" speaker: "Miroslav Šedivý" type: lightning - python_level: Intermediate + python_level: intermediate topic: Python programming location: YouTube track1 - start_time_slot: 18:00 @@ -160,7 +160,7 @@ events: language: "Catalan" speaker: "Carles Barrobés" type: lightning - python_level: Intermediate + python_level: intermediate topic: Python programming location: YouTube track1 @@ -174,7 +174,7 @@ events: language: "Spanish" speaker: "Elisabeth Ortega Carrasco" type: talk - python_level: Beginner + python_level: beginner topic: IOT location: YouTube track2 - start_time_slot: 16:45 @@ -187,7 +187,7 @@ events: language: "English" speaker: "Christian Adell" type: talk - python_level: Intermediate + python_level: intermediate topic: Network automation location: YouTube track2 - start_time_slot: 17:15 @@ -200,7 +200,7 @@ events: language: "English" speaker: "Christian Adell" type: lightning - python_level: Beginner + python_level: beginner topic: Python programming location: YouTube track2 - start_time_slot: 17:30 @@ -213,7 +213,7 @@ events: language: "English" speaker: "Alvaro Duran" type: lightning - python_level: Beginner + python_level: beginner topic: Python programming location: YouTube track2 - start_time_slot: 17:45 @@ -226,7 +226,7 @@ events: location: YouTube track2 topic: Web development, microservices language: "English" - python_level: Intermediate + python_level: intermediate speaker: Francesco Faraone - start_time_slot: 18:15 @@ -246,7 +246,7 @@ events: language: "English" speaker: "Eduard Cespedes Borras" type: talk - python_level: Intermediate + python_level: intermediate topic: Data Science, ML, DL location: YouTube track1 - start_time_slot: 19:00 @@ -259,7 +259,7 @@ events: language: "English" speaker: "Alberto Camara" type: talk - python_level: Intermediate + python_level: intermediate topic: Data Science, ML, DL location: YouTube track1 - start_time_slot: 19:30 @@ -272,7 +272,7 @@ events: language: "English" speaker: "Edgar Riba" type: talk - python_level: Intermediate + python_level: intermediate topic: Data Science, ML, DL location: YouTube track1 - start_time_slot: 20:00 @@ -285,7 +285,7 @@ events: language: "English" speaker: "Joan Fontanals Martinez" type: talk - python_level: Beginner + python_level: beginner topic: Data Science, ML, DL location: YouTube track1 @@ -299,7 +299,7 @@ events: language: "English" speaker: "Marc Pous" type: talk - python_level: Beginner + python_level: beginner topic: IOT location: YouTube track2 - start_time_slot: 19:00 @@ -312,7 +312,7 @@ events: language: "English" speaker: "Jose Haro Peralta" type: talk - python_level: Beginner + python_level: beginner topic: Web location: YouTube track2 - start_time_slot: 19:30 @@ -325,7 +325,7 @@ events: language: "English" speaker: "Maria Teresa Grifa" type: talk - python_level: Beginner + python_level: beginner topic: Python programming location: YouTube track2 - start_time_slot: 20:00 @@ -338,7 +338,7 @@ events: language: "English" speaker: "Gajendra Deshpande" type: talk - python_level: Beginner + python_level: beginner topic: Security location: YouTube track2 diff --git a/content/events/pyday_bcn/pyday_bcn_2021.md b/content/events/pyday_bcn/pyday_bcn_2021.md index fdc5c4c0..d41f7881 100644 --- a/content/events/pyday_bcn/pyday_bcn_2021.md +++ b/content/events/pyday_bcn/pyday_bcn_2021.md @@ -87,7 +87,15 @@ previous_editions: spansDuration: 15 numTracks: 4 eventTimes: [9:00, 9:15, 9:30, 9:45, 10:00, 10:15, 10:30, 10:45, 11:00, 11:15, 11:30, 11:45, 12:00, 12:15, 12:30, 12:45, 13:00, 13:15, 13:30, 13:45, 14:00, 14:15, 14:30, 14:45, 15:00, 15:15, 15:30, 15:45, 16:00, 16:15, 16:30, 16:45, 17:00, 17:15, 17:30, 17:45] -legend: " Workshop     Talk    |    Beginner     Intermediate     Advanced    |    Sponsored event" +legend: + - type: workshop + - type: talk + - separator: true + - level: beginner + - level: intermediate + - level: advanced + - separator: true + - type: sponsor events: - start_time_slot: 9:00 end_time_slot: 9:15 @@ -109,8 +117,8 @@ events: language: "Spanish" type: workshop topic: Data Apps - python_level: "" - topic_level: "" + python_level: intermediate + topic_level: beginner location: Room Actes - speaker: "Diego Gonzalez" sponsor: Preply @@ -123,8 +131,8 @@ events: language: "English" type: workshop topic: Web development - python_level: "" - topic_level: "" + python_level: intermediate + topic_level: intermediate location: Room Guinardó - speaker: "Esperanza Buitrago" title: "Implementing your API with FASTAPI" @@ -136,8 +144,8 @@ events: language: "English" type: workshop topic: Software Engineering - python_level: "" - topic_level: "" + python_level: beginner + topic_level: beginner location: Room Gòtica requirements: "
  • Python3
  • Visual Studio Code
  • Pip3
  • Conda
  • We'll do everything from scratch: such as installing FastAPI, uvicorn and typing
" @@ -152,8 +160,8 @@ events: language: "English" type: workshop topic: Cloud-native Python applications - python_level: "" - topic_level: "" + python_level: intermediate + topic_level: beginner location: Room Raval requirements: "Python 3.8+" @@ -178,8 +186,8 @@ events: language: "Spanish" type: workshop topic: User interfaces - python_level: "" - topic_level: "" + python_level: intermediate + topic_level: beginner location: Room Actes - speaker: "Gabriel de Maeztu" sponsor: IOMED @@ -192,8 +200,8 @@ events: language: "English" type: workshop topic: Data Science - python_level: "" - topic_level: "" + python_level: intermediate + topic_level: intermediate location: Room Guinardó - speaker: "Vincent Choubard" sponsor: Rover @@ -206,8 +214,8 @@ events: language: "English" type: workshop topic: Web Development - python_level: "" - topic_level: "" + python_level: beginner + topic_level: beginner location: Room Gòtica requirements: "Ideally have python and django installed on your machine by following https://docs.djangoproject.com/en/3.2/intro/install/" - speaker: "Antonio Molina, Erik Tordera, Pablo Fernández" @@ -221,8 +229,8 @@ events: language: "Spanish" type: workshop topic: Architecture - python_level: "" - topic_level: "" + python_level: beginner + topic_level: intermediate location: Room Raval - start_time_slot: 13:00 @@ -253,8 +261,8 @@ events: language: "Spanish" type: workshop topic: Data science - python_level: "" - topic_level: "" + python_level: intermediate + topic_level: intermediate location: Room Actes requirements: "A browser (preferably Google Chrome)
Github account." - speaker: "Jordi Mur" @@ -268,8 +276,8 @@ events: language: "English" type: workshop topic: Data science - python_level: "" - topic_level: "" + python_level: intermediate + topic_level: beginner location: Room Guinardó - speaker: "Matteo Bruno" sponsor: Onna @@ -326,8 +334,8 @@ events: language: "English" type: workshop topic: IOT, ML, Edge AI - python_level: "" - topic_level: "" + python_level: intermediate + topic_level: beginner location: Room Actes - speaker: "Mariana Meireles, Laysa Uchoa" title: "The moons of Jupyter: widgets ecosystem" @@ -339,8 +347,8 @@ events: language: "English" type: workshop topic: Data science, scientific computing - python_level: "" - topic_level: "" + python_level: intermediate + topic_level: beginner location: Room Guinardó requirements: "https://github.com/jupyter-widgets/tutorial#readme

But a link to a Binder project where you can run the workshop without installing anything on your machine will also be provided. It’s recommendable to install requirements locally, though." - speaker: "Vivek Sharma" @@ -353,8 +361,8 @@ events: language: "English" type: workshop topic: Signal Processing - python_level: "" - topic_level: "" + python_level: beginner + topic_level: beginner location: Room Gòtica - speaker: "Christian Adell" title: "Keeping sync between datasets with Diffsync" @@ -367,8 +375,8 @@ events: language: "English" type: workshop topic: Data set synchronisation - python_level: "" - topic_level: "" + python_level: intermediate + topic_level: beginner location: Room Raval - start_time_slot: 17:30 diff --git a/content/events/pyday_bcn/pyday_bcn_2022.md b/content/events/pyday_bcn/pyday_bcn_2022.md index 74dcaa62..44b4d222 100644 --- a/content/events/pyday_bcn/pyday_bcn_2022.md +++ b/content/events/pyday_bcn/pyday_bcn_2022.md @@ -124,7 +124,13 @@ eventTimes: 17:30, 17:45, ] -legend: ' Workshop     Talk    |    Beginner     Intermediate     Advanced' +legend: + - type: workshop + - type: talk + - separator: true + - level: beginner + - level: intermediate + - level: advanced events: - start_time_slot: 9:00 end_time_slot: 9:15 @@ -145,8 +151,8 @@ events: color: red type: workshop language: "Spanish" - python_level: "" - topic_level: "" + python_level: intermediate + topic_level: intermediate requirements: "
  • Laptop , requirements.txt installed.
  • VS Code IDE.
" topic: "Data Science and MLOPS" location: Sala d'actes Ada Lovelace @@ -159,8 +165,8 @@ events: color: yellow type: workshop language: "English" - python_level: "" - topic_level: "" + python_level: intermediate + topic_level: beginner requirements: "
  • Initial python knowledges
  • Would be great to know Django
  • Laptop with installed Docker and Docker Compose
  • " topic: "Security, software development" location: Sala Hedy Lamarr / Margarita Salas @@ -173,8 +179,8 @@ events: color: blue type: workshop language: "English" - python_level: "" - topic_level: "" + python_level: beginner + topic_level: beginner topic: "Serverless apps" location: Sala Hipàtia d'Alexandria requirements: "Python, AWS account, AWS chalice framework" @@ -197,8 +203,8 @@ events: color: blue type: workshop language: "English" - python_level: "" - topic_level: "" + python_level: beginner + topic_level: beginner requirements: "Laptop" topic: "Internet of Things and Air quality sensors" location: Sala d'actes Ada Lovelace @@ -211,8 +217,8 @@ events: color: blue type: workshop language: "English" - python_level: "" - topic_level: "" + python_level: beginner + topic_level: beginner requirements: "
    • Familiarity with Python and basic understanding of HTML and CSS (ideally JS too, but it is not necessary)
    • Laptop with Python3, Flask, NuxtJS and Docker.
    " topic: "Web apps" location: Sala Hedy Lamarr / Margarita Salas @@ -225,8 +231,8 @@ events: color: red type: workshop language: "English" - python_level: "" - topic_level: "" + python_level: intermediate + topic_level: intermediate requirements: "Laptop with conda if attendees want to follow the notebooks and do some exercises, just ears and be present otherwise." topic: "Python as a GIS" location: Sala Hipàtia d'Alexandria @@ -258,8 +264,8 @@ events: color: yellow type: workshop language: "Spanish or English" - python_level: "" - topic_level: "" + python_level: beginner + topic_level: intermediate topic: "Data engineering" location: Sala d'actes Ada Lovelace requirements: "Follow the installation steps in https://github.com/alabarga/pybcn22-modern-data-stack" @@ -272,8 +278,8 @@ events: color: blue type: workshop language: "Spanish" - python_level: "" - topic_level: "" + python_level: beginner + topic_level: beginner topic: "Scrapy" requirements: "Laptop" location: Sala Hedy Lamarr / Margarita Salas @@ -286,8 +292,8 @@ events: color: blue type: workshop language: "Spanish" - python_level: "" - topic_level: "" + python_level: beginner + topic_level: beginner requirements: "Laptop" topic: "Observability" location: Sala Hipàtia d'Alexandria @@ -337,8 +343,8 @@ events: color: red type: workshop language: "English" - python_level: "" - topic_level: "" + python_level: intermediate + topic_level: intermediate requirements: "This workshop is for Data scientists or developers who have math-heavy code that would like to speed up with the benefit of Numpy and Numba.

    What is required from attendees

    • - A computer with a stable internet connection (useful to look up information);
    • - Python 3.8 or above;
    • - Jupyter and Numba installed (detail about Python libraries required will be announced later);
    • - An opened mind and ready to learn something new
    " topic: "Data Science" location: Sala d'actes Ada Lovelace @@ -351,8 +357,8 @@ events: color: yellow type: workshop language: "English" - python_level: "" - topic_level: "" + python_level: intermediate + topic_level: beginner topic: "Data Management" location: Sala Hedy Lamarr / Margarita Salas requirements: "For the folks who would like to follow along, a laptop with docker compose" @@ -365,8 +371,8 @@ events: color: blue type: workshop language: "English" - python_level: "" - topic_level: "" + python_level: beginner + topic_level: beginner topic: "Test driven development " location: Sala Hipàtia d'Alexandria diff --git a/content/events/pyday_bcn/pyday_bcn_2023.md b/content/events/pyday_bcn/pyday_bcn_2023.md index 18efa9a1..437a4e94 100644 --- a/content/events/pyday_bcn/pyday_bcn_2023.md +++ b/content/events/pyday_bcn/pyday_bcn_2023.md @@ -127,7 +127,13 @@ eventTimes: 17:30, 17:45, ] -legend: ' Workshop     Talk    |    Beginner     Intermediate     Advanced' +legend: + - type: workshop + - type: talk + - separator: true + - level: beginner + - level: intermediate + - level: advanced events: - start_time_slot: 9:00 end_time_slot: 9:15 @@ -148,8 +154,8 @@ events: color: blue type: workshop language: "English" - python_level: "" - topic_level: "" + python_level: beginner + topic_level: beginner requirements: "Python, PyTorch, Jupyter, Matplotlib." topic: "Data science" location: Room B6 @@ -167,8 +173,8 @@ events: color: blue type: workshop language: "English" - python_level: "" - topic_level: "" + python_level: beginner + topic_level: beginner requirements: "To have the `qibo` package installed." topic: "Quantum Computing" location: Room B5 @@ -181,8 +187,8 @@ events: color: yellow type: workshop language: "English" - python_level: "" - topic_level: "" + python_level: beginner + topic_level: intermediate topic: "Network/Infrastructure Automation" location: Room B3 requirements: "" @@ -205,8 +211,8 @@ events: color: blue type: workshop language: "English" - python_level: "" - topic_level: "" + python_level: beginner + topic_level: beginner requirements: "" topic: "Data Science" location: Room B6 @@ -219,8 +225,8 @@ events: color: yellow type: workshop language: "English" - python_level: "" - topic_level: "" + python_level: intermediate + topic_level: intermediate requirements: "Numpy, Scipy, Matplotlib, PyTorch, Qiskit" topic: "Quantum Computing" location: Room B5 @@ -234,8 +240,8 @@ events: color: blue type: workshop language: "English" - python_level: "" - topic_level: "" + python_level: beginner + topic_level: beginner requirements: "Laptop with latest Python version available and git installed" topic: "Python Packaging" location: Room B3 @@ -267,8 +273,8 @@ events: color: yellow type: workshop language: "Spanish" - python_level: "" - topic_level: "" + python_level: intermediate + topic_level: beginner requirements: "" topic: "Data science" location: Room B6 @@ -281,8 +287,8 @@ events: color: yellow type: workshop language: "Spanish" - python_level: "" - topic_level: "" + python_level: intermediate + topic_level: intermediate topic: "API requests" requirements: "Python 3.8 or above, VSCode or some similar IDE, FastApi and uvicorn libraries" location: Room B5 @@ -295,8 +301,8 @@ events: color: blue type: workshop language: "English" - python_level: "" - topic_level: "" + python_level: beginner + topic_level: beginner requirements: "" topic: "Documentation and blogging" location: Room B3 @@ -342,8 +348,8 @@ events: color: red type: workshop language: "English" - python_level: "" - topic_level: "" + python_level: intermediate + topic_level: advanced requirements: "Python, Docker" topic: "Data Science" location: Room B6 @@ -357,8 +363,8 @@ events: color: yellow type: workshop language: "Spanish" - python_level: "" - topic_level: "" + python_level: intermediate + topic_level: intermediate requirements: "" topic: "General, Core" location: Room B5 @@ -372,8 +378,8 @@ events: color: yellow type: workshop language: "Spanish" - python_level: "" - topic_level: "" + python_level: intermediate + topic_level: beginner requeriments: "Python with pytest installed, code editor, git (for downloading the exercise)." topic: "Test driven development" location: Room B3 diff --git a/content/events/pyday_bcn/pyday_bcn_2024.md b/content/events/pyday_bcn/pyday_bcn_2024.md index cc902f4c..cedb6430 100644 --- a/content/events/pyday_bcn/pyday_bcn_2024.md +++ b/content/events/pyday_bcn/pyday_bcn_2024.md @@ -124,7 +124,13 @@ eventTimes: 17:30, 17:45, ] -legend: ' Workshop     Talk    |        Intermediate     Advanced' +legend: + - type: workshop + - type: talk + - separator: true + - level: beginner + - level: intermediate + - level: advanced events: - start_time_slot: 9:00 end_time_slot: 9:15 @@ -144,8 +150,8 @@ events: color: red type: workshop language: English - python_level: "" - topic_level: "" + python_level: intermediate + topic_level: intermediate requirements: "numpy, scikit-learn, and keras installed" topic: "Data science, ML" location: "Sala d'actes Ada Lovelace" @@ -186,8 +192,8 @@ events: color: yellow type: workshop language: "English" - python_level: "" - topic_level: "" + python_level: beginner + topic_level: beginner topic: "Testing" location: "Sala Margarita Salas" requirements: "A Github account" @@ -242,8 +248,8 @@ During the talk, my idea is to present the tool and the technological solutions color: red type: workshop language: "Spanish" - python_level: "" - topic_level: "" + python_level: beginner + topic_level: beginner requirements: "torch==2.0.1 torchvision==0.15.2 matplotlib==3.7.1" topic: "Artificial Intelligence" location: "Sala d'actes Ada Lovelace" @@ -258,8 +264,8 @@ During the talk, my idea is to present the tool and the technological solutions color: green type: workshop language: "Català" - python_level: "" - topic_level: "" + python_level: beginner + topic_level: beginner requirements: "https://github.com/OriolAbril/pyday2024-xarray/blob/main/requirements.txt" topic: "Data science" location: "Aula Hipàtia d'Alexandria" @@ -280,8 +286,8 @@ During the talk, my idea is to present the tool and the technological solutions color: yellow type: workshop language: "English" - python_level: "" - topic_level: "" + python_level: beginner + topic_level: intermediate requirements: "https://github.com/alexmolas/python-static-typing/blob/main/requirements.txt" topic: "Programming" location: "Aula Hedy Lamarr" @@ -294,8 +300,8 @@ During the talk, my idea is to present the tool and the technological solutions color: blue type: workshop language: "Spanish" - python_level: "" - topic_level: "" + python_level: beginner + topic_level: intermediate requirements: "Git, Docker Desktop, Visual Studio Code" topic: "Data engineering" location: "Sala Margarita Salas" @@ -348,8 +354,8 @@ During the talk, my idea is to present the tool and the technological solutions color: yellow type: workshop language: "English" - python_level: "" - topic_level: "" + python_level: advanced + topic_level: advanced topic: "Serverless development" location: "Sala d'actes Ada Lovelace" requirements: "AWS Account" @@ -376,8 +382,8 @@ During the talk, my idea is to present the tool and the technological solutions color: blue type: workshop language: "English" - python_level: "" - topic_level: "" + python_level: intermediate + topic_level: intermediate topic: "Apache Arrow, Data Science" requirements: "You will be able to find both the requirements and the Notebooks on the following repository: https://github.com/raulcd/2024-pyday-bcn-arrow-workshop" location: "Sala Margarita Salas" @@ -420,8 +426,8 @@ During the talk, my idea is to present the tool and the technological solutions color: blue type: workshop language: "English" - python_level: "" - topic_level: "" + python_level: beginner + topic_level: beginner topic: "Data engineering" location: "Sala d'actes Ada Lovelace" requirements: "Docker, Conda" @@ -434,8 +440,8 @@ During the talk, my idea is to present the tool and the technological solutions color: yellow type: workshop language: "English" - python_level: "" - topic_level: "" + python_level: intermediate + topic_level: beginner requirements: "Postgres and MySQL installed locally or via Docker" topic: "Databases" location: "Aula Hipàtia d'Alexandria" @@ -450,8 +456,8 @@ During the talk, my idea is to present the tool and the technological solutions color: yellow type: workshop language: "Spanish" - python_level: "" - topic_level: "" + python_level: intermediate + topic_level: beginner topic: "Web development, Videogames" location: "Aula Hedy Lamarr" - speaker: "Asia Noble" @@ -467,8 +473,8 @@ During the talk, my idea is to present the tool and the technological solutions color: red type: workshop language: "English" - python_level: "" - topic_level: "" + python_level: beginner + topic_level: beginner topic: "Data science" location: "Sala Margarita Salas" requirements: "Data Science techstack: PowerBI, Python, Scikit Learn, Tensorflow. Background n the creative tech industry, management, consulting, and operations." diff --git a/content/events/pyday_bcn/pyday_bcn_2025.md b/content/events/pyday_bcn/pyday_bcn_2025.md index c7b60d84..946f0d33 100644 --- a/content/events/pyday_bcn/pyday_bcn_2025.md +++ b/content/events/pyday_bcn/pyday_bcn_2025.md @@ -153,7 +153,13 @@ eventTimes: 17:30, 17:45, ] -legend: ' Workshop     Talk    |    Beginner     Intermediate     Advanced' +legend: + - type: workshop + - type: talk + - separator: true + - level: beginner + - level: intermediate + - level: advanced events: - start_time_slot: 9:00 end_time_slot: 9:15 @@ -174,8 +180,8 @@ events: color: blue type: workshop language: "English" - python_level: "" - topic_level: "" + python_level: intermediate + topic_level: beginner requirements: "Intermediate experience in Python and basic understanding of LLMs and how to use LLM APIs" topic: "LLM" location: "Sala d'actes Ada Lovelace" @@ -190,8 +196,8 @@ events: color: yellow type: workshop language: "Spanish" - python_level: "" - topic_level: "" + python_level: intermediate + topic_level: beginner requirements: " - No prior experience with AI or machine learning - Basic familiarity with Python (variables, functions, running scripts) @@ -213,8 +219,8 @@ events: color: red type: workshop language: "English" - python_level: "" - topic_level: "" + python_level: beginner + topic_level: beginner requirements: "pip install qilisdk" topic: "Quantum Computing" location: "Sala Hedy Lamarr" @@ -231,8 +237,8 @@ events: color: orange type: workshop language: "Spanish" - python_level: "" - topic_level: "" + python_level: intermediate + topic_level: intermediate requirements: "Python environment y IDE" topic: "Testing" location: "Sala Hipàtia d'Alexandria" @@ -256,8 +262,8 @@ events: color: blue type: workshop language: "Spanish" - python_level: "" - topic_level: "" + python_level: intermediate + topic_level: beginner requirements: "Conexión a internet, cuenta de Google (para trabajar en Google Colab a través de librerías ya disponibles sin necesidad de usar consola de comandos (cmd) ni instalar Python en local." topic: "Data science, Natural Language Process, Data Visualization" location: "Sala d'actes Ada Lovelace" @@ -283,8 +289,8 @@ events: color: yellow type: workshop language: "Spanish/English" - python_level: "" - topic_level: "" + python_level: beginner + topic_level: beginner requirements: "Conexión a internet. Python 3.10+. Tener la librería \"openai\" instalada. No se necesitará una API key para el taller. Se recomienda usar un gestor de entornos como uv o virtualenv, aunque no es obligatorio. Cada participante debe tener su entorno listo. Durante el taller se utilizará \"uv\" para gestionar dependencias." topic: "LLM" location: "Sala Margarita Salas" @@ -299,8 +305,8 @@ events: color: red type: workshop language: "English" - python_level: "" - topic_level: "" + python_level: intermediate + topic_level: intermediate topic: "Data Science" location: "Sala Hedy Lamarr" requirements: "Participants should bring a laptop with: @@ -325,8 +331,8 @@ events: color: orange type: workshop language: "Spanish" - python_level: "" - topic_level: "" + python_level: beginner + topic_level: beginner requirements: "Python and DOCX" topic: "Artificial Intelligence" location: "Sala Hipàtia d'Alexandria" @@ -371,8 +377,8 @@ events: color: blue type: workshop language: "Spanish/English" - python_level: "" - topic_level: "" + python_level: intermediate + topic_level: beginner requirements: "Python 3.10+ (cada participante puede decidir seguir el taller con un Jupyter Notebook, Google Colab, scripts de Python, etc). El taller se desarrollará utilizando archivos de texto de Python, pero es apto para seguirlo en un notebook también." topic: "LLM" location: "Sala d'actes Ada Lovelace" @@ -400,8 +406,8 @@ events: color: yellow type: workshop language: "Catalan" - python_level: "" - topic_level: "" + python_level: intermediate + topic_level: intermediate topic: "Computer vision" requirements: "Python" location: "Sala Margarita Salas" @@ -422,8 +428,8 @@ events: color: red type: workshop language: "English" - python_level: "" - topic_level: "" + python_level: advanced + topic_level: advanced requirements: "python, transformers, llama-index" topic: "Agent IA" location: "Sala Hedy Lamarr" @@ -438,8 +444,8 @@ events: color: orange type: workshop language: "Catalan" - python_level: "" - topic_level: "" + python_level: intermediate + topic_level: beginner requirements: "Utilitzarem la última versió de la llibreria bambi durant el taller. Es recomana tenir un virtual environment amb la llibreria ja instal·lada si es vol seguir el taller en directe. El taller també assumeix un nivell intermedi en l'ús de NumPy i Pandas." topic: "Statistics and Data Science" location: "Sala Hipàtia d'Alexandria" @@ -463,8 +469,8 @@ events: color: blue type: workshop language: "Spanish" - python_level: "" - topic_level: "" + python_level: intermediate + topic_level: beginner requirements: "Portátil y acceso a internet, para poder clonar el repositorio y seguir las instrucciones." topic: "IA Generativa" location: "Sala d'actes Ada Lovelace" @@ -483,8 +489,8 @@ events: color: yellow type: workshop language: "English" - python_level: "" - topic_level: "" + python_level: beginner + topic_level: beginner requirements: "" topic: "" location: "Sala Margarita Salas" @@ -499,8 +505,8 @@ events: color: red type: workshop language: "English" - python_level: "" - topic_level: "" + python_level: intermediate + topic_level: beginner topic: "Web development" location: "Sala Hedy Lamarr" repositories: "https://github.com/ericmassip/carbon-home-watcher" @@ -514,8 +520,8 @@ events: color: orange type: workshop language: "English" - python_level: "" - topic_level: "" + python_level: intermediate + topic_level: beginner requirements: "Notebook and basic python knowledge" topic: "Causal Inference & Data Science" location: "Sala Hipàtia d'Alexandria" diff --git a/resources/_gen/assets/scss/style.scss_77b10c8e87ff110a62c52933fe3f7f11.content b/resources/_gen/assets/scss/style.scss_77b10c8e87ff110a62c52933fe3f7f11.content index 3605cf17..3ff3ed6a 100644 --- a/resources/_gen/assets/scss/style.scss_77b10c8e87ff110a62c52933fe3f7f11.content +++ b/resources/_gen/assets/scss/style.scss_77b10c8e87ff110a62c52933fe3f7f11.content @@ -1 +1 @@ -.semitransparent{background-color:rgba(0,0,0,.5);padding:10px}.yellow_text{color:#fdbf2e}.yellow_text:hover{color:#fdbf2e}.btn-primary{background-color:#006c9b;border-color:#006c9b}.btn-primary:hover{background-color:#fdbf2e;border-color:#fdbf2e}.flex_box{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;flex-wrap:wrap}.flex_box>[class*=col-]{display:flex;flex-direction:column}ul.buttons{width:100%;padding:10px;list-style-type:none;font-size:1.4em}ul.buttons li{width:100%;margin-bottom:5px}ul.buttons li.last{margin-bottom:0}ul.buttons li a{text-decoration:none}ul.buttons li a i.fas{margin-right:10px}.h1,h1{background-color:#006c9b;text-align:center;padding:30px 0;color:#fff;font-weight:400;margin-bottom:50px}a,a:hover{color:#006c9b}#main_content{margin-top:105px;padding-top:0}.oov{min-height:400px;padding:50px}.oov::after{background-image:url(https://upload.wikimedia.org/wikipedia/commons/f/fa/%D7%A2%D7%A9%D7%A8%D7%AA_%D7%94%D7%A2%D7%A7%D7%A8%D7%95%D7%A0%D7%95%D7%AA_%D7%A9%D7%9C_%D7%98%D7%99%D7%9D_%D7%A4%D7%99%D7%98%D7%A8%D7%A1_%D7%9C%D7%9B%D7%AA%D7%99%D7%91%D7%94_%D7%91%D7%A4%D7%99%D7%99%D7%AA%D7%95%D7%9F.png);background-size:cover;content:"";display:block;position:absolute;top:0;left:0;width:100%;height:100%;z-index:-2;opacity:.2}.objects_grid .row.level{margin-bottom:30px}.objects_grid .level_name{text-align:center;margin-top:20px;margin-bottom:20px}.objects_grid .level_name h2{overflow:hidden;text-align:center}.objects_grid .level_name h2:before,.objects_grid .level_name h2:after{background-color:#000;content:"";display:inline-block;height:1px;position:relative;vertical-align:middle;width:50%}.objects_grid .level_name h2:before{right:.5em;margin-left:-50%}.objects_grid .level_name h2:after{left:.5em;margin-right:-50%}.bordered_col{border:1px solid #000;padding:30px}@media(max-width:768px){.bordered_col{margin-bottom:20px}}.modal-title{line-height:1.2}#mainNav{background-color:#fff!important;font-size:1rem;border-bottom:1px solid #006c9b}#mainNav #logo{max-width:230px;max-height:100px;margin:5px 5px 5px 0;transition:all .4s linear 0s}#mainNav.navbar_small{padding-top:0!important;padding-bottom:0!important;transition:all .2s linear 0s}#mainNav.navbar_small #logo{max-width:200px;max-height:40px;transition:all .4s linear 0s}#mainNav i{margin-right:10px}#mainNav li a{font-size:1em;text-transform:uppercase;color:#006c9b;margin-right:2px}#mainNav li a:hover{color:#fff;background-color:#006c9b}#mainNav li a.active{color:#fff;background-color:#006c9b}#mainNav .dropdown-menu .submenu{margin-left:20px}#mainNav .dropdown-menu .submenu.hidden{display:none}#mainNav .dropdown-menu .submenu a{font-size:.8em;text-transform:none}.home_top_section{margin-top:70px;transition:all .4s linear 0s}.home_top_section.navbar_small{margin-top:50px;transition:all .4s linear 0s}footer{background-color:#000;font-size:.9rem;color:#fff;margin-top:30px}footer img.logo_icon{width:30px;margin-right:10px}footer h4,footer a{color:#fff}footer .social_links{text-align:right}footer .social_links a{margin-right:5px}@media(max-width:576px){footer{text-align:center}footer .social_links{text-align:center}}.hero-image{background-size:cover;background-repeat:no-repeat;background-position:50%;background-blend-mode:overlay;background-color:#006c9b;height:400px;position:relative;padding-top:50px;margin-bottom:20px}.hero-image .container{height:100%;display:flex;justify-content:center;flex-direction:column}.hero-image .hero-text{color:#fff}.hero-image .hero-text h1{font-size:3rem;color:#fdbf2e;background-color:transparent;text-align:left;margin-bottom:0;padding:0}.hero-image .hero-text h2{font-size:2.2rem}.hero-image .hero-text p{font-size:1.6rem;line-height:1.3;width:60%}@media(max-width:768px){.hero-image{height:250px}.hero-image .hero-text p{font-size:1.3rem}}.items-title{border-bottom:1px solid #e6e6e6}.items-title h1{padding-top:12px;padding-bottom:25px;color:#292f33;font-family:Helvetica,Roboto,segoe ui,Calibri,sans-serif;font-size:27px;background-color:transparent;text-align:left;margin-bottom:0}.items-list{margin:0;padding:0;list-style:none}.items-list .items-entry{padding-top:5px;padding-bottom:10px;padding-right:10px;border-bottom:1px solid #e6e6e6;font-family:Helvetica,Roboto,segoe ui,Calibri,sans-serif;color:#292f33}.items-list .items-entry .items-entry-title{font-size:medium;font-weight:700}.items-list .items-entry a{color:#292f33}.items-list .items-entry a:hover{text-decoration:none}.items-list .items-entry p,.items-list .items-entry ul li{font-size:large}.items-list .items-entry .publish-date{width:100%;text-align:right;font-size:small;color:#7e8f9c}.items-list .items-entry:hover{background-color:#f0faff}.items-list li.spinner{height:50px;width:100%;margin:10px auto;display:flex;align-items:center;justify-content:center}.items-list li.spinner i{margin:20px;padding:10px;color:#006c9b}.item-button{height:50px;width:100%;margin:10px auto;display:flex;align-items:center;justify-content:center}.item-button a{border:1px solid #006c9b;margin:20px;padding:10px;color:#006c9b;font-family:Helvetica,Roboto,segoe ui,Calibri,sans-serif;font-size:20px}.item-button a:hover{text-decoration:none}@media(max-width:768px){.item-button a{font-size:1rem}}#sponsors_grid .sponsor{text-align:center}#sponsors_grid .sponsor .img-logo{max-height:150px;max-width:90%;margin-bottom:30px}#sponsors_grid .sponsor.col-md-12 .img-logo{max-width:70%}#contact a{color:#006c9b}#contact a:hover{color:#333}#contact h4{margin-bottom:20px}#contact h4 i{margin-right:10px}#contact .general_contact .bordered_col{border-color:#006c9b;color:#fff;background-color:#006c9b;height:100%}#contact .general_contact .bordered_col a{color:#fff;margin-right:5px}#contact .general_contact .bordered_col a:hover{color:#000}#people_grid .person_wrapper{margin-bottom:20px}#people_grid .person_wrapper .person_item{border:1px solid #000;padding:10px;min-height:100%}#people_grid .person_wrapper .person_item .img-wrap{margin-bottom:25px;position:relative;overflow:hidden;padding-bottom:100%}#people_grid .person_wrapper .person_item .img-wrap img{position:absolute;width:100%;filter:grayscale(100%)}#people_grid .person_wrapper .person_item .person_data{line-height:1rem;margin-bottom:35px}#people_grid .person_wrapper .person_item .person_data h3{color:#000;font-size:1.2em;margin-bottom:5px}#people_grid .person_wrapper .person_item .social_links{position:absolute;bottom:5px;left:25px;padding-top:10px}#people_grid .person_wrapper .person_item .social_links i{color:#000}#people_grid .person_wrapper .person_item .social_links i:hover{color:#006c9b}#people_grid .person_wrapper .person_item:hover .img-wrap img{transform:scale(1.2);-webkit-transition:-webkit-transform .2s linear;transition:transform .2s linear;filter:none}#people_grid .person_wrapper .person_item:hover h3{color:#006c9b}#people_grid .person_wrapper .person_item .modal .modal-dialog{max-width:70%}#people_grid .person_wrapper .person_item .modal .modal-dialog img{max-width:400px;margin:0 15px 15px 0}#people_grid .person_wrapper .person_item .modal .modal-dialog h3 a:first-child{margin-left:10px}#people_grid .person_wrapper .person_item .modal .modal-dialog h3 i{color:#006c9b}@media(max-width:575.98px){#people_grid .person_wrapper .person_item .modal .modal-dialog{max-width:100%}#people_grid .person_wrapper .person_item .modal .modal-dialog img{max-width:100%}}.carousel .transparent_caption{background-color:rgba(0,0,0,.5);padding:10px;margin-bottom:40px}.carousel .transparent_caption h1{background-color:transparent;margin-bottom:0}.col .carousel h1{padding:10px;font-size:1.1em}.col .carousel p{margin-bottom:0}.col .carousel a.btn{line-height:1rem}.col .carousel .transparent_caption{margin-bottom:20px}@media(max-width:768px){.carousel h1{padding:10px;font-size:1.1em}.carousel p{margin-bottom:0}.carousel a.btn{line-height:1rem}.carousel .transparent_caption{margin-bottom:20px}}#options h2{margin-bottom:20px;margin-top:20px}#options .block .bordered_col{border:1px solid #000;padding:20px}#options .block h4{margin-bottom:20px}#options .block h4 i{margin-right:10px}#options .block dt.collapsable-control{background:#fff;padding:5px 0;border:none;font-weight:700;margin-bottom:2px}#options .block dt.collapsable-control a{text-decoration:none;font-weight:700}#options .block dt.collapsable-control>a:before{font-family:'font awesome\ 5 free';content:"\f077";padding-right:5px}#options .block dt.collapsable-control>a.collapsed:before{font-family:'font awesome\ 5 free';content:"\f078"}#options .block dd ul{margin-bottom:0;padding-left:24px}#options .block dd ul li p{margin-bottom:0}#event_page{margin-bottom:2em}#event_page #index_sections{top:100px}#event_page .list-group-item.active{background-color:#006c9b;border-color:#006c9b}#event_page .link_anchor{padding-top:80px;margin-top:-80px}@media(max-width:768px){#index_sections{margin-bottom:2em}}.scheduleContainer{display:grid;grid-gap:.2rem;margin-bottom:3em}.scheduleContainer .time{display:flex;align-items:top;justify-content:flex-end;border-top:thin dotted #ccc;height:100%;padding:0 .5rem}.scheduleContainer.span30min .time.start-700{grid-area:time700}.scheduleContainer.span30min .time.start-730{grid-area:time730}.scheduleContainer.span30min .time.start-800{grid-area:time800}.scheduleContainer.span30min .time.start-830{grid-area:time830}.scheduleContainer.span30min .time.start-900{grid-area:time900}.scheduleContainer.span30min .time.start-930{grid-area:time930}.scheduleContainer.span30min .time.start-1000{grid-area:time1000}.scheduleContainer.span30min .time.start-1030{grid-area:time1030}.scheduleContainer.span30min .time.start-1100{grid-area:time1100}.scheduleContainer.span30min .time.start-1130{grid-area:time1130}.scheduleContainer.span30min .time.start-1200{grid-area:time1200}.scheduleContainer.span30min .time.start-1230{grid-area:time1230}.scheduleContainer.span30min .time.start-1300{grid-area:time1300}.scheduleContainer.span30min .time.start-1330{grid-area:time1330}.scheduleContainer.span30min .time.start-1400{grid-area:time1400}.scheduleContainer.span30min .time.start-1430{grid-area:time1430}.scheduleContainer.span30min .time.start-1500{grid-area:time1500}.scheduleContainer.span30min .time.start-1530{grid-area:time1530}.scheduleContainer.span30min .time.start-1600{grid-area:time1600}.scheduleContainer.span30min .time.start-1630{grid-area:time1630}.scheduleContainer.span30min .time.start-1700{grid-area:time1700}.scheduleContainer.span30min .time.start-1730{grid-area:time1730}.scheduleContainer.span30min .time.start-1800{grid-area:time1800}.scheduleContainer.span30min .time.start-1830{grid-area:time1830}.scheduleContainer.span30min .time.start-1900{grid-area:time1900}.scheduleContainer.span30min .time.start-1930{grid-area:time1930}.scheduleContainer.span30min .time.start-2000{grid-area:time2000}.scheduleContainer.span30min .time.start-2030{grid-area:time2030}.scheduleContainer.span30min .time.start-2100{grid-area:time2100}.scheduleContainer.span30min .time.start-2130{grid-area:time2130}.scheduleContainer.span30min .time.start-2200{grid-area:time2200}.scheduleContainer.span30min .time.start-2230{grid-area:time2230}.scheduleContainer.span30min .time.start-2300{grid-area:time2300}.scheduleContainer.span30min .time[class*="30"]:not(.start-1300){font-size:.8rem;color:#ccc}.scheduleContainer.span20min .time.start-700{grid-area:time700}.scheduleContainer.span20min .time.start-720{grid-area:time720}.scheduleContainer.span20min .time.start-740{grid-area:time740}.scheduleContainer.span20min .time.start-800{grid-area:time800}.scheduleContainer.span20min .time.start-820{grid-area:time820}.scheduleContainer.span20min .time.start-840{grid-area:time840}.scheduleContainer.span20min .time.start-900{grid-area:time900}.scheduleContainer.span20min .time.start-920{grid-area:time920}.scheduleContainer.span20min .time.start-940{grid-area:time940}.scheduleContainer.span20min .time.start-1000{grid-area:time1000}.scheduleContainer.span20min .time.start-1020{grid-area:time1020}.scheduleContainer.span20min .time.start-1040{grid-area:time1040}.scheduleContainer.span20min .time.start-1100{grid-area:time1100}.scheduleContainer.span20min .time.start-1120{grid-area:time1120}.scheduleContainer.span20min .time.start-1140{grid-area:time1140}.scheduleContainer.span20min .time.start-1200{grid-area:time1200}.scheduleContainer.span20min .time.start-1220{grid-area:time1220}.scheduleContainer.span20min .time.start-1240{grid-area:time1240}.scheduleContainer.span20min .time.start-1300{grid-area:time1300}.scheduleContainer.span20min .time.start-1320{grid-area:time1320}.scheduleContainer.span20min .time.start-1340{grid-area:time1340}.scheduleContainer.span20min .time.start-1400{grid-area:time1400}.scheduleContainer.span20min .time.start-1420{grid-area:time1420}.scheduleContainer.span20min .time.start-1440{grid-area:time1440}.scheduleContainer.span20min .time.start-1500{grid-area:time1500}.scheduleContainer.span20min .time.start-1520{grid-area:time1520}.scheduleContainer.span20min .time.start-1540{grid-area:time1540}.scheduleContainer.span20min .time.start-1600{grid-area:time1600}.scheduleContainer.span20min .time.start-1620{grid-area:time1620}.scheduleContainer.span20min .time.start-1640{grid-area:time1640}.scheduleContainer.span20min .time.start-1700{grid-area:time1700}.scheduleContainer.span20min .time.start-1720{grid-area:time1720}.scheduleContainer.span20min .time.start-1740{grid-area:time1740}.scheduleContainer.span20min .time.start-1800{grid-area:time1800}.scheduleContainer.span20min .time.start-1820{grid-area:time1820}.scheduleContainer.span20min .time.start-1840{grid-area:time1840}.scheduleContainer.span20min .time.start-1900{grid-area:time1900}.scheduleContainer.span20min .time.start-1920{grid-area:time1920}.scheduleContainer.span20min .time.start-1940{grid-area:time1940}.scheduleContainer.span20min .time.start-2000{grid-area:time2000}.scheduleContainer.span20min .time.start-2020{grid-area:time2020}.scheduleContainer.span20min .time.start-2040{grid-area:time2040}.scheduleContainer.span20min .time.start-2100{grid-area:time2100}.scheduleContainer.span20min .time.start-2120{grid-area:time2120}.scheduleContainer.span20min .time.start-2140{grid-area:time2140}.scheduleContainer.span20min .time.start-2200{grid-area:time2200}.scheduleContainer.span20min .time.start-2220{grid-area:time2220}.scheduleContainer.span20min .time.start-2240{grid-area:time2240}.scheduleContainer.span20min .time.start-2300{grid-area:time2300}.scheduleContainer.span20min .time[class*="20"]:not(.start-2000),.scheduleContainer.span20min .time[class*="40"]{font-size:.8rem;color:#ccc}.scheduleContainer.span15min .time.start-700{grid-area:time700}.scheduleContainer.span15min .time.start-715{grid-area:time715}.scheduleContainer.span15min .time.start-730{grid-area:time730}.scheduleContainer.span15min .time.start-745{grid-area:time745}.scheduleContainer.span15min .time.start-800{grid-area:time800}.scheduleContainer.span15min .time.start-815{grid-area:time815}.scheduleContainer.span15min .time.start-830{grid-area:time830}.scheduleContainer.span15min .time.start-845{grid-area:time845}.scheduleContainer.span15min .time.start-900{grid-area:time900}.scheduleContainer.span15min .time.start-915{grid-area:time915}.scheduleContainer.span15min .time.start-930{grid-area:time930}.scheduleContainer.span15min .time.start-945{grid-area:time945}.scheduleContainer.span15min .time.start-1000{grid-area:time1000}.scheduleContainer.span15min .time.start-1015{grid-area:time1015}.scheduleContainer.span15min .time.start-1030{grid-area:time1030}.scheduleContainer.span15min .time.start-1045{grid-area:time1045}.scheduleContainer.span15min .time.start-1100{grid-area:time1100}.scheduleContainer.span15min .time.start-1115{grid-area:time1115}.scheduleContainer.span15min .time.start-1130{grid-area:time1130}.scheduleContainer.span15min .time.start-1145{grid-area:time1145}.scheduleContainer.span15min .time.start-1200{grid-area:time1200}.scheduleContainer.span15min .time.start-1215{grid-area:time1215}.scheduleContainer.span15min .time.start-1230{grid-area:time1230}.scheduleContainer.span15min .time.start-1245{grid-area:time1245}.scheduleContainer.span15min .time.start-1300{grid-area:time1300}.scheduleContainer.span15min .time.start-1315{grid-area:time1315}.scheduleContainer.span15min .time.start-1330{grid-area:time1330}.scheduleContainer.span15min .time.start-1345{grid-area:time1345}.scheduleContainer.span15min .time.start-1400{grid-area:time1400}.scheduleContainer.span15min .time.start-1415{grid-area:time1415}.scheduleContainer.span15min .time.start-1430{grid-area:time1430}.scheduleContainer.span15min .time.start-1445{grid-area:time1445}.scheduleContainer.span15min .time.start-1500{grid-area:time1500}.scheduleContainer.span15min .time.start-1515{grid-area:time1515}.scheduleContainer.span15min .time.start-1530{grid-area:time1530}.scheduleContainer.span15min .time.start-1545{grid-area:time1545}.scheduleContainer.span15min .time.start-1600{grid-area:time1600}.scheduleContainer.span15min .time.start-1615{grid-area:time1615}.scheduleContainer.span15min .time.start-1630{grid-area:time1630}.scheduleContainer.span15min .time.start-1645{grid-area:time1645}.scheduleContainer.span15min .time.start-1700{grid-area:time1700}.scheduleContainer.span15min .time.start-1715{grid-area:time1715}.scheduleContainer.span15min .time.start-1730{grid-area:time1730}.scheduleContainer.span15min .time.start-1745{grid-area:time1745}.scheduleContainer.span15min .time.start-1800{grid-area:time1800}.scheduleContainer.span15min .time.start-1815{grid-area:time1815}.scheduleContainer.span15min .time.start-1830{grid-area:time1830}.scheduleContainer.span15min .time.start-1845{grid-area:time1845}.scheduleContainer.span15min .time.start-1900{grid-area:time1900}.scheduleContainer.span15min .time.start-1915{grid-area:time1915}.scheduleContainer.span15min .time.start-1930{grid-area:time1930}.scheduleContainer.span15min .time.start-1945{grid-area:time1945}.scheduleContainer.span15min .time.start-2000{grid-area:time2000}.scheduleContainer.span15min .time.start-2015{grid-area:time2015}.scheduleContainer.span15min .time.start-2030{grid-area:time2030}.scheduleContainer.span15min .time.start-2045{grid-area:time2045}.scheduleContainer.span15min .time.start-2100{grid-area:time2100}.scheduleContainer.span15min .time.start-2115{grid-area:time2115}.scheduleContainer.span15min .time.start-2130{grid-area:time2130}.scheduleContainer.span15min .time.start-2145{grid-area:time2145}.scheduleContainer.span15min .time.start-2200{grid-area:time2200}.scheduleContainer.span15min .time.start-2215{grid-area:time2215}.scheduleContainer.span15min .time.start-2230{grid-area:time2230}.scheduleContainer.span15min .time.start-2245{grid-area:time2245}.scheduleContainer.span15min .time.start-2300{grid-area:time2300}.scheduleContainer.span15min .time[class*="15"]:not(.start-1500):not(.start-1530),.scheduleContainer.span15min .time[class*="45"]{font-size:.8rem;color:#ccc}.scheduleContainer .event{display:flex;justify-content:start;flex-direction:column;padding:.5rem 1rem;background-color:orange;border-radius:.2rem;font-size:.9rem;font-weight:700;line-height:1.4;color:#fff}.scheduleContainer .event.middle{justify-content:center}.scheduleContainer .event .detail_link{text-align:right}.scheduleContainer .event h3{font-size:.9rem}.scheduleContainer .event h3 i{margin-right:5px}.scheduleContainer .event span{display:block;width:100%;font-weight:400}.scheduleContainer .event a{color:#fff}.scheduleContainer .event .event_video{margin-top:5%}.scheduleContainer .event.green{background-color:#2e7d32}.scheduleContainer .event.yellow{background-color:#edb92e}.scheduleContainer .event.orange{background-color:#ff7900}.scheduleContainer .event.red{background-color:#ce1836}.scheduleContainer .event.blue{background-color:#009989}.scheduleContainer .event.purple{background-color:#672493}.scheduleContainer .event.grey{background-color:#666}.scheduleContainer .event.pink{background-color:#ff1493}.scheduleContainer.span30min .event.start-700{grid-row-start:time700}.scheduleContainer.span30min .event.start-730{grid-row-start:time730}.scheduleContainer.span30min .event.start-800{grid-row-start:time800}.scheduleContainer.span30min .event.start-830{grid-row-start:time830}.scheduleContainer.span30min .event.start-900{grid-row-start:time900}.scheduleContainer.span30min .event.start-930{grid-row-start:time930}.scheduleContainer.span30min .event.start-1000{grid-row-start:time1000}.scheduleContainer.span30min .event.start-1030{grid-row-start:time1030}.scheduleContainer.span30min .event.start-1100{grid-row-start:time1100}.scheduleContainer.span30min .event.start-1130{grid-row-start:time1130}.scheduleContainer.span30min .event.start-1200{grid-row-start:time1200}.scheduleContainer.span30min .event.start-1230{grid-row-start:time1230}.scheduleContainer.span30min .event.start-1300{grid-row-start:time1300}.scheduleContainer.span30min .event.start-1330{grid-row-start:time1330}.scheduleContainer.span30min .event.start-1400{grid-row-start:time1400}.scheduleContainer.span30min .event.start-1430{grid-row-start:time1430}.scheduleContainer.span30min .event.start-1500{grid-row-start:time1500}.scheduleContainer.span30min .event.start-1530{grid-row-start:time1530}.scheduleContainer.span30min .event.start-1600{grid-row-start:time1600}.scheduleContainer.span30min .event.start-1630{grid-row-start:time1630}.scheduleContainer.span30min .event.start-1700{grid-row-start:time1700}.scheduleContainer.span30min .event.start-1730{grid-row-start:time1730}.scheduleContainer.span30min .event.start-1800{grid-row-start:time1800}.scheduleContainer.span30min .event.start-1830{grid-row-start:time1830}.scheduleContainer.span30min .event.start-1900{grid-row-start:time1900}.scheduleContainer.span30min .event.start-1930{grid-row-start:time1930}.scheduleContainer.span30min .event.start-2000{grid-row-start:time2000}.scheduleContainer.span30min .event.start-2030{grid-row-start:time2030}.scheduleContainer.span30min .event.start-2100{grid-row-start:time2100}.scheduleContainer.span30min .event.start-2130{grid-row-start:time2130}.scheduleContainer.span30min .event.start-2200{grid-row-start:time2200}.scheduleContainer.span30min .event.start-2230{grid-row-start:time2230}.scheduleContainer.span30min .event.start-2300{grid-row-start:time2300}.scheduleContainer.span30min .event.end-700{grid-row-end:time700}.scheduleContainer.span30min .event.end-730{grid-row-end:time730}.scheduleContainer.span30min .event.end-800{grid-row-end:time800}.scheduleContainer.span30min .event.end-830{grid-row-end:time830}.scheduleContainer.span30min .event.end-900{grid-row-end:time900}.scheduleContainer.span30min .event.end-930{grid-row-end:time930}.scheduleContainer.span30min .event.end-1000{grid-row-end:time1000}.scheduleContainer.span30min .event.end-1030{grid-row-end:time1030}.scheduleContainer.span30min .event.end-1100{grid-row-end:time1100}.scheduleContainer.span30min .event.end-1130{grid-row-end:time1130}.scheduleContainer.span30min .event.end-1200{grid-row-end:time1200}.scheduleContainer.span30min .event.end-1230{grid-row-end:time1230}.scheduleContainer.span30min .event.end-1300{grid-row-end:time1300}.scheduleContainer.span30min .event.end-1330{grid-row-end:time1330}.scheduleContainer.span30min .event.end-1400{grid-row-end:time1400}.scheduleContainer.span30min .event.end-1430{grid-row-end:time1430}.scheduleContainer.span30min .event.end-1500{grid-row-end:time1500}.scheduleContainer.span30min .event.end-1530{grid-row-end:time1530}.scheduleContainer.span30min .event.end-1600{grid-row-end:time1600}.scheduleContainer.span30min .event.end-1630{grid-row-end:time1630}.scheduleContainer.span30min .event.end-1700{grid-row-end:time1700}.scheduleContainer.span30min .event.end-1730{grid-row-end:time1730}.scheduleContainer.span30min .event.end-1800{grid-row-end:time1800}.scheduleContainer.span30min .event.end-1830{grid-row-end:time1830}.scheduleContainer.span30min .event.end-1900{grid-row-end:time1900}.scheduleContainer.span30min .event.end-1930{grid-row-end:time1930}.scheduleContainer.span30min .event.end-2000{grid-row-end:time2000}.scheduleContainer.span30min .event.end-2030{grid-row-end:time2030}.scheduleContainer.span30min .event.end-2100{grid-row-end:time2100}.scheduleContainer.span30min .event.end-2130{grid-row-end:time2130}.scheduleContainer.span30min .event.end-2200{grid-row-end:time2200}.scheduleContainer.span30min .event.end-2230{grid-row-end:time2230}.scheduleContainer.span30min .event.end-2300{grid-row-end:time2300}.scheduleContainer.span20min .event.start-700{grid-row-start:time700}.scheduleContainer.span20min .event.start-720{grid-row-start:time720}.scheduleContainer.span20min .event.start-740{grid-row-start:time740}.scheduleContainer.span20min .event.start-800{grid-row-start:time800}.scheduleContainer.span20min .event.start-820{grid-row-start:time820}.scheduleContainer.span20min .event.start-840{grid-row-start:time840}.scheduleContainer.span20min .event.start-900{grid-row-start:time900}.scheduleContainer.span20min .event.start-920{grid-row-start:time920}.scheduleContainer.span20min .event.start-940{grid-row-start:time940}.scheduleContainer.span20min .event.start-1000{grid-row-start:time1000}.scheduleContainer.span20min .event.start-1020{grid-row-start:time1020}.scheduleContainer.span20min .event.start-1040{grid-row-start:time1040}.scheduleContainer.span20min .event.start-1100{grid-row-start:time1100}.scheduleContainer.span20min .event.start-1120{grid-row-start:time1120}.scheduleContainer.span20min .event.start-1140{grid-row-start:time1140}.scheduleContainer.span20min .event.start-1200{grid-row-start:time1200}.scheduleContainer.span20min .event.start-1220{grid-row-start:time1220}.scheduleContainer.span20min .event.start-1240{grid-row-start:time1240}.scheduleContainer.span20min .event.start-1300{grid-row-start:time1300}.scheduleContainer.span20min .event.start-1320{grid-row-start:time1320}.scheduleContainer.span20min .event.start-1340{grid-row-start:time1340}.scheduleContainer.span20min .event.start-1400{grid-row-start:time1400}.scheduleContainer.span20min .event.start-1420{grid-row-start:time1420}.scheduleContainer.span20min .event.start-1440{grid-row-start:time1440}.scheduleContainer.span20min .event.start-1500{grid-row-start:time1500}.scheduleContainer.span20min .event.start-1520{grid-row-start:time1520}.scheduleContainer.span20min .event.start-1540{grid-row-start:time1540}.scheduleContainer.span20min .event.start-1600{grid-row-start:time1600}.scheduleContainer.span20min .event.start-1620{grid-row-start:time1620}.scheduleContainer.span20min .event.start-1640{grid-row-start:time1640}.scheduleContainer.span20min .event.start-1700{grid-row-start:time1700}.scheduleContainer.span20min .event.start-1720{grid-row-start:time1720}.scheduleContainer.span20min .event.start-1740{grid-row-start:time1740}.scheduleContainer.span20min .event.start-1800{grid-row-start:time1800}.scheduleContainer.span20min .event.start-1820{grid-row-start:time1820}.scheduleContainer.span20min .event.start-1840{grid-row-start:time1840}.scheduleContainer.span20min .event.start-1900{grid-row-start:time1900}.scheduleContainer.span20min .event.start-1920{grid-row-start:time1920}.scheduleContainer.span20min .event.start-1940{grid-row-start:time1940}.scheduleContainer.span20min .event.start-2000{grid-row-start:time2000}.scheduleContainer.span20min .event.start-2020{grid-row-start:time2020}.scheduleContainer.span20min .event.start-2040{grid-row-start:time2040}.scheduleContainer.span20min .event.start-2100{grid-row-start:time2100}.scheduleContainer.span20min .event.start-2120{grid-row-start:time2120}.scheduleContainer.span20min .event.start-2140{grid-row-start:time2140}.scheduleContainer.span20min .event.start-2200{grid-row-start:time2200}.scheduleContainer.span20min .event.start-2220{grid-row-start:time2220}.scheduleContainer.span20min .event.start-2240{grid-row-start:time2240}.scheduleContainer.span20min .event.start-2300{grid-row-start:time2300}.scheduleContainer.span20min .event.end-700{grid-row-end:time700}.scheduleContainer.span20min .event.end-720{grid-row-end:time720}.scheduleContainer.span20min .event.end-740{grid-row-end:time740}.scheduleContainer.span20min .event.end-800{grid-row-end:time800}.scheduleContainer.span20min .event.end-820{grid-row-end:time820}.scheduleContainer.span20min .event.end-840{grid-row-end:time840}.scheduleContainer.span20min .event.end-900{grid-row-end:time900}.scheduleContainer.span20min .event.end-920{grid-row-end:time920}.scheduleContainer.span20min .event.end-940{grid-row-end:time940}.scheduleContainer.span20min .event.end-1000{grid-row-end:time1000}.scheduleContainer.span20min .event.end-1020{grid-row-end:time1020}.scheduleContainer.span20min .event.end-1040{grid-row-end:time1040}.scheduleContainer.span20min .event.end-1100{grid-row-end:time1100}.scheduleContainer.span20min .event.end-1120{grid-row-end:time1120}.scheduleContainer.span20min .event.end-1140{grid-row-end:time1140}.scheduleContainer.span20min .event.end-1200{grid-row-end:time1200}.scheduleContainer.span20min .event.end-1220{grid-row-end:time1220}.scheduleContainer.span20min .event.end-1240{grid-row-end:time1240}.scheduleContainer.span20min .event.end-1300{grid-row-end:time1300}.scheduleContainer.span20min .event.end-1320{grid-row-end:time1320}.scheduleContainer.span20min .event.end-1340{grid-row-end:time1340}.scheduleContainer.span20min .event.end-1400{grid-row-end:time1400}.scheduleContainer.span20min .event.end-1420{grid-row-end:time1420}.scheduleContainer.span20min .event.end-1440{grid-row-end:time1440}.scheduleContainer.span20min .event.end-1500{grid-row-end:time1500}.scheduleContainer.span20min .event.end-1520{grid-row-end:time1520}.scheduleContainer.span20min .event.end-1540{grid-row-end:time1540}.scheduleContainer.span20min .event.end-1600{grid-row-end:time1600}.scheduleContainer.span20min .event.end-1620{grid-row-end:time1620}.scheduleContainer.span20min .event.end-1640{grid-row-end:time1640}.scheduleContainer.span20min .event.end-1700{grid-row-end:time1700}.scheduleContainer.span20min .event.end-1720{grid-row-end:time1720}.scheduleContainer.span20min .event.end-1740{grid-row-end:time1740}.scheduleContainer.span20min .event.end-1800{grid-row-end:time1800}.scheduleContainer.span20min .event.end-1820{grid-row-end:time1820}.scheduleContainer.span20min .event.end-1840{grid-row-end:time1840}.scheduleContainer.span20min .event.end-1900{grid-row-end:time1900}.scheduleContainer.span20min .event.end-1920{grid-row-end:time1920}.scheduleContainer.span20min .event.end-1940{grid-row-end:time1940}.scheduleContainer.span20min .event.end-2000{grid-row-end:time2000}.scheduleContainer.span20min .event.end-2020{grid-row-end:time2020}.scheduleContainer.span20min .event.end-2040{grid-row-end:time2040}.scheduleContainer.span20min .event.end-2100{grid-row-end:time2100}.scheduleContainer.span20min .event.end-2120{grid-row-end:time2120}.scheduleContainer.span20min .event.end-2140{grid-row-end:time2140}.scheduleContainer.span20min .event.end-2200{grid-row-end:time2200}.scheduleContainer.span20min .event.end-2220{grid-row-end:time2220}.scheduleContainer.span20min .event.end-2240{grid-row-end:time2240}.scheduleContainer.span20min .event.end-2300{grid-row-end:time2300}.scheduleContainer.span15min .event.start-700{grid-row-start:time700}.scheduleContainer.span15min .event.start-715{grid-row-start:time715}.scheduleContainer.span15min .event.start-730{grid-row-start:time730}.scheduleContainer.span15min .event.start-745{grid-row-start:time745}.scheduleContainer.span15min .event.start-800{grid-row-start:time800}.scheduleContainer.span15min .event.start-815{grid-row-start:time815}.scheduleContainer.span15min .event.start-830{grid-row-start:time830}.scheduleContainer.span15min .event.start-845{grid-row-start:time845}.scheduleContainer.span15min .event.start-900{grid-row-start:time900}.scheduleContainer.span15min .event.start-915{grid-row-start:time915}.scheduleContainer.span15min .event.start-930{grid-row-start:time930}.scheduleContainer.span15min .event.start-945{grid-row-start:time945}.scheduleContainer.span15min .event.start-1000{grid-row-start:time1000}.scheduleContainer.span15min .event.start-1015{grid-row-start:time1015}.scheduleContainer.span15min .event.start-1030{grid-row-start:time1030}.scheduleContainer.span15min .event.start-1045{grid-row-start:time1045}.scheduleContainer.span15min .event.start-1100{grid-row-start:time1100}.scheduleContainer.span15min .event.start-1115{grid-row-start:time1115}.scheduleContainer.span15min .event.start-1130{grid-row-start:time1130}.scheduleContainer.span15min .event.start-1145{grid-row-start:time1145}.scheduleContainer.span15min .event.start-1200{grid-row-start:time1200}.scheduleContainer.span15min .event.start-1215{grid-row-start:time1215}.scheduleContainer.span15min .event.start-1230{grid-row-start:time1230}.scheduleContainer.span15min .event.start-1245{grid-row-start:time1245}.scheduleContainer.span15min .event.start-1300{grid-row-start:time1300}.scheduleContainer.span15min .event.start-1315{grid-row-start:time1315}.scheduleContainer.span15min .event.start-1330{grid-row-start:time1330}.scheduleContainer.span15min .event.start-1345{grid-row-start:time1345}.scheduleContainer.span15min .event.start-1400{grid-row-start:time1400}.scheduleContainer.span15min .event.start-1415{grid-row-start:time1415}.scheduleContainer.span15min .event.start-1430{grid-row-start:time1430}.scheduleContainer.span15min .event.start-1445{grid-row-start:time1445}.scheduleContainer.span15min .event.start-1500{grid-row-start:time1500}.scheduleContainer.span15min .event.start-1515{grid-row-start:time1515}.scheduleContainer.span15min .event.start-1530{grid-row-start:time1530}.scheduleContainer.span15min .event.start-1545{grid-row-start:time1545}.scheduleContainer.span15min .event.start-1600{grid-row-start:time1600}.scheduleContainer.span15min .event.start-1615{grid-row-start:time1615}.scheduleContainer.span15min .event.start-1630{grid-row-start:time1630}.scheduleContainer.span15min .event.start-1645{grid-row-start:time1645}.scheduleContainer.span15min .event.start-1700{grid-row-start:time1700}.scheduleContainer.span15min .event.start-1715{grid-row-start:time1715}.scheduleContainer.span15min .event.start-1730{grid-row-start:time1730}.scheduleContainer.span15min .event.start-1745{grid-row-start:time1745}.scheduleContainer.span15min .event.start-1800{grid-row-start:time1800}.scheduleContainer.span15min .event.start-1815{grid-row-start:time1815}.scheduleContainer.span15min .event.start-1830{grid-row-start:time1830}.scheduleContainer.span15min .event.start-1845{grid-row-start:time1845}.scheduleContainer.span15min .event.start-1900{grid-row-start:time1900}.scheduleContainer.span15min .event.start-1915{grid-row-start:time1915}.scheduleContainer.span15min .event.start-1930{grid-row-start:time1930}.scheduleContainer.span15min .event.start-1945{grid-row-start:time1945}.scheduleContainer.span15min .event.start-2000{grid-row-start:time2000}.scheduleContainer.span15min .event.start-2015{grid-row-start:time2015}.scheduleContainer.span15min .event.start-2030{grid-row-start:time2030}.scheduleContainer.span15min .event.start-2045{grid-row-start:time2045}.scheduleContainer.span15min .event.start-2100{grid-row-start:time2100}.scheduleContainer.span15min .event.start-2115{grid-row-start:time2115}.scheduleContainer.span15min .event.start-2130{grid-row-start:time2130}.scheduleContainer.span15min .event.start-2145{grid-row-start:time2145}.scheduleContainer.span15min .event.start-2200{grid-row-start:time2200}.scheduleContainer.span15min .event.start-2215{grid-row-start:time2215}.scheduleContainer.span15min .event.start-2230{grid-row-start:time2230}.scheduleContainer.span15min .event.start-2245{grid-row-start:time2245}.scheduleContainer.span15min .event.start-2300{grid-row-start:time2300}.scheduleContainer.span15min .event.end-700{grid-row-end:time700}.scheduleContainer.span15min .event.end-715{grid-row-end:time715}.scheduleContainer.span15min .event.end-730{grid-row-end:time730}.scheduleContainer.span15min .event.end-745{grid-row-end:time745}.scheduleContainer.span15min .event.end-800{grid-row-end:time800}.scheduleContainer.span15min .event.end-815{grid-row-end:time815}.scheduleContainer.span15min .event.end-830{grid-row-end:time830}.scheduleContainer.span15min .event.end-845{grid-row-end:time845}.scheduleContainer.span15min .event.end-900{grid-row-end:time900}.scheduleContainer.span15min .event.end-915{grid-row-end:time915}.scheduleContainer.span15min .event.end-930{grid-row-end:time930}.scheduleContainer.span15min .event.end-945{grid-row-end:time945}.scheduleContainer.span15min .event.end-1000{grid-row-end:time1000}.scheduleContainer.span15min .event.end-1015{grid-row-end:time1015}.scheduleContainer.span15min .event.end-1030{grid-row-end:time1030}.scheduleContainer.span15min .event.end-1045{grid-row-end:time1045}.scheduleContainer.span15min .event.end-1100{grid-row-end:time1100}.scheduleContainer.span15min .event.end-1115{grid-row-end:time1115}.scheduleContainer.span15min .event.end-1130{grid-row-end:time1130}.scheduleContainer.span15min .event.end-1145{grid-row-end:time1145}.scheduleContainer.span15min .event.end-1200{grid-row-end:time1200}.scheduleContainer.span15min .event.end-1215{grid-row-end:time1215}.scheduleContainer.span15min .event.end-1230{grid-row-end:time1230}.scheduleContainer.span15min .event.end-1245{grid-row-end:time1245}.scheduleContainer.span15min .event.end-1300{grid-row-end:time1300}.scheduleContainer.span15min .event.end-1315{grid-row-end:time1315}.scheduleContainer.span15min .event.end-1330{grid-row-end:time1330}.scheduleContainer.span15min .event.end-1345{grid-row-end:time1345}.scheduleContainer.span15min .event.end-1400{grid-row-end:time1400}.scheduleContainer.span15min .event.end-1415{grid-row-end:time1415}.scheduleContainer.span15min .event.end-1430{grid-row-end:time1430}.scheduleContainer.span15min .event.end-1445{grid-row-end:time1445}.scheduleContainer.span15min .event.end-1500{grid-row-end:time1500}.scheduleContainer.span15min .event.end-1515{grid-row-end:time1515}.scheduleContainer.span15min .event.end-1530{grid-row-end:time1530}.scheduleContainer.span15min .event.end-1545{grid-row-end:time1545}.scheduleContainer.span15min .event.end-1600{grid-row-end:time1600}.scheduleContainer.span15min .event.end-1615{grid-row-end:time1615}.scheduleContainer.span15min .event.end-1630{grid-row-end:time1630}.scheduleContainer.span15min .event.end-1645{grid-row-end:time1645}.scheduleContainer.span15min .event.end-1700{grid-row-end:time1700}.scheduleContainer.span15min .event.end-1715{grid-row-end:time1715}.scheduleContainer.span15min .event.end-1730{grid-row-end:time1730}.scheduleContainer.span15min .event.end-1745{grid-row-end:time1745}.scheduleContainer.span15min .event.end-1800{grid-row-end:time1800}.scheduleContainer.span15min .event.end-1815{grid-row-end:time1815}.scheduleContainer.span15min .event.end-1830{grid-row-end:time1830}.scheduleContainer.span15min .event.end-1845{grid-row-end:time1845}.scheduleContainer.span15min .event.end-1900{grid-row-end:time1900}.scheduleContainer.span15min .event.end-1915{grid-row-end:time1915}.scheduleContainer.span15min .event.end-1930{grid-row-end:time1930}.scheduleContainer.span15min .event.end-1945{grid-row-end:time1945}.scheduleContainer.span15min .event.end-2000{grid-row-end:time2000}.scheduleContainer.span15min .event.end-2015{grid-row-end:time2015}.scheduleContainer.span15min .event.end-2030{grid-row-end:time2030}.scheduleContainer.span15min .event.end-2045{grid-row-end:time2045}.scheduleContainer.span15min .event.end-2100{grid-row-end:time2100}.scheduleContainer.span15min .event.end-2115{grid-row-end:time2115}.scheduleContainer.span15min .event.end-2130{grid-row-end:time2130}.scheduleContainer.span15min .event.end-2145{grid-row-end:time2145}.scheduleContainer.span15min .event.end-2200{grid-row-end:time2200}.scheduleContainer.span15min .event.end-2215{grid-row-end:time2215}.scheduleContainer.span15min .event.end-2230{grid-row-end:time2230}.scheduleContainer.span15min .event.end-2245{grid-row-end:time2245}.scheduleContainer.span15min .event.end-2300{grid-row-end:time2300}.legend{font-size:.9em;opacity:.7;text-align:right;margin-bottom:25px;margin-right:5px}.legend:hover{opacity:1}i.green{color:#6cc417}i.yellow{color:#ff3}i.red{color:red}i.gold{color:gold}#home_top_section{margin-top:50px}.color_box{height:100%;padding:25px;background-color:#006c9b;background-image:url(../images/backgrounds/logo_mini_white.png);background-position:140% 107%;background-repeat:no-repeat;background-size:67%}.color_box h1{color:#fff;background-color:transparent;text-align:center;text-transform:uppercase;font-size:1.8rem;margin:0;padding:0}.color_box a.btn{width:100%;margin-top:15px;padding:10px;color:#006c9b;background-color:#fff;border-color:#006c9b;font-weight:700;text-align:left}.color_box a.btn:hover{background-color:#343a40;color:#fff}.color_box a.btn i{margin-right:5px}#highlights{margin:50px 0;padding:50px;background-color:#fdbf2e}#highlights h3{color:#fff;text-transform:uppercase}#highlights h4 i{margin-right:10px}#highlights .item{background-color:#fff;padding:10px}#highlights .item .btn-primary{background-color:#343a40}.banner{color:#fff;background-color:#006c9b;background-image:url(/archives/pybcn.org/pyday-bcn-2019/Foto%20de%20grup%20-%20small.jpg);background-position:50%;background-repeat:no-repeat;background-size:cover;border-radius:5px;margin-top:50px;padding:20px}.banner h1{margin:0;padding-top:10px;background-color:transparent}@media(max-width:768px){#highlights .item{margin-bottom:20px}#meetup_events .events_list{margin-bottom:20px}}@media(max-width:576px){#home_top_section{margin-top:20px}.home_carousel{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto;padding-top:15px}.home_carousel .transparent_caption{margin-bottom:-6px}.home_carousel .transparent_caption h1{font-size:1rem;line-height:1rem;padding:8px}.home_carousel .transparent_caption a.btn{font-size:.7rem;line-height:.7rem;padding:.275rem .65rem}.home_carousel .carousel-indicators{margin-bottom:0;bottom:6px}}#meetup_events .events_list{height:100%;border:1px solid #343a40;padding:10px}#meetup_events .events_list.PyLadiesBCN-events{background-image:url(../images/backgrounds/pyladiesbcn_head_transparent.png);background-repeat:no-repeat;background-position:100% 0;background-size:50%}#meetup_events .events_list.PyBCN-events{background-image:url(../images/backgrounds/pybcn_cut_transparent.png);background-repeat:no-repeat;background-position:100% 0;background-size:50%}#meetup_events .events_list .items-list .items-entry:last-child{border-bottom:none}#meetup_events .events_list .upcoming_events,#meetup_events .events_list .past_events{z-index:1000;position:relative}#meetup_events .events_list .past_events .items-title h1{font-size:1.3em}#meetup_events .events_list .past_events .items-list .items-entry .items-entry-title{font-size:.8em;font-weight:400}#meetup_events .events_list .past_events .item-button a{border-color:#006c9b;background:#006c9b;color:#fff} \ No newline at end of file +.semitransparent{background-color:rgba(0,0,0,.5);padding:10px}.yellow_text{color:#fdbf2e}.yellow_text:hover{color:#fdbf2e}.btn-primary{background-color:#006c9b;border-color:#006c9b}.btn-primary:hover{background-color:#fdbf2e;border-color:#fdbf2e}.flex_box{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;flex-wrap:wrap}.flex_box>[class*=col-]{display:flex;flex-direction:column}ul.buttons{width:100%;padding:10px;list-style-type:none;font-size:1.4em}ul.buttons li{width:100%;margin-bottom:5px}ul.buttons li.last{margin-bottom:0}ul.buttons li a{text-decoration:none}ul.buttons li a i.fas{margin-right:10px}.h1,h1{background-color:#006c9b;text-align:center;padding:30px 0;color:#fff;font-weight:400;margin-bottom:50px}a,a:hover{color:#006c9b}#main_content{margin-top:105px;padding-top:0}.oov{min-height:400px;padding:50px}.oov::after{background-image:url(https://upload.wikimedia.org/wikipedia/commons/f/fa/%D7%A2%D7%A9%D7%A8%D7%AA_%D7%94%D7%A2%D7%A7%D7%A8%D7%95%D7%A0%D7%95%D7%AA_%D7%A9%D7%9C_%D7%98%D7%99%D7%9D_%D7%A4%D7%99%D7%98%D7%A8%D7%A1_%D7%9C%D7%9B%D7%AA%D7%99%D7%91%D7%94_%D7%91%D7%A4%D7%99%D7%99%D7%AA%D7%95%D7%9F.png);background-size:cover;content:"";display:block;position:absolute;top:0;left:0;width:100%;height:100%;z-index:-2;opacity:.2}.objects_grid .row.level{margin-bottom:30px}.objects_grid .level_name{text-align:center;margin-top:20px;margin-bottom:20px}.objects_grid .level_name h2{overflow:hidden;text-align:center}.objects_grid .level_name h2:before,.objects_grid .level_name h2:after{background-color:#000;content:"";display:inline-block;height:1px;position:relative;vertical-align:middle;width:50%}.objects_grid .level_name h2:before{right:.5em;margin-left:-50%}.objects_grid .level_name h2:after{left:.5em;margin-right:-50%}.bordered_col{border:1px solid #000;padding:30px}@media(max-width:768px){.bordered_col{margin-bottom:20px}}.modal-title{line-height:1.2}#mainNav{background-color:#fff!important;font-size:1rem;border-bottom:1px solid #006c9b}#mainNav #logo{max-width:230px;max-height:100px;margin:5px 5px 5px 0;transition:all .4s linear 0s}#mainNav.navbar_small{padding-top:0!important;padding-bottom:0!important;transition:all .2s linear 0s}#mainNav.navbar_small #logo{max-width:200px;max-height:40px;transition:all .4s linear 0s}#mainNav i{margin-right:10px}#mainNav li a{font-size:1em;text-transform:uppercase;color:#006c9b;margin-right:2px}#mainNav li a:hover{color:#fff;background-color:#006c9b}#mainNav li a.active{color:#fff;background-color:#006c9b}#mainNav .dropdown-menu .submenu{margin-left:20px}#mainNav .dropdown-menu .submenu.hidden{display:none}#mainNav .dropdown-menu .submenu a{font-size:.8em;text-transform:none}.home_top_section{margin-top:70px;transition:all .4s linear 0s}.home_top_section.navbar_small{margin-top:50px;transition:all .4s linear 0s}footer{background-color:#000;font-size:.9rem;color:#fff;margin-top:30px}footer img.logo_icon{width:30px;margin-right:10px}footer h4,footer a{color:#fff}footer .social_links{text-align:right}footer .social_links a{margin-right:5px}@media(max-width:576px){footer{text-align:center}footer .social_links{text-align:center}}.hero-image{background-size:cover;background-repeat:no-repeat;background-position:50%;background-blend-mode:overlay;background-color:#006c9b;height:400px;position:relative;padding-top:50px;margin-bottom:20px}.hero-image .container{height:100%;display:flex;justify-content:center;flex-direction:column}.hero-image .hero-text{color:#fff}.hero-image .hero-text h1{font-size:3rem;color:#fdbf2e;background-color:transparent;text-align:left;margin-bottom:0;padding:0}.hero-image .hero-text h2{font-size:2.2rem}.hero-image .hero-text p{font-size:1.6rem;line-height:1.3;width:60%}@media(max-width:768px){.hero-image{height:250px}.hero-image .hero-text p{font-size:1.3rem}}.items-title{border-bottom:1px solid #e6e6e6}.items-title h1{padding-top:12px;padding-bottom:25px;color:#292f33;font-family:Helvetica,Roboto,segoe ui,Calibri,sans-serif;font-size:27px;background-color:transparent;text-align:left;margin-bottom:0}.items-list{margin:0;padding:0;list-style:none}.items-list .items-entry{padding-top:5px;padding-bottom:10px;padding-right:10px;border-bottom:1px solid #e6e6e6;font-family:Helvetica,Roboto,segoe ui,Calibri,sans-serif;color:#292f33}.items-list .items-entry .items-entry-title{font-size:medium;font-weight:700}.items-list .items-entry a{color:#292f33}.items-list .items-entry a:hover{text-decoration:none}.items-list .items-entry p,.items-list .items-entry ul li{font-size:large}.items-list .items-entry .publish-date{width:100%;text-align:right;font-size:small;color:#7e8f9c}.items-list .items-entry:hover{background-color:#f0faff}.items-list li.spinner{height:50px;width:100%;margin:10px auto;display:flex;align-items:center;justify-content:center}.items-list li.spinner i{margin:20px;padding:10px;color:#006c9b}.item-button{height:50px;width:100%;margin:10px auto;display:flex;align-items:center;justify-content:center}.item-button a{border:1px solid #006c9b;margin:20px;padding:10px;color:#006c9b;font-family:Helvetica,Roboto,segoe ui,Calibri,sans-serif;font-size:20px}.item-button a:hover{text-decoration:none}@media(max-width:768px){.item-button a{font-size:1rem}}#sponsors_grid .sponsor{text-align:center}#sponsors_grid .sponsor .img-logo{max-height:150px;max-width:90%;margin-bottom:30px}#sponsors_grid .sponsor.col-md-12 .img-logo{max-width:70%}#contact a{color:#006c9b}#contact a:hover{color:#333}#contact h4{margin-bottom:20px}#contact h4 i{margin-right:10px}#contact .general_contact .bordered_col{border-color:#006c9b;color:#fff;background-color:#006c9b;height:100%}#contact .general_contact .bordered_col a{color:#fff;margin-right:5px}#contact .general_contact .bordered_col a:hover{color:#000}#people_grid .person_wrapper{margin-bottom:20px}#people_grid .person_wrapper .person_item{border:1px solid #000;padding:10px;min-height:100%}#people_grid .person_wrapper .person_item .img-wrap{margin-bottom:25px;position:relative;overflow:hidden;padding-bottom:100%}#people_grid .person_wrapper .person_item .img-wrap img{position:absolute;width:100%;filter:grayscale(100%)}#people_grid .person_wrapper .person_item .person_data{line-height:1rem;margin-bottom:35px}#people_grid .person_wrapper .person_item .person_data h3{color:#000;font-size:1.2em;margin-bottom:5px}#people_grid .person_wrapper .person_item .social_links{position:absolute;bottom:5px;left:25px;padding-top:10px}#people_grid .person_wrapper .person_item .social_links i{color:#000}#people_grid .person_wrapper .person_item .social_links i:hover{color:#006c9b}#people_grid .person_wrapper .person_item:hover .img-wrap img{transform:scale(1.2);-webkit-transition:-webkit-transform .2s linear;transition:transform .2s linear;filter:none}#people_grid .person_wrapper .person_item:hover h3{color:#006c9b}#people_grid .person_wrapper .person_item .modal .modal-dialog{max-width:70%}#people_grid .person_wrapper .person_item .modal .modal-dialog img{max-width:400px;margin:0 15px 15px 0}#people_grid .person_wrapper .person_item .modal .modal-dialog h3 a:first-child{margin-left:10px}#people_grid .person_wrapper .person_item .modal .modal-dialog h3 i{color:#006c9b}@media(max-width:575.98px){#people_grid .person_wrapper .person_item .modal .modal-dialog{max-width:100%}#people_grid .person_wrapper .person_item .modal .modal-dialog img{max-width:100%}}.carousel .transparent_caption{background-color:rgba(0,0,0,.5);padding:10px;margin-bottom:40px}.carousel .transparent_caption h1{background-color:transparent;margin-bottom:0}.col .carousel h1{padding:10px;font-size:1.1em}.col .carousel p{margin-bottom:0}.col .carousel a.btn{line-height:1rem}.col .carousel .transparent_caption{margin-bottom:20px}@media(max-width:768px){.carousel h1{padding:10px;font-size:1.1em}.carousel p{margin-bottom:0}.carousel a.btn{line-height:1rem}.carousel .transparent_caption{margin-bottom:20px}}#options h2{margin-bottom:20px;margin-top:20px}#options .block .bordered_col{border:1px solid #000;padding:20px}#options .block h4{margin-bottom:20px}#options .block h4 i{margin-right:10px}#options .block dt.collapsable-control{background:#fff;padding:5px 0;border:none;font-weight:700;margin-bottom:2px}#options .block dt.collapsable-control a{text-decoration:none;font-weight:700}#options .block dt.collapsable-control>a:before{font-family:'font awesome\ 5 free';content:"\f077";padding-right:5px}#options .block dt.collapsable-control>a.collapsed:before{font-family:'font awesome\ 5 free';content:"\f078"}#options .block dd ul{margin-bottom:0;padding-left:24px}#options .block dd ul li p{margin-bottom:0}#event_page{margin-bottom:2em}#event_page #index_sections{top:100px}#event_page .list-group-item.active{background-color:#006c9b;border-color:#006c9b}#event_page .link_anchor{padding-top:80px;margin-top:-80px}@media(max-width:768px){#index_sections{margin-bottom:2em}}.scheduleContainer{display:grid;grid-gap:.2rem;margin-bottom:3em}.scheduleContainer .time{display:flex;align-items:top;justify-content:flex-end;border-top:thin dotted #ccc;height:100%;padding:0 .5rem}.scheduleContainer.span30min .time.start-700{grid-area:time700}.scheduleContainer.span30min .time.start-730{grid-area:time730}.scheduleContainer.span30min .time.start-800{grid-area:time800}.scheduleContainer.span30min .time.start-830{grid-area:time830}.scheduleContainer.span30min .time.start-900{grid-area:time900}.scheduleContainer.span30min .time.start-930{grid-area:time930}.scheduleContainer.span30min .time.start-1000{grid-area:time1000}.scheduleContainer.span30min .time.start-1030{grid-area:time1030}.scheduleContainer.span30min .time.start-1100{grid-area:time1100}.scheduleContainer.span30min .time.start-1130{grid-area:time1130}.scheduleContainer.span30min .time.start-1200{grid-area:time1200}.scheduleContainer.span30min .time.start-1230{grid-area:time1230}.scheduleContainer.span30min .time.start-1300{grid-area:time1300}.scheduleContainer.span30min .time.start-1330{grid-area:time1330}.scheduleContainer.span30min .time.start-1400{grid-area:time1400}.scheduleContainer.span30min .time.start-1430{grid-area:time1430}.scheduleContainer.span30min .time.start-1500{grid-area:time1500}.scheduleContainer.span30min .time.start-1530{grid-area:time1530}.scheduleContainer.span30min .time.start-1600{grid-area:time1600}.scheduleContainer.span30min .time.start-1630{grid-area:time1630}.scheduleContainer.span30min .time.start-1700{grid-area:time1700}.scheduleContainer.span30min .time.start-1730{grid-area:time1730}.scheduleContainer.span30min .time.start-1800{grid-area:time1800}.scheduleContainer.span30min .time.start-1830{grid-area:time1830}.scheduleContainer.span30min .time.start-1900{grid-area:time1900}.scheduleContainer.span30min .time.start-1930{grid-area:time1930}.scheduleContainer.span30min .time.start-2000{grid-area:time2000}.scheduleContainer.span30min .time.start-2030{grid-area:time2030}.scheduleContainer.span30min .time.start-2100{grid-area:time2100}.scheduleContainer.span30min .time.start-2130{grid-area:time2130}.scheduleContainer.span30min .time.start-2200{grid-area:time2200}.scheduleContainer.span30min .time.start-2230{grid-area:time2230}.scheduleContainer.span30min .time.start-2300{grid-area:time2300}.scheduleContainer.span30min .time[class*="30"]:not(.start-1300){font-size:.8rem;color:#ccc}.scheduleContainer.span20min .time.start-700{grid-area:time700}.scheduleContainer.span20min .time.start-720{grid-area:time720}.scheduleContainer.span20min .time.start-740{grid-area:time740}.scheduleContainer.span20min .time.start-800{grid-area:time800}.scheduleContainer.span20min .time.start-820{grid-area:time820}.scheduleContainer.span20min .time.start-840{grid-area:time840}.scheduleContainer.span20min .time.start-900{grid-area:time900}.scheduleContainer.span20min .time.start-920{grid-area:time920}.scheduleContainer.span20min .time.start-940{grid-area:time940}.scheduleContainer.span20min .time.start-1000{grid-area:time1000}.scheduleContainer.span20min .time.start-1020{grid-area:time1020}.scheduleContainer.span20min .time.start-1040{grid-area:time1040}.scheduleContainer.span20min .time.start-1100{grid-area:time1100}.scheduleContainer.span20min .time.start-1120{grid-area:time1120}.scheduleContainer.span20min .time.start-1140{grid-area:time1140}.scheduleContainer.span20min .time.start-1200{grid-area:time1200}.scheduleContainer.span20min .time.start-1220{grid-area:time1220}.scheduleContainer.span20min .time.start-1240{grid-area:time1240}.scheduleContainer.span20min .time.start-1300{grid-area:time1300}.scheduleContainer.span20min .time.start-1320{grid-area:time1320}.scheduleContainer.span20min .time.start-1340{grid-area:time1340}.scheduleContainer.span20min .time.start-1400{grid-area:time1400}.scheduleContainer.span20min .time.start-1420{grid-area:time1420}.scheduleContainer.span20min .time.start-1440{grid-area:time1440}.scheduleContainer.span20min .time.start-1500{grid-area:time1500}.scheduleContainer.span20min .time.start-1520{grid-area:time1520}.scheduleContainer.span20min .time.start-1540{grid-area:time1540}.scheduleContainer.span20min .time.start-1600{grid-area:time1600}.scheduleContainer.span20min .time.start-1620{grid-area:time1620}.scheduleContainer.span20min .time.start-1640{grid-area:time1640}.scheduleContainer.span20min .time.start-1700{grid-area:time1700}.scheduleContainer.span20min .time.start-1720{grid-area:time1720}.scheduleContainer.span20min .time.start-1740{grid-area:time1740}.scheduleContainer.span20min .time.start-1800{grid-area:time1800}.scheduleContainer.span20min .time.start-1820{grid-area:time1820}.scheduleContainer.span20min .time.start-1840{grid-area:time1840}.scheduleContainer.span20min .time.start-1900{grid-area:time1900}.scheduleContainer.span20min .time.start-1920{grid-area:time1920}.scheduleContainer.span20min .time.start-1940{grid-area:time1940}.scheduleContainer.span20min .time.start-2000{grid-area:time2000}.scheduleContainer.span20min .time.start-2020{grid-area:time2020}.scheduleContainer.span20min .time.start-2040{grid-area:time2040}.scheduleContainer.span20min .time.start-2100{grid-area:time2100}.scheduleContainer.span20min .time.start-2120{grid-area:time2120}.scheduleContainer.span20min .time.start-2140{grid-area:time2140}.scheduleContainer.span20min .time.start-2200{grid-area:time2200}.scheduleContainer.span20min .time.start-2220{grid-area:time2220}.scheduleContainer.span20min .time.start-2240{grid-area:time2240}.scheduleContainer.span20min .time.start-2300{grid-area:time2300}.scheduleContainer.span20min .time[class*="20"]:not(.start-2000),.scheduleContainer.span20min .time[class*="40"]{font-size:.8rem;color:#ccc}.scheduleContainer.span15min .time.start-700{grid-area:time700}.scheduleContainer.span15min .time.start-715{grid-area:time715}.scheduleContainer.span15min .time.start-730{grid-area:time730}.scheduleContainer.span15min .time.start-745{grid-area:time745}.scheduleContainer.span15min .time.start-800{grid-area:time800}.scheduleContainer.span15min .time.start-815{grid-area:time815}.scheduleContainer.span15min .time.start-830{grid-area:time830}.scheduleContainer.span15min .time.start-845{grid-area:time845}.scheduleContainer.span15min .time.start-900{grid-area:time900}.scheduleContainer.span15min .time.start-915{grid-area:time915}.scheduleContainer.span15min .time.start-930{grid-area:time930}.scheduleContainer.span15min .time.start-945{grid-area:time945}.scheduleContainer.span15min .time.start-1000{grid-area:time1000}.scheduleContainer.span15min .time.start-1015{grid-area:time1015}.scheduleContainer.span15min .time.start-1030{grid-area:time1030}.scheduleContainer.span15min .time.start-1045{grid-area:time1045}.scheduleContainer.span15min .time.start-1100{grid-area:time1100}.scheduleContainer.span15min .time.start-1115{grid-area:time1115}.scheduleContainer.span15min .time.start-1130{grid-area:time1130}.scheduleContainer.span15min .time.start-1145{grid-area:time1145}.scheduleContainer.span15min .time.start-1200{grid-area:time1200}.scheduleContainer.span15min .time.start-1215{grid-area:time1215}.scheduleContainer.span15min .time.start-1230{grid-area:time1230}.scheduleContainer.span15min .time.start-1245{grid-area:time1245}.scheduleContainer.span15min .time.start-1300{grid-area:time1300}.scheduleContainer.span15min .time.start-1315{grid-area:time1315}.scheduleContainer.span15min .time.start-1330{grid-area:time1330}.scheduleContainer.span15min .time.start-1345{grid-area:time1345}.scheduleContainer.span15min .time.start-1400{grid-area:time1400}.scheduleContainer.span15min .time.start-1415{grid-area:time1415}.scheduleContainer.span15min .time.start-1430{grid-area:time1430}.scheduleContainer.span15min .time.start-1445{grid-area:time1445}.scheduleContainer.span15min .time.start-1500{grid-area:time1500}.scheduleContainer.span15min .time.start-1515{grid-area:time1515}.scheduleContainer.span15min .time.start-1530{grid-area:time1530}.scheduleContainer.span15min .time.start-1545{grid-area:time1545}.scheduleContainer.span15min .time.start-1600{grid-area:time1600}.scheduleContainer.span15min .time.start-1615{grid-area:time1615}.scheduleContainer.span15min .time.start-1630{grid-area:time1630}.scheduleContainer.span15min .time.start-1645{grid-area:time1645}.scheduleContainer.span15min .time.start-1700{grid-area:time1700}.scheduleContainer.span15min .time.start-1715{grid-area:time1715}.scheduleContainer.span15min .time.start-1730{grid-area:time1730}.scheduleContainer.span15min .time.start-1745{grid-area:time1745}.scheduleContainer.span15min .time.start-1800{grid-area:time1800}.scheduleContainer.span15min .time.start-1815{grid-area:time1815}.scheduleContainer.span15min .time.start-1830{grid-area:time1830}.scheduleContainer.span15min .time.start-1845{grid-area:time1845}.scheduleContainer.span15min .time.start-1900{grid-area:time1900}.scheduleContainer.span15min .time.start-1915{grid-area:time1915}.scheduleContainer.span15min .time.start-1930{grid-area:time1930}.scheduleContainer.span15min .time.start-1945{grid-area:time1945}.scheduleContainer.span15min .time.start-2000{grid-area:time2000}.scheduleContainer.span15min .time.start-2015{grid-area:time2015}.scheduleContainer.span15min .time.start-2030{grid-area:time2030}.scheduleContainer.span15min .time.start-2045{grid-area:time2045}.scheduleContainer.span15min .time.start-2100{grid-area:time2100}.scheduleContainer.span15min .time.start-2115{grid-area:time2115}.scheduleContainer.span15min .time.start-2130{grid-area:time2130}.scheduleContainer.span15min .time.start-2145{grid-area:time2145}.scheduleContainer.span15min .time.start-2200{grid-area:time2200}.scheduleContainer.span15min .time.start-2215{grid-area:time2215}.scheduleContainer.span15min .time.start-2230{grid-area:time2230}.scheduleContainer.span15min .time.start-2245{grid-area:time2245}.scheduleContainer.span15min .time.start-2300{grid-area:time2300}.scheduleContainer.span15min .time[class*="15"]:not(.start-1500):not(.start-1530),.scheduleContainer.span15min .time[class*="45"]{font-size:.8rem;color:#ccc}.scheduleContainer .event{display:flex;justify-content:start;flex-direction:column;padding:.5rem 1rem;background-color:orange;border-radius:.2rem;font-size:.9rem;font-weight:700;line-height:1.4;color:#fff}.scheduleContainer .event.middle{justify-content:center}.scheduleContainer .event .detail_link{text-align:right}.scheduleContainer .event h3{font-size:.9rem}.scheduleContainer .event h3 i{margin-right:5px}.scheduleContainer .event span{display:block;width:100%;font-weight:400}.scheduleContainer .event a{color:#fff}.scheduleContainer .event .event_video{margin-top:5%}.scheduleContainer .event.green{background-color:#2e7d32}.scheduleContainer .event.yellow{background-color:#edb92e}.scheduleContainer .event.orange{background-color:#ff7900}.scheduleContainer .event.red{background-color:#ce1836}.scheduleContainer .event.blue{background-color:#009989}.scheduleContainer .event.purple{background-color:#672493}.scheduleContainer .event.grey{background-color:#666}.scheduleContainer .event.pink{background-color:#ff1493}.scheduleContainer.span30min .event.start-700{grid-row-start:time700}.scheduleContainer.span30min .event.start-730{grid-row-start:time730}.scheduleContainer.span30min .event.start-800{grid-row-start:time800}.scheduleContainer.span30min .event.start-830{grid-row-start:time830}.scheduleContainer.span30min .event.start-900{grid-row-start:time900}.scheduleContainer.span30min .event.start-930{grid-row-start:time930}.scheduleContainer.span30min .event.start-1000{grid-row-start:time1000}.scheduleContainer.span30min .event.start-1030{grid-row-start:time1030}.scheduleContainer.span30min .event.start-1100{grid-row-start:time1100}.scheduleContainer.span30min .event.start-1130{grid-row-start:time1130}.scheduleContainer.span30min .event.start-1200{grid-row-start:time1200}.scheduleContainer.span30min .event.start-1230{grid-row-start:time1230}.scheduleContainer.span30min .event.start-1300{grid-row-start:time1300}.scheduleContainer.span30min .event.start-1330{grid-row-start:time1330}.scheduleContainer.span30min .event.start-1400{grid-row-start:time1400}.scheduleContainer.span30min .event.start-1430{grid-row-start:time1430}.scheduleContainer.span30min .event.start-1500{grid-row-start:time1500}.scheduleContainer.span30min .event.start-1530{grid-row-start:time1530}.scheduleContainer.span30min .event.start-1600{grid-row-start:time1600}.scheduleContainer.span30min .event.start-1630{grid-row-start:time1630}.scheduleContainer.span30min .event.start-1700{grid-row-start:time1700}.scheduleContainer.span30min .event.start-1730{grid-row-start:time1730}.scheduleContainer.span30min .event.start-1800{grid-row-start:time1800}.scheduleContainer.span30min .event.start-1830{grid-row-start:time1830}.scheduleContainer.span30min .event.start-1900{grid-row-start:time1900}.scheduleContainer.span30min .event.start-1930{grid-row-start:time1930}.scheduleContainer.span30min .event.start-2000{grid-row-start:time2000}.scheduleContainer.span30min .event.start-2030{grid-row-start:time2030}.scheduleContainer.span30min .event.start-2100{grid-row-start:time2100}.scheduleContainer.span30min .event.start-2130{grid-row-start:time2130}.scheduleContainer.span30min .event.start-2200{grid-row-start:time2200}.scheduleContainer.span30min .event.start-2230{grid-row-start:time2230}.scheduleContainer.span30min .event.start-2300{grid-row-start:time2300}.scheduleContainer.span30min .event.end-700{grid-row-end:time700}.scheduleContainer.span30min .event.end-730{grid-row-end:time730}.scheduleContainer.span30min .event.end-800{grid-row-end:time800}.scheduleContainer.span30min .event.end-830{grid-row-end:time830}.scheduleContainer.span30min .event.end-900{grid-row-end:time900}.scheduleContainer.span30min .event.end-930{grid-row-end:time930}.scheduleContainer.span30min .event.end-1000{grid-row-end:time1000}.scheduleContainer.span30min .event.end-1030{grid-row-end:time1030}.scheduleContainer.span30min .event.end-1100{grid-row-end:time1100}.scheduleContainer.span30min .event.end-1130{grid-row-end:time1130}.scheduleContainer.span30min .event.end-1200{grid-row-end:time1200}.scheduleContainer.span30min .event.end-1230{grid-row-end:time1230}.scheduleContainer.span30min .event.end-1300{grid-row-end:time1300}.scheduleContainer.span30min .event.end-1330{grid-row-end:time1330}.scheduleContainer.span30min .event.end-1400{grid-row-end:time1400}.scheduleContainer.span30min .event.end-1430{grid-row-end:time1430}.scheduleContainer.span30min .event.end-1500{grid-row-end:time1500}.scheduleContainer.span30min .event.end-1530{grid-row-end:time1530}.scheduleContainer.span30min .event.end-1600{grid-row-end:time1600}.scheduleContainer.span30min .event.end-1630{grid-row-end:time1630}.scheduleContainer.span30min .event.end-1700{grid-row-end:time1700}.scheduleContainer.span30min .event.end-1730{grid-row-end:time1730}.scheduleContainer.span30min .event.end-1800{grid-row-end:time1800}.scheduleContainer.span30min .event.end-1830{grid-row-end:time1830}.scheduleContainer.span30min .event.end-1900{grid-row-end:time1900}.scheduleContainer.span30min .event.end-1930{grid-row-end:time1930}.scheduleContainer.span30min .event.end-2000{grid-row-end:time2000}.scheduleContainer.span30min .event.end-2030{grid-row-end:time2030}.scheduleContainer.span30min .event.end-2100{grid-row-end:time2100}.scheduleContainer.span30min .event.end-2130{grid-row-end:time2130}.scheduleContainer.span30min .event.end-2200{grid-row-end:time2200}.scheduleContainer.span30min .event.end-2230{grid-row-end:time2230}.scheduleContainer.span30min .event.end-2300{grid-row-end:time2300}.scheduleContainer.span20min .event.start-700{grid-row-start:time700}.scheduleContainer.span20min .event.start-720{grid-row-start:time720}.scheduleContainer.span20min .event.start-740{grid-row-start:time740}.scheduleContainer.span20min .event.start-800{grid-row-start:time800}.scheduleContainer.span20min .event.start-820{grid-row-start:time820}.scheduleContainer.span20min .event.start-840{grid-row-start:time840}.scheduleContainer.span20min .event.start-900{grid-row-start:time900}.scheduleContainer.span20min .event.start-920{grid-row-start:time920}.scheduleContainer.span20min .event.start-940{grid-row-start:time940}.scheduleContainer.span20min .event.start-1000{grid-row-start:time1000}.scheduleContainer.span20min .event.start-1020{grid-row-start:time1020}.scheduleContainer.span20min .event.start-1040{grid-row-start:time1040}.scheduleContainer.span20min .event.start-1100{grid-row-start:time1100}.scheduleContainer.span20min .event.start-1120{grid-row-start:time1120}.scheduleContainer.span20min .event.start-1140{grid-row-start:time1140}.scheduleContainer.span20min .event.start-1200{grid-row-start:time1200}.scheduleContainer.span20min .event.start-1220{grid-row-start:time1220}.scheduleContainer.span20min .event.start-1240{grid-row-start:time1240}.scheduleContainer.span20min .event.start-1300{grid-row-start:time1300}.scheduleContainer.span20min .event.start-1320{grid-row-start:time1320}.scheduleContainer.span20min .event.start-1340{grid-row-start:time1340}.scheduleContainer.span20min .event.start-1400{grid-row-start:time1400}.scheduleContainer.span20min .event.start-1420{grid-row-start:time1420}.scheduleContainer.span20min .event.start-1440{grid-row-start:time1440}.scheduleContainer.span20min .event.start-1500{grid-row-start:time1500}.scheduleContainer.span20min .event.start-1520{grid-row-start:time1520}.scheduleContainer.span20min .event.start-1540{grid-row-start:time1540}.scheduleContainer.span20min .event.start-1600{grid-row-start:time1600}.scheduleContainer.span20min .event.start-1620{grid-row-start:time1620}.scheduleContainer.span20min .event.start-1640{grid-row-start:time1640}.scheduleContainer.span20min .event.start-1700{grid-row-start:time1700}.scheduleContainer.span20min .event.start-1720{grid-row-start:time1720}.scheduleContainer.span20min .event.start-1740{grid-row-start:time1740}.scheduleContainer.span20min .event.start-1800{grid-row-start:time1800}.scheduleContainer.span20min .event.start-1820{grid-row-start:time1820}.scheduleContainer.span20min .event.start-1840{grid-row-start:time1840}.scheduleContainer.span20min .event.start-1900{grid-row-start:time1900}.scheduleContainer.span20min .event.start-1920{grid-row-start:time1920}.scheduleContainer.span20min .event.start-1940{grid-row-start:time1940}.scheduleContainer.span20min .event.start-2000{grid-row-start:time2000}.scheduleContainer.span20min .event.start-2020{grid-row-start:time2020}.scheduleContainer.span20min .event.start-2040{grid-row-start:time2040}.scheduleContainer.span20min .event.start-2100{grid-row-start:time2100}.scheduleContainer.span20min .event.start-2120{grid-row-start:time2120}.scheduleContainer.span20min .event.start-2140{grid-row-start:time2140}.scheduleContainer.span20min .event.start-2200{grid-row-start:time2200}.scheduleContainer.span20min .event.start-2220{grid-row-start:time2220}.scheduleContainer.span20min .event.start-2240{grid-row-start:time2240}.scheduleContainer.span20min .event.start-2300{grid-row-start:time2300}.scheduleContainer.span20min .event.end-700{grid-row-end:time700}.scheduleContainer.span20min .event.end-720{grid-row-end:time720}.scheduleContainer.span20min .event.end-740{grid-row-end:time740}.scheduleContainer.span20min .event.end-800{grid-row-end:time800}.scheduleContainer.span20min .event.end-820{grid-row-end:time820}.scheduleContainer.span20min .event.end-840{grid-row-end:time840}.scheduleContainer.span20min .event.end-900{grid-row-end:time900}.scheduleContainer.span20min .event.end-920{grid-row-end:time920}.scheduleContainer.span20min .event.end-940{grid-row-end:time940}.scheduleContainer.span20min .event.end-1000{grid-row-end:time1000}.scheduleContainer.span20min .event.end-1020{grid-row-end:time1020}.scheduleContainer.span20min .event.end-1040{grid-row-end:time1040}.scheduleContainer.span20min .event.end-1100{grid-row-end:time1100}.scheduleContainer.span20min .event.end-1120{grid-row-end:time1120}.scheduleContainer.span20min .event.end-1140{grid-row-end:time1140}.scheduleContainer.span20min .event.end-1200{grid-row-end:time1200}.scheduleContainer.span20min .event.end-1220{grid-row-end:time1220}.scheduleContainer.span20min .event.end-1240{grid-row-end:time1240}.scheduleContainer.span20min .event.end-1300{grid-row-end:time1300}.scheduleContainer.span20min .event.end-1320{grid-row-end:time1320}.scheduleContainer.span20min .event.end-1340{grid-row-end:time1340}.scheduleContainer.span20min .event.end-1400{grid-row-end:time1400}.scheduleContainer.span20min .event.end-1420{grid-row-end:time1420}.scheduleContainer.span20min .event.end-1440{grid-row-end:time1440}.scheduleContainer.span20min .event.end-1500{grid-row-end:time1500}.scheduleContainer.span20min .event.end-1520{grid-row-end:time1520}.scheduleContainer.span20min .event.end-1540{grid-row-end:time1540}.scheduleContainer.span20min .event.end-1600{grid-row-end:time1600}.scheduleContainer.span20min .event.end-1620{grid-row-end:time1620}.scheduleContainer.span20min .event.end-1640{grid-row-end:time1640}.scheduleContainer.span20min .event.end-1700{grid-row-end:time1700}.scheduleContainer.span20min .event.end-1720{grid-row-end:time1720}.scheduleContainer.span20min .event.end-1740{grid-row-end:time1740}.scheduleContainer.span20min .event.end-1800{grid-row-end:time1800}.scheduleContainer.span20min .event.end-1820{grid-row-end:time1820}.scheduleContainer.span20min .event.end-1840{grid-row-end:time1840}.scheduleContainer.span20min .event.end-1900{grid-row-end:time1900}.scheduleContainer.span20min .event.end-1920{grid-row-end:time1920}.scheduleContainer.span20min .event.end-1940{grid-row-end:time1940}.scheduleContainer.span20min .event.end-2000{grid-row-end:time2000}.scheduleContainer.span20min .event.end-2020{grid-row-end:time2020}.scheduleContainer.span20min .event.end-2040{grid-row-end:time2040}.scheduleContainer.span20min .event.end-2100{grid-row-end:time2100}.scheduleContainer.span20min .event.end-2120{grid-row-end:time2120}.scheduleContainer.span20min .event.end-2140{grid-row-end:time2140}.scheduleContainer.span20min .event.end-2200{grid-row-end:time2200}.scheduleContainer.span20min .event.end-2220{grid-row-end:time2220}.scheduleContainer.span20min .event.end-2240{grid-row-end:time2240}.scheduleContainer.span20min .event.end-2300{grid-row-end:time2300}.scheduleContainer.span15min .event.start-700{grid-row-start:time700}.scheduleContainer.span15min .event.start-715{grid-row-start:time715}.scheduleContainer.span15min .event.start-730{grid-row-start:time730}.scheduleContainer.span15min .event.start-745{grid-row-start:time745}.scheduleContainer.span15min .event.start-800{grid-row-start:time800}.scheduleContainer.span15min .event.start-815{grid-row-start:time815}.scheduleContainer.span15min .event.start-830{grid-row-start:time830}.scheduleContainer.span15min .event.start-845{grid-row-start:time845}.scheduleContainer.span15min .event.start-900{grid-row-start:time900}.scheduleContainer.span15min .event.start-915{grid-row-start:time915}.scheduleContainer.span15min .event.start-930{grid-row-start:time930}.scheduleContainer.span15min .event.start-945{grid-row-start:time945}.scheduleContainer.span15min .event.start-1000{grid-row-start:time1000}.scheduleContainer.span15min .event.start-1015{grid-row-start:time1015}.scheduleContainer.span15min .event.start-1030{grid-row-start:time1030}.scheduleContainer.span15min .event.start-1045{grid-row-start:time1045}.scheduleContainer.span15min .event.start-1100{grid-row-start:time1100}.scheduleContainer.span15min .event.start-1115{grid-row-start:time1115}.scheduleContainer.span15min .event.start-1130{grid-row-start:time1130}.scheduleContainer.span15min .event.start-1145{grid-row-start:time1145}.scheduleContainer.span15min .event.start-1200{grid-row-start:time1200}.scheduleContainer.span15min .event.start-1215{grid-row-start:time1215}.scheduleContainer.span15min .event.start-1230{grid-row-start:time1230}.scheduleContainer.span15min .event.start-1245{grid-row-start:time1245}.scheduleContainer.span15min .event.start-1300{grid-row-start:time1300}.scheduleContainer.span15min .event.start-1315{grid-row-start:time1315}.scheduleContainer.span15min .event.start-1330{grid-row-start:time1330}.scheduleContainer.span15min .event.start-1345{grid-row-start:time1345}.scheduleContainer.span15min .event.start-1400{grid-row-start:time1400}.scheduleContainer.span15min .event.start-1415{grid-row-start:time1415}.scheduleContainer.span15min .event.start-1430{grid-row-start:time1430}.scheduleContainer.span15min .event.start-1445{grid-row-start:time1445}.scheduleContainer.span15min .event.start-1500{grid-row-start:time1500}.scheduleContainer.span15min .event.start-1515{grid-row-start:time1515}.scheduleContainer.span15min .event.start-1530{grid-row-start:time1530}.scheduleContainer.span15min .event.start-1545{grid-row-start:time1545}.scheduleContainer.span15min .event.start-1600{grid-row-start:time1600}.scheduleContainer.span15min .event.start-1615{grid-row-start:time1615}.scheduleContainer.span15min .event.start-1630{grid-row-start:time1630}.scheduleContainer.span15min .event.start-1645{grid-row-start:time1645}.scheduleContainer.span15min .event.start-1700{grid-row-start:time1700}.scheduleContainer.span15min .event.start-1715{grid-row-start:time1715}.scheduleContainer.span15min .event.start-1730{grid-row-start:time1730}.scheduleContainer.span15min .event.start-1745{grid-row-start:time1745}.scheduleContainer.span15min .event.start-1800{grid-row-start:time1800}.scheduleContainer.span15min .event.start-1815{grid-row-start:time1815}.scheduleContainer.span15min .event.start-1830{grid-row-start:time1830}.scheduleContainer.span15min .event.start-1845{grid-row-start:time1845}.scheduleContainer.span15min .event.start-1900{grid-row-start:time1900}.scheduleContainer.span15min .event.start-1915{grid-row-start:time1915}.scheduleContainer.span15min .event.start-1930{grid-row-start:time1930}.scheduleContainer.span15min .event.start-1945{grid-row-start:time1945}.scheduleContainer.span15min .event.start-2000{grid-row-start:time2000}.scheduleContainer.span15min .event.start-2015{grid-row-start:time2015}.scheduleContainer.span15min .event.start-2030{grid-row-start:time2030}.scheduleContainer.span15min .event.start-2045{grid-row-start:time2045}.scheduleContainer.span15min .event.start-2100{grid-row-start:time2100}.scheduleContainer.span15min .event.start-2115{grid-row-start:time2115}.scheduleContainer.span15min .event.start-2130{grid-row-start:time2130}.scheduleContainer.span15min .event.start-2145{grid-row-start:time2145}.scheduleContainer.span15min .event.start-2200{grid-row-start:time2200}.scheduleContainer.span15min .event.start-2215{grid-row-start:time2215}.scheduleContainer.span15min .event.start-2230{grid-row-start:time2230}.scheduleContainer.span15min .event.start-2245{grid-row-start:time2245}.scheduleContainer.span15min .event.start-2300{grid-row-start:time2300}.scheduleContainer.span15min .event.end-700{grid-row-end:time700}.scheduleContainer.span15min .event.end-715{grid-row-end:time715}.scheduleContainer.span15min .event.end-730{grid-row-end:time730}.scheduleContainer.span15min .event.end-745{grid-row-end:time745}.scheduleContainer.span15min .event.end-800{grid-row-end:time800}.scheduleContainer.span15min .event.end-815{grid-row-end:time815}.scheduleContainer.span15min .event.end-830{grid-row-end:time830}.scheduleContainer.span15min .event.end-845{grid-row-end:time845}.scheduleContainer.span15min .event.end-900{grid-row-end:time900}.scheduleContainer.span15min .event.end-915{grid-row-end:time915}.scheduleContainer.span15min .event.end-930{grid-row-end:time930}.scheduleContainer.span15min .event.end-945{grid-row-end:time945}.scheduleContainer.span15min .event.end-1000{grid-row-end:time1000}.scheduleContainer.span15min .event.end-1015{grid-row-end:time1015}.scheduleContainer.span15min .event.end-1030{grid-row-end:time1030}.scheduleContainer.span15min .event.end-1045{grid-row-end:time1045}.scheduleContainer.span15min .event.end-1100{grid-row-end:time1100}.scheduleContainer.span15min .event.end-1115{grid-row-end:time1115}.scheduleContainer.span15min .event.end-1130{grid-row-end:time1130}.scheduleContainer.span15min .event.end-1145{grid-row-end:time1145}.scheduleContainer.span15min .event.end-1200{grid-row-end:time1200}.scheduleContainer.span15min .event.end-1215{grid-row-end:time1215}.scheduleContainer.span15min .event.end-1230{grid-row-end:time1230}.scheduleContainer.span15min .event.end-1245{grid-row-end:time1245}.scheduleContainer.span15min .event.end-1300{grid-row-end:time1300}.scheduleContainer.span15min .event.end-1315{grid-row-end:time1315}.scheduleContainer.span15min .event.end-1330{grid-row-end:time1330}.scheduleContainer.span15min .event.end-1345{grid-row-end:time1345}.scheduleContainer.span15min .event.end-1400{grid-row-end:time1400}.scheduleContainer.span15min .event.end-1415{grid-row-end:time1415}.scheduleContainer.span15min .event.end-1430{grid-row-end:time1430}.scheduleContainer.span15min .event.end-1445{grid-row-end:time1445}.scheduleContainer.span15min .event.end-1500{grid-row-end:time1500}.scheduleContainer.span15min .event.end-1515{grid-row-end:time1515}.scheduleContainer.span15min .event.end-1530{grid-row-end:time1530}.scheduleContainer.span15min .event.end-1545{grid-row-end:time1545}.scheduleContainer.span15min .event.end-1600{grid-row-end:time1600}.scheduleContainer.span15min .event.end-1615{grid-row-end:time1615}.scheduleContainer.span15min .event.end-1630{grid-row-end:time1630}.scheduleContainer.span15min .event.end-1645{grid-row-end:time1645}.scheduleContainer.span15min .event.end-1700{grid-row-end:time1700}.scheduleContainer.span15min .event.end-1715{grid-row-end:time1715}.scheduleContainer.span15min .event.end-1730{grid-row-end:time1730}.scheduleContainer.span15min .event.end-1745{grid-row-end:time1745}.scheduleContainer.span15min .event.end-1800{grid-row-end:time1800}.scheduleContainer.span15min .event.end-1815{grid-row-end:time1815}.scheduleContainer.span15min .event.end-1830{grid-row-end:time1830}.scheduleContainer.span15min .event.end-1845{grid-row-end:time1845}.scheduleContainer.span15min .event.end-1900{grid-row-end:time1900}.scheduleContainer.span15min .event.end-1915{grid-row-end:time1915}.scheduleContainer.span15min .event.end-1930{grid-row-end:time1930}.scheduleContainer.span15min .event.end-1945{grid-row-end:time1945}.scheduleContainer.span15min .event.end-2000{grid-row-end:time2000}.scheduleContainer.span15min .event.end-2015{grid-row-end:time2015}.scheduleContainer.span15min .event.end-2030{grid-row-end:time2030}.scheduleContainer.span15min .event.end-2045{grid-row-end:time2045}.scheduleContainer.span15min .event.end-2100{grid-row-end:time2100}.scheduleContainer.span15min .event.end-2115{grid-row-end:time2115}.scheduleContainer.span15min .event.end-2130{grid-row-end:time2130}.scheduleContainer.span15min .event.end-2145{grid-row-end:time2145}.scheduleContainer.span15min .event.end-2200{grid-row-end:time2200}.scheduleContainer.span15min .event.end-2215{grid-row-end:time2215}.scheduleContainer.span15min .event.end-2230{grid-row-end:time2230}.scheduleContainer.span15min .event.end-2245{grid-row-end:time2245}.scheduleContainer.span15min .event.end-2300{grid-row-end:time2300}.legend{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:.4rem 1.1rem;list-style:none;padding:0;margin:0 5px 25px 0;font-size:.9em}.legend li{display:flex;align-items:baseline;gap:.35em}.legend .legend_separator{width:1px;align-self:stretch;min-height:1em;background-color:#767676;margin:0 .4rem}.legend .fa-star.gold{color:#8c6900}.level_badge,.scheduleContainer .event .level_badge{display:inline-flex;align-items:baseline;gap:.35em;width:auto;padding:0 .5em;border:1px solid #404040;border-radius:.8em;background-color:#fff;color:#1f1f1f;font-weight:600;white-space:nowrap;vertical-align:baseline}.level_badge i,.scheduleContainer .event .level_badge i{font-size:.7em}.level_badge.level_beginner i,.scheduleContainer .event .level_badge.level_beginner i{color:#2e7d32}.level_badge.level_intermediate i,.scheduleContainer .event .level_badge.level_intermediate i{color:#a15c00}.level_badge.level_advanced i,.scheduleContainer .event .level_badge.level_advanced i{color:#ce1836}i.gold{color:gold}#home_top_section{margin-top:50px}.color_box{height:100%;padding:25px;background-color:#006c9b;background-image:url(../images/backgrounds/logo_mini_white.png);background-position:140% 107%;background-repeat:no-repeat;background-size:67%}.color_box h1{color:#fff;background-color:transparent;text-align:center;text-transform:uppercase;font-size:1.8rem;margin:0;padding:0}.color_box a.btn{width:100%;margin-top:15px;padding:10px;color:#006c9b;background-color:#fff;border-color:#006c9b;font-weight:700;text-align:left}.color_box a.btn:hover{background-color:#343a40;color:#fff}.color_box a.btn i{margin-right:5px}#highlights{margin:50px 0;padding:50px;background-color:#fdbf2e}#highlights h3{color:#fff;text-transform:uppercase}#highlights h4 i{margin-right:10px}#highlights .item{background-color:#fff;padding:10px}#highlights .item .btn-primary{background-color:#343a40}.banner{color:#fff;background-color:#006c9b;background-image:url(/archives/pybcn.org/pyday-bcn-2019/Foto%20de%20grup%20-%20small.jpg);background-position:50%;background-repeat:no-repeat;background-size:cover;border-radius:5px;margin-top:50px;padding:20px}.banner h1{margin:0;padding-top:10px;background-color:transparent}@media(max-width:768px){#highlights .item{margin-bottom:20px}#meetup_events .events_list{margin-bottom:20px}}@media(max-width:576px){#home_top_section{margin-top:20px}.home_carousel{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto;padding-top:15px}.home_carousel .transparent_caption{margin-bottom:-6px}.home_carousel .transparent_caption h1{font-size:1rem;line-height:1rem;padding:8px}.home_carousel .transparent_caption a.btn{font-size:.7rem;line-height:.7rem;padding:.275rem .65rem}.home_carousel .carousel-indicators{margin-bottom:0;bottom:6px}}#meetup_events .events_list{height:100%;border:1px solid #343a40;padding:10px}#meetup_events .events_list.PyLadiesBCN-events{background-image:url(../images/backgrounds/pyladiesbcn_head_transparent.png);background-repeat:no-repeat;background-position:100% 0;background-size:50%}#meetup_events .events_list.PyBCN-events{background-image:url(../images/backgrounds/pybcn_cut_transparent.png);background-repeat:no-repeat;background-position:100% 0;background-size:50%}#meetup_events .events_list .items-list .items-entry:last-child{border-bottom:none}#meetup_events .events_list .upcoming_events,#meetup_events .events_list .past_events{z-index:1000;position:relative}#meetup_events .events_list .past_events .items-title h1{font-size:1.3em}#meetup_events .events_list .past_events .items-list .items-entry .items-entry-title{font-size:.8em;font-weight:400}#meetup_events .events_list .past_events .item-button a{border-color:#006c9b;background:#006c9b;color:#fff} \ No newline at end of file diff --git a/resources/_gen/assets/scss/style.scss_77b10c8e87ff110a62c52933fe3f7f11.json b/resources/_gen/assets/scss/style.scss_77b10c8e87ff110a62c52933fe3f7f11.json index ea52e584..f16cb71f 100644 --- a/resources/_gen/assets/scss/style.scss_77b10c8e87ff110a62c52933fe3f7f11.json +++ b/resources/_gen/assets/scss/style.scss_77b10c8e87ff110a62c52933fe3f7f11.json @@ -1 +1 @@ -{"Target":"/scss/style.min.4e5e51666085e7ad7c7fd2b11f58f3ed23aaec572582e12fefebcf2a78273b6d.css","MediaType":"text/css","Data":{"Integrity":"sha256-Tl5RZmCF5618f9KxH1jz7SOq7FclguEv7+vPKngnO20="}} \ No newline at end of file +{"Target":"/scss/style.min.6f0b83731e9ce0c3e9eb3b0be2a38907ea84e265e1452fa207302a6b1162ac27.css","MediaType":"text/css","Data":{"Integrity":"sha256-bwuDcx6c4MPp6zsL4qOJB+qE4mXhRS+iBzAqaxFirCc="}} \ No newline at end of file diff --git a/themes/pybcn_theme/assets/scss/agenda.scss b/themes/pybcn_theme/assets/scss/agenda.scss index 3fe5d249..d4e639ea 100644 --- a/themes/pybcn_theme/assets/scss/agenda.scss +++ b/themes/pybcn_theme/assets/scss/agenda.scss @@ -146,18 +146,85 @@ $blockTimes15: 700,715,730,745,800,815,830,845,900,915,930,945,1000,1015,1030,10 } +/** + * Agenda legend. + * + * Built by the agenda_legend.html partial from structured front matter. + * It used to be a raw HTML blob, so the old "opacity: 0.7, full opacity on + * hover" trick cut the text contrast for every reader who never hovers. + * The text is now at full opacity. + */ .legend { + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: flex-end; + gap: 0.4rem 1.1rem; + list-style: none; + padding: 0; + margin: 0 5px 25px 0; font-size: 0.9em; - opacity: 0.7; - text-align: right; - margin-bottom: 25px; - margin-right: 5px; - &:hover { - opacity: 1; + + li { + display: flex; + align-items: baseline; + gap: 0.35em; + } + + .legend_separator { + width: 1px; + align-self: stretch; + min-height: 1em; + background-color: #767676; + margin: 0 0.4rem; + } + + /* The gold of the agenda star is too light on a white page. */ + .fa-star.gold { + color: #8C6900; } } -i.green { color: #6CC417 } -i.yellow{ color: #FFFF33 } -i.red { color: red } +/** + * Experience level badge. + * + * Emitted by the level_badge.html partial. The text label carries the + * meaning, the dot is a redundant cue (WCAG 1.4.1 Use of Color). + * + * The badge draws its own light background, so dot contrast does not depend + * on the colour of the agenda cell behind it. Contrast of each dot against + * the #FFFFFF badge, against the 3:1 floor of WCAG 1.4.11 Non-text Contrast: + * beginner #2E7D32 5.1:1 + * intermediate #A15C00 5.2:1 + * advanced #CE1836 5.5:1 + * The #404040 border keeps the badge outline at 3:1 or better against every + * cell colour, the lightest of which is the #FF7900 orange at 3.9:1. + * + * The second selector repeats the first so that it outranks + * ".scheduleContainer .event span", which sets display block and width 100%. + */ +.level_badge, +.scheduleContainer .event .level_badge { + display: inline-flex; + align-items: baseline; + gap: 0.35em; + width: auto; + padding: 0 0.5em; + border: 1px solid #404040; + border-radius: 0.8em; + background-color: #FFFFFF; + color: #1F1F1F; + font-weight: 600; + white-space: nowrap; + vertical-align: baseline; + + i { + font-size: 0.7em; + } + + &.level_beginner i { color: #2E7D32; } + &.level_intermediate i { color: #A15C00; } + &.level_advanced i { color: #CE1836; } +} + i.gold { color: #FFD700 } diff --git a/themes/pybcn_theme/layouts/partials/agenda.html b/themes/pybcn_theme/layouts/partials/agenda.html index 48597675..fd322625 100644 --- a/themes/pybcn_theme/layouts/partials/agenda.html +++ b/themes/pybcn_theme/layouts/partials/agenda.html @@ -20,11 +20,7 @@ -{{ if .legend }} -
    - {{ .legend | safeHTML }} -
    -{{ end }} +{{ partial "agenda_legend.html" .legend }}
    @@ -43,23 +39,7 @@

    - {{ if eq $event.type "talk" }} - - {{ else if eq $event.type "coffee" }} - - {{ else if eq $event.type "lunch" }} - - {{ else if eq $event.type "photo" }} - - {{ else if eq $event.type "workshop" }} - - {{ else if eq $event.type "group" }} - - {{ else if eq $event.type "qa" }} - - {{ else if eq $event.type "lightning" }} - - {{ end }} + {{ partial "event_type_icon.html" $event.type }} {{ if $event.description }} @@ -97,10 +77,10 @@

    Topic: {{ . }} {{ end }} {{ with $event.python_level }} - Python level: {{ . | safeHTML }} + Python level: {{ partial "level_badge.html" . }} {{ end }} {{ with $event.topic_level }} - Topic level: {{ . | safeHTML }} + Topic level: {{ partial "level_badge.html" . }} {{ end }} {{ with $event.video }} Video diff --git a/themes/pybcn_theme/layouts/partials/agenda_legend.html b/themes/pybcn_theme/layouts/partials/agenda_legend.html new file mode 100644 index 00000000..708a5da8 --- /dev/null +++ b/themes/pybcn_theme/layouts/partials/agenda_legend.html @@ -0,0 +1,35 @@ +{{- /* + agenda_legend: render the agenda legend from structured front matter. + + Context: the "legend" list of an event page. Each item is one of: + - type: an entry type from event_types.html + label: optional. Overrides the default label + - level: beginner, intermediate or advanced + - separator: true a visual group break, hidden from screen readers + + The legend used to be one raw HTML string rendered with safeHTML, which + let any merged pull request inject script into every agenda page. Front + matter now carries tokens only, and this partial owns the markup. +*/ -}} +{{- $types := partialCached "event_types.html" "event_types" -}} +{{- with . }} +
      + {{- range . }} + {{- if .separator }} + + {{- else if .level }} +
    • {{ partial "level_badge.html" .level }}
    • + {{- else if .type }} + {{- $token := lower (trim (printf "%v" .type) " ") -}} + {{- $entry := index $types $token -}} + {{- if $entry }} +
    • {{ partial "event_type_icon.html" $token }} {{ default $entry.label .label }}
    • + {{- else }} + {{- warnf "agenda_legend: unknown legend type %q." $token -}} + {{- end }} + {{- else }} + {{- warnf "agenda_legend: legend item needs one of type, level or separator. Got %v." . -}} + {{- end }} + {{- end }} +
    +{{- end -}} diff --git a/themes/pybcn_theme/layouts/partials/event_detail.html b/themes/pybcn_theme/layouts/partials/event_detail.html index 346faf94..7c1e46ed 100644 --- a/themes/pybcn_theme/layouts/partials/event_detail.html +++ b/themes/pybcn_theme/layouts/partials/event_detail.html @@ -8,21 +8,7 @@ @@ -53,10 +39,10 @@

already closed. - Every dropdown pointed aria-labelledby at "navbarDropdownMenuLink", an id that no element carried. The toggle link now carries an id built from the menu name, and the menu points at it. --- themes/pybcn_theme/layouts/partials/nav.html | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/themes/pybcn_theme/layouts/partials/nav.html b/themes/pybcn_theme/layouts/partials/nav.html index 49a5c0ec..f7e4f54b 100644 --- a/themes/pybcn_theme/layouts/partials/nav.html +++ b/themes/pybcn_theme/layouts/partials/nav.html @@ -10,14 +10,15 @@