diff --git a/NOTICE.txt b/NOTICE.txt index 466c5a29..4055239d 100644 --- a/NOTICE.txt +++ b/NOTICE.txt @@ -48,6 +48,7 @@ ods-flutter/app/assets/ic_calendar_event_info.png ods-flutter/app/assets/ic_identity_protection.png ods-flutter/app/assets/ic_task_list.png ods-flutter/app/assets/il_list_item.png +ods-flutter/app/assets/ic_accessibility.png ods-flutter/app/assets/1.5x/il_about.png ods-flutter/app/assets/1.5x/il_switches.png diff --git a/app/CHANGELOG.md b/app/CHANGELOG.md index 970f0895..d3140aa2 100644 --- a/app/CHANGELOG.md +++ b/app/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Added +- [A11y] Review accessibility ([#371](https://github.com/Orange-OpenSource/ods-flutter/issues/371)) - Guidelines > Colors ([#330](https://github.com/Orange-OpenSource/ods-flutter/issues/330)) ## Changed diff --git a/app/THIRD_PARTY.md b/app/THIRD_PARTY.md index 67da5fc2..f6afed4a 100644 --- a/app/THIRD_PARTY.md +++ b/app/THIRD_PARTY.md @@ -73,3 +73,9 @@ Apache License 2.0 Copyright 2018 WebView for Flutter [https://pub.dev/packages/webview_flutter](https://pub.dev/packages/webview_flutter) Apache License 2.0 + +### Url Launcher + +Copyright 2018 Url Launcher +[https://pub.dev/packages/url_launcher](https://pub.dev/packages/url_launcher) +Apache License 2.0 diff --git a/app/assets/declaration_android.json b/app/assets/declaration_android.json new file mode 100644 index 00000000..c754e503 --- /dev/null +++ b/app/assets/declaration_android.json @@ -0,0 +1,577 @@ +{ + "declaration": { + "title": { + "__cdata": "Orange Design System" + }, + "lang": "en", + "status": "DONE", + "approval": { + "name": "The Orange Group Accessibility Skills Center", + "content": { + "__cdata": "

The Orange Group Accessibility Skills Center

\n" + } + }, + "contact": { + "name": "Équipe Projet", + "content": { + "__cdata": "

We welcome your feedback on the accessibility of this site. Please let us know if you encounter accessibility problems by sending an email to XXX@orange.com.

\n" + } + }, + "audit_date": "2024-04-24", + "audit_updatedate": "", + "plan": { + "__cdata": "

[Name of the organization] undertakes to make its websites internet, intranet, extranet and its mobile applications accessible in accordance with article 47 of Law No. 2005-102 of February 11, 2005.

\n

To this end, it implements the following strategy and actions :

\n

the pluri-annual accessibility framework (French).

\n

This accessibility statement applies to [Project name or URL].

\n" + }, + "referential": { + "name": "WCAG", + "version": 2.2, + "level": "AA", + "url": "https://www.w3.org/Translations/WCAG20-fr/" + }, + "technologies": { + "technology": "Flutter" + }, + "tests": { + "test": [ + { + "name": "aXe", + "version": "0.10.2" + }, + { + "name": "Accessibility Scanner", + "version": "" + }, + { + "name": "Talkback", + "version": "" + }, + { + "name": "Switch Access", + "version": "" + } + ] + }, + "environments": "", + "urls": { + "url": [ + { + "name": { + "__cdata": "Guidelines" + }, + "location": { + "__cdata": "" + } + }, + { + "name": { + "__cdata": "Components" + }, + "location": { + "__cdata": "" + } + }, + { + "name": { + "__cdata": "Modules" + }, + "location": { + "__cdata": "" + } + }, + { + "name": { + "__cdata": "About" + }, + "location": { + "__cdata": "" + } + }, + { + "name": { + "__cdata": "Guidelines-Colour" + }, + "location": { + "__cdata": "" + } + }, + { + "name": { + "__cdata": "Guidelines-Typography" + }, + "location": { + "__cdata": "" + } + }, + { + "name": { + "__cdata": "Guidelines-Spacing" + }, + "location": { + "__cdata": "" + } + }, + { + "name": { + "__cdata": "Components - App bars: top" + }, + "location": { + "__cdata": "" + } + }, + { + "name": { + "__cdata": "Components - Bars Navigation" + }, + "location": { + "__cdata": "" + } + }, + { + "name": { + "__cdata": "Components - Buttons" + }, + "location": { + "__cdata": "" + } + }, + { + "name": { + "__cdata": "Components - Buttons: FAB" + }, + "location": { + "__cdata": "" + } + }, + { + "name": { + "__cdata": "Components - Cards" + }, + "location": { + "__cdata": "" + } + }, + { + "name": { + "__cdata": "Components - Chips" + }, + "location": { + "__cdata": "" + } + }, + { + "name": { + "__cdata": "Components - Lists" + }, + "location": { + "__cdata": "" + } + }, + { + "name": { + "__cdata": "Components - Progress indicators" + }, + "location": { + "__cdata": "" + } + }, + { + "name": { + "__cdata": "Components - Sheets" + }, + "location": { + "__cdata": "" + } + }, + { + "name": { + "__cdata": "Components - Sliders" + }, + "location": { + "__cdata": "" + } + }, + { + "name": { + "__cdata": "Components - Text field" + }, + "location": { + "__cdata": "" + } + }, + { + "name": { + "__cdata": "Modules - List" + }, + "location": { + "__cdata": "" + } + } + ] + }, + "nonComplianceComment": { + "__cdata": "" + }, + "users": 0, + "blocking_points": 0, + "results": { + "result": [ + { + "criteria": 32, + "ok": 12, + "nok": 3, + "na": 17, + "conformity": 80 + }, + { + "criteria": 24, + "ok": 12, + "nok": 3, + "na": 9, + "conformity": 80 + }, + { + "criteria": 56, + "ok": 24, + "nok": 6, + "na": 26, + "conformity": 80 + } + ] + }, + "pages_results": { + "page": [ + { + "ok": [ + 14, + 13 + ], + "nok": [ + 0, + 0 + ], + "na": [ + 18, + 11 + ], + "conformity": 100 + }, + { + "ok": [ + 14, + 11 + ], + "nok": [ + 0, + 2 + ], + "na": [ + 18, + 11 + ], + "conformity": 93 + }, + { + "ok": [ + 14, + 13 + ], + "nok": [ + 0, + 0 + ], + "na": [ + 18, + 11 + ], + "conformity": 100 + }, + { + "ok": [ + 14, + 14 + ], + "nok": [ + 0, + 0 + ], + "na": [ + 18, + 10 + ], + "conformity": 100 + }, + { + "ok": [ + 14, + 12 + ], + "nok": [ + 0, + 0 + ], + "na": [ + 18, + 12 + ], + "conformity": 100 + }, + { + "ok": [ + 12, + 13 + ], + "nok": [ + 0, + 0 + ], + "na": [ + 20, + 11 + ], + "conformity": 100 + }, + { + "ok": [ + 14, + 13 + ], + "nok": [ + 0, + 0 + ], + "na": [ + 18, + 11 + ], + "conformity": 100 + }, + { + "ok": [ + 13, + 13 + ], + "nok": [ + 1, + 0 + ], + "na": [ + 18, + 11 + ], + "conformity": 96 + }, + { + "ok": [ + 14, + 13 + ], + "nok": [ + 0, + 0 + ], + "na": [ + 18, + 11 + ], + "conformity": 100 + }, + { + "ok": [ + 14, + 13 + ], + "nok": [ + 0, + 0 + ], + "na": [ + 18, + 11 + ], + "conformity": 100 + }, + { + "ok": [ + 14, + 13 + ], + "nok": [ + 0, + 0 + ], + "na": [ + 18, + 11 + ], + "conformity": 100 + }, + { + "ok": [ + 14, + 14 + ], + "nok": [ + 0, + 0 + ], + "na": [ + 18, + 10 + ], + "conformity": 100 + }, + { + "ok": [ + 14, + 14 + ], + "nok": [ + 0, + 0 + ], + "na": [ + 18, + 10 + ], + "conformity": 100 + }, + { + "ok": [ + 14, + 12 + ], + "nok": [ + 0, + 1 + ], + "na": [ + 18, + 11 + ], + "conformity": 96 + }, + { + "ok": [ + 14, + 14 + ], + "nok": [ + 0, + 0 + ], + "na": [ + 18, + 10 + ], + "conformity": 100 + }, + { + "ok": [ + 12, + 11 + ], + "nok": [ + 1, + 2 + ], + "na": [ + 19, + 11 + ], + "conformity": 88 + }, + { + "ok": [ + 13, + 13 + ], + "nok": [ + 1, + 0 + ], + "na": [ + 18, + 11 + ], + "conformity": 96 + }, + { + "ok": [ + 14, + 13 + ], + "nok": [ + 0, + 0 + ], + "na": [ + 18, + 11 + ], + "conformity": 100 + }, + { + "ok": [ + 15, + 13 + ], + "nok": [ + 0, + 0 + ], + "na": [ + 17, + 11 + ], + "conformity": 100 + } + ] + }, + "details": { + "detail": [ + { + "title": "1.1.1, Non-text Content, Niveau A", + "description": { + "__cdata": "" + } + }, + { + "title": "1.4.4, Resize text, Niveau AA", + "description": { + "__cdata": "" + } + }, + { + "title": "1.4.10, Reflow, Niveau AA", + "description": { + "__cdata": "" + } + }, + { + "title": "2.5.1, Pointer Gestures, Niveau A", + "description": { + "__cdata": "" + } + }, + { + "title": "2.5.8, Target size, Niveau AA", + "description": { + "__cdata": "" + } + }, + { + "title": "3.2.2, On Input, Niveau A", + "description": { + "__cdata": "" + } + } + ] + }, + "derogations": { + "__cdata": "" + }, + "exemptions": { + "__cdata": "" + } + } +} diff --git a/app/assets/declaration_ios.json b/app/assets/declaration_ios.json new file mode 100644 index 00000000..17d23ffc --- /dev/null +++ b/app/assets/declaration_ios.json @@ -0,0 +1,581 @@ +{ + "declaration": { + "title": { + "__cdata": "Orange Design System" + }, + "lang": "en", + "status": "DONE", + "approval": { + "name": "The Orange Group Accessibility Skills Center", + "content": { + "__cdata": "

The Orange Group Accessibility Skills Center

\n" + } + }, + "contact": { + "name": "Équipe Projet", + "content": { + "__cdata": "

We welcome your feedback on the accessibility of this site. Please let us know if you encounter accessibility problems by sending an email to XXX@orange.com.

\n" + } + }, + "audit_date": "2024-04-24", + "audit_updatedate": "", + "plan": { + "__cdata": "

[Name of the organization] undertakes to make its websites internet, intranet, extranet and its mobile applications accessible in accordance with article 47 of Law No. 2005-102 of February 11, 2005.

\n

To this end, it implements the following strategy and actions :

\n

the pluri-annual accessibility framework (French).

\n

This accessibility statement applies to [Project name or URL].

\n" + }, + "referential": { + "name": "WCAG", + "version": 2.2, + "level": "AA", + "url": "https://www.w3.org/Translations/WCAG20-fr/" + }, + "technologies": { + "technology": "Flutter" + }, + "tests": { + "test": [ + { + "name": "Accessibility Inspector", + "version": "" + }, + { + "name": "Voice Over", + "version": "" + }, + { + "name": "Switch Control", + "version": "" + }, + { + "name": "Keyboard navigation", + "version": "" + }, + { + "name": "Colour Contrat Analyzer", + "version": "" + } + ] + }, + "environments": "", + "urls": { + "url": [ + { + "name": { + "__cdata": "Guidelines" + }, + "location": { + "__cdata": "" + } + }, + { + "name": { + "__cdata": "Components" + }, + "location": { + "__cdata": "" + } + }, + { + "name": { + "__cdata": "Modules" + }, + "location": { + "__cdata": "" + } + }, + { + "name": { + "__cdata": "About" + }, + "location": { + "__cdata": "" + } + }, + { + "name": { + "__cdata": "Guidelines-Colour" + }, + "location": { + "__cdata": "" + } + }, + { + "name": { + "__cdata": "Guidelines-Typography" + }, + "location": { + "__cdata": "" + } + }, + { + "name": { + "__cdata": "Guidelines-Spacing" + }, + "location": { + "__cdata": "" + } + }, + { + "name": { + "__cdata": "Components - App bars: top" + }, + "location": { + "__cdata": "" + } + }, + { + "name": { + "__cdata": "Components - Bars Navigation" + }, + "location": { + "__cdata": "" + } + }, + { + "name": { + "__cdata": "Components - Buttons" + }, + "location": { + "__cdata": "" + } + }, + { + "name": { + "__cdata": "Components - Buttons: FAB" + }, + "location": { + "__cdata": "" + } + }, + { + "name": { + "__cdata": "Components - Cards" + }, + "location": { + "__cdata": "" + } + }, + { + "name": { + "__cdata": "Components - Chips" + }, + "location": { + "__cdata": "" + } + }, + { + "name": { + "__cdata": "Components - Lists" + }, + "location": { + "__cdata": "" + } + }, + { + "name": { + "__cdata": "Components - Progress indicators" + }, + "location": { + "__cdata": "" + } + }, + { + "name": { + "__cdata": "Components - Sheets" + }, + "location": { + "__cdata": "" + } + }, + { + "name": { + "__cdata": "Components - Sliders" + }, + "location": { + "__cdata": "" + } + }, + { + "name": { + "__cdata": "Components - Text field" + }, + "location": { + "__cdata": "" + } + }, + { + "name": { + "__cdata": "Modules - List" + }, + "location": { + "__cdata": "" + } + } + ] + }, + "nonComplianceComment": { + "__cdata": "" + }, + "users": 0, + "blocking_points": 0, + "results": { + "result": [ + { + "criteria": 32, + "ok": 12, + "nok": 3, + "na": 17, + "conformity": 80 + }, + { + "criteria": 24, + "ok": 12, + "nok": 3, + "na": 9, + "conformity": 80 + }, + { + "criteria": 56, + "ok": 24, + "nok": 6, + "na": 26, + "conformity": 80 + } + ] + }, + "pages_results": { + "page": [ + { + "ok": [ + 14, + 13 + ], + "nok": [ + 0, + 0 + ], + "na": [ + 18, + 11 + ], + "conformity": 100 + }, + { + "ok": [ + 14, + 11 + ], + "nok": [ + 0, + 2 + ], + "na": [ + 18, + 11 + ], + "conformity": 93 + }, + { + "ok": [ + 14, + 13 + ], + "nok": [ + 0, + 0 + ], + "na": [ + 18, + 11 + ], + "conformity": 100 + }, + { + "ok": [ + 14, + 14 + ], + "nok": [ + 0, + 0 + ], + "na": [ + 18, + 10 + ], + "conformity": 100 + }, + { + "ok": [ + 14, + 12 + ], + "nok": [ + 0, + 0 + ], + "na": [ + 18, + 12 + ], + "conformity": 100 + }, + { + "ok": [ + 12, + 13 + ], + "nok": [ + 0, + 0 + ], + "na": [ + 20, + 11 + ], + "conformity": 100 + }, + { + "ok": [ + 14, + 13 + ], + "nok": [ + 0, + 0 + ], + "na": [ + 18, + 11 + ], + "conformity": 100 + }, + { + "ok": [ + 13, + 13 + ], + "nok": [ + 1, + 0 + ], + "na": [ + 18, + 11 + ], + "conformity": 96 + }, + { + "ok": [ + 14, + 13 + ], + "nok": [ + 0, + 0 + ], + "na": [ + 18, + 11 + ], + "conformity": 100 + }, + { + "ok": [ + 14, + 13 + ], + "nok": [ + 0, + 0 + ], + "na": [ + 18, + 11 + ], + "conformity": 100 + }, + { + "ok": [ + 14, + 13 + ], + "nok": [ + 0, + 0 + ], + "na": [ + 18, + 11 + ], + "conformity": 100 + }, + { + "ok": [ + 14, + 14 + ], + "nok": [ + 0, + 0 + ], + "na": [ + 18, + 10 + ], + "conformity": 100 + }, + { + "ok": [ + 14, + 14 + ], + "nok": [ + 0, + 0 + ], + "na": [ + 18, + 10 + ], + "conformity": 100 + }, + { + "ok": [ + 14, + 12 + ], + "nok": [ + 0, + 1 + ], + "na": [ + 18, + 11 + ], + "conformity": 96 + }, + { + "ok": [ + 14, + 14 + ], + "nok": [ + 0, + 0 + ], + "na": [ + 18, + 10 + ], + "conformity": 100 + }, + { + "ok": [ + 12, + 11 + ], + "nok": [ + 1, + 2 + ], + "na": [ + 19, + 11 + ], + "conformity": 88 + }, + { + "ok": [ + 13, + 13 + ], + "nok": [ + 1, + 0 + ], + "na": [ + 18, + 11 + ], + "conformity": 96 + }, + { + "ok": [ + 14, + 13 + ], + "nok": [ + 0, + 0 + ], + "na": [ + 18, + 11 + ], + "conformity": 100 + }, + { + "ok": [ + 15, + 13 + ], + "nok": [ + 0, + 0 + ], + "na": [ + 17, + 11 + ], + "conformity": 100 + } + ] + }, + "details": { + "detail": [ + { + "title": "1.1.1, Non-text Content, Niveau A", + "description": { + "__cdata": "" + } + }, + { + "title": "1.4.4, Resize text, Niveau AA", + "description": { + "__cdata": "" + } + }, + { + "title": "1.4.10, Reflow, Niveau AA", + "description": { + "__cdata": "" + } + }, + { + "title": "2.5.1, Pointer Gestures, Niveau A", + "description": { + "__cdata": "" + } + }, + { + "title": "2.5.8, Target size, Niveau AA", + "description": { + "__cdata": "" + } + }, + { + "title": "3.2.2, On Input, Niveau A", + "description": { + "__cdata": "" + } + } + ] + }, + "derogations": { + "__cdata": "" + }, + "exemptions": { + "__cdata": "" + } + } +} \ No newline at end of file diff --git a/app/assets/ic_accessibility.png b/app/assets/ic_accessibility.png new file mode 100644 index 00000000..4408ebde Binary files /dev/null and b/app/assets/ic_accessibility.png differ diff --git a/app/lib/domain/declaration/declaration_entities.dart b/app/lib/domain/declaration/declaration_entities.dart new file mode 100644 index 00000000..3d799880 --- /dev/null +++ b/app/lib/domain/declaration/declaration_entities.dart @@ -0,0 +1,131 @@ +/* + * Software Name : Orange Design System + * SPDX-FileCopyrightText: Copyright (c) Orange SA + * SPDX-License-Identifier: MIT + * + * This software is distributed under the MIT license, + * the text of which is available at https://opensource.org/license/MIT/ + * or see the "LICENSE" file for more details. + * + * Software description: Flutter library of reusable graphical components for Android and iOS + */ + +import 'dart:convert'; + +import 'package:intl/intl.dart'; + +Declaration entityDeclarationFromJson(String str) => + Declaration.fromJson(json.decode(str)); + +class Declaration { + late String auditDate; + late Referential referential; + late Technologies technologies; + late List results; + late int averageConformity; + + Declaration({ + required this.auditDate, + required this.referential, + required this.technologies, + required this.results, + required this.averageConformity, + }); + + factory Declaration.fromJson(Map json) { + List resultItems = []; + var resultsData = json['declaration']['results']; + + if (resultsData != null) { + resultItems = List.from( + resultsData['result'].map((x) => Result.fromJson(x))); + } + + int totalConformity = 0; + int numberOfResults = resultItems.length; + for (var result in resultItems) { + totalConformity += result.conformity; + } + int roundedAverageConformity = + numberOfResults > 0 ? (totalConformity / numberOfResults).round() : 0; + + return Declaration( + auditDate: json['declaration']['audit_date'] != null + ? DateFormat('MMMM d, yyyy') + .format(DateTime.parse(json['declaration']['audit_date'])) + : '', + referential: Referential.fromJson(json['declaration']['referential']), + technologies: Technologies.fromJson(json['declaration']['technologies']), + results: resultItems, + averageConformity: roundedAverageConformity, + ); + } +} + +class Referential { + late String name; + late double version; + late String level; + late String url; + + Referential({ + required this.name, + required this.version, + required this.level, + required this.url, + }); + + factory Referential.fromJson(Map json) { + return Referential( + name: json['name'], + version: json['version'], + level: json['level'], + url: json['url'], + ); + } + + @override + String toString() { + return '$name $version $level'; + } +} + +class Technologies { + late String technology; + + Technologies({ + required this.technology, + }); + + factory Technologies.fromJson(Map json) { + return Technologies( + technology: json['technology'], + ); + } +} + +class Result { + late int criteria; + late int ok; + late int nok; + late int na; + late int conformity; + + Result({ + required this.criteria, + required this.ok, + required this.nok, + required this.na, + required this.conformity, + }); + + factory Result.fromJson(Map json) { + return Result( + criteria: json['criteria'], + ok: json['ok'], + nok: json['nok'], + na: json['na'], + conformity: json['conformity'], + ); + } +} diff --git a/app/lib/l10n/ods_flutter_en.arb b/app/lib/l10n/ods_flutter_en.arb index 5f474388..5a91152f 100644 --- a/app/lib/l10n/ods_flutter_en.arb +++ b/app/lib/l10n/ods_flutter_en.arb @@ -12,6 +12,7 @@ "bottomNavigationAbout": "About", "@_GUIDELINES_SCREEN": {}, + "guidelinesScreenVariantTitle": "Variants", "guidelinesColours": "Colours", "guidelinesColoursDescription": "It is important to use the system background colours as they are dynamic. They automatically change between the slightly darker base and slightly lighter elevated colours, in order to enhance perception of depth and layering", "guidelinesColoursPaletteVariantTitle": "Orange Color Palette", @@ -379,5 +380,14 @@ "@_ABOUT_SCREEN": {}, "aboutScreenTitle": "Orange Design System Flutter App", "aboutScreenDescription": "In this app you'll find implemented code examples of the guidelines, components and modules, for the themes of the Orange Design System.", - "aboutMenuChangelog": "Changelog" + "aboutMenuChangelog": "Changelog", + "aboutAccessibilityStatementTitle": "Accessibility : conform", + "aboutAccessibilityStatementCompliant": "% compliant", + "aboutAccessibilityStatementDate": "Date of the audit", + "aboutAccessibilityStatementIdentity": "Assessment approval", + "aboutAccessibilityStatementIdentityName": "Orange SA", + "aboutAccessibilityStatementIdentityAdress": "Siège social : 11, quai du Président Roosevelt, CS 70222, 91130 Issy-les-Moulineaux CEDEX", + "aboutAccessibilityStatementReferential": "Standard applied", + "aboutAccessibilityStatementTechnology": "Technical of the application", + "aboutAccessibilityStatementDetailButton": "MORE DETAIL" } diff --git a/app/lib/main.dart b/app/lib/main.dart index 7a0a3d22..cc3d19ca 100644 --- a/app/lib/main.dart +++ b/app/lib/main.dart @@ -12,6 +12,9 @@ // ignore_for_file: prefer_const_constructors, prefer_const_literals_to_create_immutables +import 'dart:io'; + +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_gen/gen_l10n/ods_flutter_app_localizations.dart'; @@ -19,7 +22,8 @@ import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:get/get_navigation/src/root/get_material_app.dart'; import 'package:ods_flutter/l10n/gen/ods_localizations.dart'; import 'package:ods_flutter/theme/ods_theme.dart'; -import 'package:ods_flutter_demo/domain/recipes/recipes_entities.dart'; +import 'package:ods_flutter_demo/domain/declaration/declaration_entities.dart'; +import 'package:ods_flutter_demo/domain/recipes/recipes_entities.dart' as ods; import 'package:ods_flutter_demo/ui/main_screen.dart'; import 'package:provider/provider.dart'; @@ -31,19 +35,37 @@ void main() { class OdsApplication extends StatefulWidget { const OdsApplication({super.key}); - static List recipes = []; - static List category = []; - static List foods = []; + static List recipes = []; + static List category = []; + static List foods = []; + static late Declaration declaration; @override State createState() => _OdsApplicationState(); } class _OdsApplicationState extends State { - // Fetch content from the json file + /// Fetch content from the json file Future _readJson() async { + ///Declaration + final String responseDeclaration; + + if (kIsWeb || Platform.isAndroid) { + responseDeclaration = + await rootBundle.loadString('assets/declaration_ios.json'); + } else { + responseDeclaration = + await rootBundle.loadString('assets/declaration_android.json'); + } + + Declaration entityDeclaration = + entityDeclarationFromJson(responseDeclaration); + + OdsApplication.declaration = entityDeclaration; + + ///Recipes final String response = await rootBundle.loadString('assets/recipes.json'); - Entity entity = entityFromJson(response); + ods.Entity entity = ods.entityFromJson(response); OdsApplication.category = entity.category; OdsApplication.recipes = entity.recipes; diff --git a/app/lib/ui/about/about_screen.dart b/app/lib/ui/about/about_screen.dart index 1b839a8e..ed808c15 100644 --- a/app/lib/ui/about/about_screen.dart +++ b/app/lib/ui/about/about_screen.dart @@ -15,6 +15,7 @@ import 'package:flutter_gen/gen_l10n/ods_flutter_app_localizations.dart'; import 'package:get/get.dart'; import 'package:ods_flutter/components/lists/ods_list_item.dart'; import 'package:ods_flutter/guidelines/spacings.dart'; +import 'package:ods_flutter_demo/ui/about/detail/about_accessibility_statement.dart'; import 'package:ods_flutter_demo/ui/about/detail/about_file_screen.dart'; import 'package:package_info_plus/package_info_plus.dart'; @@ -123,6 +124,16 @@ class _AboutScreenState extends State { ); }, ), + OdsListItem( + title: AppLocalizations.of(context)! + .aboutAccessibilityStatementTitle, + image: ImageIcon( + AssetImage('assets/ic_accessibility.png'), + ), + onClick: () { + Get.to(AboutAccessibilityStatement()); + }, + ), OdsListItem( title: "Third party library", image: ImageIcon( diff --git a/app/lib/ui/about/detail/about_accessibility_statement.dart b/app/lib/ui/about/detail/about_accessibility_statement.dart new file mode 100644 index 00000000..868148f0 --- /dev/null +++ b/app/lib/ui/about/detail/about_accessibility_statement.dart @@ -0,0 +1,219 @@ +/* + * Software Name : Orange Design System + * SPDX-FileCopyrightText: Copyright (c) Orange SA + * SPDX-License-Identifier: MIT + * + * This software is distributed under the MIT license, + * the text of which is available at https://opensource.org/license/MIT/ + * or see the "LICENSE" file for more details. + * + * Software description: Flutter library of reusable graphical components for Android and iOS + */ + +import 'dart:io'; + +import 'package:flutter/material.dart'; +import 'package:flutter_gen/gen_l10n/ods_flutter_app_localizations.dart'; +import 'package:ods_flutter/components/app_bar/top/ods_top_app_bar.dart'; +import 'package:ods_flutter/components/button/ods_button.dart'; +import 'package:ods_flutter/components/divider/ods_divider.dart'; +import 'package:ods_flutter/guidelines/spacings.dart'; +import 'package:ods_flutter/theme/ods_palette.dart'; +import 'package:ods_flutter_demo/main.dart'; +import 'package:ods_flutter_demo/ui/components/progress/progress_customization.dart'; +import 'package:ods_flutter_demo/ui/theme/theme_selector.dart'; +import 'package:url_launcher/url_launcher.dart'; + +class AboutAccessibilityStatement extends StatefulWidget { + const AboutAccessibilityStatement({Key? key}) : super(key: key); + + @override + AboutAccessibilityStatementState createState() => + AboutAccessibilityStatementState(); +} + +class AboutAccessibilityStatementState + extends State { + @override + Widget build(BuildContext context) { + return ProgressCustomization( + child: Scaffold( + appBar: OdsAppTopBar( + title: + AppLocalizations.of(context)!.aboutAccessibilityStatementTitle, + actions: [ThemeSelector()], + navigationIcon: BackButton()), + body: SafeArea(child: Body()), + ), + ); + } +} + +class Body extends StatefulWidget { + @override + State createState() => _BodyState(); +} + +class _BodyState extends State { + var declaration = OdsApplication.declaration; + + Uri _url = Platform.isIOS + ? Uri.parse( + 'https://orange-opensource.github.io/ods-flutter/accessibilityStatement/orange-design-system-ios.html') + : Uri.parse( + 'https://orange-opensource.github.io/ods-flutter/accessibilityStatement/orange-design-system-android.html'); + + @override + Widget build(BuildContext context) { + return SingleChildScrollView( + child: Padding( + padding: EdgeInsets.only(top: spacingM), + child: Center( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + /// Part CircularProgressIndicator + Stack( + alignment: Alignment.center, + children: [ + SizedBox( + width: 220, + height: 220, + child: TweenAnimationBuilder( + tween: Tween( + begin: 0.0, + end: declaration.averageConformity / 100, + ), + duration: const Duration(seconds: 1), + builder: ( + BuildContext context, + double value, + Widget? child, + ) { + return CircularProgressIndicator( + value: value, + color: Theme.of(context).colorScheme.primary, + backgroundColor: + Theme.of(context).brightness == Brightness.light + ? grey300 + : grey800, + strokeWidth: 15, + ); + }, + ), + ), + Positioned.fill( + child: Center( + child: Text( + '${declaration.averageConformity}${AppLocalizations.of(context)!.aboutAccessibilityStatementCompliant}', + textAlign: TextAlign.center, + style: Theme.of(context).textTheme.bodyMedium, + ), + ), + ), + ], + ), + SizedBox(height: 16), + Text( + "This application is ${declaration.averageConformity}% compliant with WCAG", + textAlign: TextAlign.center, + style: Theme.of(context).textTheme.bodyMedium, + ), + Padding( + padding: const EdgeInsets.all(spacingM), + child: OdsDivider(), + ), + + /// Part detail + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Column( + children: [ + Padding( + padding: const EdgeInsets.symmetric( + vertical: spacingM, horizontal: spacingM), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + AppLocalizations.of(context)! + .aboutAccessibilityStatementDate, + style: Theme.of(context).textTheme.titleLarge, + textAlign: TextAlign.left, + ), + Text( + declaration.auditDate, + style: Theme.of(context).textTheme.bodyMedium, + textAlign: TextAlign.left, + ), + SizedBox(height: spacingM), + Text( + AppLocalizations.of(context)! + .aboutAccessibilityStatementIdentity, + style: Theme.of(context).textTheme.titleLarge, + textAlign: TextAlign.left, + ), + Text( + AppLocalizations.of(context)! + .aboutAccessibilityStatementIdentityName, + style: Theme.of(context).textTheme.bodyMedium, + textAlign: TextAlign.left, + ), + Text( + AppLocalizations.of(context)! + .aboutAccessibilityStatementIdentityAdress, + style: Theme.of(context).textTheme.bodyMedium, + textAlign: TextAlign.left, + ), + SizedBox(height: spacingM), + Text( + AppLocalizations.of(context)! + .aboutAccessibilityStatementReferential, + style: Theme.of(context).textTheme.titleLarge, + textAlign: TextAlign.left, + ), + Text( + declaration.referential.toString(), + style: Theme.of(context).textTheme.bodyMedium, + textAlign: TextAlign.left, + ), + SizedBox(height: spacingM), + Text( + AppLocalizations.of(context)! + .aboutAccessibilityStatementTechnology, + style: Theme.of(context).textTheme.titleLarge, + textAlign: TextAlign.left, + ), + Text( + declaration.technologies.technology, + style: Theme.of(context).textTheme.bodyMedium, + textAlign: TextAlign.left, + ), + ], + ), + ), + ], + ), + Center( + child: OdsButton( + text: AppLocalizations.of(context)! + .aboutAccessibilityStatementDetailButton, + onClick: () => _launchUrl(), + ), + ), + ], + ), + ], + ), + ), + ), + ); + } + + Future _launchUrl() async { + if (!await launchUrl(_url)) { + throw Exception('Could not launch $_url'); + } + } +} diff --git a/app/lib/ui/about/detail/about_file_screen.dart b/app/lib/ui/about/detail/about_file_screen.dart index d2a9dcc9..8d664482 100644 --- a/app/lib/ui/about/detail/about_file_screen.dart +++ b/app/lib/ui/about/detail/about_file_screen.dart @@ -52,13 +52,6 @@ class OdsAboutFileScreen extends StatelessWidget { /// Convert Markdown to HTML using the markdown package String htmlContent = markdownToHtml(markdownContent); - print(_wrapHtmlWithCss( - htmlContent, - darkModeEnabled, - colors, - horizontalPadding, - verticalPadding, - )); return WebView( initialUrl: 'about:blank', onWebViewCreated: (WebViewController webViewController) { @@ -337,6 +330,5 @@ String convertToHtml( } result += ""; - print(result); return result; } diff --git a/app/lib/ui/guidelines/guideline_detail_screen.dart b/app/lib/ui/guidelines/guideline_detail_screen.dart index d337a181..f0814ba9 100644 --- a/app/lib/ui/guidelines/guideline_detail_screen.dart +++ b/app/lib/ui/guidelines/guideline_detail_screen.dart @@ -13,6 +13,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/ods_flutter_app_localizations.dart'; import 'package:get/get.dart'; +import 'package:ods_flutter/components/lists/ods_list_item.dart'; import 'package:ods_flutter/guidelines/spacings.dart'; import 'package:ods_flutter_demo/ui/guidelines/guidelines_entities.dart'; import 'package:ods_flutter_demo/ui/main_app_bar.dart'; @@ -49,9 +50,12 @@ class GuidelineDetailScreen extends StatelessWidget { right: spacingM, top: spacingS, bottom: spacingS), - child: Text( - AppLocalizations.of(context)!.componentScreenVariantTitle, - style: Theme.of(context).textTheme.titleLarge, + child: Semantics( + header: true, + child: Text( + AppLocalizations.of(context)!.guidelinesScreenVariantTitle, + style: Theme.of(context).textTheme.titleLarge, + ), ), ), ListView.builder( @@ -80,28 +84,13 @@ class VariantEntry extends StatelessWidget { @override Widget build(BuildContext context) { - return Semantics( - button: true, - onTap: () { + return OdsListItem( + title: variant.title, + subtitle: variant.technicalName, + image: Icon(Icons.play_circle_outline), + onClick: () { Get.to(variant.screen); }, - child: ListTile( - leading: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Icon(Icons.play_circle_outline), - ], - ), - title: - Text(variant.title, style: Theme.of(context).textTheme.bodyMedium), - subtitle: ExcludeSemantics( - child: Text(variant.technicalName, - style: Theme.of(context).textTheme.bodyMedium), - ), - onTap: () { - Get.to(variant.screen); - }, - ), ); } } diff --git a/app/lib/ui/guidelines/typography/guideline_typography_screen.dart b/app/lib/ui/guidelines/typography/guideline_typography_screen.dart index ae1dabc8..67e64997 100644 --- a/app/lib/ui/guidelines/typography/guideline_typography_screen.dart +++ b/app/lib/ui/guidelines/typography/guideline_typography_screen.dart @@ -15,7 +15,6 @@ import 'dart:io'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/ods_flutter_app_localizations.dart'; -import 'package:ods_flutter/components/divider/ods_divider.dart'; import 'package:ods_flutter/guidelines/spacings.dart'; import 'package:ods_flutter_demo/ui/main_app_bar.dart'; @@ -120,25 +119,16 @@ class _TextStyleWidget extends StatelessWidget { @override Widget build(BuildContext context) { - return MergeSemantics( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - SizedBox(height: spacingS), - Text( - textStyleItem.name, - style: textStyleItem.textStyle, - ), - SizedBox(height: spacingXs), - Text( - textStyleItem.code, - style: Theme.of(context).textTheme.labelMedium, - overflow: TextOverflow.ellipsis, - ), - SizedBox(height: spacingS), - OdsDivider(), - ], + return ListTile( + title: Text( + textStyleItem.name, + style: textStyleItem.textStyle, ), + subtitle: Text( + textStyleItem.code, + style: Theme.of(context).textTheme.labelMedium, + ), + contentPadding: EdgeInsets.zero, ); } } diff --git a/app/pubspec.yaml b/app/pubspec.yaml index 396f3d4b..3cda6179 100644 --- a/app/pubspec.yaml +++ b/app/pubspec.yaml @@ -56,6 +56,7 @@ dependencies: # Read markdown. markdown: ^7.1.1 webview_flutter: ^2.0.13 + url_launcher: ^6.0.3 dev_dependencies: flutter_test: diff --git a/docs/.DS_Store b/docs/.DS_Store new file mode 100644 index 00000000..9c3aec9a Binary files /dev/null and b/docs/.DS_Store differ diff --git a/docs/accessibilityStatement/.DS_Store b/docs/accessibilityStatement/.DS_Store new file mode 100644 index 00000000..d94a8128 Binary files /dev/null and b/docs/accessibilityStatement/.DS_Store differ diff --git a/docs/accessibilityStatement/boosted-grid.min.css b/docs/accessibilityStatement/boosted-grid.min.css new file mode 100644 index 00000000..06e19d4d --- /dev/null +++ b/docs/accessibilityStatement/boosted-grid.min.css @@ -0,0 +1,12 @@ +/*! + * Boosted Grid v4.6.0 (https://boosted.orange.com) + * Copyright 2014-2019 The Boosted Authors + * Copyright 2014-2019 Orange + * Licensed under MIT (https://github.com/orange-opensource/orange-boosted-bootstrap/blob/master/LICENSE) + * This a fork of Bootstrap : Initial license below + * Bootstrap Grid v4.6.0 (https://getbootstrap.com) + * Copyright 2011-2019 The Bootstrap Authors + * Copyright 2011-2019 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */html{box-sizing:border-box;-ms-overflow-style:scrollbar}*,::after,::before{box-sizing:inherit}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xs,.container-xxl{width:100%;padding-right:.3125rem;padding-left:.3125rem;margin-right:auto;margin-left:auto}@media (min-width:768px){.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xs,.container-xxl{padding-right:.625rem;padding-left:.625rem}}.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xs,.container-xxl{max-width:97.5%}@media (min-width:480px){.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xs,.container-xxl{max-width:97.5%}}@media (min-width:768px){.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xs,.container-xxl{max-width:96.875%}}@media (min-width:1024px){.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xs,.container-xxl{max-width:93.75%}}@media (min-width:1280px){.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xs,.container-xxl{max-width:93.75%}}@media (min-width:1440px){.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xs,.container-xxl{max-width:91.66666%}}.container{max-width:312px}@media (min-width:480px){.container,.container-sm{max-width:468px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:744px}}@media (min-width:1024px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1280px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1200px}}@media (min-width:1440px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1320px}}.row{display:flex;flex-wrap:wrap;margin-right:-.3125rem;margin-left:-.3125rem}@media (min-width:768px){.row{margin-right:-.625rem;margin-left:-.625rem}}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto,.col-xxl,.col-xxl-1,.col-xxl-10,.col-xxl-11,.col-xxl-12,.col-xxl-2,.col-xxl-3,.col-xxl-4,.col-xxl-5,.col-xxl-6,.col-xxl-7,.col-xxl-8,.col-xxl-9,.col-xxl-auto{position:relative;width:100%;padding-right:.3125rem;padding-left:.3125rem}@media (min-width:768px){.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto,.col-xxl,.col-xxl-1,.col-xxl-10,.col-xxl-11,.col-xxl-12,.col-xxl-2,.col-xxl-3,.col-xxl-4,.col-xxl-5,.col-xxl-6,.col-xxl-7,.col-xxl-8,.col-xxl-9,.col-xxl-auto{padding-right:.625rem;padding-left:.625rem}}.col{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-1>*{flex:0 0 100%;max-width:100%}.row-cols-2>*{flex:0 0 50%;max-width:50%}.row-cols-3>*{flex:0 0 33.333333%;max-width:33.333333%}.row-cols-4>*{flex:0 0 25%;max-width:25%}.row-cols-5>*{flex:0 0 20%;max-width:20%}.row-cols-6>*{flex:0 0 16.666667%;max-width:16.666667%}.col-auto{flex:0 0 auto;width:auto;max-width:100%}.col-1{flex:0 0 8.333333%;max-width:8.333333%}.col-2{flex:0 0 16.666667%;max-width:16.666667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.333333%;max-width:33.333333%}.col-5{flex:0 0 41.666667%;max-width:41.666667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.333333%;max-width:58.333333%}.col-8{flex:0 0 66.666667%;max-width:66.666667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.333333%;max-width:83.333333%}.col-11{flex:0 0 91.666667%;max-width:91.666667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:480px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-sm-1>*{flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{flex:0 0 33.333333%;max-width:33.333333%}.row-cols-sm-4>*{flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{flex:0 0 16.666667%;max-width:16.666667%}.col-sm-auto{flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-md-1>*{flex:0 0 100%;max-width:100%}.row-cols-md-2>*{flex:0 0 50%;max-width:50%}.row-cols-md-3>*{flex:0 0 33.333333%;max-width:33.333333%}.row-cols-md-4>*{flex:0 0 25%;max-width:25%}.row-cols-md-5>*{flex:0 0 20%;max-width:20%}.row-cols-md-6>*{flex:0 0 16.666667%;max-width:16.666667%}.col-md-auto{flex:0 0 auto;width:auto;max-width:100%}.col-md-1{flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:1024px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-lg-1>*{flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{flex:0 0 33.333333%;max-width:33.333333%}.row-cols-lg-4>*{flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{flex:0 0 16.666667%;max-width:16.666667%}.col-lg-auto{flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1280px){.col-xl{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-xl-1>*{flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{flex:0 0 33.333333%;max-width:33.333333%}.row-cols-xl-4>*{flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{flex:0 0 16.666667%;max-width:16.666667%}.col-xl-auto{flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}@media (min-width:1440px){.col-xxl{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-xxl-1>*{flex:0 0 100%;max-width:100%}.row-cols-xxl-2>*{flex:0 0 50%;max-width:50%}.row-cols-xxl-3>*{flex:0 0 33.333333%;max-width:33.333333%}.row-cols-xxl-4>*{flex:0 0 25%;max-width:25%}.row-cols-xxl-5>*{flex:0 0 20%;max-width:20%}.row-cols-xxl-6>*{flex:0 0 16.666667%;max-width:16.666667%}.col-xxl-auto{flex:0 0 auto;width:auto;max-width:100%}.col-xxl-1{flex:0 0 8.333333%;max-width:8.333333%}.col-xxl-2{flex:0 0 16.666667%;max-width:16.666667%}.col-xxl-3{flex:0 0 25%;max-width:25%}.col-xxl-4{flex:0 0 33.333333%;max-width:33.333333%}.col-xxl-5{flex:0 0 41.666667%;max-width:41.666667%}.col-xxl-6{flex:0 0 50%;max-width:50%}.col-xxl-7{flex:0 0 58.333333%;max-width:58.333333%}.col-xxl-8{flex:0 0 66.666667%;max-width:66.666667%}.col-xxl-9{flex:0 0 75%;max-width:75%}.col-xxl-10{flex:0 0 83.333333%;max-width:83.333333%}.col-xxl-11{flex:0 0 91.666667%;max-width:91.666667%}.col-xxl-12{flex:0 0 100%;max-width:100%}.order-xxl-first{order:-1}.order-xxl-last{order:13}.order-xxl-0{order:0}.order-xxl-1{order:1}.order-xxl-2{order:2}.order-xxl-3{order:3}.order-xxl-4{order:4}.order-xxl-5{order:5}.order-xxl-6{order:6}.order-xxl-7{order:7}.order-xxl-8{order:8}.order-xxl-9{order:9}.order-xxl-10{order:10}.order-xxl-11{order:11}.order-xxl-12{order:12}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.333333%}.offset-xxl-2{margin-left:16.666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.333333%}.offset-xxl-5{margin-left:41.666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.333333%}.offset-xxl-8{margin-left:66.666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.333333%}.offset-xxl-11{margin-left:91.666667%}}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}@media (min-width:480px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}}@media (min-width:1024px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}}@media (min-width:1280px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}}@media (min-width:1440px){.d-xxl-none{display:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-fill{flex:1 1 auto!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}@media (min-width:480px){.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}}@media (min-width:768px){.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}}@media (min-width:1024px){.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}}@media (min-width:1280px){.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}}@media (min-width:1440px){.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.3125rem!important}.mt-1,.my-1{margin-top:.3125rem!important}.mr-1,.mx-1{margin-right:.3125rem!important}.mb-1,.my-1{margin-bottom:.3125rem!important}.ml-1,.mx-1{margin-left:.3125rem!important}.m-2{margin:.625rem!important}.mt-2,.my-2{margin-top:.625rem!important}.mr-2,.mx-2{margin-right:.625rem!important}.mb-2,.my-2{margin-bottom:.625rem!important}.ml-2,.mx-2{margin-left:.625rem!important}.m-3{margin:1.25rem!important}.mt-3,.my-3{margin-top:1.25rem!important}.mr-3,.mx-3{margin-right:1.25rem!important}.mb-3,.my-3{margin-bottom:1.25rem!important}.ml-3,.mx-3{margin-left:1.25rem!important}.m-4{margin:1.875rem!important}.mt-4,.my-4{margin-top:1.875rem!important}.mr-4,.mx-4{margin-right:1.875rem!important}.mb-4,.my-4{margin-bottom:1.875rem!important}.ml-4,.mx-4{margin-left:1.875rem!important}.m-5{margin:3.75rem!important}.mt-5,.my-5{margin-top:3.75rem!important}.mr-5,.mx-5{margin-right:3.75rem!important}.mb-5,.my-5{margin-bottom:3.75rem!important}.ml-5,.mx-5{margin-left:3.75rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.3125rem!important}.pt-1,.py-1{padding-top:.3125rem!important}.pr-1,.px-1{padding-right:.3125rem!important}.pb-1,.py-1{padding-bottom:.3125rem!important}.pl-1,.px-1{padding-left:.3125rem!important}.p-2{padding:.625rem!important}.pt-2,.py-2{padding-top:.625rem!important}.pr-2,.px-2{padding-right:.625rem!important}.pb-2,.py-2{padding-bottom:.625rem!important}.pl-2,.px-2{padding-left:.625rem!important}.p-3{padding:1.25rem!important}.pt-3,.py-3{padding-top:1.25rem!important}.pr-3,.px-3{padding-right:1.25rem!important}.pb-3,.py-3{padding-bottom:1.25rem!important}.pl-3,.px-3{padding-left:1.25rem!important}.p-4{padding:1.875rem!important}.pt-4,.py-4{padding-top:1.875rem!important}.pr-4,.px-4{padding-right:1.875rem!important}.pb-4,.py-4{padding-bottom:1.875rem!important}.pl-4,.px-4{padding-left:1.875rem!important}.p-5{padding:3.75rem!important}.pt-5,.py-5{padding-top:3.75rem!important}.pr-5,.px-5{padding-right:3.75rem!important}.pb-5,.py-5{padding-bottom:3.75rem!important}.pl-5,.px-5{padding-left:3.75rem!important}.m-n1{margin:-.3125rem!important}.mt-n1,.my-n1{margin-top:-.3125rem!important}.mr-n1,.mx-n1{margin-right:-.3125rem!important}.mb-n1,.my-n1{margin-bottom:-.3125rem!important}.ml-n1,.mx-n1{margin-left:-.3125rem!important}.m-n2{margin:-.625rem!important}.mt-n2,.my-n2{margin-top:-.625rem!important}.mr-n2,.mx-n2{margin-right:-.625rem!important}.mb-n2,.my-n2{margin-bottom:-.625rem!important}.ml-n2,.mx-n2{margin-left:-.625rem!important}.m-n3{margin:-1.25rem!important}.mt-n3,.my-n3{margin-top:-1.25rem!important}.mr-n3,.mx-n3{margin-right:-1.25rem!important}.mb-n3,.my-n3{margin-bottom:-1.25rem!important}.ml-n3,.mx-n3{margin-left:-1.25rem!important}.m-n4{margin:-1.875rem!important}.mt-n4,.my-n4{margin-top:-1.875rem!important}.mr-n4,.mx-n4{margin-right:-1.875rem!important}.mb-n4,.my-n4{margin-bottom:-1.875rem!important}.ml-n4,.mx-n4{margin-left:-1.875rem!important}.m-n5{margin:-3.75rem!important}.mt-n5,.my-n5{margin-top:-3.75rem!important}.mr-n5,.mx-n5{margin-right:-3.75rem!important}.mb-n5,.my-n5{margin-bottom:-3.75rem!important}.ml-n5,.mx-n5{margin-left:-3.75rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:480px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.3125rem!important}.mt-sm-1,.my-sm-1{margin-top:.3125rem!important}.mr-sm-1,.mx-sm-1{margin-right:.3125rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.3125rem!important}.ml-sm-1,.mx-sm-1{margin-left:.3125rem!important}.m-sm-2{margin:.625rem!important}.mt-sm-2,.my-sm-2{margin-top:.625rem!important}.mr-sm-2,.mx-sm-2{margin-right:.625rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.625rem!important}.ml-sm-2,.mx-sm-2{margin-left:.625rem!important}.m-sm-3{margin:1.25rem!important}.mt-sm-3,.my-sm-3{margin-top:1.25rem!important}.mr-sm-3,.mx-sm-3{margin-right:1.25rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1.25rem!important}.ml-sm-3,.mx-sm-3{margin-left:1.25rem!important}.m-sm-4{margin:1.875rem!important}.mt-sm-4,.my-sm-4{margin-top:1.875rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.875rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.875rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.875rem!important}.m-sm-5{margin:3.75rem!important}.mt-sm-5,.my-sm-5{margin-top:3.75rem!important}.mr-sm-5,.mx-sm-5{margin-right:3.75rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3.75rem!important}.ml-sm-5,.mx-sm-5{margin-left:3.75rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.3125rem!important}.pt-sm-1,.py-sm-1{padding-top:.3125rem!important}.pr-sm-1,.px-sm-1{padding-right:.3125rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.3125rem!important}.pl-sm-1,.px-sm-1{padding-left:.3125rem!important}.p-sm-2{padding:.625rem!important}.pt-sm-2,.py-sm-2{padding-top:.625rem!important}.pr-sm-2,.px-sm-2{padding-right:.625rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.625rem!important}.pl-sm-2,.px-sm-2{padding-left:.625rem!important}.p-sm-3{padding:1.25rem!important}.pt-sm-3,.py-sm-3{padding-top:1.25rem!important}.pr-sm-3,.px-sm-3{padding-right:1.25rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1.25rem!important}.pl-sm-3,.px-sm-3{padding-left:1.25rem!important}.p-sm-4{padding:1.875rem!important}.pt-sm-4,.py-sm-4{padding-top:1.875rem!important}.pr-sm-4,.px-sm-4{padding-right:1.875rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.875rem!important}.pl-sm-4,.px-sm-4{padding-left:1.875rem!important}.p-sm-5{padding:3.75rem!important}.pt-sm-5,.py-sm-5{padding-top:3.75rem!important}.pr-sm-5,.px-sm-5{padding-right:3.75rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3.75rem!important}.pl-sm-5,.px-sm-5{padding-left:3.75rem!important}.m-sm-n1{margin:-.3125rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.3125rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.3125rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.3125rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.3125rem!important}.m-sm-n2{margin:-.625rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.625rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.625rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.625rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.625rem!important}.m-sm-n3{margin:-1.25rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1.25rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1.25rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1.25rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1.25rem!important}.m-sm-n4{margin:-1.875rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.875rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.875rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.875rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.875rem!important}.m-sm-n5{margin:-3.75rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3.75rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3.75rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3.75rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3.75rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.3125rem!important}.mt-md-1,.my-md-1{margin-top:.3125rem!important}.mr-md-1,.mx-md-1{margin-right:.3125rem!important}.mb-md-1,.my-md-1{margin-bottom:.3125rem!important}.ml-md-1,.mx-md-1{margin-left:.3125rem!important}.m-md-2{margin:.625rem!important}.mt-md-2,.my-md-2{margin-top:.625rem!important}.mr-md-2,.mx-md-2{margin-right:.625rem!important}.mb-md-2,.my-md-2{margin-bottom:.625rem!important}.ml-md-2,.mx-md-2{margin-left:.625rem!important}.m-md-3{margin:1.25rem!important}.mt-md-3,.my-md-3{margin-top:1.25rem!important}.mr-md-3,.mx-md-3{margin-right:1.25rem!important}.mb-md-3,.my-md-3{margin-bottom:1.25rem!important}.ml-md-3,.mx-md-3{margin-left:1.25rem!important}.m-md-4{margin:1.875rem!important}.mt-md-4,.my-md-4{margin-top:1.875rem!important}.mr-md-4,.mx-md-4{margin-right:1.875rem!important}.mb-md-4,.my-md-4{margin-bottom:1.875rem!important}.ml-md-4,.mx-md-4{margin-left:1.875rem!important}.m-md-5{margin:3.75rem!important}.mt-md-5,.my-md-5{margin-top:3.75rem!important}.mr-md-5,.mx-md-5{margin-right:3.75rem!important}.mb-md-5,.my-md-5{margin-bottom:3.75rem!important}.ml-md-5,.mx-md-5{margin-left:3.75rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.3125rem!important}.pt-md-1,.py-md-1{padding-top:.3125rem!important}.pr-md-1,.px-md-1{padding-right:.3125rem!important}.pb-md-1,.py-md-1{padding-bottom:.3125rem!important}.pl-md-1,.px-md-1{padding-left:.3125rem!important}.p-md-2{padding:.625rem!important}.pt-md-2,.py-md-2{padding-top:.625rem!important}.pr-md-2,.px-md-2{padding-right:.625rem!important}.pb-md-2,.py-md-2{padding-bottom:.625rem!important}.pl-md-2,.px-md-2{padding-left:.625rem!important}.p-md-3{padding:1.25rem!important}.pt-md-3,.py-md-3{padding-top:1.25rem!important}.pr-md-3,.px-md-3{padding-right:1.25rem!important}.pb-md-3,.py-md-3{padding-bottom:1.25rem!important}.pl-md-3,.px-md-3{padding-left:1.25rem!important}.p-md-4{padding:1.875rem!important}.pt-md-4,.py-md-4{padding-top:1.875rem!important}.pr-md-4,.px-md-4{padding-right:1.875rem!important}.pb-md-4,.py-md-4{padding-bottom:1.875rem!important}.pl-md-4,.px-md-4{padding-left:1.875rem!important}.p-md-5{padding:3.75rem!important}.pt-md-5,.py-md-5{padding-top:3.75rem!important}.pr-md-5,.px-md-5{padding-right:3.75rem!important}.pb-md-5,.py-md-5{padding-bottom:3.75rem!important}.pl-md-5,.px-md-5{padding-left:3.75rem!important}.m-md-n1{margin:-.3125rem!important}.mt-md-n1,.my-md-n1{margin-top:-.3125rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.3125rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.3125rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.3125rem!important}.m-md-n2{margin:-.625rem!important}.mt-md-n2,.my-md-n2{margin-top:-.625rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.625rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.625rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.625rem!important}.m-md-n3{margin:-1.25rem!important}.mt-md-n3,.my-md-n3{margin-top:-1.25rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1.25rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1.25rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1.25rem!important}.m-md-n4{margin:-1.875rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.875rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.875rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.875rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.875rem!important}.m-md-n5{margin:-3.75rem!important}.mt-md-n5,.my-md-n5{margin-top:-3.75rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3.75rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3.75rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3.75rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:1024px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.3125rem!important}.mt-lg-1,.my-lg-1{margin-top:.3125rem!important}.mr-lg-1,.mx-lg-1{margin-right:.3125rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.3125rem!important}.ml-lg-1,.mx-lg-1{margin-left:.3125rem!important}.m-lg-2{margin:.625rem!important}.mt-lg-2,.my-lg-2{margin-top:.625rem!important}.mr-lg-2,.mx-lg-2{margin-right:.625rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.625rem!important}.ml-lg-2,.mx-lg-2{margin-left:.625rem!important}.m-lg-3{margin:1.25rem!important}.mt-lg-3,.my-lg-3{margin-top:1.25rem!important}.mr-lg-3,.mx-lg-3{margin-right:1.25rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1.25rem!important}.ml-lg-3,.mx-lg-3{margin-left:1.25rem!important}.m-lg-4{margin:1.875rem!important}.mt-lg-4,.my-lg-4{margin-top:1.875rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.875rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.875rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.875rem!important}.m-lg-5{margin:3.75rem!important}.mt-lg-5,.my-lg-5{margin-top:3.75rem!important}.mr-lg-5,.mx-lg-5{margin-right:3.75rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3.75rem!important}.ml-lg-5,.mx-lg-5{margin-left:3.75rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.3125rem!important}.pt-lg-1,.py-lg-1{padding-top:.3125rem!important}.pr-lg-1,.px-lg-1{padding-right:.3125rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.3125rem!important}.pl-lg-1,.px-lg-1{padding-left:.3125rem!important}.p-lg-2{padding:.625rem!important}.pt-lg-2,.py-lg-2{padding-top:.625rem!important}.pr-lg-2,.px-lg-2{padding-right:.625rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.625rem!important}.pl-lg-2,.px-lg-2{padding-left:.625rem!important}.p-lg-3{padding:1.25rem!important}.pt-lg-3,.py-lg-3{padding-top:1.25rem!important}.pr-lg-3,.px-lg-3{padding-right:1.25rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1.25rem!important}.pl-lg-3,.px-lg-3{padding-left:1.25rem!important}.p-lg-4{padding:1.875rem!important}.pt-lg-4,.py-lg-4{padding-top:1.875rem!important}.pr-lg-4,.px-lg-4{padding-right:1.875rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.875rem!important}.pl-lg-4,.px-lg-4{padding-left:1.875rem!important}.p-lg-5{padding:3.75rem!important}.pt-lg-5,.py-lg-5{padding-top:3.75rem!important}.pr-lg-5,.px-lg-5{padding-right:3.75rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3.75rem!important}.pl-lg-5,.px-lg-5{padding-left:3.75rem!important}.m-lg-n1{margin:-.3125rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.3125rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.3125rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.3125rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.3125rem!important}.m-lg-n2{margin:-.625rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.625rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.625rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.625rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.625rem!important}.m-lg-n3{margin:-1.25rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1.25rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1.25rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1.25rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1.25rem!important}.m-lg-n4{margin:-1.875rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.875rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.875rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.875rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.875rem!important}.m-lg-n5{margin:-3.75rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3.75rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3.75rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3.75rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3.75rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1280px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.3125rem!important}.mt-xl-1,.my-xl-1{margin-top:.3125rem!important}.mr-xl-1,.mx-xl-1{margin-right:.3125rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.3125rem!important}.ml-xl-1,.mx-xl-1{margin-left:.3125rem!important}.m-xl-2{margin:.625rem!important}.mt-xl-2,.my-xl-2{margin-top:.625rem!important}.mr-xl-2,.mx-xl-2{margin-right:.625rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.625rem!important}.ml-xl-2,.mx-xl-2{margin-left:.625rem!important}.m-xl-3{margin:1.25rem!important}.mt-xl-3,.my-xl-3{margin-top:1.25rem!important}.mr-xl-3,.mx-xl-3{margin-right:1.25rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1.25rem!important}.ml-xl-3,.mx-xl-3{margin-left:1.25rem!important}.m-xl-4{margin:1.875rem!important}.mt-xl-4,.my-xl-4{margin-top:1.875rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.875rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.875rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.875rem!important}.m-xl-5{margin:3.75rem!important}.mt-xl-5,.my-xl-5{margin-top:3.75rem!important}.mr-xl-5,.mx-xl-5{margin-right:3.75rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3.75rem!important}.ml-xl-5,.mx-xl-5{margin-left:3.75rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.3125rem!important}.pt-xl-1,.py-xl-1{padding-top:.3125rem!important}.pr-xl-1,.px-xl-1{padding-right:.3125rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.3125rem!important}.pl-xl-1,.px-xl-1{padding-left:.3125rem!important}.p-xl-2{padding:.625rem!important}.pt-xl-2,.py-xl-2{padding-top:.625rem!important}.pr-xl-2,.px-xl-2{padding-right:.625rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.625rem!important}.pl-xl-2,.px-xl-2{padding-left:.625rem!important}.p-xl-3{padding:1.25rem!important}.pt-xl-3,.py-xl-3{padding-top:1.25rem!important}.pr-xl-3,.px-xl-3{padding-right:1.25rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1.25rem!important}.pl-xl-3,.px-xl-3{padding-left:1.25rem!important}.p-xl-4{padding:1.875rem!important}.pt-xl-4,.py-xl-4{padding-top:1.875rem!important}.pr-xl-4,.px-xl-4{padding-right:1.875rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.875rem!important}.pl-xl-4,.px-xl-4{padding-left:1.875rem!important}.p-xl-5{padding:3.75rem!important}.pt-xl-5,.py-xl-5{padding-top:3.75rem!important}.pr-xl-5,.px-xl-5{padding-right:3.75rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3.75rem!important}.pl-xl-5,.px-xl-5{padding-left:3.75rem!important}.m-xl-n1{margin:-.3125rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.3125rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.3125rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.3125rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.3125rem!important}.m-xl-n2{margin:-.625rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.625rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.625rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.625rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.625rem!important}.m-xl-n3{margin:-1.25rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1.25rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1.25rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1.25rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1.25rem!important}.m-xl-n4{margin:-1.875rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.875rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.875rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.875rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.875rem!important}.m-xl-n5{margin:-3.75rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3.75rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3.75rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3.75rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3.75rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}@media (min-width:1440px){.m-xxl-0{margin:0!important}.mt-xxl-0,.my-xxl-0{margin-top:0!important}.mr-xxl-0,.mx-xxl-0{margin-right:0!important}.mb-xxl-0,.my-xxl-0{margin-bottom:0!important}.ml-xxl-0,.mx-xxl-0{margin-left:0!important}.m-xxl-1{margin:.3125rem!important}.mt-xxl-1,.my-xxl-1{margin-top:.3125rem!important}.mr-xxl-1,.mx-xxl-1{margin-right:.3125rem!important}.mb-xxl-1,.my-xxl-1{margin-bottom:.3125rem!important}.ml-xxl-1,.mx-xxl-1{margin-left:.3125rem!important}.m-xxl-2{margin:.625rem!important}.mt-xxl-2,.my-xxl-2{margin-top:.625rem!important}.mr-xxl-2,.mx-xxl-2{margin-right:.625rem!important}.mb-xxl-2,.my-xxl-2{margin-bottom:.625rem!important}.ml-xxl-2,.mx-xxl-2{margin-left:.625rem!important}.m-xxl-3{margin:1.25rem!important}.mt-xxl-3,.my-xxl-3{margin-top:1.25rem!important}.mr-xxl-3,.mx-xxl-3{margin-right:1.25rem!important}.mb-xxl-3,.my-xxl-3{margin-bottom:1.25rem!important}.ml-xxl-3,.mx-xxl-3{margin-left:1.25rem!important}.m-xxl-4{margin:1.875rem!important}.mt-xxl-4,.my-xxl-4{margin-top:1.875rem!important}.mr-xxl-4,.mx-xxl-4{margin-right:1.875rem!important}.mb-xxl-4,.my-xxl-4{margin-bottom:1.875rem!important}.ml-xxl-4,.mx-xxl-4{margin-left:1.875rem!important}.m-xxl-5{margin:3.75rem!important}.mt-xxl-5,.my-xxl-5{margin-top:3.75rem!important}.mr-xxl-5,.mx-xxl-5{margin-right:3.75rem!important}.mb-xxl-5,.my-xxl-5{margin-bottom:3.75rem!important}.ml-xxl-5,.mx-xxl-5{margin-left:3.75rem!important}.p-xxl-0{padding:0!important}.pt-xxl-0,.py-xxl-0{padding-top:0!important}.pr-xxl-0,.px-xxl-0{padding-right:0!important}.pb-xxl-0,.py-xxl-0{padding-bottom:0!important}.pl-xxl-0,.px-xxl-0{padding-left:0!important}.p-xxl-1{padding:.3125rem!important}.pt-xxl-1,.py-xxl-1{padding-top:.3125rem!important}.pr-xxl-1,.px-xxl-1{padding-right:.3125rem!important}.pb-xxl-1,.py-xxl-1{padding-bottom:.3125rem!important}.pl-xxl-1,.px-xxl-1{padding-left:.3125rem!important}.p-xxl-2{padding:.625rem!important}.pt-xxl-2,.py-xxl-2{padding-top:.625rem!important}.pr-xxl-2,.px-xxl-2{padding-right:.625rem!important}.pb-xxl-2,.py-xxl-2{padding-bottom:.625rem!important}.pl-xxl-2,.px-xxl-2{padding-left:.625rem!important}.p-xxl-3{padding:1.25rem!important}.pt-xxl-3,.py-xxl-3{padding-top:1.25rem!important}.pr-xxl-3,.px-xxl-3{padding-right:1.25rem!important}.pb-xxl-3,.py-xxl-3{padding-bottom:1.25rem!important}.pl-xxl-3,.px-xxl-3{padding-left:1.25rem!important}.p-xxl-4{padding:1.875rem!important}.pt-xxl-4,.py-xxl-4{padding-top:1.875rem!important}.pr-xxl-4,.px-xxl-4{padding-right:1.875rem!important}.pb-xxl-4,.py-xxl-4{padding-bottom:1.875rem!important}.pl-xxl-4,.px-xxl-4{padding-left:1.875rem!important}.p-xxl-5{padding:3.75rem!important}.pt-xxl-5,.py-xxl-5{padding-top:3.75rem!important}.pr-xxl-5,.px-xxl-5{padding-right:3.75rem!important}.pb-xxl-5,.py-xxl-5{padding-bottom:3.75rem!important}.pl-xxl-5,.px-xxl-5{padding-left:3.75rem!important}.m-xxl-n1{margin:-.3125rem!important}.mt-xxl-n1,.my-xxl-n1{margin-top:-.3125rem!important}.mr-xxl-n1,.mx-xxl-n1{margin-right:-.3125rem!important}.mb-xxl-n1,.my-xxl-n1{margin-bottom:-.3125rem!important}.ml-xxl-n1,.mx-xxl-n1{margin-left:-.3125rem!important}.m-xxl-n2{margin:-.625rem!important}.mt-xxl-n2,.my-xxl-n2{margin-top:-.625rem!important}.mr-xxl-n2,.mx-xxl-n2{margin-right:-.625rem!important}.mb-xxl-n2,.my-xxl-n2{margin-bottom:-.625rem!important}.ml-xxl-n2,.mx-xxl-n2{margin-left:-.625rem!important}.m-xxl-n3{margin:-1.25rem!important}.mt-xxl-n3,.my-xxl-n3{margin-top:-1.25rem!important}.mr-xxl-n3,.mx-xxl-n3{margin-right:-1.25rem!important}.mb-xxl-n3,.my-xxl-n3{margin-bottom:-1.25rem!important}.ml-xxl-n3,.mx-xxl-n3{margin-left:-1.25rem!important}.m-xxl-n4{margin:-1.875rem!important}.mt-xxl-n4,.my-xxl-n4{margin-top:-1.875rem!important}.mr-xxl-n4,.mx-xxl-n4{margin-right:-1.875rem!important}.mb-xxl-n4,.my-xxl-n4{margin-bottom:-1.875rem!important}.ml-xxl-n4,.mx-xxl-n4{margin-left:-1.875rem!important}.m-xxl-n5{margin:-3.75rem!important}.mt-xxl-n5,.my-xxl-n5{margin-top:-3.75rem!important}.mr-xxl-n5,.mx-xxl-n5{margin-right:-3.75rem!important}.mb-xxl-n5,.my-xxl-n5{margin-bottom:-3.75rem!important}.ml-xxl-n5,.mx-xxl-n5{margin-left:-3.75rem!important}.m-xxl-auto{margin:auto!important}.mt-xxl-auto,.my-xxl-auto{margin-top:auto!important}.mr-xxl-auto,.mx-xxl-auto{margin-right:auto!important}.mb-xxl-auto,.my-xxl-auto{margin-bottom:auto!important}.ml-xxl-auto,.mx-xxl-auto{margin-left:auto!important}} +/*# sourceMappingURL=boosted-grid.min.css.map */ \ No newline at end of file diff --git a/docs/accessibilityStatement/favicon.ico b/docs/accessibilityStatement/favicon.ico new file mode 100644 index 00000000..7f6945a4 Binary files /dev/null and b/docs/accessibilityStatement/favicon.ico differ diff --git a/docs/accessibilityStatement/orange-design-system-android.html b/docs/accessibilityStatement/orange-design-system-android.html new file mode 100644 index 00000000..0ae3d80f --- /dev/null +++ b/docs/accessibilityStatement/orange-design-system-android.html @@ -0,0 +1,441 @@ + + + + + + + + + + + + Accessibility statement - Orange Design System + + + + +
+

Accessibility statement : Orange Design System

+ +
+ +
+ + + +
+ +

Context

+

[Name of the organization] undertakes to make its websites internet, intranet, extranet and its mobile applications accessible in accordance with article 47 of Law No. 2005-102 of February 11, 2005.

+

To this end, it implements the following strategy and actions :

+

the pluri-annual accessibility framework (French).

+

This accessibility statement applies to [Project name or URL].

+ + +
+ +
+ +
+ +
+
+ +

Conformity level:

+

"Orange Design System" is partially compliant to the criteria with WCAG version 2.2, level AA.

+

The Orange Group Accessibility Skills Center refers to the WCAG international recommendations. Here is the correspondence link between the RGAA and the WCAG.

+

The audit was carried out via la Va11ydette.

+ +

Tests result

+
+

+ Global compliance + 80% +

+ +

Global compliance +

+
+
+

+ Average compliance + 98% +

+ +

Average compliance

+
+

The compliance audit carried out by The Orange Group Accessibility Skills Center reveals that :

+
    +
  • 80% of WCAG level A and AA criteria are met.
  • +
  • undefined 98%.
  • +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary by levels
LevelAAATotal
Number of criteria322456
Compliant121224
Non-compliant336
Not applicable17926
Compliance + 80% + + 80% + + 80% +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Compliance rate by pages according to the two levels of criteria A and AA
Criteria / LevelCompliant / ACompliant / AANon-compliant / ANon-compliant / AANot applicable / ANot applicable / AACompliance rate
Page : Guidelines1413001811100 %
Page : Components141102181193 %
Page : Modules1413001811100 %
Page : About1414001810100 %
Page : Guidelines-Colour1412001812100 %
Page : Guidelines-Typography1213002011100 %
Page : Guidelines-Spacing1413001811100 %
Page : Components - App bars: top131310181196 %
Page : Components - Bars Navigation1413001811100 %
Page : Components - Buttons1413001811100 %
Page : Components - Buttons: FAB1413001811100 %
Page : Components - Cards1414001810100 %
Page : Components - Chips1414001810100 %
Page : Components - Lists141201181196 %
Page : Components - Progress indicators1414001810100 %
Page : Components - Sheets121112191188 %
Page : Components - Sliders131310181196 %
Page : Components - Text field1413001811100 %
Page : Modules - List1513001711100 %
+
+ +
+
+ +
+ +

Content not accessible

+ +

The contents listed below are not accessible for the following reasons.

+ +

Non-compliances

+

List of non-compliant WCAG criteria :

+
    +
  • + 1.1.1 Non-text Content, Level A +
  • +
  • + 1.4.4 Resize text, Level AA +
  • +
  • + 1.4.10 Reflow, Level AA +
  • +
  • + 2.5.1 Pointer Gestures, Level A +
  • +
  • + 2.5.8 Target size, Level AA +
  • +
  • + 3.2.2 On Input, Level A +
  • +
+
+
+ +
+ +
+

Establishment of this accessibility statement

+

This declaration was established on 4/24/2024.

+
+
+
+
+ + +

Technical specifications of the site

+
    +
  • Flutter
  • +
+ + +

Testing environment

+

The verifications were performed with the following software combinations:

+
    + +
+ +

Methods and Tools to evaluate accessibility

+
    +
  • Automatic testing: aXe 0.10.2, Accessibility Scanner
  • +
  • Functional testing: Talkback, Switch Access
  • +
+ +
+
+ +
+
+

Pages which have been the subject of compliance verification

+

The verification audit was performed on the following pages using the Orange va11ydette:

+ +
    +
  1. Guidelines :
  2. +
  3. Components :
  4. +
  5. Modules :
  6. +
  7. About :
  8. +
  9. Guidelines-Colour :
  10. +
  11. Guidelines-Typography :
  12. +
  13. Guidelines-Spacing :
  14. +
  15. Components - App bars: top :
  16. +
  17. Components - Bars Navigation :
  18. +
  19. Components - Buttons :
  20. +
  21. Components - Buttons: FAB :
  22. +
  23. Components - Cards :
  24. +
  25. Components - Chips :
  26. +
  27. Components - Lists :
  28. +
  29. Components - Progress indicators :
  30. +
  31. Components - Sheets :
  32. +
  33. Components - Sliders :
  34. +
  35. Components - Text field :
  36. +
  37. Modules - List :
  38. +
+
+
+ +
+ +

Feedback and contact information

+

If you are unable to access content or a service, you can contact the site manager to be directed to an accessible alternative or obtain the content in another form.

+ +

We welcome your feedback on the accessibility of this site. Please let us know if you encounter accessibility problems by sending an email to XXX@orange.com.

+ + +
+
+
+ +
+ +

Legal remedies

+

You have reported to the website manager an accessibility problem that prevents you from accessing content or one of the portal's services and you have not received a satisfactory response, in this case:

+ + +
+
+
+ + + \ No newline at end of file diff --git a/docs/accessibilityStatement/orange-design-system-ios.html b/docs/accessibilityStatement/orange-design-system-ios.html new file mode 100644 index 00000000..51ffe70c --- /dev/null +++ b/docs/accessibilityStatement/orange-design-system-ios.html @@ -0,0 +1,441 @@ + + + + + + + + + + + + Accessibility statement - Orange Design System + + + + +
+

Accessibility statement : Orange Design System

+ +
+ +
+ + + +
+ +

Context

+

[Name of the organization] undertakes to make its websites internet, intranet, extranet and its mobile applications accessible in accordance with article 47 of Law No. 2005-102 of February 11, 2005.

+

To this end, it implements the following strategy and actions :

+

the pluri-annual accessibility framework (French).

+

This accessibility statement applies to [Project name or URL].

+ + +
+ +
+ +
+ +
+
+ +

Conformity level:

+

"Orange Design System" is partially compliant to the criteria with WCAG version 2.2, level AA.

+

The Orange Group Accessibility Skills Center refers to the WCAG international recommendations. Here is the correspondence link between the RGAA and the WCAG.

+

The audit was carried out via la Va11ydette.

+ +

Tests result

+
+

+ Global compliance + 80% +

+ +

Global compliance +

+
+
+

+ Average compliance + 98% +

+ +

Average compliance

+
+

The compliance audit carried out by The Orange Group Accessibility Skills Center reveals that :

+
    +
  • 80% of WCAG level A and AA criteria are met.
  • +
  • undefined 98%.
  • +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary by levels
LevelAAATotal
Number of criteria322456
Compliant121224
Non-compliant336
Not applicable17926
Compliance + 80% + + 80% + + 80% +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Compliance rate by pages according to the two levels of criteria A and AA
Criteria / LevelCompliant / ACompliant / AANon-compliant / ANon-compliant / AANot applicable / ANot applicable / AACompliance rate
Page : Guidelines1413001811100 %
Page : Components141102181193 %
Page : Modules1413001811100 %
Page : About1414001810100 %
Page : Guidelines-Colour1412001812100 %
Page : Guidelines-Typography1213002011100 %
Page : Guidelines-Spacing1413001811100 %
Page : Components - App bars: top131310181196 %
Page : Components - Bars Navigation1413001811100 %
Page : Components - Buttons1413001811100 %
Page : Components - Buttons: FAB1413001811100 %
Page : Components - Cards1414001810100 %
Page : Components - Chips1414001810100 %
Page : Components - Lists141201181196 %
Page : Components - Progress indicators1414001810100 %
Page : Components - Sheets121112191188 %
Page : Components - Sliders131310181196 %
Page : Components - Text field1413001811100 %
Page : Modules - List1513001711100 %
+
+ +
+
+ +
+ +

Content not accessible

+ +

The contents listed below are not accessible for the following reasons.

+ +

Non-compliances

+

List of non-compliant WCAG criteria :

+
    +
  • + 1.1.1 Non-text Content, Level A +
  • +
  • + 1.4.4 Resize text, Level AA +
  • +
  • + 1.4.10 Reflow, Level AA +
  • +
  • + 2.5.1 Pointer Gestures, Level A +
  • +
  • + 2.5.8 Target size, Level AA +
  • +
  • + 3.2.2 On Input, Level A +
  • +
+
+
+ +
+ +
+

Establishment of this accessibility statement

+

This declaration was established on 4/24/2024.

+
+
+
+
+ + +

Technical specifications of the site

+
    +
  • Flutter
  • +
+ + +

Testing environment

+

The verifications were performed with the following software combinations:

+
    + +
+ +

Methods and Tools to evaluate accessibility

+
    +
  • Automatic testing: Accessibility Inspector, Colour Contrat Analyzer
  • +
  • Functional testing: Voice Over, Switch Control, Keyboard navigation
  • +
+ +
+
+ +
+
+

Pages which have been the subject of compliance verification

+

The verification audit was performed on the following pages using the Orange va11ydette:

+ +
    +
  1. Guidelines :
  2. +
  3. Components :
  4. +
  5. Modules :
  6. +
  7. About :
  8. +
  9. Guidelines-Colour :
  10. +
  11. Guidelines-Typography :
  12. +
  13. Guidelines-Spacing :
  14. +
  15. Components - App bars: top :
  16. +
  17. Components - Bars Navigation :
  18. +
  19. Components - Buttons :
  20. +
  21. Components - Buttons: FAB :
  22. +
  23. Components - Cards :
  24. +
  25. Components - Chips :
  26. +
  27. Components - Lists :
  28. +
  29. Components - Progress indicators :
  30. +
  31. Components - Sheets :
  32. +
  33. Components - Sliders :
  34. +
  35. Components - Text field :
  36. +
  37. Modules - List :
  38. +
+
+
+ +
+ +

Feedback and contact information

+

If you are unable to access content or a service, you can contact the site manager to be directed to an accessible alternative or obtain the content in another form.

+ +

We welcome your feedback on the accessibility of this site. Please let us know if you encounter accessibility problems by sending an email to XXX@orange.com.

+ + +
+
+
+ +
+ +

Legal remedies

+

You have reported to the website manager an accessibility problem that prevents you from accessing content or one of the portal's services and you have not received a satisfactory response, in this case:

+ + +
+
+
+ + + \ No newline at end of file diff --git a/docs/accessibilityStatement/orange-logo.svg b/docs/accessibilityStatement/orange-logo.svg new file mode 100644 index 00000000..a0cd3f28 --- /dev/null +++ b/docs/accessibilityStatement/orange-logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/accessibilityStatement/pie.css b/docs/accessibilityStatement/pie.css new file mode 100644 index 00000000..40b1478d --- /dev/null +++ b/docs/accessibilityStatement/pie.css @@ -0,0 +1,236 @@ +.pie { + position: relative; + width: 200px; + height: 200px; + border-radius: 50%; + background: #eee; + background-image: linear-gradient(to right, transparent 50%, #F16E00 0); +} + +.pie:after, +.pie:before { + content: ''; + position: absolute; + display: block; + margin-left: 50%; + width: 50%; + height: 100%; + border-radius: 0 100% 100% 0 / 50%; + background-color: inherit; + transform-origin: left; +} + +.pie:after { background-color: #F16E00 } + +.pie-val { + position: absolute; + top: 15px; + bottom: 15px; + left: 15px; + right: 15px; + z-index: 2; + border-radius: 50%; + background-color: #fff; + padding-top: 25%; +} + +.pie[data-value="1"]:before { transform: rotate(3.6deg) } +.pie[data-value="1"]:after { display: none } +.pie[data-value="2"]:before { transform: rotate(7.2deg) } +.pie[data-value="2"]:after { display: none } +.pie[data-value="3"]:before { transform: rotate(10.8deg) } +.pie[data-value="3"]:after { display: none } +.pie[data-value="4"]:before { transform: rotate(14.4deg) } +.pie[data-value="4"]:after { display: none } +.pie[data-value="5"]:before { transform: rotate(18deg) } +.pie[data-value="5"]:after { display: none } +.pie[data-value="6"]:before { transform: rotate(21.6deg) } +.pie[data-value="6"]:after { display: none } +.pie[data-value="7"]:before { transform: rotate(25.2deg) } +.pie[data-value="7"]:after { display: none } +.pie[data-value="8"]:before { transform: rotate(28.8deg) } +.pie[data-value="8"]:after { display: none } +.pie[data-value="9"]:before { transform: rotate(32.4deg) } +.pie[data-value="9"]:after { display: none } +.pie[data-value="10"]:before { transform: rotate(36deg) } +.pie[data-value="10"]:after { display: none } +.pie[data-value="11"]:before { transform: rotate(39.6deg) } +.pie[data-value="11"]:after { display: none } +.pie[data-value="12"]:before { transform: rotate(43.2deg) } +.pie[data-value="12"]:after { display: none } +.pie[data-value="13"]:before { transform: rotate(46.8deg) } +.pie[data-value="13"]:after { display: none } +.pie[data-value="14"]:before { transform: rotate(50.4deg) } +.pie[data-value="14"]:after { display: none } +.pie[data-value="15"]:before { transform: rotate(54deg) } +.pie[data-value="15"]:after { display: none } +.pie[data-value="16"]:before { transform: rotate(57.6deg) } +.pie[data-value="16"]:after { display: none } +.pie[data-value="17"]:before { transform: rotate(61.2deg) } +.pie[data-value="17"]:after { display: none } +.pie[data-value="18"]:before { transform: rotate(64.8deg) } +.pie[data-value="18"]:after { display: none } +.pie[data-value="19"]:before { transform: rotate(68.4deg) } +.pie[data-value="19"]:after { display: none } +.pie[data-value="20"]:before { transform: rotate(72deg) } +.pie[data-value="20"]:after { display: none } +.pie[data-value="21"]:before { transform: rotate(75.6deg) } +.pie[data-value="21"]:after { display: none } +.pie[data-value="22"]:before { transform: rotate(79.2deg) } +.pie[data-value="22"]:after { display: none } +.pie[data-value="23"]:before { transform: rotate(82.8deg) } +.pie[data-value="23"]:after { display: none } +.pie[data-value="24"]:before { transform: rotate(86.4deg) } +.pie[data-value="24"]:after { display: none } +.pie[data-value="25"]:before { transform: rotate(90deg) } +.pie[data-value="25"]:after { display: none } +.pie[data-value="26"]:before { transform: rotate(93.6deg) } +.pie[data-value="26"]:after { display: none } +.pie[data-value="27"]:before { transform: rotate(97.2deg) } +.pie[data-value="27"]:after { display: none } +.pie[data-value="28"]:before { transform: rotate(100.8deg) } +.pie[data-value="28"]:after { display: none } +.pie[data-value="29"]:before { transform: rotate(104.4deg) } +.pie[data-value="29"]:after { display: none } +.pie[data-value="30"]:before { transform: rotate(108deg) } +.pie[data-value="30"]:after { display: none } +.pie[data-value="31"]:before { transform: rotate(111.6deg) } +.pie[data-value="31"]:after { display: none } +.pie[data-value="32"]:before { transform: rotate(115.2deg) } +.pie[data-value="32"]:after { display: none } +.pie[data-value="33"]:before { transform: rotate(118.8deg) } +.pie[data-value="33"]:after { display: none } +.pie[data-value="34"]:before { transform: rotate(122.4deg) } +.pie[data-value="34"]:after { display: none } +.pie[data-value="35"]:before { transform: rotate(126deg) } +.pie[data-value="35"]:after { display: none } +.pie[data-value="36"]:before { transform: rotate(129.6deg) } +.pie[data-value="36"]:after { display: none } +.pie[data-value="37"]:before { transform: rotate(133.2deg) } +.pie[data-value="37"]:after { display: none } +.pie[data-value="38"]:before { transform: rotate(136.8deg) } +.pie[data-value="38"]:after { display: none } +.pie[data-value="39"]:before { transform: rotate(140.4deg) } +.pie[data-value="39"]:after { display: none } +.pie[data-value="40"]:before { transform: rotate(144deg) } +.pie[data-value="40"]:after { display: none } +.pie[data-value="41"]:before { transform: rotate(147.6deg) } +.pie[data-value="41"]:after { display: none } +.pie[data-value="42"]:before { transform: rotate(151.2deg) } +.pie[data-value="42"]:after { display: none } +.pie[data-value="43"]:before { transform: rotate(154.8deg) } +.pie[data-value="43"]:after { display: none } +.pie[data-value="44"]:before { transform: rotate(158.4deg) } +.pie[data-value="44"]:after { display: none } +.pie[data-value="45"]:before { transform: rotate(162deg) } +.pie[data-value="45"]:after { display: none } +.pie[data-value="46"]:before { transform: rotate(165.6deg) } +.pie[data-value="46"]:after { display: none } +.pie[data-value="47"]:before { transform: rotate(169.2deg) } +.pie[data-value="47"]:after { display: none } +.pie[data-value="48"]:before { transform: rotate(172.8deg) } +.pie[data-value="48"]:after { display: none } +.pie[data-value="49"]:before { transform: rotate(176.4deg) } +.pie[data-value="49"]:after { display: none } +.pie[data-value="50"]:before { transform: rotate(180deg) } +.pie[data-value="50"]:after { display: none } +.pie[data-value="51"]:after { transform: rotate(3.6deg) } +.pie[data-value="51"]:before { display: none } +.pie[data-value="52"]:after { transform: rotate(7.2deg) } +.pie[data-value="52"]:before { display: none } +.pie[data-value="53"]:after { transform: rotate(10.8deg) } +.pie[data-value="53"]:before { display: none } +.pie[data-value="54"]:after { transform: rotate(14.4deg) } +.pie[data-value="54"]:before { display: none } +.pie[data-value="55"]:after { transform: rotate(18deg) } +.pie[data-value="55"]:before { display: none } +.pie[data-value="56"]:after { transform: rotate(21.6deg) } +.pie[data-value="56"]:before { display: none } +.pie[data-value="57"]:after { transform: rotate(25.2deg) } +.pie[data-value="57"]:before { display: none } +.pie[data-value="58"]:after { transform: rotate(28.8deg) } +.pie[data-value="58"]:before { display: none } +.pie[data-value="59"]:after { transform: rotate(32.4deg) } +.pie[data-value="59"]:before { display: none } +.pie[data-value="60"]:after { transform: rotate(36deg) } +.pie[data-value="60"]:before { display: none } +.pie[data-value="61"]:after { transform: rotate(39.6deg) } +.pie[data-value="61"]:before { display: none } +.pie[data-value="62"]:after { transform: rotate(43.2deg) } +.pie[data-value="62"]:before { display: none } +.pie[data-value="63"]:after { transform: rotate(46.8deg) } +.pie[data-value="63"]:before { display: none } +.pie[data-value="64"]:after { transform: rotate(50.4deg) } +.pie[data-value="64"]:before { display: none } +.pie[data-value="65"]:after { transform: rotate(54deg) } +.pie[data-value="65"]:before { display: none } +.pie[data-value="66"]:after { transform: rotate(57.6deg) } +.pie[data-value="66"]:before { display: none } +.pie[data-value="67"]:after { transform: rotate(61.2deg) } +.pie[data-value="67"]:before { display: none } +.pie[data-value="68"]:after { transform: rotate(64.8deg) } +.pie[data-value="68"]:before { display: none } +.pie[data-value="69"]:after { transform: rotate(68.4deg) } +.pie[data-value="69"]:before { display: none } +.pie[data-value="70"]:after { transform: rotate(72deg) } +.pie[data-value="70"]:before { display: none } +.pie[data-value="71"]:after { transform: rotate(75.6deg) } +.pie[data-value="71"]:before { display: none } +.pie[data-value="72"]:after { transform: rotate(79.2deg) } +.pie[data-value="72"]:before { display: none } +.pie[data-value="73"]:after { transform: rotate(82.8deg) } +.pie[data-value="73"]:before { display: none } +.pie[data-value="74"]:after { transform: rotate(86.4deg) } +.pie[data-value="74"]:before { display: none } +.pie[data-value="75"]:after { transform: rotate(90deg) } +.pie[data-value="75"]:before { display: none } +.pie[data-value="76"]:after { transform: rotate(93.6deg) } +.pie[data-value="76"]:before { display: none } +.pie[data-value="77"]:after { transform: rotate(97.2deg) } +.pie[data-value="77"]:before { display: none } +.pie[data-value="78"]:after { transform: rotate(100.8deg) } +.pie[data-value="78"]:before { display: none } +.pie[data-value="79"]:after { transform: rotate(104.4deg) } +.pie[data-value="79"]:before { display: none } +.pie[data-value="80"]:after { transform: rotate(108deg) } +.pie[data-value="80"]:before { display: none } +.pie[data-value="81"]:after { transform: rotate(111.6deg) } +.pie[data-value="81"]:before { display: none } +.pie[data-value="82"]:after { transform: rotate(115.2deg) } +.pie[data-value="82"]:before { display: none } +.pie[data-value="83"]:after { transform: rotate(118.8deg) } +.pie[data-value="83"]:before { display: none } +.pie[data-value="84"]:after { transform: rotate(122.4deg) } +.pie[data-value="84"]:before { display: none } +.pie[data-value="85"]:after { transform: rotate(126deg) } +.pie[data-value="85"]:before { display: none } +.pie[data-value="86"]:after { transform: rotate(129.6deg) } +.pie[data-value="86"]:before { display: none } +.pie[data-value="87"]:after { transform: rotate(133.2deg) } +.pie[data-value="87"]:before { display: none } +.pie[data-value="88"]:after { transform: rotate(136.8deg) } +.pie[data-value="88"]:before { display: none } +.pie[data-value="89"]:after { transform: rotate(140.4deg) } +.pie[data-value="89"]:before { display: none } +.pie[data-value="90"]:after { transform: rotate(144deg) } +.pie[data-value="90"]:before { display: none } +.pie[data-value="91"]:after { transform: rotate(147.6deg) } +.pie[data-value="91"]:before { display: none } +.pie[data-value="92"]:after { transform: rotate(151.2deg) } +.pie[data-value="92"]:before { display: none } +.pie[data-value="93"]:after { transform: rotate(154.8deg) } +.pie[data-value="93"]:before { display: none } +.pie[data-value="94"]:after { transform: rotate(158.4deg) } +.pie[data-value="94"]:before { display: none } +.pie[data-value="95"]:after { transform: rotate(162deg) } +.pie[data-value="95"]:before { display: none } +.pie[data-value="96"]:after { transform: rotate(165.6deg) } +.pie[data-value="96"]:before { display: none } +.pie[data-value="97"]:after { transform: rotate(169.2deg) } +.pie[data-value="97"]:before { display: none } +.pie[data-value="98"]:after { transform: rotate(172.8deg) } +.pie[data-value="98"]:before { display: none } +.pie[data-value="99"]:after { transform: rotate(176.4deg) } +.pie[data-value="99"]:before { display: none } +.pie[data-value="100"]:after { transform: rotate(180deg) } +.pie[data-value="100"]:before { display: none } diff --git a/docs/accessibilityStatement/style.css b/docs/accessibilityStatement/style.css new file mode 100644 index 00000000..dd162300 --- /dev/null +++ b/docs/accessibilityStatement/style.css @@ -0,0 +1,117 @@ +body { + font-family: "Arial"; + color: #000000; + background: #eee; + margin: 0; +} + +.content { + background-color: #fff; + padding-bottom: 3em; +} + +em { + color: #e00; + font-weight: bold; + font-style: normal; +} + +.underover { + text-decoration: underline overline #FF3028; +} + +.lead { + font-weight: bold; +} + +.row > [class*="col-"] { + padding-right: 30px; + padding-left: 30px; +} + +h1 { + background-image: url(orange-logo.svg); + background-size: 3.5rem 3.5rem; + background-repeat: no-repeat; + background-position: 1rem 1.5rem; + margin: 0; + padding: 2rem 2rem 2rem 8rem; +} + +h2 { + font-size: 1.2em; + margin-top: 3rem; +} + +.summary h4 { + text-align: center; + font-size: 1em; + border-bottom: 0; +} + +.summary h4 span { + font-size: 3em; +} + +.pie-noncompliant{ + font-size: 1.75em !important; +} + +h3 { + margin-top: 1.5rem; + font-size: 1em; +} + +.table-responsive{ + overflow-x: auto; + -webkit-overflow-scrolling: touch; +} + +table { + width: 100%; + margin-bottom: 1.25rem; + border-collapse: collapse; + text-align: center; + overflow-x:auto; +} + + +table tr { + border-bottom: 1px solid #ccc; +} + +table th { + font-size: .875rem; + font-weight: bold; + padding: .5rem; +} + +table td { + padding: .5rem; + font-size: .875rem; + line-height: 1rem; +} + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; /* added line */ + border: 0; +} + +.visually-hidden { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; /* added line */ + border: 0; +} \ No newline at end of file diff --git a/library/lib/components/card/ods_vertical_image_first_card.dart b/library/lib/components/card/ods_vertical_image_first_card.dart index ea2504bc..9b1bc179 100644 --- a/library/lib/components/card/ods_vertical_image_first_card.dart +++ b/library/lib/components/card/ods_vertical_image_first_card.dart @@ -69,50 +69,53 @@ class OdsVerticalImageFirstCard extends StatelessWidget { elevation: 2, child: Material( color: Colors.transparent, - child: InkWell( - onTap: onClick, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Expanded( - child: SizedBox( - width: double.infinity, - height: OdsVerticalImageFirstCard._imageHeight, - child: ExcludeSemantics(child: image), - ), - ), - Padding( - padding: const EdgeInsets.only( - top: spacingM, left: spacingM), - child: Text( - title, - style: Theme.of(context).textTheme.titleLarge, - ), - ), - if (subtitle != null) - Padding( - padding: const EdgeInsets.only(left: spacingM), - child: Text( - subtitle!, - style: Theme.of(context).textTheme.bodyMedium, + child: Semantics( + button: true, + child: InkWell( + onTap: onClick, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + child: SizedBox( + width: double.infinity, + height: OdsVerticalImageFirstCard._imageHeight, + child: ExcludeSemantics(child: image), ), ), - if (text != null && text!.isNotEmpty) Padding( padding: const EdgeInsets.only( - left: spacingM, right: spacingM, top: spacingS), + top: spacingM, left: spacingM), child: Text( - text!, + title, + style: Theme.of(context).textTheme.titleLarge, + ), + ), + if (subtitle != null) + Padding( + padding: const EdgeInsets.only(left: spacingM), + child: Text( + subtitle!, + style: Theme.of(context).textTheme.bodyMedium, + ), + ), + if (text != null && text!.isNotEmpty) + Padding( + padding: const EdgeInsets.only( + left: spacingM, right: spacingM, top: spacingS), + child: Text( + text!, + ), ), + ButtonBar( + alignment: MainAxisAlignment.start, + children: [ + if (firstButton != null) firstButton!, + if (secondButton != null) secondButton!, + ], ), - ButtonBar( - alignment: MainAxisAlignment.start, - children: [ - if (firstButton != null) firstButton!, - if (secondButton != null) secondButton!, - ], - ), - ], + ], + ), ), ), ), diff --git a/library/lib/components/lists/ods_list_item.dart b/library/lib/components/lists/ods_list_item.dart index 22967c3f..731a054a 100644 --- a/library/lib/components/lists/ods_list_item.dart +++ b/library/lib/components/lists/ods_list_item.dart @@ -105,26 +105,29 @@ class OdsListItem extends StatelessWidget { onChanged: onChangedCheckBox, ), if (onChangedSwitch == null && onChangedCheckBox == null) - ListTile( - leading: image, - title: Text( - title, - style: Theme.of(context).textTheme.titleSmall, - ), - subtitle: subtitle != null - ? Text( - subtitle!, - style: Theme.of(context).textTheme.bodyLarge, - ) - : null, - trailing: Row( - mainAxisSize: MainAxisSize.min, - children: [ - if (text != null) Text(text!), - if (icon != null) icon!, // icon-2 - ], + Semantics( + button: onClick != null ? true : false, + child: ListTile( + leading: image, + title: Text( + title, + style: Theme.of(context).textTheme.titleSmall, + ), + subtitle: subtitle != null + ? Text( + subtitle!, + style: Theme.of(context).textTheme.bodyMedium, + ) + : null, + trailing: Row( + mainAxisSize: MainAxisSize.min, + children: [ + if (text != null) Text(text!), + if (icon != null) icon!, // icon-2 + ], + ), + onTap: onClick, ), - onTap: onClick, ), if (divider != null) const OdsDivider(), ],