rapido-css 0.2.3 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8ca2389a157a912440570a43680e100fa7a7cb98
4
- data.tar.gz: fb3783dd6c8717229504c173b68f68fea364bfb5
3
+ metadata.gz: 175ab571f0547f98072a75c2b2f7f6e359def868
4
+ data.tar.gz: a87ea01a71efa43b4c19b94bf0df16c0151dfa38
5
5
  SHA512:
6
- metadata.gz: 612a73530d6381ad65f7d295b411e16445bda20e420c212cb9d09f7d86e943f73641d0205cba5041f378417f8e3a002fa7a7be40d965e81cbe3ca6d16757ae49
7
- data.tar.gz: 2f7ce89591e5f114ffcf057d95b052e6658c73a8b50b7c28eef51812e31cbe0958ca5295dd48c0ff231df98754d403e0d70570267b80ba2477b9d0d70aefa0e6
6
+ metadata.gz: 97b8163c46687c590008294e54e0569196b247811b9cf35b795459deef370d348757fa61428e05ff40027fa954b1eb5a88641c52d6016d5f91095c7d94d7c0e0
7
+ data.tar.gz: b2018c2365e31f40bfc83aaf23f39dadb23fac615ca8eac32d4884c5e57d6509a8dd4d108c4af78b3eaa967d7065e15684620cd83ec16e0238f7a33fc3d0fdde
@@ -25,7 +25,7 @@ Styleguide 2
25
25
  list-style: none;
26
26
  @extend %breadcrumbs !optional;
27
27
 
28
- > li { @extend %display-inline-block; }
28
+ > li { @extend %inline-block; }
29
29
 
30
30
  .current {@extend %breadcrumbs__current !optional;}
31
31
  }
@@ -18,8 +18,8 @@ Styleguide 4
18
18
  @if $button-groups {
19
19
 
20
20
  .btn-group {
21
- @extend %clearfix;
22
- @extend %display-inline-block;
21
+ @extend %pie-clearfix;
22
+ @extend %inline-block;
23
23
  @extend %no-margin;
24
24
 
25
25
  > * {
@@ -26,7 +26,7 @@ Styleguide 3
26
26
  border-style: solid;
27
27
  border-width: $input-border;
28
28
  @extend %cursor-pointer;
29
- @extend %display-inline-block;
29
+ @extend %inline-block;
30
30
  line-height: 1em;
31
31
  margin-bottom: 0;
32
32
  @extend %text-align-center;
@@ -44,7 +44,7 @@ Styleguide 5
44
44
  position: relative;
45
45
  overflow: hidden;
46
46
  @include perspective(1000);
47
- @extend %display-inline-block;
47
+ @extend %inline-block;
48
48
 
49
49
 
50
50
  &:nth-child(2n) {
@@ -56,7 +56,7 @@ Styleguide 7
56
56
  .dropdown,
57
57
  .dropdown__toggle {
58
58
  position: relative;
59
- @extend %display-inline-block;
59
+ @extend %inline-block;
60
60
  }
61
61
 
62
62
  .dropdown__toggle:focus { outline: 0; }
@@ -34,7 +34,7 @@ Styleguide 8
34
34
  @if $forms {
35
35
 
36
36
  form {
37
- @extend %clearfix;
37
+ @extend %pie-clearfix;
38
38
  margin: 0 0 rhythm();
39
39
  }
40
40
 
@@ -90,7 +90,7 @@ input[type="url"],
90
90
  input[type="search"],
91
91
  input[type="tel"],
92
92
  input[type="color"] {
93
- @extend %display-inline-block;
93
+ @extend %inline-block;
94
94
  padding: 0 $input-padding-side;
95
95
  height: $input-height;
96
96
  border-width: $input-border;
@@ -103,7 +103,7 @@ input[type="color"] {
103
103
  }
104
104
 
105
105
  select {
106
- @extend %display-inline-block;
106
+ @extend %inline-block;
107
107
  }
108
108
 
109
109
  input,
@@ -179,9 +179,9 @@ select:focus:invalid {
179
179
  .form__group + .form__group { margin-top: em($control-margin-bottom); }
180
180
 
181
181
  .form__controls {
182
- @extend %clearfix;
182
+ @extend %pie-clearfix;
183
183
  position: relative;
184
- @extend %display-inline-block;
184
+ @extend %inline-block;
185
185
  }
186
186
 
187
187
 
@@ -243,7 +243,7 @@ Styleguide 8.2
243
243
  }
244
244
  .form__radio.inline,
245
245
  .form__checkbox.inline {
246
- @extend %display-inline-block;
246
+ @extend %inline-block;
247
247
  }
248
248
  .form__radio.inline + .form__radio.inline,
249
249
  .form__checkbox.inline + .form__checkbox.inline {
@@ -289,7 +289,7 @@ Styleguide 8.3
289
289
  @extend %select !optional; // Backward compatibility
290
290
  @extend %form__select !optional;
291
291
  @include border-radius($base-border-radius);
292
- @extend %display-inline-block;
292
+ @extend %inline-block;
293
293
  border-style: solid;
294
294
  border-width: $input-border;
295
295
  @extend %cursor-pointer;
@@ -391,7 +391,7 @@ Styleguide 8.5
391
391
  padding: rhythm(.5) 0 0;
392
392
  }
393
393
  .form__help--inline {
394
- @extend %display-inline-block;
394
+ @extend %inline-block;
395
395
  vertical-align: middle;
396
396
  padding-left: 5px;
397
397
  }
@@ -498,7 +498,7 @@ Styleguide 8.8
498
498
  */
499
499
 
500
500
  .form__addon {
501
- @extend %display-inline-block;
501
+ @extend %inline-block;
502
502
  width: auto;
503
503
  min-width: em(16px);
504
504
  padding: $input-padding;
@@ -561,7 +561,7 @@ Styleguide 8.9
561
561
  margin-bottom: rhythm(1);
562
562
  border-top: 1px solid #e5e5e5;
563
563
  clear: both;
564
- @extend %clearfix;
564
+ @extend %pie-clearfix;
565
565
  }
566
566
 
567
567
  .form__group.form__actions {
@@ -751,7 +751,7 @@ Styleguide 8.10.1
751
751
  }
752
752
 
753
753
  .form__label {
754
- @extend %display-inline-block;
754
+ @extend %inline-block;
755
755
  padding-right: 1em;
756
756
  margin-bottom: 0;
757
757
  }
@@ -782,7 +782,7 @@ Styleguide 8.10.1
782
782
 
783
783
  .form__group {
784
784
  @extend %no-padding;
785
- @extend %display-inline-block;
785
+ @extend %inline-block;
786
786
  }
787
787
 
788
788
  .form__group + .form__group {
@@ -793,7 +793,7 @@ Styleguide 8.10.1
793
793
  @extend %no-border;
794
794
  @extend %no-padding;
795
795
  @extend %no-margin;
796
- @extend %display-inline-block;
796
+ @extend %inline-block;
797
797
  }
798
798
 
799
799
  }
@@ -17,7 +17,7 @@ Styleguide 10
17
17
  .badge,
18
18
  .pill {
19
19
  @extend %pill !optional;
20
- @extend %display-inline-block;
20
+ @extend %inline-block;
21
21
  padding: $pills-padding;
22
22
  vertical-align: baseline;
23
23
  white-space: nowrap;
@@ -220,7 +220,7 @@ Styleguide 11
220
220
  .child {
221
221
  @include alpha-color(#000, .8, background);
222
222
  @include border-radius($base-border-radius);
223
- @extend %display-inline-block;
223
+ @extend %inline-block;
224
224
  margin-right: -100%;
225
225
  padding: em(2px) em($input-padding-side);
226
226
  color: #FFF;
@@ -36,14 +36,14 @@ Styleguide 12
36
36
  @if $navs {
37
37
 
38
38
  .nav {
39
- @extend %clearfix;
40
- @extend %display-inline-block;
39
+ @extend %pie-clearfix;
40
+ @extend %inline-block;
41
41
  margin-bottom: rhythm();
42
42
  position: relative;
43
43
 
44
44
  &, ul {
45
- @extend %clearfix;
46
- @extend %list-style-none;
45
+ @extend %pie-clearfix;
46
+ @extend .list-style-none;
47
47
  margin-bottom: 0;
48
48
  }
49
49
 
@@ -52,7 +52,7 @@ Styleguide 12
52
52
 
53
53
  > a {
54
54
  @extend .transition;
55
- @extend %display-inline-block;
55
+ @extend %inline-block;
56
56
  line-height: 1em;
57
57
 
58
58
  &:hover, &:focus {
@@ -31,7 +31,7 @@ Include this js after including rapido.js.
31
31
 
32
32
  **Options** (with default values):
33
33
 
34
- toggleClass: offcanvas__menu--open
34
+ toggleClass: .offcanvas__menu--open
35
35
  containerClass: .offcanvas__container
36
36
  menuClass: .offcanvas__menu
37
37
 
@@ -20,7 +20,7 @@ Styleguide 13
20
20
 
21
21
 
22
22
  .pager {
23
- @extend %clearfix;
23
+ @extend %pie-clearfix;
24
24
  list-style: none;
25
25
  margin: rhythm() 0;
26
26
  @extend %text-align-center;
@@ -33,7 +33,7 @@ Styleguide 13
33
33
  @include border-radius($base-border-radius);
34
34
  border-style: solid;
35
35
  border-width: 1px;
36
- @extend %display-inline-block;
36
+ @extend %inline-block;
37
37
  line-height: 1em;
38
38
  padding: $pager-padding;
39
39
  @extend %pager--btn !optional;
@@ -32,9 +32,9 @@ Styleguide 14
32
32
  clear: both;
33
33
 
34
34
  > * {
35
- @extend %clearfix;
35
+ @extend %pie-clearfix;
36
36
  @include border-radius($base-border-radius);
37
- @extend %display-inline-block;
37
+ @extend %inline-block;
38
38
  margin-bottom: 0;
39
39
  margin-left: $input-border;
40
40
 
@@ -44,7 +44,7 @@ Styleguide 14
44
44
 
45
45
  a,
46
46
  span {
47
- @extend %display-inline-block;
47
+ @extend %inline-block;
48
48
  padding: $pagination-padding;
49
49
  line-height: 1em;
50
50
  @extend %text-decoration-none;
@@ -64,7 +64,7 @@ Styleguide 8.7
64
64
  .picker__month,
65
65
  .picker__select--year
66
66
  .picker__select--month {
67
- @extend %display-inline-block;
67
+ @extend %inline-block;
68
68
  margin: 0 .25em;
69
69
  }
70
70
 
@@ -78,9 +78,9 @@ Styleguide 16
78
78
  }
79
79
 
80
80
  .bx-pager-item {
81
- @extend %display-inline-block;
81
+ @extend %inline-block;
82
82
  a {
83
- @extend %display-inline-block;
83
+ @extend %inline-block;
84
84
  // @include hide-text;
85
85
  }
86
86
  }
@@ -102,7 +102,7 @@ Styleguide 16
102
102
  width: 100%;
103
103
 
104
104
  span {
105
- @extend %display-inline-block;
105
+ @extend %inline-block;
106
106
  @extend %slider__caption !optional;
107
107
  }
108
108
  }
@@ -55,7 +55,7 @@ Styleguide 21
55
55
  @extend %tab__nav !optional;
56
56
 
57
57
  li {
58
- @extend %display-inline-block;
58
+ @extend %inline-block;
59
59
 
60
60
  a {
61
61
  line-height: 1em;
@@ -2,7 +2,7 @@
2
2
 
3
3
  Tooltips
4
4
 
5
- Add simple tooltips to any element.
5
+ Add simple tooltips to any element. Positions available: top, right, bottom, left.
6
6
 
7
7
  Script required: **rapido.js**.
8
8
 
@@ -36,7 +36,7 @@ body {
36
36
 
37
37
  img {
38
38
  max-width: 100%;
39
- @extend %display-inline-block;
39
+ @extend %inline-block;
40
40
  }
41
41
 
42
42
  a, button, textarea, input { outline: none; }
@@ -214,7 +214,7 @@ ol.inline {
214
214
  margin-left: 0;
215
215
  list-style: none;
216
216
  > li {
217
- @extend %display-inline-block;
217
+ @extend %inline-block;
218
218
  }
219
219
  }
220
220
 
@@ -256,7 +256,7 @@ Styleguide 22.4.1
256
256
  */
257
257
 
258
258
  .dl-horizontal {
259
- @extend %clearfix;
259
+ @extend %pie-clearfix;
260
260
  dt {
261
261
  @include text-overflow();
262
262
  clear: left;
@@ -20,25 +20,24 @@ Simple divider class used in some components (like dropdowns).
20
20
 
21
21
  .divider
22
22
 
23
+ Others:
24
+ .clearfix
25
+ .left
26
+ .right
27
+ .inline-block
28
+
23
29
  Styleguide 25.1
24
30
 
25
31
  */
26
32
 
27
- .clearfix {
28
- &:after {
29
- content: "";
30
- @extend %display-table;
31
- clear: both;
32
- }
33
- }
33
+ %inline-block {@include inline-block;}
34
34
 
35
- .transition {
36
- @include transition();
37
- }
38
-
39
- .divider {
40
- @include nav-divider();
41
- }
35
+ .clearfix { @extend %pie-clearfix }
36
+ .transition { @include transition(); }
37
+ .divider { @include nav-divider(); }
38
+ .left { @extend %float-left; }
39
+ .right { @extend %float-right; }
40
+ .inline-block { @extend %inline-block; }
42
41
 
43
42
  /*
44
43
 
@@ -59,7 +58,7 @@ Styleguide 25.2
59
58
  */
60
59
 
61
60
  .wrapper, .w {
62
- @extend %clearfix;
61
+ @extend %pie-clearfix;
63
62
  margin: 0 auto;
64
63
  max-width: $desk-end;
65
64
  padding-left: em($wrapper-padding);
@@ -67,16 +66,11 @@ Styleguide 25.2
67
66
  }
68
67
 
69
68
  .fixed-wrapper, .fw {
70
- @extend %clearfix;
69
+ @extend %pie-clearfix;
71
70
  margin: 0 auto;
72
71
  width: $desk-end;
73
72
  }
74
73
 
75
-
76
- .left {@extend %float-left;}
77
- .right {@extend %float-right;}
78
-
79
-
80
74
  /*
81
75
 
82
76
  Elements width
@@ -152,7 +146,7 @@ Styleguide 25.5
152
146
  .s {
153
147
  @include transition(none);
154
148
  content: "";
155
- @extend %display-inline-block;
149
+ @extend %inline-block;
156
150
  font-style:normal;
157
151
  overflow:hidden;
158
152
  text-align:center;
@@ -20,7 +20,7 @@ Icon Fonts
20
20
  }
21
21
 
22
22
  .branico {
23
- @extend %display-inline-block;
23
+ @extend %inline-block;
24
24
  font-family: 'branico';
25
25
  }
26
26
  }
@@ -40,7 +40,7 @@ Icon Fonts
40
40
  }
41
41
 
42
42
  .entypo {
43
- @extend %display-inline-block;
43
+ @extend %inline-block;
44
44
  font-family: 'entypo';
45
45
  }
46
46
  }
@@ -60,7 +60,7 @@ Icon Fonts
60
60
  }
61
61
 
62
62
  .fontawesome {
63
- @extend %display-inline-block;
63
+ @extend %inline-block;
64
64
  font-family: 'FontAwesome';
65
65
  }
66
66
  }
@@ -80,7 +80,7 @@ Icon Fonts
80
80
  }
81
81
 
82
82
  .fontelico {
83
- @extend %display-inline-block;
83
+ @extend %inline-block;
84
84
  font-family: 'fontelico';
85
85
  }
86
86
  }
@@ -100,7 +100,7 @@ Icon Fonts
100
100
  }
101
101
 
102
102
  .maki {
103
- @extend %display-inline-block;
103
+ @extend %inline-block;
104
104
  font-family: 'maki';
105
105
  }
106
106
  }
@@ -120,7 +120,7 @@ Icon Fonts
120
120
  }
121
121
 
122
122
  .openwebicons {
123
- @extend %display-inline-block;
123
+ @extend %inline-block;
124
124
  font-family: 'OpenWeb Icons';
125
125
  }
126
126
  }
@@ -140,7 +140,7 @@ Icon Fonts
140
140
  }
141
141
 
142
142
  .typicons {
143
- @extend %display-inline-block;
143
+ @extend %inline-block;
144
144
  font-family: 'Typicons';
145
145
  }
146
146
  }
@@ -160,7 +160,7 @@ Icon Fonts
160
160
  }
161
161
 
162
162
  .zocial {
163
- @extend %display-inline-block;
163
+ @extend %inline-block;
164
164
  font-family: 'zocial';
165
165
  }
166
166
  }
@@ -482,13 +482,13 @@ Styleguide 26.15
482
482
 
483
483
  @include box-shadow(0 1px 3px $color);
484
484
  border:5px solid #fff;
485
- @extend %display-inline-block;
485
+ @extend %inline-block;
486
486
  line-height: 0;
487
487
  position: relative;
488
488
 
489
489
  &:before,
490
490
  &:after {
491
- // @extend %no-border;
491
+ // @extend %no-border;
492
492
  background-color: $lightColor;
493
493
  content: '';
494
494
  z-index: -1;
@@ -591,7 +591,7 @@ Styleguide 26.18
591
591
  */
592
592
 
593
593
  @mixin icon-font($char: '\f013', $font: 'FontAwesome') {
594
- @extend %display-inline-block;
594
+ @extend %inline-block;
595
595
  font-family: $font;
596
596
  content: "#{$char}";
597
597
  }
@@ -699,19 +699,27 @@ Styleguide 26.21
699
699
  $media: null
700
700
  ) {
701
701
 
702
- @if (type-of($media) == 'string') { // Failback for =< 2.2.1
703
- @include media($media) {
704
- @include span($cols of $cols-container $from);
705
- @if $omega { @include omega; }
706
- @if $nth-omega { @include nth-omega($nth-omega); }
707
- }
708
- } @else {
702
+ @if ($media) {
703
+
704
+ // Failback for =< 2.2.1
705
+ @if $media == 'palm' { $media: $palm }
706
+ @if $media == 'lap' { $media: $lap }
707
+ @if $media == 'lap-and-up'{ $media: $lap-and-up }
708
+ @if $media == 'portable' { $media: $portable }
709
+ @if $media == 'desk' { $media: $desk }
710
+
709
711
  @include breakpoint($media) {
710
712
  @include span($cols of $cols-container $from);
711
713
  @if $omega { @include omega; }
712
714
  @if $nth-omega { @include nth-omega($nth-omega); }
713
715
  }
716
+
717
+ } @else {
718
+ @include span($cols of $cols-container $from);
719
+ @if $omega { @include omega; }
720
+ @if $nth-omega { @include nth-omega($nth-omega); }
714
721
  }
722
+
715
723
  }
716
724
 
717
725
  /*
metadata CHANGED
@@ -1,69 +1,125 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rapido-css
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Raffaele Rasini
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-17 00:00:00.000000000 Z
11
+ date: 2014-03-22 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: sass
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '3.3'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '3.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: compass
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 1.0.0.alpha.18
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 1.0.0.alpha.18
13
41
  - !ruby/object:Gem::Dependency
14
42
  name: susy
15
43
  requirement: !ruby/object:Gem::Requirement
16
44
  requirements:
17
- - - ~>
45
+ - - ">="
18
46
  - !ruby/object:Gem::Version
19
47
  version: '2.0'
20
48
  type: :runtime
21
49
  prerelease: false
22
50
  version_requirements: !ruby/object:Gem::Requirement
23
51
  requirements:
24
- - - ~>
52
+ - - ">="
25
53
  - !ruby/object:Gem::Version
26
54
  version: '2.0'
27
55
  - !ruby/object:Gem::Dependency
28
56
  name: sass-media_query_combiner
29
57
  requirement: !ruby/object:Gem::Requirement
30
58
  requirements:
31
- - - ~>
59
+ - - ">="
32
60
  - !ruby/object:Gem::Version
33
61
  version: '0.0'
34
62
  type: :runtime
35
63
  prerelease: false
36
64
  version_requirements: !ruby/object:Gem::Requirement
37
65
  requirements:
38
- - - ~>
66
+ - - ">="
39
67
  - !ruby/object:Gem::Version
40
68
  version: '0.0'
41
69
  - !ruby/object:Gem::Dependency
42
70
  name: sass-globbing
43
71
  requirement: !ruby/object:Gem::Requirement
44
72
  requirements:
45
- - - ~>
73
+ - - ">="
46
74
  - !ruby/object:Gem::Version
47
75
  version: '1.1'
48
76
  type: :runtime
49
77
  prerelease: false
50
78
  version_requirements: !ruby/object:Gem::Requirement
51
79
  requirements:
52
- - - ~>
80
+ - - ">="
53
81
  - !ruby/object:Gem::Version
54
82
  version: '1.1'
83
+ - !ruby/object:Gem::Dependency
84
+ name: breakpoint
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '2.4'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '2.4'
55
97
  - !ruby/object:Gem::Dependency
56
98
  name: compass-placeholders
57
99
  requirement: !ruby/object:Gem::Requirement
58
100
  requirements:
59
- - - ~>
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '1.1'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '1.1'
111
+ - !ruby/object:Gem::Dependency
112
+ name: oily_png
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
60
116
  - !ruby/object:Gem::Version
61
117
  version: '1.1'
62
118
  type: :runtime
63
119
  prerelease: false
64
120
  version_requirements: !ruby/object:Gem::Requirement
65
121
  requirements:
66
- - - ~>
122
+ - - ">="
67
123
  - !ruby/object:Gem::Version
68
124
  version: '1.1'
69
125
  description: An easy and quick Sass + Compass + Susy + OOCSS + BEM prototyping framework.
@@ -126,17 +182,17 @@ require_paths:
126
182
  - lib
127
183
  required_ruby_version: !ruby/object:Gem::Requirement
128
184
  requirements:
129
- - - '>='
185
+ - - ">="
130
186
  - !ruby/object:Gem::Version
131
187
  version: '0'
132
188
  required_rubygems_version: !ruby/object:Gem::Requirement
133
189
  requirements:
134
- - - '>='
190
+ - - ">="
135
191
  - !ruby/object:Gem::Version
136
192
  version: '0'
137
193
  requirements: []
138
194
  rubyforge_project:
139
- rubygems_version: 2.0.14
195
+ rubygems_version: 2.2.2
140
196
  signing_key:
141
197
  specification_version: 4
142
198
  summary: A quick css prototyping framework