adicao da taça do inter freguesias , tenho que fazer alterações , ainda so mostra dados , quero organizalos !!!!!
This commit is contained in:
@@ -69,7 +69,7 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
// Passing each menu ID as a set of Ids because each
|
// Passing each menu ID as a set of Ids because each
|
||||||
// menu should be considered as top level destinations.
|
// menu should be considered as top level destinations.
|
||||||
mAppBarConfiguration = new AppBarConfiguration.Builder(
|
mAppBarConfiguration = new AppBarConfiguration.Builder(
|
||||||
R.id.nav_home, R.id.nav_gallery, R.id.nav_definicoes,
|
R.id.nav_home, R.id.nav_gallery, R.id.nav_cup, R.id.nav_definicoes,
|
||||||
R.id.nav_live_games, R.id.nav_clubs, R.id.nav_top_scorers, R.id.nav_news)
|
R.id.nav_live_games, R.id.nav_clubs, R.id.nav_top_scorers, R.id.nav_news)
|
||||||
.setOpenableLayout(drawer)
|
.setOpenableLayout(drawer)
|
||||||
.build();
|
.build();
|
||||||
|
|||||||
164
app/src/main/java/com/example/vdcscore/ui/cup/CupFragment.java
Normal file
164
app/src/main/java/com/example/vdcscore/ui/cup/CupFragment.java
Normal file
@@ -0,0 +1,164 @@
|
|||||||
|
package com.example.vdcscore.ui.cup;
|
||||||
|
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.fragment.app.Fragment;
|
||||||
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
|
|
||||||
|
import com.example.vdcscore.R;
|
||||||
|
import com.example.vdcscore.databinding.FragmentCupBinding;
|
||||||
|
import com.example.vdcscore.ui.gallery.Match;
|
||||||
|
import com.example.vdcscore.ui.gallery.Matchday;
|
||||||
|
import com.example.vdcscore.ui.gallery.MatchesAdapter;
|
||||||
|
import com.google.firebase.database.DataSnapshot;
|
||||||
|
import com.google.firebase.database.DatabaseError;
|
||||||
|
import com.google.firebase.database.DatabaseReference;
|
||||||
|
import com.google.firebase.database.FirebaseDatabase;
|
||||||
|
import com.google.firebase.database.ValueEventListener;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class CupFragment extends Fragment {
|
||||||
|
|
||||||
|
private FragmentCupBinding binding;
|
||||||
|
private MatchesAdapter adapter;
|
||||||
|
private DatabaseReference mDatabase;
|
||||||
|
private List<Matchday> phasesList = new ArrayList<>(); // Reusing Matchday as generalized 'Phase'
|
||||||
|
private int currentPhaseIndex = 0;
|
||||||
|
private String currentCategory = "seniores";
|
||||||
|
private ValueEventListener currentListener;
|
||||||
|
|
||||||
|
public View onCreateView(@NonNull LayoutInflater inflater,
|
||||||
|
ViewGroup container, Bundle savedInstanceState) {
|
||||||
|
|
||||||
|
binding = FragmentCupBinding.inflate(inflater, container, false);
|
||||||
|
View root = binding.getRoot();
|
||||||
|
|
||||||
|
// Initialize RecyclerView with reused MatchesAdapter
|
||||||
|
adapter = new MatchesAdapter();
|
||||||
|
binding.recyclerPhases.setLayoutManager(new LinearLayoutManager(getContext()));
|
||||||
|
binding.recyclerPhases.setAdapter(adapter);
|
||||||
|
|
||||||
|
// Setup Toggle Group
|
||||||
|
binding.toggleGroupCategory.addOnButtonCheckedListener((group, checkedId, isChecked) -> {
|
||||||
|
if (isChecked) {
|
||||||
|
if (checkedId == R.id.btn_seniores) {
|
||||||
|
currentCategory = "seniores";
|
||||||
|
} else if (checkedId == R.id.btn_juniores) {
|
||||||
|
currentCategory = "juniores";
|
||||||
|
}
|
||||||
|
fetchPhases();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Setup Navigation Buttons
|
||||||
|
binding.btnPrevPhase.setOnClickListener(v -> {
|
||||||
|
if (currentPhaseIndex > 0) {
|
||||||
|
currentPhaseIndex--;
|
||||||
|
updateUI();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
binding.btnNextPhase.setOnClickListener(v -> {
|
||||||
|
if (currentPhaseIndex < phasesList.size() - 1) {
|
||||||
|
currentPhaseIndex++;
|
||||||
|
updateUI();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Initial Fetch
|
||||||
|
fetchPhases();
|
||||||
|
|
||||||
|
return root;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void fetchPhases() {
|
||||||
|
if (mDatabase != null && currentListener != null) {
|
||||||
|
mDatabase.removeEventListener(currentListener);
|
||||||
|
}
|
||||||
|
|
||||||
|
binding.textPhaseName.setText("Carregando...");
|
||||||
|
mDatabase = FirebaseDatabase.getInstance().getReference("taça").child(currentCategory);
|
||||||
|
|
||||||
|
currentListener = new ValueEventListener() {
|
||||||
|
@Override
|
||||||
|
public void onDataChange(@NonNull DataSnapshot snapshot) {
|
||||||
|
if (binding == null) return;
|
||||||
|
|
||||||
|
phasesList.clear();
|
||||||
|
for (DataSnapshot phaseSnap : snapshot.getChildren()) {
|
||||||
|
String name = phaseSnap.getKey();
|
||||||
|
List<Match> matches = new ArrayList<>();
|
||||||
|
|
||||||
|
for (DataSnapshot matchSnap : phaseSnap.getChildren()) {
|
||||||
|
Match match = matchSnap.getValue(Match.class);
|
||||||
|
if (match != null) {
|
||||||
|
match.setId(matchSnap.getKey());
|
||||||
|
matches.add(match);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!matches.isEmpty()) {
|
||||||
|
phasesList.add(new Matchday(name, matches));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sort alphabetically/chronologically as they are phrases like "1ª Fase", "Oitavos", etc.
|
||||||
|
Collections.sort(phasesList, (p1, p2) -> p1.getName().compareTo(p2.getName()));
|
||||||
|
|
||||||
|
if (phasesList.isEmpty()) {
|
||||||
|
binding.textPhaseName.setText("Sem fases");
|
||||||
|
adapter.setMatches(new ArrayList<>());
|
||||||
|
} else {
|
||||||
|
if (currentPhaseIndex >= phasesList.size()) {
|
||||||
|
currentPhaseIndex = phasesList.size() - 1;
|
||||||
|
}
|
||||||
|
// In case initial load or filter swap, bound index.
|
||||||
|
if (currentPhaseIndex < 0) currentPhaseIndex = 0;
|
||||||
|
updateUI();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCancelled(@NonNull DatabaseError error) {
|
||||||
|
if (getContext() != null) {
|
||||||
|
Toast.makeText(getContext(), "Erro ao carregar taça: " + error.getMessage(), Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
mDatabase.addValueEventListener(currentListener);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateUI() {
|
||||||
|
if (phasesList.isEmpty()) return;
|
||||||
|
|
||||||
|
Matchday currentPhase = phasesList.get(currentPhaseIndex);
|
||||||
|
binding.textPhaseName.setText(currentPhase.getName());
|
||||||
|
adapter.setMatches(currentPhase.getMatches());
|
||||||
|
|
||||||
|
// Enable/Disable navigation buttons
|
||||||
|
binding.btnPrevPhase.setEnabled(currentPhaseIndex > 0);
|
||||||
|
binding.btnNextPhase.setEnabled(currentPhaseIndex < phasesList.size() - 1);
|
||||||
|
|
||||||
|
// Visual feedback
|
||||||
|
binding.btnPrevPhase.setAlpha(currentPhaseIndex > 0 ? 1.0f : 0.3f);
|
||||||
|
binding.btnNextPhase.setAlpha(currentPhaseIndex < phasesList.size() - 1 ? 1.0f : 0.3f);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDestroyView() {
|
||||||
|
super.onDestroyView();
|
||||||
|
if (mDatabase != null && currentListener != null) {
|
||||||
|
mDatabase.removeEventListener(currentListener);
|
||||||
|
}
|
||||||
|
binding = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,8 +6,8 @@ public class Match {
|
|||||||
private String id;
|
private String id;
|
||||||
private String homeName;
|
private String homeName;
|
||||||
private String awayName;
|
private String awayName;
|
||||||
private Integer homeScore;
|
private Object homeScore;
|
||||||
private Integer awayScore;
|
private Object awayScore;
|
||||||
private String date;
|
private String date;
|
||||||
private String time;
|
private String time;
|
||||||
private String homeLogo;
|
private String homeLogo;
|
||||||
@@ -87,22 +87,22 @@ public class Match {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@PropertyName("home_golos")
|
@PropertyName("home_golos")
|
||||||
public Integer getHomeScore() {
|
public Object getHomeScore() {
|
||||||
return homeScore;
|
return homeScore;
|
||||||
}
|
}
|
||||||
|
|
||||||
@PropertyName("home_golos")
|
@PropertyName("home_golos")
|
||||||
public void setHomeScore(Integer homeScore) {
|
public void setHomeScore(Object homeScore) {
|
||||||
this.homeScore = homeScore;
|
this.homeScore = homeScore;
|
||||||
}
|
}
|
||||||
|
|
||||||
@PropertyName("away_golos")
|
@PropertyName("away_golos")
|
||||||
public Integer getAwayScore() {
|
public Object getAwayScore() {
|
||||||
return awayScore;
|
return awayScore;
|
||||||
}
|
}
|
||||||
|
|
||||||
@PropertyName("away_golos")
|
@PropertyName("away_golos")
|
||||||
public void setAwayScore(Integer awayScore) {
|
public void setAwayScore(Object awayScore) {
|
||||||
this.awayScore = awayScore;
|
this.awayScore = awayScore;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
5
app/src/main/res/color/nav_item_bg.xml
Normal file
5
app/src/main/res/color/nav_item_bg.xml
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item android:state_checked="true" android:color="@color/brand_dim" />
|
||||||
|
<item android:color="@android:color/transparent" />
|
||||||
|
</selector>
|
||||||
5
app/src/main/res/color/nav_item_tint.xml
Normal file
5
app/src/main/res/color/nav_item_tint.xml
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item android:state_checked="true" android:color="@color/brand" />
|
||||||
|
<item android:color="@color/text_2" />
|
||||||
|
</selector>
|
||||||
5
app/src/main/res/color/toggle_bg_color.xml
Normal file
5
app/src/main/res/color/toggle_bg_color.xml
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item android:state_checked="true" android:color="@color/brand" />
|
||||||
|
<item android:color="@color/bg_surface" />
|
||||||
|
</selector>
|
||||||
5
app/src/main/res/color/toggle_text_color.xml
Normal file
5
app/src/main/res/color/toggle_text_color.xml
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item android:state_checked="true" android:color="@color/bg_base" />
|
||||||
|
<item android:color="@color/text_2" />
|
||||||
|
</selector>
|
||||||
5
app/src/main/res/drawable-night/bg_nav_header_wave.xml
Normal file
5
app/src/main/res/drawable-night/bg_nav_header_wave.xml
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shape="rectangle">
|
||||||
|
<solid android:color="@color/bg_surface" />
|
||||||
|
</shape>
|
||||||
14
app/src/main/res/drawable/bg_nav_header_wave.xml
Normal file
14
app/src/main/res/drawable/bg_nav_header_wave.xml
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="300dp"
|
||||||
|
android:height="160dp"
|
||||||
|
android:viewportWidth="300"
|
||||||
|
android:viewportHeight="160">
|
||||||
|
<!-- Background container filling (standard surface) -->
|
||||||
|
<path
|
||||||
|
android:fillColor="@color/bg_surface"
|
||||||
|
android:pathData="M0,0h300v160h-300z" />
|
||||||
|
<!-- Wave header section using our Elevated Dark Background -->
|
||||||
|
<path
|
||||||
|
android:fillColor="#111827"
|
||||||
|
android:pathData="M0,0 L300,0 L300,120 C200,160 100,100 0,140 Z" />
|
||||||
|
</vector>
|
||||||
15
app/src/main/res/drawable/brand_icon_bg.xml
Normal file
15
app/src/main/res/drawable/brand_icon_bg.xml
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="38dp"
|
||||||
|
android:height="38dp"
|
||||||
|
android:viewportWidth="38"
|
||||||
|
android:viewportHeight="38">
|
||||||
|
<!-- Rounded Background: radius 10dp -->
|
||||||
|
<path
|
||||||
|
android:fillColor="@color/brand"
|
||||||
|
android:pathData="M 6,0 A 6,6 0 0 0 0,6 L 0,32 A 6,6 0 0 0 6,38 L 32,38 A 6,6 0 0 0 38,32 L 38,6 A 6,6 0 0 0 32,0 Z" />
|
||||||
|
<!-- Lightning Bolt Icon inside -->
|
||||||
|
<path
|
||||||
|
android:fillColor="@color/bg_base"
|
||||||
|
android:pathData="M21.5,8 L11.5,19.5 L17.5,19.5 L14.5,30 L26.5,17.5 L19.5,17.5 Z" />
|
||||||
|
</vector>
|
||||||
10
app/src/main/res/drawable/ic_cup.xml
Normal file
10
app/src/main/res/drawable/ic_cup.xml
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="24"
|
||||||
|
android:viewportHeight="24"
|
||||||
|
android:tint="#FFFFFF">
|
||||||
|
<path
|
||||||
|
android:fillColor="@android:color/white"
|
||||||
|
android:pathData="M19,5h-2L17,3L7,3v2L5,5c-1.1,0 -2,0.9 -2,2v1c0,2.55 1.92,4.63 4.39,4.94C8.09,14.23 9.79,15.34 11,15.82L11,19L8,19v2h8v-2h-3v-3.18c1.21,-0.48 2.91,-1.59 3.61,-2.88C19.08,12.63 21,10.55 21,8L21,7c0,-1.1 -0.9,-2 -2,-2zM5,8L5,7h2v3.82C5.84,10.4 5,9.3 5,8zM19,8c0,1.3 -0.84,2.4 -2,2.82L17,7h2v1z"/>
|
||||||
|
</vector>
|
||||||
21
app/src/main/res/drawable/ic_nav_classification.xml
Normal file
21
app/src/main/res/drawable/ic_nav_classification.xml
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="24"
|
||||||
|
android:viewportHeight="24"
|
||||||
|
android:tint="?attr/colorControlNormal">
|
||||||
|
<path
|
||||||
|
android:strokeWidth="2"
|
||||||
|
android:strokeColor="@android:color/white"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M4,6a2,2 0,0 1,2 -2h12a2,2 0,0 1,2 2v2a2,2 0,0 1,-2 2h-12a2,2 0,0 1,-2 -2z" />
|
||||||
|
<path
|
||||||
|
android:strokeWidth="2"
|
||||||
|
android:strokeColor="@android:color/white"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M4,14a2,2 0,0 1,2 -2h12a2,2 0,0 1,2 2v2a2,2 0,0 1,-2 2h-12a2,2 0,0 1,-2 -2z" />
|
||||||
|
</vector>
|
||||||
14
app/src/main/res/drawable/ic_nav_clubs.xml
Normal file
14
app/src/main/res/drawable/ic_nav_clubs.xml
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="24"
|
||||||
|
android:viewportHeight="24"
|
||||||
|
android:tint="?attr/colorControlNormal">
|
||||||
|
<path
|
||||||
|
android:strokeWidth="2"
|
||||||
|
android:strokeColor="@android:color/white"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M12,3a12,12 0,0 0,8.5 3a12,12 0,0 1,-8.5 15a12,12 0,0 1,-8.5 -15a12,12 0,0 0,8.5 -3" />
|
||||||
|
</vector>
|
||||||
42
app/src/main/res/drawable/ic_nav_jornadas.xml
Normal file
42
app/src/main/res/drawable/ic_nav_jornadas.xml
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="24"
|
||||||
|
android:viewportHeight="24"
|
||||||
|
android:tint="?attr/colorControlNormal">
|
||||||
|
<path
|
||||||
|
android:strokeWidth="2"
|
||||||
|
android:strokeColor="@android:color/white"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M4,7a2,2 0,0 1,2 -2h12a2,2 0,0 1,2 2v12a2,2 0,0 1,-2 2h-12a2,2 0,0 1,-2 -2v-12" />
|
||||||
|
<path
|
||||||
|
android:strokeWidth="2"
|
||||||
|
android:strokeColor="@android:color/white"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M16,3v4" />
|
||||||
|
<path
|
||||||
|
android:strokeWidth="2"
|
||||||
|
android:strokeColor="@android:color/white"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M8,3v4" />
|
||||||
|
<path
|
||||||
|
android:strokeWidth="2"
|
||||||
|
android:strokeColor="@android:color/white"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M4,11h16" />
|
||||||
|
<path
|
||||||
|
android:strokeWidth="2"
|
||||||
|
android:strokeColor="@android:color/white"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M8,15h2v2h-2z" />
|
||||||
|
</vector>
|
||||||
14
app/src/main/res/drawable/ic_nav_live.xml
Normal file
14
app/src/main/res/drawable/ic_nav_live.xml
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="24"
|
||||||
|
android:viewportHeight="24"
|
||||||
|
android:tint="?attr/colorControlNormal">
|
||||||
|
<path
|
||||||
|
android:strokeWidth="2"
|
||||||
|
android:strokeColor="@android:color/white"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M13,3v7h6l-8,11v-7h-6z" />
|
||||||
|
</vector>
|
||||||
35
app/src/main/res/drawable/ic_nav_news.xml
Normal file
35
app/src/main/res/drawable/ic_nav_news.xml
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="24"
|
||||||
|
android:viewportHeight="24"
|
||||||
|
android:tint="?attr/colorControlNormal">
|
||||||
|
<path
|
||||||
|
android:strokeWidth="2"
|
||||||
|
android:strokeColor="@android:color/white"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M16,6h3a1,1 0,0 1,1 1v11a2,2 0,0 1,-4 0v-13a1,1 0,0 0,-1 -1h-10a1,1 0,0 0,-1 1v12a3,3 0,0 0,3 3h11" />
|
||||||
|
<path
|
||||||
|
android:strokeWidth="2"
|
||||||
|
android:strokeColor="@android:color/white"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M8,8h4" />
|
||||||
|
<path
|
||||||
|
android:strokeWidth="2"
|
||||||
|
android:strokeColor="@android:color/white"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M8,12h4" />
|
||||||
|
<path
|
||||||
|
android:strokeWidth="2"
|
||||||
|
android:strokeColor="@android:color/white"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M8,16h4" />
|
||||||
|
</vector>
|
||||||
28
app/src/main/res/drawable/ic_nav_scorers.xml
Normal file
28
app/src/main/res/drawable/ic_nav_scorers.xml
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="24"
|
||||||
|
android:viewportHeight="24"
|
||||||
|
android:tint="?attr/colorControlNormal">
|
||||||
|
<path
|
||||||
|
android:strokeWidth="2"
|
||||||
|
android:strokeColor="@android:color/white"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M3,13a1,1 0,0 1,1 -1h4a1,1 0,0 1,1 1v6a1,1 0,0 1,-1 1h-4a1,1 0,0 1,-1 -1z" />
|
||||||
|
<path
|
||||||
|
android:strokeWidth="2"
|
||||||
|
android:strokeColor="@android:color/white"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M15,9a1,1 0,0 1,1 -1h4a1,1 0,0 1,1 1v10a1,1 0,0 1,-1 1h-4a1,1 0,0 1,-1 -1z" />
|
||||||
|
<path
|
||||||
|
android:strokeWidth="2"
|
||||||
|
android:strokeColor="@android:color/white"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M9,5a1,1 0,0 1,1 -1h4a1,1 0,0 1,1 1v14a1,1 0,0 1,-1 1h-4a1,1 0,0 1,-1 -1z" />
|
||||||
|
</vector>
|
||||||
8
app/src/main/res/drawable/rank_1_badge.xml
Normal file
8
app/src/main/res/drawable/rank_1_badge.xml
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shape="oval">
|
||||||
|
<gradient
|
||||||
|
android:startColor="#FFD700"
|
||||||
|
android:endColor="#FFA000"
|
||||||
|
android:angle="45" />
|
||||||
|
</shape>
|
||||||
8
app/src/main/res/drawable/rank_2_badge.xml
Normal file
8
app/src/main/res/drawable/rank_2_badge.xml
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shape="oval">
|
||||||
|
<gradient
|
||||||
|
android:startColor="#E0E0E0"
|
||||||
|
android:endColor="#9E9E9E"
|
||||||
|
android:angle="45" />
|
||||||
|
</shape>
|
||||||
8
app/src/main/res/drawable/rank_3_badge.xml
Normal file
8
app/src/main/res/drawable/rank_3_badge.xml
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shape="oval">
|
||||||
|
<gradient
|
||||||
|
android:startColor="#CD7F32"
|
||||||
|
android:endColor="#8B4513"
|
||||||
|
android:angle="45" />
|
||||||
|
</shape>
|
||||||
BIN
app/src/main/res/font/bebas_neue.ttf
Normal file
BIN
app/src/main/res/font/bebas_neue.ttf
Normal file
Binary file not shown.
7
app/src/main/res/font/font_bebas_neue.xml
Normal file
7
app/src/main/res/font/font_bebas_neue.xml
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<font-family xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
|
<font
|
||||||
|
app:fontStyle="normal"
|
||||||
|
app:fontWeight="400"
|
||||||
|
app:font="@font/bebas_neue" />
|
||||||
|
</font-family>
|
||||||
11
app/src/main/res/font/font_ibm_plex_mono.xml
Normal file
11
app/src/main/res/font/font_ibm_plex_mono.xml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<font-family xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
|
<font
|
||||||
|
app:fontStyle="normal"
|
||||||
|
app:fontWeight="400"
|
||||||
|
app:font="@font/ibm_plex_mono" />
|
||||||
|
<font
|
||||||
|
app:fontStyle="normal"
|
||||||
|
app:fontWeight="500"
|
||||||
|
app:font="@font/ibm_plex_mono_medium" />
|
||||||
|
</font-family>
|
||||||
19
app/src/main/res/font/font_ibm_plex_sans.xml
Normal file
19
app/src/main/res/font/font_ibm_plex_sans.xml
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<font-family xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
|
<font
|
||||||
|
app:fontStyle="normal"
|
||||||
|
app:fontWeight="400"
|
||||||
|
app:font="@font/ibm_plex_sans" />
|
||||||
|
<font
|
||||||
|
app:fontStyle="normal"
|
||||||
|
app:fontWeight="500"
|
||||||
|
app:font="@font/ibm_plex_sans_medium" />
|
||||||
|
<font
|
||||||
|
app:fontStyle="normal"
|
||||||
|
app:fontWeight="600"
|
||||||
|
app:font="@font/ibm_plex_sans_semibold" />
|
||||||
|
<font
|
||||||
|
app:fontStyle="normal"
|
||||||
|
app:fontWeight="700"
|
||||||
|
app:font="@font/ibm_plex_sans_bold" />
|
||||||
|
</font-family>
|
||||||
BIN
app/src/main/res/font/ibm_plex_mono.ttf
Normal file
BIN
app/src/main/res/font/ibm_plex_mono.ttf
Normal file
Binary file not shown.
BIN
app/src/main/res/font/ibm_plex_mono_medium.ttf
Normal file
BIN
app/src/main/res/font/ibm_plex_mono_medium.ttf
Normal file
Binary file not shown.
1483
app/src/main/res/font/ibm_plex_sans.ttf
Normal file
1483
app/src/main/res/font/ibm_plex_sans.ttf
Normal file
File diff suppressed because one or more lines are too long
1483
app/src/main/res/font/ibm_plex_sans_bold.ttf
Normal file
1483
app/src/main/res/font/ibm_plex_sans_bold.ttf
Normal file
File diff suppressed because one or more lines are too long
1483
app/src/main/res/font/ibm_plex_sans_medium.ttf
Normal file
1483
app/src/main/res/font/ibm_plex_sans_medium.ttf
Normal file
File diff suppressed because one or more lines are too long
1483
app/src/main/res/font/ibm_plex_sans_semibold.ttf
Normal file
1483
app/src/main/res/font/ibm_plex_sans_semibold.ttf
Normal file
File diff suppressed because one or more lines are too long
39
app/src/main/res/layout/dialog_team_selector.xml
Normal file
39
app/src/main/res/layout/dialog_team_selector.xml
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="@drawable/bg_bottom_sheet_curve"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:paddingTop="12dp"
|
||||||
|
android:paddingBottom="24dp">
|
||||||
|
|
||||||
|
<!-- Handle visual cue -->
|
||||||
|
<View
|
||||||
|
android:layout_width="36dp"
|
||||||
|
android:layout_height="4dp"
|
||||||
|
android:layout_gravity="center_horizontal"
|
||||||
|
android:layout_marginBottom="16dp"
|
||||||
|
android:background="@drawable/custom_progress_bg"
|
||||||
|
android:backgroundTint="@color/border" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_horizontal"
|
||||||
|
android:layout_marginBottom="16dp"
|
||||||
|
android:fontFamily="@font/font_bebas_neue"
|
||||||
|
android:letterSpacing="0.05"
|
||||||
|
android:text="Selecionar Adversário"
|
||||||
|
android:textColor="@color/text_1"
|
||||||
|
android:textSize="20sp" />
|
||||||
|
|
||||||
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
|
android:id="@+id/recycler_comparison_teams"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:clipToPadding="false"
|
||||||
|
android:paddingBottom="8dp"
|
||||||
|
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
137
app/src/main/res/layout/fragment_cup.xml
Normal file
137
app/src/main/res/layout/fragment_cup.xml
Normal file
@@ -0,0 +1,137 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:background="@color/bg_base"
|
||||||
|
tools:context=".ui.cup.CupFragment">
|
||||||
|
|
||||||
|
<!-- Section Header -->
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:padding="16dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/text_title"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:fontFamily="@font/font_bebas_neue"
|
||||||
|
android:text="TAÇA"
|
||||||
|
android:textSize="28sp"
|
||||||
|
android:textColor="@color/text_1"
|
||||||
|
android:letterSpacing="0.04" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:fontFamily="@font/font_ibm_plex_sans"
|
||||||
|
android:text="Fases eliminatórias e confronto direto."
|
||||||
|
android:textColor="@color/text_2"
|
||||||
|
android:textSize="12sp"
|
||||||
|
android:layout_marginTop="4dp" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<!-- Category Toggle -->
|
||||||
|
<com.google.android.material.button.MaterialButtonToggleGroup
|
||||||
|
android:id="@+id/toggle_group_category"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginHorizontal="16dp"
|
||||||
|
android:layout_marginBottom="14dp"
|
||||||
|
app:singleSelection="true"
|
||||||
|
app:selectionRequired="true"
|
||||||
|
app:checkedButton="@+id/btn_seniores">
|
||||||
|
|
||||||
|
<com.google.android.material.button.MaterialButton
|
||||||
|
android:id="@+id/btn_seniores"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:fontFamily="@font/font_ibm_plex_sans"
|
||||||
|
android:text="Seniores"
|
||||||
|
android:textColor="@color/toggle_text_color"
|
||||||
|
android:textSize="12sp"
|
||||||
|
android:textStyle="bold"
|
||||||
|
app:backgroundTint="@color/toggle_bg_color"
|
||||||
|
app:strokeColor="@color/border"
|
||||||
|
app:strokeWidth="1dp"
|
||||||
|
app:cornerRadius="8dp"
|
||||||
|
android:textAllCaps="false" />
|
||||||
|
|
||||||
|
<com.google.android.material.button.MaterialButton
|
||||||
|
android:id="@+id/btn_juniores"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:fontFamily="@font/font_ibm_plex_sans"
|
||||||
|
android:text="Juniores"
|
||||||
|
android:textColor="@color/toggle_text_color"
|
||||||
|
android:textSize="12sp"
|
||||||
|
android:textStyle="bold"
|
||||||
|
app:backgroundTint="@color/toggle_bg_color"
|
||||||
|
app:strokeColor="@color/border"
|
||||||
|
app:strokeWidth="1dp"
|
||||||
|
app:cornerRadius="8dp"
|
||||||
|
android:textAllCaps="false" />
|
||||||
|
</com.google.android.material.button.MaterialButtonToggleGroup>
|
||||||
|
|
||||||
|
<!-- Phase Navigation -->
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:gravity="center"
|
||||||
|
android:background="@color/bg_surface"
|
||||||
|
android:paddingVertical="10dp"
|
||||||
|
android:paddingHorizontal="16dp">
|
||||||
|
|
||||||
|
<ImageButton
|
||||||
|
android:id="@+id/btn_prev_phase"
|
||||||
|
android:layout_width="36dp"
|
||||||
|
android:layout_height="36dp"
|
||||||
|
android:background="@drawable/bg_circle_light_gray"
|
||||||
|
android:src="@android:drawable/ic_media_previous"
|
||||||
|
android:contentDescription="Anterior"
|
||||||
|
app:tint="@color/text_2" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/text_phase_name"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:text="Carregando..."
|
||||||
|
android:fontFamily="@font/font_bebas_neue"
|
||||||
|
android:textSize="18sp"
|
||||||
|
android:letterSpacing="0.04"
|
||||||
|
android:gravity="center"
|
||||||
|
android:textColor="@color/text_1" />
|
||||||
|
|
||||||
|
<ImageButton
|
||||||
|
android:id="@+id/btn_next_phase"
|
||||||
|
android:layout_width="36dp"
|
||||||
|
android:layout_height="36dp"
|
||||||
|
android:background="@drawable/bg_circle_light_gray"
|
||||||
|
android:src="@android:drawable/ic_media_next"
|
||||||
|
android:contentDescription="Próxima"
|
||||||
|
app:tint="@color/text_2" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:background="@color/border"
|
||||||
|
android:layout_marginBottom="8dp" />
|
||||||
|
|
||||||
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
|
android:id="@+id/recycler_phases"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:clipToPadding="false"
|
||||||
|
android:paddingBottom="16dp"
|
||||||
|
tools:listitem="@layout/item_match"/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
58
app/src/main/res/layout/item_comparison_selector.xml
Normal file
58
app/src/main/res/layout/item_comparison_selector.xml
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<com.google.android.material.card.MaterialCardView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginHorizontal="16dp"
|
||||||
|
android:layout_marginVertical="6dp"
|
||||||
|
android:clickable="true"
|
||||||
|
android:focusable="true"
|
||||||
|
app:cardBackgroundColor="@color/bg_elevated"
|
||||||
|
app:cardCornerRadius="10dp"
|
||||||
|
app:cardElevation="0dp"
|
||||||
|
app:strokeWidth="1dp"
|
||||||
|
app:strokeColor="@color/border">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:padding="12dp"
|
||||||
|
android:gravity="center_vertical">
|
||||||
|
|
||||||
|
<com.google.android.material.imageview.ShapeableImageView
|
||||||
|
android:id="@+id/img_team_logo"
|
||||||
|
android:layout_width="40dp"
|
||||||
|
android:layout_height="40dp"
|
||||||
|
android:scaleType="centerCrop"
|
||||||
|
android:background="@color/bg_base"
|
||||||
|
app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.App.CornerSize50Percent"
|
||||||
|
android:layout_marginEnd="12dp"
|
||||||
|
android:src="@mipmap/ic_launcher_round" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/text_team_name"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:fontFamily="@font/font_ibm_plex_sans"
|
||||||
|
android:text="Nome da Equipa"
|
||||||
|
android:textColor="@color/text_1"
|
||||||
|
android:textSize="14sp"
|
||||||
|
android:textStyle="bold"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:ellipsize="end" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/text_team_position"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:fontFamily="@font/font_ibm_plex_mono"
|
||||||
|
android:text="1º"
|
||||||
|
android:textColor="@color/brand"
|
||||||
|
android:textSize="13sp"
|
||||||
|
android:textStyle="bold"
|
||||||
|
android:layout_marginStart="8dp" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</com.google.android.material.card.MaterialCardView>
|
||||||
@@ -16,6 +16,10 @@
|
|||||||
android:id="@+id/nav_gallery"
|
android:id="@+id/nav_gallery"
|
||||||
android:icon="@drawable/ic_nav_jornadas"
|
android:icon="@drawable/ic_nav_jornadas"
|
||||||
android:title="@string/menu_gallery" />
|
android:title="@string/menu_gallery" />
|
||||||
|
<item
|
||||||
|
android:id="@+id/nav_cup"
|
||||||
|
android:icon="@drawable/ic_cup"
|
||||||
|
android:title="Taça" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/nav_live_games"
|
android:id="@+id/nav_live_games"
|
||||||
android:icon="@drawable/ic_nav_live"
|
android:icon="@drawable/ic_nav_live"
|
||||||
|
|||||||
@@ -125,4 +125,9 @@
|
|||||||
app:argType="integer" />
|
app:argType="integer" />
|
||||||
</fragment>
|
</fragment>
|
||||||
|
|
||||||
|
<fragment
|
||||||
|
android:id="@+id/nav_cup"
|
||||||
|
android:name="com.example.vdcscore.ui.cup.CupFragment"
|
||||||
|
android:label="Taça"
|
||||||
|
tools:layout="@layout/fragment_cup" />
|
||||||
</navigation>
|
</navigation>
|
||||||
49
app/src/main/res/values-night/colors.xml
Normal file
49
app/src/main/res/values-night/colors.xml
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<color name="black">#FF000000</color>
|
||||||
|
<color name="white">#FFFFFFFF</color>
|
||||||
|
|
||||||
|
<!-- Target Mockup Dark Palette -->
|
||||||
|
<color name="bg_base">#0a0e1a</color>
|
||||||
|
<color name="bg_surface">#111827</color>
|
||||||
|
<color name="bg_elevated">#1a2235</color>
|
||||||
|
<color name="bg_overlay">#243047</color>
|
||||||
|
|
||||||
|
<color name="brand">#22c55e</color>
|
||||||
|
<color name="brand_dim">#1E22C55E</color> <!-- rgba(34, 197, 94, 0.12) -->
|
||||||
|
<color name="brand_border">#4022C55E</color> <!-- rgba(34, 197, 94, 0.25) -->
|
||||||
|
|
||||||
|
<color name="accent">#3b82f6</color>
|
||||||
|
<color name="danger">#ef4444</color>
|
||||||
|
<color name="warning">#f59e0b</color>
|
||||||
|
|
||||||
|
<color name="text_1">#f9fafb</color>
|
||||||
|
<color name="text_2">#9ca3af</color>
|
||||||
|
<color name="text_3">#4b5563</color>
|
||||||
|
|
||||||
|
<color name="border">#1e2d45</color>
|
||||||
|
<color name="border_active">#22c55e</color>
|
||||||
|
|
||||||
|
<!-- Compatibilty with existing styles -->
|
||||||
|
<color name="primary_color">#22c55e</color> <!-- Brand Verde -->
|
||||||
|
<color name="primary_light">#1a2235</color>
|
||||||
|
<color name="primary_dark">#0a0e1a</color>
|
||||||
|
|
||||||
|
<color name="secondary_color">#111827</color>
|
||||||
|
<color name="secondary_light">#1a2235</color>
|
||||||
|
<color name="secondary_dark">#0a0e1a</color>
|
||||||
|
|
||||||
|
<color name="live_indicator">#22c55e</color>
|
||||||
|
<color name="live_time">#22c55e</color>
|
||||||
|
|
||||||
|
<color name="background_light">#0a0e1a</color> <!-- Native Dark Mode forced -->
|
||||||
|
<color name="surface_light">#111827</color>
|
||||||
|
<color name="surface_card">#111827</color>
|
||||||
|
|
||||||
|
<color name="text_primary">#f9fafb</color>
|
||||||
|
<color name="text_secondary">#9ca3af</color>
|
||||||
|
<color name="text_on_primary">#0a0e1a</color>
|
||||||
|
|
||||||
|
<color name="divider">#1e2d45</color>
|
||||||
|
<color name="input_background">#111827</color>
|
||||||
|
</resources>
|
||||||
856
design-mockup/vdcscore_dark_android_mockup.html
Normal file
856
design-mockup/vdcscore_dark_android_mockup.html
Normal file
@@ -0,0 +1,856 @@
|
|||||||
|
|
||||||
|
<style>
|
||||||
|
@import url('https://fonts.googleapis.com/css2?family=Bebas+Neue&family=IBM+Plex+Mono:wght@400;500&family=IBM+Plex+Sans:wght@300;400;500;600;700&display=swap');
|
||||||
|
*{box-sizing:border-box;margin:0;padding:0}
|
||||||
|
:root{
|
||||||
|
--bg-base:#0a0e1a;
|
||||||
|
--bg-surface:#111827;
|
||||||
|
--bg-elevated:#1a2235;
|
||||||
|
--bg-overlay:#243047;
|
||||||
|
--brand:#22c55e;
|
||||||
|
--brand-dim:rgba(34,197,94,0.12);
|
||||||
|
--brand-border:rgba(34,197,94,0.25);
|
||||||
|
--accent:#3b82f6;
|
||||||
|
--danger:#ef4444;
|
||||||
|
--warning:#f59e0b;
|
||||||
|
--text-1:#f9fafb;
|
||||||
|
--text-2:#9ca3af;
|
||||||
|
--text-3:#4b5563;
|
||||||
|
--border:#1e2d45;
|
||||||
|
--border-active:#22c55e;
|
||||||
|
--ff-display:'Bebas Neue',Impact,sans-serif;
|
||||||
|
--ff-body:'IBM Plex Sans',system-ui,sans-serif;
|
||||||
|
--ff-mono:'IBM Plex Mono',monospace;
|
||||||
|
}
|
||||||
|
body{font-family:var(--ff-body);background:transparent}
|
||||||
|
.wrap{width:390px;margin:20px auto;position:relative}
|
||||||
|
.phone{
|
||||||
|
width:390px;height:820px;background:var(--bg-base);
|
||||||
|
border-radius:44px;border:1.5px solid #1e2d45;
|
||||||
|
overflow:hidden;position:relative;
|
||||||
|
box-shadow:0 0 0 1px #0a0e1a,0 20px 60px rgba(0,0,0,0.7),0 0 80px rgba(34,197,94,0.04);
|
||||||
|
}
|
||||||
|
.notch{
|
||||||
|
position:absolute;top:0;left:50%;transform:translateX(-50%);
|
||||||
|
width:120px;height:34px;background:#0a0e1a;border-radius:0 0 20px 20px;z-index:100;
|
||||||
|
display:flex;align-items:flex-end;justify-content:center;padding-bottom:6px;
|
||||||
|
}
|
||||||
|
.notch-cam{width:12px;height:12px;border-radius:50%;background:#111827;border:1px solid #1e2d45}
|
||||||
|
.screen{width:100%;height:100%;display:flex;flex-direction:column;padding-top:38px;position:relative}
|
||||||
|
|
||||||
|
/* DRAWER */
|
||||||
|
.drawer-bg{
|
||||||
|
position:absolute;inset:0;background:rgba(0,0,0,0.6);z-index:80;
|
||||||
|
display:none;backdrop-filter:blur(2px);
|
||||||
|
}
|
||||||
|
.drawer-bg.open{display:block}
|
||||||
|
.drawer{
|
||||||
|
position:absolute;left:0;top:0;bottom:0;width:260px;
|
||||||
|
background:var(--bg-surface);border-right:1px solid var(--border);
|
||||||
|
z-index:90;transform:translateX(-100%);transition:transform 0.28s cubic-bezier(.4,0,.2,1);
|
||||||
|
display:flex;flex-direction:column;
|
||||||
|
}
|
||||||
|
.drawer.open{transform:translateX(0)}
|
||||||
|
.drawer-logo{
|
||||||
|
padding:20px 20px 16px;
|
||||||
|
border-bottom:1px solid var(--border);
|
||||||
|
display:flex;align-items:center;gap:10px;
|
||||||
|
}
|
||||||
|
.drawer-icon-wrap{
|
||||||
|
width:38px;height:38px;border-radius:10px;
|
||||||
|
background:var(--brand);display:flex;align-items:center;justify-content:center;
|
||||||
|
font-size:18px;flex-shrink:0;
|
||||||
|
}
|
||||||
|
.drawer-brand{font-family:var(--ff-display);font-size:22px;letter-spacing:2px;color:var(--text-1)}
|
||||||
|
.drawer-brand span{color:var(--brand)}
|
||||||
|
.drawer-nav{flex:1;padding:12px 8px;overflow-y:auto}
|
||||||
|
.d-item{
|
||||||
|
display:flex;align-items:center;gap:10px;padding:11px 12px;
|
||||||
|
border-radius:8px;cursor:pointer;font-size:14px;font-weight:500;
|
||||||
|
color:var(--text-2);transition:all 0.15s;margin-bottom:2px;
|
||||||
|
border-left:3px solid transparent;
|
||||||
|
}
|
||||||
|
.d-item:hover{background:var(--bg-overlay);color:var(--text-1)}
|
||||||
|
.d-item.active{
|
||||||
|
background:var(--brand-dim);color:var(--brand);
|
||||||
|
border-left-color:var(--brand);border-radius:0 8px 8px 0;
|
||||||
|
}
|
||||||
|
.d-item i{font-size:18px;width:20px;text-align:center;flex-shrink:0}
|
||||||
|
.drawer-footer{padding:12px 8px;border-top:1px solid var(--border)}
|
||||||
|
|
||||||
|
/* TOPBAR */
|
||||||
|
.topbar{
|
||||||
|
background:rgba(17,24,39,0.8);backdrop-filter:blur(12px);
|
||||||
|
border-bottom:1px solid var(--border);
|
||||||
|
padding:0 16px;height:56px;
|
||||||
|
display:flex;align-items:center;justify-content:space-between;
|
||||||
|
flex-shrink:0;position:relative;z-index:10;
|
||||||
|
}
|
||||||
|
.topbar-left{display:flex;align-items:center;gap:10px}
|
||||||
|
.menu-btn{
|
||||||
|
width:36px;height:36px;border-radius:8px;border:1px solid var(--border);
|
||||||
|
background:var(--bg-elevated);display:flex;align-items:center;justify-content:center;
|
||||||
|
cursor:pointer;color:var(--text-2);
|
||||||
|
}
|
||||||
|
.menu-btn:hover{border-color:var(--brand);color:var(--brand)}
|
||||||
|
.menu-btn i{font-size:20px}
|
||||||
|
.topbar-title{font-family:var(--ff-display);font-size:20px;letter-spacing:1.5px;color:var(--text-1)}
|
||||||
|
.topbar-right{display:flex;align-items:center;gap:8px}
|
||||||
|
.top-btn{
|
||||||
|
width:34px;height:34px;border-radius:8px;border:1px solid var(--border);
|
||||||
|
background:transparent;display:flex;align-items:center;justify-content:center;
|
||||||
|
cursor:pointer;color:var(--text-2);position:relative;
|
||||||
|
}
|
||||||
|
.top-btn i{font-size:18px}
|
||||||
|
.notif-dot{
|
||||||
|
position:absolute;top:4px;right:4px;width:6px;height:6px;
|
||||||
|
border-radius:50%;background:var(--danger);border:1px solid var(--bg-surface);
|
||||||
|
}
|
||||||
|
.live-pill{
|
||||||
|
display:flex;align-items:center;gap:5px;
|
||||||
|
background:var(--brand-dim);border:1px solid var(--brand-border);
|
||||||
|
border-radius:20px;padding:4px 10px;
|
||||||
|
font-size:10px;font-weight:700;color:var(--brand);letter-spacing:0.1em;text-transform:uppercase;
|
||||||
|
font-family:var(--ff-mono);
|
||||||
|
}
|
||||||
|
.live-dot-anim{
|
||||||
|
width:6px;height:6px;border-radius:50%;background:var(--brand);
|
||||||
|
animation:ping 1.5s ease infinite;
|
||||||
|
}
|
||||||
|
@keyframes ping{0%,100%{opacity:1;transform:scale(1)}50%{opacity:0.5;transform:scale(0.9)}}
|
||||||
|
|
||||||
|
/* PAGES */
|
||||||
|
.page{display:none;flex-direction:column;flex:1;overflow:hidden}
|
||||||
|
.page.active{display:flex}
|
||||||
|
.scroll{flex:1;overflow-y:auto;padding:16px}
|
||||||
|
.scroll::-webkit-scrollbar{width:0}
|
||||||
|
|
||||||
|
/* SECTION TITLE */
|
||||||
|
.sec-head{margin-bottom:16px}
|
||||||
|
.sec-title{font-family:var(--ff-display);font-size:28px;letter-spacing:1px;color:var(--text-1);line-height:1}
|
||||||
|
.sec-sub{font-size:12px;color:var(--text-2);margin-top:4px;font-weight:400}
|
||||||
|
|
||||||
|
/* STAT CARDS */
|
||||||
|
.stat-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:16px}
|
||||||
|
.stat-card{
|
||||||
|
background:var(--bg-surface);border:1px solid var(--border);
|
||||||
|
border-radius:12px;padding:14px;cursor:pointer;transition:border-color 0.2s;
|
||||||
|
}
|
||||||
|
.stat-card:hover{border-color:var(--brand-border)}
|
||||||
|
.stat-icon{
|
||||||
|
width:36px;height:36px;border-radius:8px;background:var(--bg-elevated);
|
||||||
|
display:flex;align-items:center;justify-content:center;
|
||||||
|
font-size:18px;margin-bottom:12px;
|
||||||
|
}
|
||||||
|
.stat-label{font-size:10px;font-weight:600;color:var(--text-3);text-transform:uppercase;letter-spacing:0.1em;margin-bottom:4px}
|
||||||
|
.stat-value{font-family:var(--ff-display);font-size:32px;color:var(--text-1);line-height:1}
|
||||||
|
.stat-card.live-card-stat{border-color:var(--brand-border);background:var(--brand-dim)}
|
||||||
|
.stat-card.live-card-stat .stat-icon{background:rgba(34,197,94,0.15)}
|
||||||
|
.stat-card.live-card-stat .stat-value{color:var(--brand)}
|
||||||
|
|
||||||
|
/* ACTIVITY */
|
||||||
|
.activity-block{
|
||||||
|
background:var(--bg-surface);border:1px solid var(--border);
|
||||||
|
border-radius:12px;padding:14px;margin-bottom:10px;
|
||||||
|
}
|
||||||
|
.activity-title{
|
||||||
|
font-size:12px;font-weight:700;color:var(--text-2);
|
||||||
|
text-transform:uppercase;letter-spacing:0.1em;
|
||||||
|
display:flex;align-items:center;gap:6px;margin-bottom:12px;
|
||||||
|
}
|
||||||
|
.activity-title i{font-size:16px;color:var(--brand)}
|
||||||
|
.act-item{
|
||||||
|
display:flex;align-items:flex-start;justify-content:space-between;
|
||||||
|
padding:9px 10px;border-radius:8px;background:rgba(36,48,71,0.4);
|
||||||
|
border:1px solid rgba(30,45,69,0.5);margin-bottom:6px;
|
||||||
|
}
|
||||||
|
.act-item:last-child{margin-bottom:0}
|
||||||
|
.act-text{font-size:12px;font-weight:500;color:var(--text-1);flex:1;line-height:1.3}
|
||||||
|
.act-time{font-size:9px;font-weight:700;color:var(--text-3);text-transform:uppercase;margin-left:8px;white-space:nowrap;font-family:var(--ff-mono)}
|
||||||
|
|
||||||
|
/* MATCH CARD */
|
||||||
|
.match-card{
|
||||||
|
background:var(--bg-surface);border:1px solid var(--border);
|
||||||
|
border-radius:12px;overflow:hidden;margin-bottom:10px;
|
||||||
|
}
|
||||||
|
.match-header{
|
||||||
|
background:var(--bg-elevated);padding:8px 14px;
|
||||||
|
display:flex;align-items:center;justify-content:space-between;
|
||||||
|
border-bottom:1px solid var(--border);
|
||||||
|
}
|
||||||
|
.match-meta-text{font-size:10px;font-family:var(--ff-mono);color:var(--text-2);display:flex;align-items:center;gap:6px}
|
||||||
|
.badge-live{
|
||||||
|
display:flex;align-items:center;gap:4px;
|
||||||
|
background:var(--brand-dim);border:1px solid var(--brand-border);
|
||||||
|
border-radius:20px;padding:2px 8px;
|
||||||
|
font-size:9px;font-weight:700;color:var(--brand);letter-spacing:0.1em;text-transform:uppercase;font-family:var(--ff-mono);
|
||||||
|
}
|
||||||
|
.badge-played{
|
||||||
|
font-size:9px;font-weight:700;color:var(--accent);
|
||||||
|
background:rgba(59,130,246,0.12);border:1px solid rgba(59,130,246,0.2);
|
||||||
|
border-radius:20px;padding:2px 8px;text-transform:uppercase;letter-spacing:0.05em;font-family:var(--ff-mono);
|
||||||
|
}
|
||||||
|
.badge-sched{
|
||||||
|
font-size:9px;font-weight:700;color:var(--text-3);
|
||||||
|
background:rgba(75,85,99,0.2);border:1px solid rgba(75,85,99,0.2);
|
||||||
|
border-radius:20px;padding:2px 8px;text-transform:uppercase;letter-spacing:0.05em;font-family:var(--ff-mono);
|
||||||
|
}
|
||||||
|
.match-body{padding:14px}
|
||||||
|
.teams-row{display:flex;align-items:center;justify-content:space-between;gap:8px}
|
||||||
|
.team-block{flex:1;display:flex;flex-direction:column;align-items:center;gap:6px;text-align:center}
|
||||||
|
.team-logo-circle{
|
||||||
|
width:44px;height:44px;border-radius:50%;background:var(--bg-elevated);
|
||||||
|
border:1px solid var(--border);display:flex;align-items:center;justify-content:center;font-size:20px;
|
||||||
|
}
|
||||||
|
.team-name{font-size:11px;font-weight:600;color:var(--text-1);line-height:1.2;max-width:80px}
|
||||||
|
.score-block{display:flex;align-items:center;gap:8px;flex-shrink:0}
|
||||||
|
.score-num{font-family:var(--ff-display);font-size:36px;color:var(--text-1);line-height:1}
|
||||||
|
.score-sep{font-size:18px;color:var(--text-3)}
|
||||||
|
.score-live{color:var(--brand)}
|
||||||
|
.match-footer{
|
||||||
|
padding:8px 14px;background:rgba(36,48,71,0.3);
|
||||||
|
display:flex;gap:6px;border-top:1px solid var(--border);
|
||||||
|
}
|
||||||
|
.btn-detail{
|
||||||
|
flex:1;background:var(--bg-elevated);border:1px solid var(--border);
|
||||||
|
border-radius:6px;padding:7px 0;
|
||||||
|
font-size:9px;font-weight:700;color:var(--text-2);text-transform:uppercase;
|
||||||
|
letter-spacing:0.08em;cursor:pointer;text-align:center;
|
||||||
|
}
|
||||||
|
.btn-live-edit{
|
||||||
|
flex:1;background:var(--brand);border:none;border-radius:6px;padding:7px 0;
|
||||||
|
font-size:9px;font-weight:700;color:#0a0e1a;text-transform:uppercase;
|
||||||
|
letter-spacing:0.08em;cursor:pointer;text-align:center;
|
||||||
|
display:flex;align-items:center;justify-content:center;gap:4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* LIVE GAME CARD */
|
||||||
|
.live-game-card{
|
||||||
|
background:var(--bg-surface);border:2px solid var(--brand);
|
||||||
|
border-radius:12px;overflow:hidden;margin-bottom:10px;
|
||||||
|
}
|
||||||
|
.live-top{
|
||||||
|
background:var(--brand-dim);padding:8px 14px;
|
||||||
|
display:flex;align-items:center;justify-content:space-between;
|
||||||
|
}
|
||||||
|
.live-top-label{font-size:9px;font-weight:800;text-transform:uppercase;letter-spacing:0.15em;color:var(--brand);font-family:var(--ff-mono)}
|
||||||
|
.live-game-body{padding:16px 14px}
|
||||||
|
.live-time-badge{
|
||||||
|
display:flex;align-items:center;gap:5px;justify-content:center;margin-bottom:14px;
|
||||||
|
font-family:var(--ff-mono);font-size:13px;font-weight:500;color:var(--brand);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* STANDINGS TABLE */
|
||||||
|
.table-wrap{
|
||||||
|
background:var(--bg-surface);border:1px solid var(--border);
|
||||||
|
border-radius:12px;overflow:hidden;
|
||||||
|
}
|
||||||
|
.table-head{
|
||||||
|
display:flex;align-items:center;padding:10px 12px;
|
||||||
|
background:rgba(26,34,53,0.6);border-bottom:1px solid var(--border);
|
||||||
|
font-size:9px;font-weight:700;color:var(--text-3);
|
||||||
|
text-transform:uppercase;letter-spacing:0.1em;font-family:var(--ff-mono);
|
||||||
|
}
|
||||||
|
.th-pos{width:30px;text-align:center}
|
||||||
|
.th-logo{width:36px}
|
||||||
|
.th-name{flex:1}
|
||||||
|
.th-num{width:24px;text-align:center}
|
||||||
|
.th-pts{width:36px;text-align:right;color:var(--brand)}
|
||||||
|
.st-row{
|
||||||
|
display:flex;align-items:center;padding:10px 12px;
|
||||||
|
border-bottom:1px solid rgba(30,45,69,0.4);cursor:pointer;transition:background 0.15s;
|
||||||
|
}
|
||||||
|
.st-row:hover{background:rgba(36,48,71,0.4)}
|
||||||
|
.st-row:last-child{border-bottom:none}
|
||||||
|
.st-row.leader{background:rgba(34,197,94,0.04)}
|
||||||
|
.pos-badge{
|
||||||
|
width:26px;height:26px;border-radius:50%;
|
||||||
|
display:flex;align-items:center;justify-content:center;
|
||||||
|
font-size:11px;font-weight:700;font-family:var(--ff-mono);
|
||||||
|
background:var(--bg-elevated);color:var(--text-2);
|
||||||
|
}
|
||||||
|
.pos-badge.first{background:var(--brand);color:#0a0e1a}
|
||||||
|
.st-logo-cell{width:36px;display:flex;justify-content:center;font-size:18px}
|
||||||
|
.st-name-cell{flex:1;font-size:13px;font-weight:600;color:var(--text-1)}
|
||||||
|
.st-num-cell{width:24px;text-align:center;font-size:11px;font-family:var(--ff-mono);color:var(--text-2)}
|
||||||
|
.st-v{color:var(--brand)!important}
|
||||||
|
.st-d{color:var(--danger)!important}
|
||||||
|
.st-pts-cell{width:36px;text-align:right;font-family:var(--ff-display);font-size:20px;color:var(--brand)}
|
||||||
|
|
||||||
|
/* CLUBS */
|
||||||
|
.club-row{
|
||||||
|
display:flex;align-items:center;gap:12px;padding:13px 14px;
|
||||||
|
background:var(--bg-surface);border-bottom:1px solid var(--border);
|
||||||
|
cursor:pointer;transition:background 0.15s;
|
||||||
|
}
|
||||||
|
.club-row:hover{background:var(--bg-elevated)}
|
||||||
|
.club-logo{
|
||||||
|
width:42px;height:42px;border-radius:50%;background:var(--bg-elevated);
|
||||||
|
border:1px solid var(--border);display:flex;align-items:center;justify-content:center;font-size:20px;
|
||||||
|
}
|
||||||
|
.club-info{flex:1}
|
||||||
|
.club-name{font-size:14px;font-weight:600;color:var(--text-1)}
|
||||||
|
.club-stad{font-size:11px;color:var(--text-2);margin-top:2px}
|
||||||
|
|
||||||
|
/* SCORERS */
|
||||||
|
.scorer-row{
|
||||||
|
display:flex;align-items:center;gap:12px;padding:12px 14px;
|
||||||
|
background:var(--bg-surface);border-bottom:1px solid var(--border);
|
||||||
|
}
|
||||||
|
.scorer-pos{
|
||||||
|
width:28px;height:28px;border-radius:50%;background:var(--bg-elevated);
|
||||||
|
display:flex;align-items:center;justify-content:center;
|
||||||
|
font-size:11px;font-weight:700;color:var(--text-2);font-family:var(--ff-mono);flex-shrink:0;
|
||||||
|
}
|
||||||
|
.scorer-pos.top{background:var(--brand);color:#0a0e1a}
|
||||||
|
.scorer-name{font-size:14px;font-weight:600;color:var(--text-1)}
|
||||||
|
.scorer-club{font-size:11px;color:var(--text-2)}
|
||||||
|
.scorer-goals{font-family:var(--ff-display);font-size:26px;color:var(--brand);margin-left:auto}
|
||||||
|
.scorer-lbl{font-size:9px;color:var(--text-3);text-align:right;font-family:var(--ff-mono);text-transform:uppercase}
|
||||||
|
|
||||||
|
/* TOGGLE */
|
||||||
|
.toggle-row{
|
||||||
|
display:flex;background:var(--bg-surface);border:1px solid var(--border);
|
||||||
|
border-radius:8px;padding:3px;margin-bottom:14px;
|
||||||
|
}
|
||||||
|
.toggle-btn{
|
||||||
|
flex:1;padding:7px 0;font-size:12px;font-weight:700;text-align:center;
|
||||||
|
border-radius:6px;cursor:pointer;color:var(--text-2);transition:all 0.15s;
|
||||||
|
letter-spacing:0.05em;text-transform:uppercase;
|
||||||
|
}
|
||||||
|
.toggle-btn.active{background:var(--brand);color:#0a0e1a}
|
||||||
|
|
||||||
|
/* JORNADA NAV */
|
||||||
|
.jornada-nav{
|
||||||
|
display:flex;align-items:center;justify-content:space-between;
|
||||||
|
padding:10px 16px;background:var(--bg-surface);border-bottom:1px solid var(--border);flex-shrink:0;
|
||||||
|
}
|
||||||
|
.jnav-btn{
|
||||||
|
width:32px;height:32px;border:1px solid var(--border);border-radius:6px;
|
||||||
|
background:var(--bg-elevated);display:flex;align-items:center;justify-content:center;
|
||||||
|
cursor:pointer;color:var(--text-2);
|
||||||
|
}
|
||||||
|
.jnav-btn:hover{border-color:var(--brand);color:var(--brand)}
|
||||||
|
.jnav-label{font-family:var(--ff-display);font-size:16px;letter-spacing:1px;color:var(--text-1)}
|
||||||
|
|
||||||
|
/* SEARCH BAR */
|
||||||
|
.search-bar{
|
||||||
|
display:flex;align-items:center;gap:8px;
|
||||||
|
background:var(--bg-elevated);border:1px solid var(--border);
|
||||||
|
border-radius:20px;padding:8px 14px;margin-bottom:14px;
|
||||||
|
}
|
||||||
|
.search-bar i{font-size:16px;color:var(--text-3)}
|
||||||
|
.search-bar span{font-size:13px;color:var(--text-3)}
|
||||||
|
|
||||||
|
/* SETTINGS */
|
||||||
|
.settings-group{margin-bottom:14px}
|
||||||
|
.settings-label{font-size:10px;font-weight:700;color:var(--text-3);text-transform:uppercase;letter-spacing:0.1em;padding:0 0 6px;font-family:var(--ff-mono)}
|
||||||
|
.settings-block{background:var(--bg-surface);border:1px solid var(--border);border-radius:12px;overflow:hidden}
|
||||||
|
.settings-item{
|
||||||
|
display:flex;align-items:center;gap:12px;padding:13px 14px;
|
||||||
|
border-bottom:1px solid rgba(30,45,69,0.4);cursor:pointer;transition:background 0.15s;
|
||||||
|
}
|
||||||
|
.settings-item:last-child{border-bottom:none}
|
||||||
|
.settings-item:hover{background:var(--bg-elevated)}
|
||||||
|
.settings-item i{font-size:18px;color:var(--text-2);width:20px;text-align:center}
|
||||||
|
.settings-text{flex:1;font-size:14px;color:var(--text-1)}
|
||||||
|
.settings-val{font-size:12px;color:var(--text-3);font-family:var(--ff-mono)}
|
||||||
|
.settings-item.danger i,.settings-item.danger .settings-text{color:var(--danger)}
|
||||||
|
|
||||||
|
/* EMPTY STATE */
|
||||||
|
.empty-state{
|
||||||
|
display:flex;flex-direction:column;align-items:center;justify-content:center;
|
||||||
|
padding:48px 24px;text-align:center;
|
||||||
|
}
|
||||||
|
.empty-icon{
|
||||||
|
width:64px;height:64px;border-radius:50%;background:var(--bg-elevated);
|
||||||
|
border:1px solid var(--border);display:flex;align-items:center;justify-content:center;
|
||||||
|
font-size:28px;margin-bottom:16px;opacity:0.4;
|
||||||
|
}
|
||||||
|
.empty-title{font-size:16px;font-weight:700;color:var(--text-1);margin-bottom:6px}
|
||||||
|
.empty-sub{font-size:13px;color:var(--text-2);line-height:1.5}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<div class="wrap">
|
||||||
|
<div class="phone">
|
||||||
|
<div class="notch"><div class="notch-cam"></div></div>
|
||||||
|
<div class="screen">
|
||||||
|
|
||||||
|
<div class="drawer-bg" id="dBg" onclick="closeDrawer()"></div>
|
||||||
|
<div class="drawer" id="drawer">
|
||||||
|
<div class="drawer-logo">
|
||||||
|
<div class="drawer-icon-wrap">⚡</div>
|
||||||
|
<div class="drawer-brand">VDC<span>Score</span></div>
|
||||||
|
</div>
|
||||||
|
<div class="drawer-nav">
|
||||||
|
<div class="d-item active" onclick="go('dashboard');closeDrawer()"><i class="ti ti-layout-dashboard" aria-hidden="true"></i> Dashboard</div>
|
||||||
|
<div class="d-item" onclick="go('live');closeDrawer()"><i class="ti ti-bolt" aria-hidden="true"></i> Jogos Live</div>
|
||||||
|
<div class="d-item" onclick="go('games');closeDrawer()"><i class="ti ti-calendar-event" aria-hidden="true"></i> Jornadas</div>
|
||||||
|
<div class="d-item" onclick="go('standings');closeDrawer()"><i class="ti ti-trophy" aria-hidden="true"></i> Classificação</div>
|
||||||
|
<div class="d-item" onclick="go('clubs');closeDrawer()"><i class="ti ti-shield" aria-hidden="true"></i> Clubes</div>
|
||||||
|
<div class="d-item" onclick="go('scorers');closeDrawer()"><i class="ti ti-chart-bar" aria-hidden="true"></i> Melhores Marcadores</div>
|
||||||
|
</div>
|
||||||
|
<div class="drawer-footer">
|
||||||
|
<div class="d-item" onclick="go('settings');closeDrawer()"><i class="ti ti-settings" aria-hidden="true"></i> Definições</div>
|
||||||
|
<div class="d-item" style="color:var(--danger)"><i class="ti ti-logout" style="color:var(--danger)" aria-hidden="true"></i> Sair</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="topbar">
|
||||||
|
<div class="topbar-left">
|
||||||
|
<div class="menu-btn" onclick="openDrawer()"><i class="ti ti-menu-2" aria-hidden="true"></i></div>
|
||||||
|
<div class="topbar-title" id="topTitle">DASHBOARD</div>
|
||||||
|
</div>
|
||||||
|
<div class="topbar-right">
|
||||||
|
<div class="live-pill" id="livePill">
|
||||||
|
<div class="live-dot-anim"></div>
|
||||||
|
LIVE
|
||||||
|
</div>
|
||||||
|
<div class="top-btn"><i class="ti ti-bell" aria-hidden="true"></i><div class="notif-dot"></div></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- DASHBOARD -->
|
||||||
|
<div class="page active" id="page-dashboard">
|
||||||
|
<div class="scroll">
|
||||||
|
<div class="sec-head">
|
||||||
|
<div class="sec-title">PAINEL DE CONTROLO</div>
|
||||||
|
<div class="sec-sub">Bem-vindo ao VdcScore Live Score.</div>
|
||||||
|
</div>
|
||||||
|
<div class="stat-grid">
|
||||||
|
<div class="stat-card" onclick="go('clubs')">
|
||||||
|
<div class="stat-icon" style="color:var(--brand)"><i class="ti ti-users" style="font-size:18px" aria-hidden="true"></i></div>
|
||||||
|
<div class="stat-label">Clubes Ativos</div>
|
||||||
|
<div class="stat-value">8</div>
|
||||||
|
</div>
|
||||||
|
<div class="stat-card live-card-stat" onclick="go('live')">
|
||||||
|
<div class="stat-icon" style="color:var(--brand)">
|
||||||
|
<i class="ti ti-bolt" style="font-size:18px" aria-hidden="true"></i>
|
||||||
|
</div>
|
||||||
|
<div class="stat-label">Em Direto</div>
|
||||||
|
<div class="stat-value">2</div>
|
||||||
|
</div>
|
||||||
|
<div class="stat-card" onclick="go('games')">
|
||||||
|
<div class="stat-icon" style="color:var(--text-2)"><i class="ti ti-calendar" style="font-size:18px" aria-hidden="true"></i></div>
|
||||||
|
<div class="stat-label">Próximos Jogos</div>
|
||||||
|
<div class="stat-value">5</div>
|
||||||
|
</div>
|
||||||
|
<div class="stat-card" onclick="go('standings')">
|
||||||
|
<div class="stat-icon" style="color:var(--warning)"><i class="ti ti-trophy" style="font-size:18px" aria-hidden="true"></i></div>
|
||||||
|
<div class="stat-label">Jornada Atual</div>
|
||||||
|
<div class="stat-value">22</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="activity-block">
|
||||||
|
<div class="activity-title"><i class="ti ti-trending-up" aria-hidden="true"></i> ATIVIDADE RECENTE</div>
|
||||||
|
<div class="act-item">
|
||||||
|
<div class="act-text">Classificação dos Juniores atualizada</div>
|
||||||
|
<div class="act-time">2H</div>
|
||||||
|
</div>
|
||||||
|
<div class="act-item">
|
||||||
|
<div class="act-text">Bagunte F.C. atualizou o plantel</div>
|
||||||
|
<div class="act-time">5H</div>
|
||||||
|
</div>
|
||||||
|
<div class="act-item">
|
||||||
|
<div class="act-text">Resultados da 22ª Jornada validados</div>
|
||||||
|
<div class="act-time">1D</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="match-card" style="border-color:var(--brand-border);background:rgba(34,197,94,0.04)">
|
||||||
|
<div style="padding:14px 14px 10px">
|
||||||
|
<div style="font-family:var(--ff-display);font-size:18px;letter-spacing:1px;color:var(--text-1);margin-bottom:6px">PRONTO PARA O DIRETO?</div>
|
||||||
|
<div style="font-size:12px;color:var(--text-2);line-height:1.5;margin-bottom:12px">Inicia um acompanhamento em tempo real de qualquer jogo. A app recebe as notificações instantaneamente.</div>
|
||||||
|
<div class="btn-live-edit" style="border-radius:8px;padding:9px 0;font-size:11px" onclick="go('games')">
|
||||||
|
<i class="ti ti-bolt" style="font-size:14px" aria-hidden="true"></i> GERIR JORNADAS
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- LIVE GAMES -->
|
||||||
|
<div class="page" id="page-live">
|
||||||
|
<div class="scroll">
|
||||||
|
<div class="sec-head">
|
||||||
|
<div class="sec-title" style="display:flex;align-items:center;gap:8px">
|
||||||
|
<i class="ti ti-bolt" style="font-size:24px;color:var(--brand)" aria-hidden="true"></i> JOGOS LIVE
|
||||||
|
</div>
|
||||||
|
<div class="sec-sub">Jogos a decorrer neste momento.</div>
|
||||||
|
</div>
|
||||||
|
<div class="live-game-card">
|
||||||
|
<div class="live-top">
|
||||||
|
<div class="live-top-label">Seniores · Jornada 22</div>
|
||||||
|
<div class="badge-live"><div class="live-dot-anim"></div> DIRETO</div>
|
||||||
|
</div>
|
||||||
|
<div class="live-game-body">
|
||||||
|
<div class="live-time-badge">
|
||||||
|
<div class="live-dot-anim"></div>
|
||||||
|
75'
|
||||||
|
</div>
|
||||||
|
<div class="teams-row">
|
||||||
|
<div class="team-block">
|
||||||
|
<div class="team-logo-circle">⚽</div>
|
||||||
|
<div class="team-name">J.U. MOSTEIRÓ</div>
|
||||||
|
</div>
|
||||||
|
<div class="score-block">
|
||||||
|
<div class="score-num score-live">2</div>
|
||||||
|
<div class="score-sep">:</div>
|
||||||
|
<div class="score-num score-live">1</div>
|
||||||
|
</div>
|
||||||
|
<div class="team-block">
|
||||||
|
<div class="team-logo-circle">🔴</div>
|
||||||
|
<div class="team-name">SC ESPINHO</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="match-footer">
|
||||||
|
<div class="btn-live-edit" style="border-radius:6px;padding:8px 0">
|
||||||
|
<i class="ti ti-bolt" style="font-size:12px" aria-hidden="true"></i> LIVE EDITOR
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="live-game-card">
|
||||||
|
<div class="live-top">
|
||||||
|
<div class="live-top-label">Juniores · Jornada 20</div>
|
||||||
|
<div class="badge-live"><div class="live-dot-anim"></div> DIRETO</div>
|
||||||
|
</div>
|
||||||
|
<div class="live-game-body">
|
||||||
|
<div class="live-time-badge">
|
||||||
|
<div class="live-dot-anim"></div>
|
||||||
|
38'
|
||||||
|
</div>
|
||||||
|
<div class="teams-row">
|
||||||
|
<div class="team-block">
|
||||||
|
<div class="team-logo-circle">⭐</div>
|
||||||
|
<div class="team-name">FC GUILHABREU</div>
|
||||||
|
</div>
|
||||||
|
<div class="score-block">
|
||||||
|
<div class="score-num score-live">0</div>
|
||||||
|
<div class="score-sep">:</div>
|
||||||
|
<div class="score-num score-live">0</div>
|
||||||
|
</div>
|
||||||
|
<div class="team-block">
|
||||||
|
<div class="team-logo-circle">🛡️</div>
|
||||||
|
<div class="team-name">G.D.C. RIO MAU</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="match-footer">
|
||||||
|
<div class="btn-live-edit" style="border-radius:6px;padding:8px 0">
|
||||||
|
<i class="ti ti-bolt" style="font-size:12px" aria-hidden="true"></i> LIVE EDITOR
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- GAMES / JORNADAS -->
|
||||||
|
<div class="page" id="page-games">
|
||||||
|
<div class="jornada-nav">
|
||||||
|
<div class="jnav-btn"><i class="ti ti-chevron-left" style="font-size:18px" aria-hidden="true"></i></div>
|
||||||
|
<div class="jnav-label">JORNADA 22 · SENIORES</div>
|
||||||
|
<div class="jnav-btn"><i class="ti ti-chevron-right" style="font-size:18px" aria-hidden="true"></i></div>
|
||||||
|
</div>
|
||||||
|
<div class="scroll" style="padding-top:14px">
|
||||||
|
<div class="match-card" style="border-color:var(--brand);border-width:2px">
|
||||||
|
<div class="match-header">
|
||||||
|
<div class="match-meta-text"><i class="ti ti-calendar" style="font-size:13px" aria-hidden="true"></i> 08/05/2026 · 10:00</div>
|
||||||
|
<div class="badge-live"><div class="live-dot-anim"></div> LIVE</div>
|
||||||
|
</div>
|
||||||
|
<div class="match-body">
|
||||||
|
<div class="teams-row">
|
||||||
|
<div class="team-block">
|
||||||
|
<div class="team-logo-circle">⚽</div>
|
||||||
|
<div class="team-name">J.U. MOSTEIRÓ</div>
|
||||||
|
</div>
|
||||||
|
<div class="score-block">
|
||||||
|
<div class="score-num score-live">2</div>
|
||||||
|
<div class="score-sep">:</div>
|
||||||
|
<div class="score-num score-live">1</div>
|
||||||
|
</div>
|
||||||
|
<div class="team-block">
|
||||||
|
<div class="team-logo-circle">🔴</div>
|
||||||
|
<div class="team-name">SC ESPINHO</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div style="display:flex;align-items:center;justify-content:center;gap:16px;margin-top:10px">
|
||||||
|
<div style="display:flex;align-items:center;gap:4px;font-size:10px;color:var(--text-2);font-family:var(--ff-mono)"><i class="ti ti-clock" style="font-size:12px" aria-hidden="true"></i> 75'</div>
|
||||||
|
<div style="display:flex;align-items:center;gap:4px;font-size:10px;color:var(--text-2);font-family:var(--ff-mono)"><i class="ti ti-map-pin" style="font-size:12px" aria-hidden="true"></i> Campo Mosteiró</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="match-footer">
|
||||||
|
<div class="btn-detail">VER DETALHES</div>
|
||||||
|
<div class="btn-live-edit"><i class="ti ti-bolt" style="font-size:12px" aria-hidden="true"></i> LIVE EDITOR</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="match-card">
|
||||||
|
<div class="match-header">
|
||||||
|
<div class="match-meta-text"><i class="ti ti-calendar" style="font-size:13px" aria-hidden="true"></i> 08/05/2026 · 15:00</div>
|
||||||
|
<div class="badge-played">TERMINADO</div>
|
||||||
|
</div>
|
||||||
|
<div class="match-body">
|
||||||
|
<div class="teams-row">
|
||||||
|
<div class="team-block">
|
||||||
|
<div class="team-logo-circle">⭐</div>
|
||||||
|
<div class="team-name">FC GUILHABREU</div>
|
||||||
|
</div>
|
||||||
|
<div class="score-block">
|
||||||
|
<div class="score-num">3</div>
|
||||||
|
<div class="score-sep">:</div>
|
||||||
|
<div class="score-num">1</div>
|
||||||
|
</div>
|
||||||
|
<div class="team-block">
|
||||||
|
<div class="team-logo-circle">🔵</div>
|
||||||
|
<div class="team-name">SC MATOSINHOS</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div style="display:flex;align-items:center;justify-content:center;gap:16px;margin-top:10px">
|
||||||
|
<div style="display:flex;align-items:center;gap:4px;font-size:10px;color:var(--text-2);font-family:var(--ff-mono)"><i class="ti ti-clock" style="font-size:12px" aria-hidden="true"></i> 15:00</div>
|
||||||
|
<div style="display:flex;align-items:center;gap:4px;font-size:10px;color:var(--text-2);font-family:var(--ff-mono)"><i class="ti ti-map-pin" style="font-size:12px" aria-hidden="true"></i> Campo Guilhabreu</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="match-footer">
|
||||||
|
<div class="btn-detail">VER DETALHES</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="match-card">
|
||||||
|
<div class="match-header">
|
||||||
|
<div class="match-meta-text"><i class="ti ti-calendar" style="font-size:13px" aria-hidden="true"></i> 09/05/2026 · 11:00</div>
|
||||||
|
<div class="badge-sched">AGENDADO</div>
|
||||||
|
</div>
|
||||||
|
<div class="match-body">
|
||||||
|
<div class="teams-row">
|
||||||
|
<div class="team-block">
|
||||||
|
<div class="team-logo-circle">🟡</div>
|
||||||
|
<div class="team-name">AD CANIDELO</div>
|
||||||
|
</div>
|
||||||
|
<div class="score-block">
|
||||||
|
<div class="score-num" style="color:var(--text-3)">—</div>
|
||||||
|
<div class="score-sep">:</div>
|
||||||
|
<div class="score-num" style="color:var(--text-3)">—</div>
|
||||||
|
</div>
|
||||||
|
<div class="team-block">
|
||||||
|
<div class="team-logo-circle">🛡️</div>
|
||||||
|
<div class="team-name">G.D.C. RIO MAU</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div style="display:flex;align-items:center;justify-content:center;gap:16px;margin-top:10px">
|
||||||
|
<div style="display:flex;align-items:center;gap:4px;font-size:10px;color:var(--text-2);font-family:var(--ff-mono)"><i class="ti ti-clock" style="font-size:12px" aria-hidden="true"></i> 11:00</div>
|
||||||
|
<div style="display:flex;align-items:center;gap:4px;font-size:10px;color:var(--text-2);font-family:var(--ff-mono)"><i class="ti ti-map-pin" style="font-size:12px" aria-hidden="true"></i> AD Canidelo</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="match-footer">
|
||||||
|
<div class="btn-detail">VER DETALHES</div>
|
||||||
|
<div class="btn-live-edit"><i class="ti ti-bolt" style="font-size:12px" aria-hidden="true"></i> LIVE EDITOR</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- STANDINGS -->
|
||||||
|
<div class="page" id="page-standings">
|
||||||
|
<div class="scroll">
|
||||||
|
<div class="sec-head">
|
||||||
|
<div class="sec-title">CLASSIFICAÇÃO</div>
|
||||||
|
<div class="sec-sub">Tabela classificativa em tempo real.</div>
|
||||||
|
</div>
|
||||||
|
<div class="toggle-row">
|
||||||
|
<div class="toggle-btn active" onclick="selectToggle(this)">SENIORES</div>
|
||||||
|
<div class="toggle-btn" onclick="selectToggle(this)">JUNIORES</div>
|
||||||
|
</div>
|
||||||
|
<div class="table-wrap">
|
||||||
|
<div class="table-head">
|
||||||
|
<div class="th-pos">Pos</div>
|
||||||
|
<div class="th-logo"></div>
|
||||||
|
<div class="th-name">Clube</div>
|
||||||
|
<div class="th-num">J</div>
|
||||||
|
<div class="th-num">V</div>
|
||||||
|
<div class="th-num">D</div>
|
||||||
|
<div class="th-pts">Pts</div>
|
||||||
|
</div>
|
||||||
|
<div class="st-row leader">
|
||||||
|
<div class="pos-badge first">1</div>
|
||||||
|
<div class="st-logo-cell">⚽</div>
|
||||||
|
<div class="st-name-cell" style="color:var(--brand)">J.U. Mosteiró</div>
|
||||||
|
<div class="st-num-cell">22</div>
|
||||||
|
<div class="st-num-cell st-v">16</div>
|
||||||
|
<div class="st-num-cell st-d">3</div>
|
||||||
|
<div class="st-pts-cell">52</div>
|
||||||
|
</div>
|
||||||
|
<div class="st-row">
|
||||||
|
<div class="pos-badge">2</div>
|
||||||
|
<div class="st-logo-cell">🛡️</div>
|
||||||
|
<div class="st-name-cell">G.D.C. Rio Mau</div>
|
||||||
|
<div class="st-num-cell">22</div>
|
||||||
|
<div class="st-num-cell st-v">13</div>
|
||||||
|
<div class="st-num-cell st-d">5</div>
|
||||||
|
<div class="st-pts-cell">44</div>
|
||||||
|
</div>
|
||||||
|
<div class="st-row">
|
||||||
|
<div class="pos-badge">3</div>
|
||||||
|
<div class="st-logo-cell">⭐</div>
|
||||||
|
<div class="st-name-cell">FC Guilhabreu</div>
|
||||||
|
<div class="st-num-cell">22</div>
|
||||||
|
<div class="st-num-cell st-v">12</div>
|
||||||
|
<div class="st-num-cell st-d">6</div>
|
||||||
|
<div class="st-pts-cell">41</div>
|
||||||
|
</div>
|
||||||
|
<div class="st-row">
|
||||||
|
<div class="pos-badge">4</div>
|
||||||
|
<div class="st-logo-cell">🔵</div>
|
||||||
|
<div class="st-name-cell">SC Matosinhos</div>
|
||||||
|
<div class="st-num-cell">22</div>
|
||||||
|
<div class="st-num-cell st-v">11</div>
|
||||||
|
<div class="st-num-cell st-d">6</div>
|
||||||
|
<div class="st-pts-cell">38</div>
|
||||||
|
</div>
|
||||||
|
<div class="st-row">
|
||||||
|
<div class="pos-badge">5</div>
|
||||||
|
<div class="st-logo-cell">🟡</div>
|
||||||
|
<div class="st-name-cell">AD Canidelo</div>
|
||||||
|
<div class="st-num-cell">22</div>
|
||||||
|
<div class="st-num-cell st-v">10</div>
|
||||||
|
<div class="st-num-cell st-d">8</div>
|
||||||
|
<div class="st-pts-cell">34</div>
|
||||||
|
</div>
|
||||||
|
<div class="st-row">
|
||||||
|
<div class="pos-badge">6</div>
|
||||||
|
<div class="st-logo-cell">🔴</div>
|
||||||
|
<div class="st-name-cell">SC Espinho</div>
|
||||||
|
<div class="st-num-cell">22</div>
|
||||||
|
<div class="st-num-cell st-v">9</div>
|
||||||
|
<div class="st-num-cell st-d">9</div>
|
||||||
|
<div class="st-pts-cell">31</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- CLUBS -->
|
||||||
|
<div class="page" id="page-clubs">
|
||||||
|
<div class="scroll">
|
||||||
|
<div class="sec-head">
|
||||||
|
<div class="sec-title">CLUBES</div>
|
||||||
|
<div class="sec-sub">8 clubes na divisão</div>
|
||||||
|
</div>
|
||||||
|
<div class="search-bar">
|
||||||
|
<i class="ti ti-search" aria-hidden="true"></i>
|
||||||
|
<span>Pesquisar clube...</span>
|
||||||
|
</div>
|
||||||
|
<div style="background:var(--bg-surface);border:1px solid var(--border);border-radius:12px;overflow:hidden">
|
||||||
|
<div class="club-row"><div class="club-logo">⚽</div><div class="club-info"><div class="club-name">J.U. Mosteiró</div><div class="club-stad">Campo de Mosteiró</div></div><i class="ti ti-chevron-right" style="font-size:16px;color:var(--text-3)" aria-hidden="true"></i></div>
|
||||||
|
<div class="club-row"><div class="club-logo">🛡️</div><div class="club-info"><div class="club-name">G.D.C. Rio Mau</div><div class="club-stad">Campo de Rio Mau</div></div><i class="ti ti-chevron-right" style="font-size:16px;color:var(--text-3)" aria-hidden="true"></i></div>
|
||||||
|
<div class="club-row"><div class="club-logo">⭐</div><div class="club-info"><div class="club-name">FC Guilhabreu</div><div class="club-stad">Campo de Guilhabreu</div></div><i class="ti ti-chevron-right" style="font-size:16px;color:var(--text-3)" aria-hidden="true"></i></div>
|
||||||
|
<div class="club-row"><div class="club-logo">🔵</div><div class="club-info"><div class="club-name">SC Matosinhos</div><div class="club-stad">Estádio Municipal</div></div><i class="ti ti-chevron-right" style="font-size:16px;color:var(--text-3)" aria-hidden="true"></i></div>
|
||||||
|
<div class="club-row"><div class="club-logo">🟡</div><div class="club-info"><div class="club-name">AD Canidelo</div><div class="club-stad">Campo da AD</div></div><i class="ti ti-chevron-right" style="font-size:16px;color:var(--text-3)" aria-hidden="true"></i></div>
|
||||||
|
<div class="club-row" style="border-bottom:none"><div class="club-logo">🔴</div><div class="club-info"><div class="club-name">SC Espinho</div><div class="club-stad">Estádio de Espinho</div></div><i class="ti ti-chevron-right" style="font-size:16px;color:var(--text-3)" aria-hidden="true"></i></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- SCORERS -->
|
||||||
|
<div class="page" id="page-scorers">
|
||||||
|
<div class="scroll">
|
||||||
|
<div class="sec-head">
|
||||||
|
<div class="sec-title">MELHORES MARCADORES</div>
|
||||||
|
<div class="sec-sub">Temporada 2025/26</div>
|
||||||
|
</div>
|
||||||
|
<div class="toggle-row">
|
||||||
|
<div class="toggle-btn active" onclick="selectToggle(this)">SENIORES</div>
|
||||||
|
<div class="toggle-btn" onclick="selectToggle(this)">JUNIORES</div>
|
||||||
|
</div>
|
||||||
|
<div style="background:var(--bg-surface);border:1px solid var(--border);border-radius:12px;overflow:hidden">
|
||||||
|
<div class="scorer-row">
|
||||||
|
<div class="scorer-pos top">1</div>
|
||||||
|
<div><div class="scorer-name">Marco Silva</div><div class="scorer-club">J.U. Mosteiró</div></div>
|
||||||
|
<div style="margin-left:auto;text-align:right"><div class="scorer-goals">18</div><div class="scorer-lbl">GOLOS</div></div>
|
||||||
|
</div>
|
||||||
|
<div class="scorer-row">
|
||||||
|
<div class="scorer-pos top">2</div>
|
||||||
|
<div><div class="scorer-name">João Ferreira</div><div class="scorer-club">FC Guilhabreu</div></div>
|
||||||
|
<div style="margin-left:auto;text-align:right"><div class="scorer-goals">14</div><div class="scorer-lbl">GOLOS</div></div>
|
||||||
|
</div>
|
||||||
|
<div class="scorer-row">
|
||||||
|
<div class="scorer-pos top">3</div>
|
||||||
|
<div><div class="scorer-name">Rui Costa</div><div class="scorer-club">SC Matosinhos</div></div>
|
||||||
|
<div style="margin-left:auto;text-align:right"><div class="scorer-goals">12</div><div class="scorer-lbl">GOLOS</div></div>
|
||||||
|
</div>
|
||||||
|
<div class="scorer-row">
|
||||||
|
<div class="scorer-pos">4</div>
|
||||||
|
<div><div class="scorer-name">Carlos Matos</div><div class="scorer-club">G.D.C. Rio Mau</div></div>
|
||||||
|
<div style="margin-left:auto;text-align:right"><div class="scorer-goals">9</div><div class="scorer-lbl">GOLOS</div></div>
|
||||||
|
</div>
|
||||||
|
<div class="scorer-row" style="border-bottom:none">
|
||||||
|
<div class="scorer-pos">5</div>
|
||||||
|
<div><div class="scorer-name">Pedro Nunes</div><div class="scorer-club">AD Canidelo</div></div>
|
||||||
|
<div style="margin-left:auto;text-align:right"><div class="scorer-goals">8</div><div class="scorer-lbl">GOLOS</div></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- SETTINGS -->
|
||||||
|
<div class="page" id="page-settings">
|
||||||
|
<div class="scroll">
|
||||||
|
<div class="sec-head">
|
||||||
|
<div class="sec-title">DEFINIÇÕES</div>
|
||||||
|
</div>
|
||||||
|
<div class="settings-group">
|
||||||
|
<div class="settings-label">CONTA</div>
|
||||||
|
<div class="settings-block">
|
||||||
|
<div class="settings-item"><i class="ti ti-user" aria-hidden="true"></i><span class="settings-text">Perfil</span><span class="settings-val">Admin</span><i class="ti ti-chevron-right" style="font-size:14px;color:var(--text-3)" aria-hidden="true"></i></div>
|
||||||
|
<div class="settings-item"><i class="ti ti-lock" aria-hidden="true"></i><span class="settings-text">Palavra-passe</span><i class="ti ti-chevron-right" style="font-size:14px;color:var(--text-3)" aria-hidden="true"></i></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="settings-group">
|
||||||
|
<div class="settings-label">SISTEMA</div>
|
||||||
|
<div class="settings-block">
|
||||||
|
<div class="settings-item"><i class="ti ti-bell" aria-hidden="true"></i><span class="settings-text">Notificações</span><span class="settings-val" style="color:var(--brand)">Ativas</span><i class="ti ti-chevron-right" style="font-size:14px;color:var(--text-3)" aria-hidden="true"></i></div>
|
||||||
|
<div class="settings-item"><i class="ti ti-wifi" aria-hidden="true"></i><span class="settings-text">Estado Online</span><span class="settings-val" style="color:var(--brand)">Online</span></div>
|
||||||
|
<div class="settings-item"><i class="ti ti-database" aria-hidden="true"></i><span class="settings-text">Sincronização</span><span class="settings-val">Firebase</span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="settings-group">
|
||||||
|
<div class="settings-label">APLICAÇÃO</div>
|
||||||
|
<div class="settings-block">
|
||||||
|
<div class="settings-item"><i class="ti ti-info-circle" aria-hidden="true"></i><span class="settings-text">Versão</span><span class="settings-val">v2.1.0</span></div>
|
||||||
|
<div class="settings-item danger"><i class="ti ti-logout" aria-hidden="true"></i><span class="settings-text">Terminar sessão</span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
var titles={dashboard:'DASHBOARD',live:'JOGOS LIVE',games:'JORNADAS',standings:'CLASSIFICAÇÃO',clubs:'CLUBES',scorers:'MARCADORES',settings:'DEFINIÇÕES'};
|
||||||
|
var livePages=['dashboard','live','games'];
|
||||||
|
function go(page){
|
||||||
|
document.querySelectorAll('.page').forEach(function(p){p.classList.remove('active')});
|
||||||
|
var el=document.getElementById('page-'+page);
|
||||||
|
if(el)el.classList.add('active');
|
||||||
|
document.getElementById('topTitle').textContent=titles[page]||page.toUpperCase();
|
||||||
|
var lp=document.getElementById('livePill');
|
||||||
|
lp.style.display=livePages.indexOf(page)>-1?'flex':'none';
|
||||||
|
document.querySelectorAll('.d-item').forEach(function(item){
|
||||||
|
item.classList.remove('active');
|
||||||
|
var oc=item.getAttribute('onclick')||'';
|
||||||
|
if(oc.indexOf("'"+page+"'")>-1)item.classList.add('active');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function openDrawer(){
|
||||||
|
document.getElementById('drawer').classList.add('open');
|
||||||
|
document.getElementById('dBg').classList.add('open');
|
||||||
|
}
|
||||||
|
function closeDrawer(){
|
||||||
|
document.getElementById('drawer').classList.remove('open');
|
||||||
|
document.getElementById('dBg').classList.remove('open');
|
||||||
|
}
|
||||||
|
function selectToggle(el){
|
||||||
|
var parent=el.parentElement;
|
||||||
|
parent.querySelectorAll('.toggle-btn').forEach(function(b){b.classList.remove('active')});
|
||||||
|
el.classList.add('active');
|
||||||
|
}
|
||||||
|
</script>
|
||||||
Reference in New Issue
Block a user